// File: /workspace/github_cpp_makefile_star2_O3/manikandan5[P]Image-Matching-Stitching-Warping/./CImg.h
// Function: cimg_library::CImg<unsigned char>& cimg_library::CImg<unsigned char>::draw_line<unsigned char>(int, int, int, int, unsigned char const*, float, unsigned int, bool)
CImg<T>& draw_line(const int x0, const int y0,
                       const int x1, const int y1,
                       const tc *const color, const float opacity=1,
                       const unsigned int pattern=~0U, const bool init_hatch=true) {
      if (is_empty()) return *this;
      if (!color)
        throw CImgArgumentException(_cimg_instance
                                    "draw_line(): Specified color is (null).",
                                    cimg_instance);
      static unsigned int hatch = ~0U - (~0U>>1);
      if (init_hatch) hatch = ~0U - (~0U>>1);
      const bool xdir = x0<x1, ydir = y0<y1;
      int
        nx0 = x0, nx1 = x1, ny0 = y0, ny1 = y1,
        &xleft = xdir?nx0:nx1, &yleft = xdir?ny0:ny1,
        &xright = xdir?nx1:nx0, &yright = xdir?ny1:ny0,
        &xup = ydir?nx0:nx1, &yup = ydir?ny0:ny1,
        &xdown = ydir?nx1:nx0, &ydown = ydir?ny1:ny0;
      if (xright<0 || xleft>=width()) return *this;
      if (xleft<0) { yleft-=(int)((float)xleft*((float)yright - yleft)/((float)xright - xleft)); xleft = 0; }
      if (xright>=width()) {
        yright-=(int)(((float)xright - width())*((float)yright - yleft)/((float)xright - xleft));
        xright = width() - 1;
      }
      if (ydown<0 || yup>=height()) return *this;
      if (yup<0) { xup-=(int)((float)yup*((float)xdown - xup)/((float)ydown - yup)); yup = 0; }
      if (ydown>=height()) {
        xdown-=(int)(((float)ydown - height())*((float)xdown - xup)/((float)ydown - yup));
        ydown = height() - 1;
      }
      T *ptrd0 = data(nx0,ny0);
      int dx = xright - xleft, dy = ydown - yup;
      const bool steep = dy>dx;
      if (steep) cimg::swap(nx0,ny0,nx1,ny1,dx,dy);
      const long
        offx = (nx0<nx1?1:-1)*(steep?width():1),
        offy = (ny0<ny1?1:-1)*(steep?1:width());
      const unsigned long wh = (unsigned long)_width*_height;
      if (opacity>=1) {
        if (~pattern) for (int error = dx>>1, x = 0; x<=dx; ++x) {
          if (pattern&hatch) {
            T *ptrd = ptrd0; const tc* col = color;
            cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; }
          }
          hatch>>=1; if (!hatch) hatch = ~0U - (~0U>>1);
          ptrd0+=offx;
          if ((error-=dy)<0) { ptrd0+=offy; error+=dx; }
        } else for (int error = dx>>1, x = 0; x<=dx; ++x) {
          T *ptrd = ptrd0; const tc* col = color; cimg_forC(*this,c) { *ptrd = (T)*(col++); ptrd+=wh; }
          ptrd0+=offx;
          if ((error-=dy)<0) { ptrd0+=offy; error+=dx; }
        }
      }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x18(%rdi), %rax
testq %rax, %rax
je 0xec8b
movdqu (%rbx), %xmm1
pxor %xmm2, %xmm2
pcmpeqd %xmm1, %xmm2
movmskps %xmm2, %edi
testb %dil, %dil
jne 0xec8b
testq %r9, %r9
je 0xec9d
cmpb $0x0, 0x48(%rsp)
je 0xe729
movl $0x80000000, 0x99e43(%rip) # imm = 0x80000000
cmpl %ecx, %esi
movl %ecx, %r15d
cmovgl %esi, %r15d
testl %r15d, %r15d
js 0xec8b
cmpl %ecx, %esi
movl %ecx, %r12d
cmovll %esi, %r12d
movd %xmm1, %r10d
cmpl %r10d, %r12d
jge 0xec8b
movl %ecx, %r11d
movl %edx, %ebp
movl %r8d, %edi
movl %esi, %r14d
testl %r12d, %r12d
jns 0xe7b9
xorps %xmm2, %xmm2
cvtsi2ss %r12d, %xmm2
cmpl %ecx, %esi
movl %edx, %edi
cmovll %r8d, %edi
cvtsi2ss %edi, %xmm3
movl %r8d, %edi
cmovll %edx, %edi
cvtsi2ss %edi, %xmm4
subss %xmm4, %xmm3
mulss %xmm2, %xmm3
xorps %xmm4, %xmm4
cvtsi2ss %r15d, %xmm4
subss %xmm2, %xmm4
divss %xmm4, %xmm3
cvttss2si %xmm3, %r11d
subl %r11d, %edi
xorl %r14d, %r14d
cmpl %ecx, %esi
jge 0xe7b1
movl %ecx, %r11d
movl %edi, %ebp
movl %r8d, %edi
jmp 0xe7b9
xorl %r11d, %r11d
movl %edx, %ebp
movl %esi, %r14d
cmpl %ecx, %esi
movl %r14d, %r15d
cmovll %r11d, %r15d
cmpl %r10d, %r15d
jl 0xe838
xorps %xmm2, %xmm2
cvtsi2ss %r15d, %xmm2
xorps %xmm3, %xmm3
cvtsi2ss %r10d, %xmm3
cmpl %ecx, %esi
movl %ebp, %r15d
cmovll %edi, %r15d
xorps %xmm4, %xmm4
cvtsi2ss %r15d, %xmm4
movl %edi, %r12d
cmovll %ebp, %r12d
movaps %xmm2, %xmm5
cvtsi2ss %r12d, %xmm6
subss %xmm3, %xmm5
movl %r11d, %r12d
cmovll %r14d, %r12d
subss %xmm6, %xmm4
xorps %xmm3, %xmm3
cvtsi2ss %r12d, %xmm3
leal -0x1(%r10), %r12d
mulss %xmm5, %xmm4
subss %xmm3, %xmm2
divss %xmm2, %xmm4
cvttss2si %xmm4, %r13d
cmovgel %r12d, %r14d
subl %r13d, %r15d
cmpl %ecx, %esi
cmovll %r12d, %r11d
cmovgel %r15d, %ebp
cmovll %r15d, %edi
cmpl %r8d, %edx
movl %ebp, %r12d
cmovll %edi, %r12d
testl %r12d, %r12d
js 0xec8b
cmpl %r8d, %edx
movl %edi, %r13d
cmovll %ebp, %r13d
pshufd $0x55, %xmm1, %xmm2     # xmm2 = xmm1[1,1,1,1]
movd %xmm2, %r15d
cmpl %r15d, %r13d
jge 0xec8b
testl %r13d, %r13d
jns 0xe8c7
xorps %xmm2, %xmm2
cvtsi2ss %r13d, %xmm2
cmpl %r8d, %edx
movl %r14d, %r13d
cmovll %r11d, %r13d
xorps %xmm3, %xmm3
cvtsi2ss %r13d, %xmm3
movl %r11d, %r13d
cmovll %r14d, %r13d
xorps %xmm4, %xmm4
cvtsi2ss %r13d, %xmm4
xorps %xmm5, %xmm5
cvtsi2ss %r12d, %xmm5
subss %xmm4, %xmm3
mulss %xmm2, %xmm3
subss %xmm2, %xmm5
divss %xmm5, %xmm3
cvttss2si %xmm3, %r12d
subl %r12d, %r13d
cmpl %r8d, %edx
jge 0xe8c2
xorl %ebp, %ebp
movl %r13d, %r14d
jmp 0xe8c7
xorl %edi, %edi
movl %r13d, %r11d
cmpl %r8d, %edx
movl %ebp, %r13d
cmovll %edi, %r13d
cmpl %r15d, %r13d
movq %r15, (%rsp)
jl 0xe959
cmpl %r8d, %edx
movl %r14d, %r12d
cmovll %r11d, %r12d
movl %r11d, %r15d
cmovll %r14d, %r15d
movd %r12d, %xmm2
movd %r13d, %xmm3
punpckldq %xmm2, %xmm3    # xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
cvtdq2ps %xmm3, %xmm2
movd %r15d, %xmm3
shufps $0xd4, %xmm1, %xmm3     # xmm3 = xmm3[0,1],xmm1[1,3]
shufps $0x52, %xmm1, %xmm3     # xmm3 = xmm3[2,0],xmm1[1,1]
cvtdq2ps %xmm3, %xmm3
movaps %xmm2, %xmm4
subps %xmm3, %xmm4
movaps %xmm4, %xmm3
shufps $0x55, %xmm4, %xmm3     # xmm3 = xmm3[1,1],xmm4[1,1]
movl %edi, %r15d
cmovll %ebp, %r15d
mulss %xmm4, %xmm3
xorps %xmm4, %xmm4
cvtsi2ss %r15d, %xmm4
subss %xmm4, %xmm2
divss %xmm2, %xmm3
cvttss2si %xmm3, %r15d
subl %r15d, %r12d
cmpl %r8d, %edx
cmovgel %r12d, %r14d
movq (%rsp), %r15
decl %r15d
cmpl %r8d, %edx
cmovll %r12d, %r11d
cmovgel %r15d, %ebp
cmovll %r15d, %edi
movl %r14d, %r15d
addq %r15, %rax
movl %ebp, %r13d
movl %r10d, %r12d
imulq %r12, %r13
cmpl %ecx, %esi
movl %r14d, %ecx
cmovll %r11d, %ecx
movl %r11d, %esi
cmovll %r14d, %esi
subl %esi, %ecx
cmpl %r8d, %edx
movl (%rsp), %edx
movl %ebp, %r8d
cmovll %edi, %r8d
movl %edi, %esi
cmovll %ebp, %esi
subl %esi, %r8d
cmpl %ecx, %r8d
jle 0xe9b5
movl %r10d, %esi
negl %esi
cmpl %edi, %ebp
cmovll %r10d, %esi
movslq %esi, %rsi
cmpl %r11d, %r14d
setl %bpl
movl $0x1, %r10d
movl %r8d, %edi
jmp 0xe9d1
xorl %esi, %esi
cmpl %r11d, %r14d
setl %sil
leaq -0x1(,%rsi,2), %rsi
cmpl %edi, %ebp
setl %bpl
movl %ecx, %edi
movl %r8d, %ecx
movl 0x40(%rsp), %r11d
addq %r13, %rax
movl %r10d, %r8d
negl %r8d
testb %bpl, %bpl
cmovnel %r10d, %r8d
movslq %r8d, %r8
imulq %r12, %rdx
ucomiss 0x5f8bc(%rip), %xmm0    # 0x6e2b0
jae 0xeaf3
movaps 0x5f71f(%rip), %xmm2    # 0x6e120
andps %xmm0, %xmm2
xorps %xmm3, %xmm3
cmpless %xmm0, %xmm3
andps %xmm0, %xmm3
movss 0x5f899(%rip), %xmm0    # 0x6e2b0
subss %xmm3, %xmm0
cmpl $-0x1, %r11d
je 0xeba0
testl %edi, %edi
js 0xec8b
movl %edi, %r10d
shrl %r10d
movl 0x99b32(%rip), %r12d    # 0xa856c
pshufd $0xff, %xmm1, %xmm1     # xmm1 = xmm1[3,3,3,3]
movd %xmm1, %r15d
xorl %r14d, %r14d
movl $0x80000000, %ebp       # imm = 0x80000000
testl %r11d, %r12d
je 0xeaa1
testl %r15d, %r15d
jle 0xeaa1
xorl %r12d, %r12d
movq %rax, %r13
movzbl (%r9,%r12), %r11d
xorps %xmm1, %xmm1
cvtsi2ss %r11d, %xmm1
movzbl (%r13), %r11d
xorps %xmm3, %xmm3
cvtsi2ss %r11d, %xmm3
mulss %xmm0, %xmm3
mulss %xmm2, %xmm1
addss %xmm3, %xmm1
cvttss2si %xmm1, %r11d
movb %r11b, (%r13)
addq %rdx, %r13
movl 0xc(%rbx), %r15d
incq %r12
cmpl %r15d, %r12d
jl 0xea5c
movl 0x99acb(%rip), %r12d    # 0xa856c
movl %r12d, %r11d
shrl %r11d
cmpl $0x2, %r12d
cmovbl %ebp, %r11d
movl %r11d, 0x99ab6(%rip)    # 0xa856c
addq %rsi, %rax
subl %ecx, %r10d
movl $0x0, %r12d
cmovsq %r8, %r12
addq %r12, %rax
movl %r10d, %r12d
sarl $0x1f, %r12d
andl %edi, %r12d
addl %r12d, %r10d
leal 0x1(%r14), %r13d
movl %r11d, %r12d
cmpl %edi, %r14d
movl %r13d, %r14d
movl 0x40(%rsp), %r11d
jne 0xea4c
jmp 0xec8b
cmpl $-0x1, %r11d
je 0xec2a
testl %edi, %edi
js 0xec8b
movl %edi, %r10d
shrl %r10d
movl 0x99a5a(%rip), %r12d    # 0xa856c
pshufd $0xff, %xmm1, %xmm0     # xmm0 = xmm1[3,3,3,3]
movd %xmm0, %r15d
xorl %r14d, %r14d
movl $0x80000000, %ebp       # imm = 0x80000000
testl %r11d, %r12d
je 0xeb52
testl %r15d, %r15d
jle 0xeb52
xorl %r12d, %r12d
movq %rax, %r13
movb (%r9,%r12), %r15b
movb %r15b, (%r13)
addq %rdx, %r13
movl 0xc(%rbx), %r15d
incq %r12
cmpl %r15d, %r12d
jl 0xeb34
movl 0x99a1a(%rip), %r12d    # 0xa856c
movl %r12d, %r13d
shrl %r13d
cmpl $0x2, %r12d
cmovbl %ebp, %r13d
movl %r13d, 0x99a05(%rip)    # 0xa856c
addq %rsi, %rax
subl %ecx, %r10d
movl $0x0, %r12d
cmovsq %r8, %r12
addq %r12, %rax
movl %r10d, %r12d
sarl $0x1f, %r12d
andl %edi, %r12d
addl %r12d, %r10d
leal 0x1(%r14), %r11d
movl %r13d, %r12d
cmpl %edi, %r14d
movl %r11d, %r14d
movl 0x40(%rsp), %r11d
jne 0xeb24
jmp 0xec8b
testl %edi, %edi
js 0xec8b
movl %edi, %r10d
shrl %r10d
pshufd $0xff, %xmm1, %xmm1     # xmm1 = xmm1[3,3,3,3]
movd %xmm1, %ebp
xorl %r11d, %r11d
testl %ebp, %ebp
jle 0xebfc
xorl %r14d, %r14d
movq %rax, %r15
movzbl (%r9,%r14), %ebp
xorps %xmm1, %xmm1
cvtsi2ss %ebp, %xmm1
movzbl (%r15), %ebp
xorps %xmm3, %xmm3
cvtsi2ss %ebp, %xmm3
mulss %xmm0, %xmm3
mulss %xmm2, %xmm1
addss %xmm3, %xmm1
cvttss2si %xmm1, %ebp
movb %bpl, (%r15)
addq %rdx, %r15
movl 0xc(%rbx), %ebp
incq %r14
cmpl %ebp, %r14d
jl 0xebc4
addq %rsi, %rax
subl %ecx, %r10d
movl $0x0, %r14d
cmovsq %r8, %r14
addq %r14, %rax
movl %r10d, %r14d
sarl $0x1f, %r14d
andl %edi, %r14d
addl %r14d, %r10d
leal 0x1(%r11), %r14d
cmpl %edi, %r11d
movl %r14d, %r11d
jne 0xebba
jmp 0xec8b
testl %edi, %edi
js 0xec8b
movl %edi, %r10d
shrl %r10d
pshufd $0xff, %xmm1, %xmm0     # xmm0 = xmm1[3,3,3,3]
movd %xmm0, %ebp
xorl %r11d, %r11d
testl %ebp, %ebp
jle 0xec5f
xorl %r14d, %r14d
movq %rax, %r15
movb (%r9,%r14), %bpl
movb %bpl, (%r15)
addq %rdx, %r15
movl 0xc(%rbx), %ebp
incq %r14
cmpl %ebp, %r14d
jl 0xec4a
addq %rsi, %rax
subl %ecx, %r10d
movl $0x0, %r14d
cmovsq %r8, %r14
addq %r14, %rax
movl %r10d, %r14d
sarl $0x1f, %r14d
andl %edi, %r14d
addl %r14d, %r10d
leal 0x1(%r11), %r14d
cmpl %edi, %r11d
movl %r14d, %r11d
jne 0xec40
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x4008, %edi           # imm = 0x4008
callq 0x4210
movq %rax, %r14
movl (%rbx), %edx
movl 0x4(%rbx), %ecx
movl 0x8(%rbx), %r8d
movl 0xc(%rbx), %r9d
leaq 0x5fbaa(%rip), %rax     # 0x6e868
leaq 0x60f7d(%rip), %r10     # 0x6fc42
cmpb $0x0, 0x10(%rbx)
cmovneq %rax, %r10
subq $0x8, %rsp
leaq 0x6bb2f(%rip), %r11     # 0x7a807
leaq 0x7f95a(%rip), %rsi     # 0x8e639
movq %r14, %rdi
xorl %eax, %eax
pushq %r11
pushq %r10
pushq 0x18(%rbx)
callq 0xc16a
addq $0x20, %rsp
leaq 0x98f55(%rip), %rsi     # 0xa7c50
movq 0x992ce(%rip), %rdx     # 0xa7fd0
movq %r14, %rdi
callq 0x4910
movq %rax, %rbx
movq %r14, %rdi
callq 0x43c0
movq %rbx, %rdi
callq 0x4960
nop