// File: /workspace/github_cpp_makefile_star2_O1/rishabh-battulwar[P]imageprocessing/./include/ImageProc.h
// Function: ImageProc::mbvq_error_diffusion(Image&, Image&)
void ImageProc::mbvq_error_diffusion(Image &img_orig, Image &img_modified)
{
	float diffusionError[3], distance[6];
	int direction, quad, vertex_number;
	float img_orig_float[img_orig.rows][img_orig.cols][img_orig.channels];

	for(int i = 0; i < img_orig.rows; i++)
		for(int j = 0; j < img_orig.cols; j++)
			for(int k = 0; k < img_orig.channels; k++)
			{
				img_orig_float[i][j][k] = float(img_orig.getvalue(i,j,k)/255.0);
			}


	for(int i = 0; i < img_modified.rows-1; i++)
	{
		if(i%2 == 0)
		{
			direction = LEFT2RIGHT;
			for(int j = 0; j < img_modified.cols; j++)
			{
				int R = img_orig.getvalue(i,j,0);
				int G = img_orig.getvalue(i,j,1);
				int B = img_orig.getvalue(i,j,2);
				int r = img_orig_float[i][j][0];
				int g = img_orig_float[i][j][1];
				int b = img_orig_float[i][j][2];
				if((R+G) > 255)
					if((G+B) > 255)
						if((R+G+B) > 510) 	quad = CMYW;
						else 				quad = MYGC;
					else quad = RGMY;
				else if(!((G+B) > 255))
					if(!((R+G+B) > 255)) 	quad = KRGB;
					else 					quad = RGBM;
				else quad = CMBG;

				distance[0] = distance_from_vertex(r,g,b,'C');
				distance[1] = distance_from_vertex(r,g,b,'M');
				distance[2] = distance_from_vertex(r,g,b,'Y');
				distance[3] = distance_from_vertex(r,g,b,'W');
				distance[4] = distance_from_vertex(r,g,b,'R');
				distance[5] = distance_from_vertex(r,g,b,'G');
				distance[6] = distance_from_vertex(r,g,b,'B');
				distance[7] = distance_from_vertex(r,g,b,'K');

				if(quad == CMYW)
					vertex_number = nearest_vertex(distance,0,1,2,3);
				else if(quad == MYGC)
					vertex_number = nearest_vertex(distance,1,2,5,0);
				else if(quad == RGMY)
					vertex_number = nearest_vertex(distance,4,5,1,2);
				else if(quad == CMBG)
					vertex_number = nearest_vertex(distance,0,1,6,5);
				else if(quad == RGBM)
					vertex_number = nearest_vertex(distance,4,5,6,1);
				else if(quad == KRGB)
					vertex_number = nearest_vertex(distance,7,4,5,6);

				switch(vertex_number)
				{
					case 0:
						diffusionError[0] = r - 1.0;
						diffusionError[1] = g - 0.0;
						diffusionError[2] = b - 1.0;
						img_modified.setvalue(i,j,0,255);
						img_modified.setvalue(i,j,1,0);
						img_modified.setvalue(i,j,2,255);
						break;
					case 1:
						diffusionError[0] = r - 0.0;
						diffusionError[1] = g - 1.0;
						diffusionError[2] = b - 1.0;
						img_modified.setvalue(i,j,0,0);
						img_modified.setvalue(i,j,1,255);
						img_modified.setvalue(i,j,2,255);
						break;
					case 2:
						diffusionError[0] = r - 1.0;
						diffusionError[1] = g - 1.0;
						diffusionError[2] = b - 0.0;
						img_modified.setvalue(i,j,0,255);
						img_modified.setvalue(i,j,1,255);
						img_modified.setvalue(i,j,2,0);
						break;
					case 3:
						diffusionError[0] = r - 1.0;
						diffusionError[1] = g - 1.0;
						diffusionError[2] = b - 1.0;
						img_modified.setvalue(i,j,0,255);
						img_modified.setvalue(i,j,1,255);
						img_modified.setvalue(i,j,2,255);
						break;
					case 4:
						diffusionError[0] = r - 0.0;
						diffusionError[1] = g - 1.0;
						diffusionError[2] = b - 0.0;
						img_modified.setvalue(i,j,0,0);
						img_modified.setvalue(i,j,1,255);
						img_modified.setvalue(i,j,2,0);
						break;
					case 5:
						diffusionError[0] = r - 1.0;
						diffusionError[1] = g - 0.0;
						diffusionError[2] = b - 0.0;
						img_modified.setvalue(i,j,0,255);
						img_modified.setvalue(i,j,1,0);
						img_modified.setvalue(i,j,2,0);
						break;
					case 6:
						diffusionError[0] = r - 0.0;
						diffusionError[1] = g - 0.0;
						diffusionError[2] = b - 1.0;
						img_modified.setvalue(i,j,0,0);
						img_modified.setvalue(i,j,1,0);
						img_modified.setvalue(i,j,2,255);
						break;
					case 7:
						diffusionError[0] = r - 0.0;
						diffusionError[1] = g - 0.0;
						diffusionError[2] = b - 0.0;
						img_modified.setvalue(i,j,0,0);
						img_modified.setvalue(i,j,1,0);
						img_modified.setvalue(i,j,2,0);
						break;
					default:
						break;
				}

				for(int k = 0; k < 3; k++)
				{
					img_orig_float[i][j+1][k] = img_orig_float[i][j+1][k]+(diffusionError[k]*7.0/16);
					img_orig_float[i+1][j+1][k] = img_orig_float[i+1][j+1][k]+(diffusionError[k]*1.0/16);
					img_orig_float[i+1][j][k] = img_orig_float[i+1][j][k]+(diffusionError[k]*5.0/16);
					img_orig_float[i+1][j-1][k] = img_orig_float[i+1][j-1][k]+(diffusionError[k]*3.0/16);
				}

			}
		}

		else
		{
			direction = RIGHT2LEFT;
			for(int j = img_modified.cols - 1; j >= 0; j--)
			{
				int R = img_orig.getvalue(i,j,0);
				int G = img_orig.getvalue(i,j,1);
				int B = img_orig.getvalue(i,j,2);
				int r = img_orig_float[i][j][0];
				int g = img_orig_float[i][j][1];
				int b = img_orig_float[i][j][2];
				if((R+G) > 255)
					if((G+B) > 255)
						if((R+G+B) > 510) 	quad = CMYW;
						else 				quad = MYGC;
					else quad = RGMY;
				else if(!((G+B) > 255))
					if(!((R+G+B) > 255)) 	quad = KRGB;
					else 					quad = RGBM;
				else quad = CMBG;

				distance[0] = distance_from_vertex(r,g,b,'C');
				distance[1] = distance_from_vertex(r,g,b,'M');
				distance[2] = distance_from_vertex(r,g,b,'Y');
				distance[3] = distance_from_vertex(r,g,b,'W');
				distance[4] = distance_from_vertex(r,g,b,'R');
				distance[5] = distance_from_vertex(r,g,b,'G');
				distance[6] = distance_from_vertex(r,g,b,'B');
				distance[7] = distance_from_vertex(r,g,b,'K');

				if(quad == CMYW)
					vertex_number = nearest_vertex(distance,0,1,2,3);
				else if(quad == MYGC)
					vertex_number = nearest_vertex(distance,1,2,5,0);
				else if(quad == RGMY)
					vertex_number = nearest_vertex(distance,4,5,1,2);
				else if(quad == CMBG)
					vertex_number = nearest_vertex(distance,0,1,6,5);
				else if(quad == RGBM)
					vertex_number = nearest_vertex(distance,4,5,6,1);
				else if(quad == KRGB)
					vertex_number = nearest_vertex(distance,7,4,5,6);

				switch(vertex_number)
				{
					case 0:
						diffusionError[0] = r - 1.0;
						diffusionError[1] = g - 0.0;
						diffusionError[2] = b - 1.0;
						img_modified.setvalue(i,j,0,255);
						img_modified.setvalue(i,j,1,0);
						img_modified.setvalue(i,j,2,255);
						break;
					case 1:
						diffusionError[0] = r - 0.0;
						diffusionError[1] = g - 1.0;
						diffusionError[2] = b - 1.0;
						img_modified.setvalue(i,j,0,0);
						img_modified.setvalue(i,j,1,255);
						img_modified.setvalue(i,j,2,255);
						break;
					case 2:
						diffusionError[0] = r - 1.0;
						diffusionError[1] = g - 1.0;
						diffusionError[2] = b - 0.0;
						img_modified.setvalue(i,j,0,255);
						img_modified.setvalue(i,j,1,255);
						img_modified.setvalue(i,j,2,0);
						break;
					case 3:
						diffusionError[0] = r - 1.0;
						diffusionError[1] = g - 1.0;
						diffusionError[2] = b - 1.0;
						img_modified.setvalue(i,j,0,255);
						img_modified.setvalue(i,j,1,255);
						img_modified.setvalue(i,j,2,255);
						break;
					case 4:
						diffusionError[0] = r - 0.0;
						diffusionError[1] = g - 1.0;
						diffusionError[2] = b - 0.0;
						img_modified.setvalue(i,j,0,0);
						img_modified.setvalue(i,j,1,255);
						img_modified.setvalue(i,j,2,0);
						break;
					case 5:
						diffusionError[0] = r - 1.0;
						diffusionError[1] = g - 0.0;
						diffusionError[2] = b - 0.0;
						img_modified.setvalue(i,j,0,255);
						img_modified.setvalue(i,j,1,0);
						img_modified.setvalue(i,j,2,0);
						break;
					case 6:
						diffusionError[0] = r - 0.0;
						diffusionError[1] = g - 0.0;
						diffusionError[2] = b - 1.0;
						img_modified.setvalue(i,j,0,0);
						img_modified.setvalue(i,j,1,0);
						img_modified.setvalue(i,j,2,255);
						break;
					case 7:
						diffusionError[0] = r - 0.0;
						diffusionError[1] = g - 0.0;
						diffusionError[2] = b - 0.0;
						img_modified.setvalue(i,j,0,0);
						img_modified.setvalue(i,j,1,0);
						img_modified.setvalue(i,j,2,0);
						break;
					default:
						break;
				}

				for(int k = 0; k < 3; k++)
				{
					img_orig_float[i][j-1][k] = img_orig_float[i][j-1][k]+(diffusionError[k]*7.0/16);
					img_orig_float[i+1][j-1][k] = img_orig_float[i+1][j-1][k]+(diffusionError[k]*1.0/16);
					img_orig_float[i+1][j][k] = img_orig_float[i+1][j][k]+(diffusionError[k]*5.0/16);
					img_orig_float[i+1][j+1][k] = img_orig_float[i+1][j+1][k]+(diffusionError[k]*3.0/16);
				}
			}

		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
movq %rsp, -0x98(%rbp)
movl 0x8(%rdi), %r8d
movl 0xc(%rdi), %eax
movl 0x10(%rdi), %edx
movq %rdx, -0x68(%rbp)
movq %r8, -0x58(%rbp)
imulq %r8, %rdx
movq %rdx, -0x50(%rbp)
imulq %rdx, %rax
leaq 0xf(,%rax,4), %rax
andq $-0x10, %rax
movq %rsp, %rcx
subq %rax, %rcx
movq %rcx, -0x48(%rbp)
movq %rcx, %rsp
movq %rdi, -0x78(%rbp)
movslq 0xc(%rdi), %rax
movq %rax, -0x60(%rbp)
testq %rax, %rax
jle 0xc9d2
movq -0x78(%rbp), %rax
movl 0x8(%rax), %r8d
movl 0x10(%rax), %r9d
movq 0x18(%rax), %r10
movl %r8d, %eax
imull %r9d, %eax
movl %eax, -0x70(%rbp)
movq -0x50(%rbp), %rax
leaq (,%rax,4), %rax
movq %rax, -0x40(%rbp)
movq -0x68(%rbp), %rax
leaq (,%rax,4), %r14
xorl %edi, %edi
movsd 0x4ba0(%rip), %xmm0     # 0x11510
movq -0x48(%rbp), %r12
xorl %r13d, %r13d
testl %r8d, %r8d
jle 0xc9c2
movq %r12, %rcx
movl %edi, %eax
xorl %edx, %edx
testl %r9d, %r9d
jle 0xc9b4
movslq %eax, %rbx
addq %r10, %rbx
xorl %r11d, %r11d
movzbl (%rbx,%r11), %r15d
xorps %xmm1, %xmm1
cvtsi2sd %r15d, %xmm1
divsd %xmm0, %xmm1
cvtsd2ss %xmm1, %xmm1
movss %xmm1, (%rcx,%r11,4)
incq %r11
cmpq %r11, %r9
jne 0xc991
incq %rdx
addl %r9d, %eax
addq %r14, %rcx
cmpq %r8, %rdx
jne 0xc983
incq %r13
addl -0x70(%rbp), %edi
addq -0x40(%rbp), %r12
cmpq -0x60(%rbp), %r13
jne 0xc977
cmpl $0x2, 0xc(%rsi)
jl 0xd256
movq -0x50(%rbp), %rax
leaq (,%rax,4), %rcx
movq %rcx, -0xa0(%rbp)
movq -0x48(%rbp), %rcx
leaq (%rcx,%rax,4), %rax
movq %rax, -0x40(%rbp)
movq -0x68(%rbp), %rax
leaq (,%rax,4), %rdx
movq %rdx, -0x60(%rbp)
negq %rdx
movq %rdx, -0x70(%rbp)
movq -0x58(%rbp), %rdi
leaq -0x4(,%rdi,4), %rdx
imulq %rax, %rdx
addq %rcx, %rdx
movq %rdx, -0x90(%rbp)
leaq 0x4(,%rdi,4), %rdx
imulq %rax, %rdx
addq %rcx, %rdx
movq %rdx, -0x58(%rbp)
leaq (%rcx,%rax,4), %rax
movq %rax, -0x88(%rbp)
xorl %r13d, %r13d
movss 0x4bf3(%rip), %xmm0     # 0x11648
movsd 0x4823(%rip), %xmm1     # 0x11280
movsd 0x4ad3(%rip), %xmm2     # 0x11538
movsd 0x4ad3(%rip), %xmm3     # 0x11540
movsd 0x4ad3(%rip), %xmm4     # 0x11548
movsd 0x4813(%rip), %xmm5     # 0x11290
movq %rcx, -0x80(%rbp)
testb $0x1, %r13b
jne 0xce4a
movl 0x8(%rsi), %eax
testl %eax, %eax
jle 0xd222
movq -0x50(%rbp), %rcx
imulq %r13, %rcx
movq -0x48(%rbp), %rdx
leaq (%rdx,%rcx,4), %r9
movq -0x88(%rbp), %r8
movq -0x58(%rbp), %r10
movq -0x40(%rbp), %r11
movq -0x90(%rbp), %r15
xorl %r12d, %r12d
movq -0x78(%rbp), %rdi
movq 0x18(%rdi), %rcx
movl 0x8(%rdi), %edx
imull %r13d, %edx
addl %r12d, %edx
imull 0x10(%rdi), %edx
movslq %edx, %rbx
movzbl (%rcx,%rbx), %edx
movzbl 0x1(%rcx,%rbx), %r14d
addl %r14d, %edx
cmpl $0x100, %edx            # imm = 0x100
jb 0xcb0b
movzbl 0x2(%rcx,%rbx), %ecx
addl %ecx, %r14d
cmpl $0x100, %r14d           # imm = 0x100
jb 0xcb0b
addl %ecx, %edx
cmpl $0x1ff, %edx            # imm = 0x1FF
setae %cl
jmp 0xcb0d
xorl %ecx, %ecx
movq %r12, %rdx
imulq -0x68(%rbp), %rdx
cvttss2si (%r9,%rdx,4), %edi
cvttss2si 0x4(%r9,%rdx,4), %ebx
cvttss2si 0x8(%r9,%rdx,4), %edx
cvtsi2ss %edi, %xmm10
xorps %xmm8, %xmm8
cvtsi2ss %ebx, %xmm8
xorps %xmm7, %xmm7
cvtsi2ss %edx, %xmm7
xorps %xmm6, %xmm6
cvtsi2sd %ebx, %xmm6
cvtsi2sd %edi, %xmm9
movl $0x6, %r14d
testb %cl, %cl
je 0xcbd1
movaps %xmm10, %xmm11
addss %xmm0, %xmm11
cvtss2sd %xmm11, %xmm11
mulsd %xmm11, %xmm11
movapd %xmm6, %xmm12
mulsd %xmm6, %xmm12
addsd %xmm11, %xmm12
movaps %xmm7, %xmm11
addss %xmm0, %xmm11
cvtss2sd %xmm11, %xmm11
mulsd %xmm11, %xmm11
addsd %xmm11, %xmm12
cvtsd2ss %xmm12, %xmm12
movapd %xmm9, %xmm13
mulsd %xmm9, %xmm13
movaps %xmm8, %xmm14
addss %xmm0, %xmm14
cvtss2sd %xmm14, %xmm14
mulsd %xmm14, %xmm14
addsd %xmm13, %xmm14
addsd %xmm11, %xmm14
xorps %xmm11, %xmm11
cvtsd2ss %xmm14, %xmm11
movl $0x3, %r14d
xorl %ecx, %ecx
ucomiss %xmm12, %xmm11
ja 0xcbd4
movl %r14d, %ecx
movl %ecx, %ecx
leaq 0x4a1f(%rip), %rdi      # 0x115fc
movslq (%rdi,%rcx,4), %rcx
addq %rdi, %rcx
jmpq *%rcx
addsd %xmm1, %xmm9
xorps %xmm6, %xmm6
cvtsd2ss %xmm9, %xmm6
movss %xmm6, -0x34(%rbp)
xorps %xmm6, %xmm6
cvtsi2sd %edx, %xmm6
movss %xmm8, -0x30(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
movss %xmm6, -0x2c(%rbp)
movb $-0x1, %dl
xorl %ecx, %ecx
jmp 0xccd8
movss %xmm10, -0x34(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
movss %xmm6, -0x30(%rbp)
movss %xmm7, -0x2c(%rbp)
movb $-0x1, %cl
xorl %edx, %edx
jmp 0xccfe
addsd %xmm1, %xmm9
xorps %xmm8, %xmm8
cvtsd2ss %xmm9, %xmm8
movss %xmm8, -0x34(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
movss %xmm6, -0x30(%rbp)
movss %xmm7, -0x2c(%rbp)
movb $-0x1, %dl
xorl %r14d, %r14d
movb $-0x1, %cl
jmp 0xcd2a
addsd %xmm1, %xmm9
xorps %xmm7, %xmm7
cvtsd2ss %xmm9, %xmm7
movss %xmm7, -0x34(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
xorps %xmm7, %xmm7
cvtsi2sd %edx, %xmm7
movss %xmm6, -0x30(%rbp)
addsd %xmm1, %xmm7
xorps %xmm6, %xmm6
cvtsd2ss %xmm7, %xmm6
movss %xmm6, -0x2c(%rbp)
movb $-0x1, %dl
movb $-0x1, %cl
jmp 0xccd8
movss %xmm10, -0x34(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
xorps %xmm7, %xmm7
cvtsi2sd %edx, %xmm7
movss %xmm6, -0x30(%rbp)
addsd %xmm1, %xmm7
xorps %xmm6, %xmm6
cvtsd2ss %xmm7, %xmm6
movss %xmm6, -0x2c(%rbp)
movb $-0x1, %cl
xorl %edx, %edx
movb $-0x1, %r14b
jmp 0xcd2a
addsd %xmm1, %xmm9
xorps %xmm6, %xmm6
cvtsd2ss %xmm9, %xmm6
movss %xmm6, -0x34(%rbp)
movss %xmm8, -0x30(%rbp)
movss %xmm7, -0x2c(%rbp)
movb $-0x1, %dl
xorl %ecx, %ecx
xorl %r14d, %r14d
jmp 0xcd2a
movss %xmm10, -0x34(%rbp)
xorps %xmm6, %xmm6
cvtsi2sd %edx, %xmm6
movss %xmm8, -0x30(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
movss %xmm6, -0x2c(%rbp)
movb $-0x1, %r14b
xorl %edx, %edx
xorl %ecx, %ecx
movq 0x18(%rsi), %rdi
imull %r13d, %eax
addl %r12d, %eax
imull 0x10(%rsi), %eax
cltq
movb %dl, (%rdi,%rax)
movq 0x18(%rsi), %rax
movl 0x8(%rsi), %edx
imull %r13d, %edx
addl %r12d, %edx
imull 0x10(%rsi), %edx
movslq %edx, %rdx
movb %cl, 0x1(%rax,%rdx)
movq 0x18(%rsi), %rax
movl 0x8(%rsi), %ecx
imull %r13d, %ecx
addl %r12d, %ecx
imull 0x10(%rsi), %ecx
movslq %ecx, %rcx
movb %r14b, 0x2(%rax,%rcx)
incq %r12
xorl %eax, %eax
xorps %xmm6, %xmm6
cvtss2sd (%r8,%rax), %xmm6
xorps %xmm7, %xmm7
cvtss2sd -0x34(%rbp,%rax), %xmm7
movaps %xmm7, %xmm8
mulsd %xmm2, %xmm8
mulsd %xmm3, %xmm8
addsd %xmm6, %xmm8
xorps %xmm6, %xmm6
cvtsd2ss %xmm8, %xmm6
movss %xmm6, (%r8,%rax)
xorps %xmm6, %xmm6
cvtss2sd (%r10,%rax), %xmm6
movaps %xmm7, %xmm8
mulsd %xmm3, %xmm8
addsd %xmm6, %xmm8
xorps %xmm6, %xmm6
cvtsd2ss %xmm8, %xmm6
movss %xmm6, (%r10,%rax)
xorps %xmm6, %xmm6
cvtss2sd (%r11,%rax), %xmm6
movaps %xmm7, %xmm8
mulsd %xmm4, %xmm8
mulsd %xmm3, %xmm8
addsd %xmm6, %xmm8
xorps %xmm6, %xmm6
cvtsd2ss %xmm8, %xmm6
movss %xmm6, (%r11,%rax)
xorps %xmm6, %xmm6
cvtss2sd (%r15,%rax), %xmm6
mulsd %xmm5, %xmm7
mulsd %xmm3, %xmm7
addsd %xmm6, %xmm7
xorps %xmm6, %xmm6
cvtsd2ss %xmm7, %xmm6
movss %xmm6, (%r15,%rax)
addq $0x4, %rax
cmpq $0xc, %rax
jne 0xcd76
movslq 0x8(%rsi), %rax
movq -0x60(%rbp), %rcx
addq %rcx, %r15
addq %rcx, %r11
addq %rcx, %r10
addq %rcx, %r8
cmpq %rax, %r12
jl 0xcabf
jmp 0xd222
movslq 0x8(%rsi), %rax
testq %rax, %rax
jle 0xd222
movq -0x50(%rbp), %rcx
imulq %r13, %rcx
movq -0x48(%rbp), %rdx
leaq (%rdx,%rcx,4), %r12
movq -0x60(%rbp), %rdx
movq %rdx, %r11
imulq %rax, %r11
movq -0x40(%rbp), %rcx
addq %rcx, %r11
leaq -0x1(%rax), %r15
imulq %rdx, %r15
addq %rcx, %r15
leaq -0x2(%rax), %r8
imulq %rdx, %r8
leaq (%rcx,%r8), %r10
addq -0x80(%rbp), %r8
leaq -0x1(%rax), %r9
movq -0x78(%rbp), %rdi
movq 0x18(%rdi), %rcx
movl 0x8(%rdi), %edx
imull %r13d, %edx
addl %r9d, %edx
imull 0x10(%rdi), %edx
movslq %edx, %rbx
movzbl (%rcx,%rbx), %edx
movzbl 0x1(%rcx,%rbx), %r14d
addl %r14d, %edx
cmpl $0x100, %edx            # imm = 0x100
jb 0xcee4
movzbl 0x2(%rcx,%rbx), %ecx
addl %ecx, %r14d
cmpl $0x100, %r14d           # imm = 0x100
jb 0xcee4
addl %ecx, %edx
cmpl $0x1ff, %edx            # imm = 0x1FF
setae %cl
jmp 0xcee6
xorl %ecx, %ecx
movq %r9, %rdx
imulq -0x68(%rbp), %rdx
cvttss2si (%r12,%rdx,4), %edi
cvttss2si 0x4(%r12,%rdx,4), %ebx
cvttss2si 0x8(%r12,%rdx,4), %edx
cvtsi2ss %edi, %xmm10
xorps %xmm8, %xmm8
cvtsi2ss %ebx, %xmm8
xorps %xmm7, %xmm7
cvtsi2ss %edx, %xmm7
xorps %xmm6, %xmm6
cvtsi2sd %ebx, %xmm6
cvtsi2sd %edi, %xmm9
movl $0x6, %r14d
testb %cl, %cl
je 0xcfaa
movaps %xmm10, %xmm11
addss %xmm0, %xmm11
cvtss2sd %xmm11, %xmm11
mulsd %xmm11, %xmm11
movapd %xmm6, %xmm12
mulsd %xmm6, %xmm12
addsd %xmm11, %xmm12
movaps %xmm7, %xmm11
addss %xmm0, %xmm11
cvtss2sd %xmm11, %xmm11
mulsd %xmm11, %xmm11
addsd %xmm11, %xmm12
cvtsd2ss %xmm12, %xmm12
movapd %xmm9, %xmm13
mulsd %xmm9, %xmm13
movaps %xmm8, %xmm14
addss %xmm0, %xmm14
cvtss2sd %xmm14, %xmm14
mulsd %xmm14, %xmm14
addsd %xmm13, %xmm14
addsd %xmm11, %xmm14
xorps %xmm11, %xmm11
cvtsd2ss %xmm14, %xmm11
movl $0x3, %r14d
xorl %ecx, %ecx
ucomiss %xmm12, %xmm11
ja 0xcfad
movl %r14d, %ecx
movl %ecx, %ecx
leaq 0x462a(%rip), %rdi      # 0x115e0
movslq (%rdi,%rcx,4), %rcx
addq %rdi, %rcx
jmpq *%rcx
addsd %xmm1, %xmm9
xorps %xmm6, %xmm6
cvtsd2ss %xmm9, %xmm6
movss %xmm6, -0x34(%rbp)
xorps %xmm6, %xmm6
cvtsi2sd %edx, %xmm6
movss %xmm8, -0x30(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
movss %xmm6, -0x2c(%rbp)
movb $-0x1, %r14b
xorl %edx, %edx
jmp 0xd0b5
movss %xmm10, -0x34(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
movss %xmm6, -0x30(%rbp)
movss %xmm7, -0x2c(%rbp)
movb $-0x1, %dl
xorl %r14d, %r14d
jmp 0xd0db
addsd %xmm1, %xmm9
xorps %xmm8, %xmm8
cvtsd2ss %xmm9, %xmm8
movss %xmm8, -0x34(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
movss %xmm6, -0x30(%rbp)
movss %xmm7, -0x2c(%rbp)
movb $-0x1, %r14b
xorl %ecx, %ecx
movb $-0x1, %dl
jmp 0xd106
addsd %xmm1, %xmm9
xorps %xmm7, %xmm7
cvtsd2ss %xmm9, %xmm7
movss %xmm7, -0x34(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
xorps %xmm7, %xmm7
cvtsi2sd %edx, %xmm7
movss %xmm6, -0x30(%rbp)
addsd %xmm1, %xmm7
xorps %xmm6, %xmm6
cvtsd2ss %xmm7, %xmm6
movss %xmm6, -0x2c(%rbp)
movb $-0x1, %r14b
movb $-0x1, %dl
jmp 0xd0b5
movss %xmm10, -0x34(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
xorps %xmm7, %xmm7
cvtsi2sd %edx, %xmm7
movss %xmm6, -0x30(%rbp)
addsd %xmm1, %xmm7
xorps %xmm6, %xmm6
cvtsd2ss %xmm7, %xmm6
movss %xmm6, -0x2c(%rbp)
movb $-0x1, %dl
xorl %r14d, %r14d
movb $-0x1, %cl
jmp 0xd106
addsd %xmm1, %xmm9
xorps %xmm6, %xmm6
cvtsd2ss %xmm9, %xmm6
movss %xmm6, -0x34(%rbp)
movss %xmm8, -0x30(%rbp)
movss %xmm7, -0x2c(%rbp)
movb $-0x1, %r14b
xorl %edx, %edx
xorl %ecx, %ecx
jmp 0xd106
movss %xmm10, -0x34(%rbp)
xorps %xmm6, %xmm6
cvtsi2sd %edx, %xmm6
movss %xmm8, -0x30(%rbp)
addsd %xmm1, %xmm6
cvtsd2ss %xmm6, %xmm6
movss %xmm6, -0x2c(%rbp)
movb $-0x1, %cl
xorl %r14d, %r14d
xorl %edx, %edx
movl 0x8(%rsi), %edi
imull %r13d, %edi
addl %r9d, %edi
imull 0x10(%rsi), %edi
movq 0x18(%rsi), %rbx
movslq %edi, %rdi
movb %r14b, (%rbx,%rdi)
movl 0x8(%rsi), %edi
imull %r13d, %edi
addl %r9d, %edi
imull 0x10(%rsi), %edi
movq 0x18(%rsi), %rbx
movslq %edi, %rdi
movb %dl, 0x1(%rbx,%rdi)
movl 0x8(%rsi), %edx
imull %r13d, %edx
addl %r9d, %edx
imull 0x10(%rsi), %edx
movq 0x18(%rsi), %rdi
movslq %edx, %rdx
movb %cl, 0x2(%rdi,%rdx)
xorl %ecx, %ecx
xorps %xmm6, %xmm6
cvtss2sd (%r8,%rcx), %xmm6
xorps %xmm7, %xmm7
cvtss2sd -0x34(%rbp,%rcx), %xmm7
movaps %xmm7, %xmm8
mulsd %xmm2, %xmm8
mulsd %xmm3, %xmm8
addsd %xmm6, %xmm8
xorps %xmm6, %xmm6
cvtsd2ss %xmm8, %xmm6
movss %xmm6, (%r8,%rcx)
xorps %xmm6, %xmm6
cvtss2sd (%r10,%rcx), %xmm6
movaps %xmm7, %xmm8
mulsd %xmm3, %xmm8
addsd %xmm6, %xmm8
xorps %xmm6, %xmm6
cvtsd2ss %xmm8, %xmm6
movss %xmm6, (%r10,%rcx)
xorps %xmm6, %xmm6
cvtss2sd (%r15,%rcx), %xmm6
movaps %xmm7, %xmm8
mulsd %xmm4, %xmm8
mulsd %xmm3, %xmm8
addsd %xmm6, %xmm8
xorps %xmm6, %xmm6
cvtsd2ss %xmm8, %xmm6
movss %xmm6, (%r15,%rcx)
xorps %xmm6, %xmm6
cvtss2sd (%r11,%rcx), %xmm6
mulsd %xmm5, %xmm7
mulsd %xmm3, %xmm7
addsd %xmm6, %xmm7
xorps %xmm6, %xmm6
cvtsd2ss %xmm7, %xmm6
movss %xmm6, (%r11,%rcx)
addq $0x4, %rcx
cmpq $0xc, %rcx
jne 0xd153
movq -0x70(%rbp), %rcx
addq %rcx, %r11
addq %rcx, %r15
addq %rcx, %r10
addq %rcx, %r8
cmpq $0x2, %rax
movq %r9, %rax
jge 0xce94
incq %r13
movslq 0xc(%rsi), %rax
decq %rax
movq -0xa0(%rbp), %rcx
addq %rcx, -0x40(%rbp)
addq %rcx, -0x80(%rbp)
addq %rcx, -0x90(%rbp)
addq %rcx, -0x58(%rbp)
addq %rcx, -0x88(%rbp)
cmpq %rax, %r13
jl 0xca81
movq -0x98(%rbp), %rsp
leaq -0x28(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq