// File: qmmlib[P]QmmLibrary/linear.cpp
// Function: solve_mmcd_simple(problem*, double*, double, double, double, parameter const*, model const*, long)
static void solve_mmcd_simple(
					   problem *prob_col, double *w, double eps, 
					   double Cp, double Cn, const parameter *param, const struct model* model_, clock_t cpu_begin)
{
	printf("\n......solving with mmcd_simple.......\n");
	int l = prob_col->l;  // N in paper
	int w_size = prob_col->n;  // M in paper
	int j, s, iter = 0;
	int max_iter = 1000;
	
	//double sigma = 0.01;
	double d;
	//double G_loss, G, H;
	double Gmax_old = 0;
	double Gmax_new;
	double wmax_old = INF;
	double wmax_new;
	double Dmax_old = INF;
	double Dmax_new;
	double G2_old = INF;
	double G2_new;
	double Gmax_init;
	//double d_old, d_diff;
	//double loss_old, loss_new;
	//double appxcond, cond;

	int *index = new int[w_size];
	schar *y = new schar[l];
	double *z = new double[l];		// z in paper
	double *hdot = new double[l];	// hdot
	double *qdot = new double[l];	// qdot
	double *curv = new double[l];	// curv
	double *xj_sq = new double[w_size];
	double *Djpp = new double[w_size];
	double *Diff = new double[w_size];
	feature_node *x;
	bool PREC = false, DENUPDATE = true;
	loss_var loss_type = param->loss_type;
	curv_var curv_type = param->curv_type;
	double loss_param = param->loss_param;
	double curv_param = param->curv_param;
	double reg_param = param->reg_param;
	struct model* model_init = NULL;
	double v;
	double & objective_value = v;
	clock_t cpu_now;
	double cpu_time_elapsed = 0;

	double C[3] = {Cn,0,Cp};
	int nnz;

	if (param->init_model_file) {
		if((model_init=load_model(param->init_model_file))==0)
		{
			fprintf(stderr,"can't open model file %s\n",param->init_model_file);
			exit(1);
		}
	}

	// initialize w and z either from a model file or from w=0
	if (model_init) {
		if (model_init->nr_feature != w_size) { info("initial model file weight dimension does not match the data."); exit(0);}

		for(j=0; j<l; j++)
		{
			z[j] = 0;  // we  initialize z vector with z=0
			if(prob_col->y[j] > 0)
				y[j] = 1;
			else
				y[j] = -1;
		}

		for(j=0; j<w_size; j++)
		{
			w[j] = model_init->w[j]; // we initialize with model w
			index[j] = j;
			xj_sq[j] = 0;
			x = prob_col->x[j];
			while(x->index != -1)
			{
				int ind = x->index-1;
				double val = x->value;
				x->value *= y[ind]; // x->value now stores yi*xij, xtilde in paper
				xj_sq[j] += C[GETI(ind)]*val*val;
				x++;
			}
		}
		// if w is nonzero, need to find initial z
		for(int i=0; i<w_size; i++)
		{	
			if(w[i]==0) continue;
			x = prob_col->x[i];
			while(x->index != -1)
			{
				z[x->index-1] += w[i]*x->value;
				x++;
			}
		}
	} else {
		for(j=0; j<l; j++)
		{
			z[j] = 0;  // we  initialize with w=0
			if(prob_col->y[j] > 0)
				y[j] = 1;
			else
				y[j] = -1;
		}

		for(j=0; j<w_size; j++)
		{
			w[j] = 0; // we  initialize with w=0
			index[j] = j;
			xj_sq[j] = 0;
			x = prob_col->x[j];
			while(x->index != -1)
			{
				int ind = x->index-1;
				double val = x->value;
				x->value *= y[ind]; // x->value now stores yi*xij, xtilde in paper
				xj_sq[j] += C[GETI(ind)]*val*val;
				x++;
			}
		}
	}

	if (curv_type == MC) {
		PREC = true;
		if (loss_type == L2) {
			for(j=0; j<w_size; j++) Djpp[j] = xj_sq[j]*2.0;
			for(j=0; j<l; j++) curv[j] = 2.0;
		}else if (loss_type == L1){
			for(j=0; j<w_size; j++) Djpp[j] = xj_sq[j]*1.0/loss_param;
			for(j=0; j<l; j++) curv[j] = 1.0/loss_param;
		}else if (loss_type == HU1){
			for(j=0; j<w_size; j++) Djpp[j] = xj_sq[j]*1.0/(2.0*loss_param);
			for(j=0; j<l; j++) curv[j] = 1.0/(2.0*loss_param);
		}else if (loss_type == HU2){
			for(j=0; j<w_size; j++) Djpp[j] = xj_sq[j]*1/loss_param;
			for(j=0; j<l; j++) curv[j] = 1.0/loss_param;
		}else if (loss_type == LOG){
			for(j=0; j<w_size; j++) Djpp[j] = xj_sq[j]*1.0/4.0;
			for(j=0; j<l; j++) curv[j] = 1.0/4.0;
		}
	}

	if (loss_type == LS) {
		PREC = true;
		for(j=0; j<w_size; j++) Djpp[j] = xj_sq[j]*2.0;
		for(j=0; j<l; j++) curv[j] = 2.0;
	} else if (loss_type == L2 && curv_type == OC) {
		PREC = true;
		for(j=0; j<w_size; j++) Djpp[j] = xj_sq[j]*2.0;
		for(j=0; j<l; j++) curv[j] = 2.0;
	}

	if(param->save_each_iter!=0) {char filenametosave[1024]; sprintf(filenametosave,"%s%d.model",param->save_each_iter,iter); save_model(filenametosave,model_);}
	if (param->chat_level > 0)
	{
		cpu_now = clock();
		cpu_time_elapsed = ((double) (cpu_now - cpu_begin)) / ((double) CLOCKS_PER_SEC);																					
		v = mmcd_obj(prob_col,param,w,z,y,C,&nnz);																										
		__QMMCHAT__
		cpu_begin += (clock() - cpu_now);
	}

	while(iter < max_iter)
	{
		if (loss_type == L2) {
			for(j=0; j<l; j++) { hdot[j] = (z[j] < 1) ? -2.0*(1.0-z[j]) : 0; }
		} else if (loss_type == L1) {
			for(j=0; j<l; j++) { hdot[j] = (z[j] < 1) ? -1.0 : 0; }
		} else if (loss_type == HU1) {
			double t = loss_param; 
			for(j=0; j<l; j++) { hdot[j] = (z[j] < 1-t) ? -1.0 : (z[j] < 1 + t) ? 1.0/(2.0*t)*(z[j]-1.0-t) : 0.0; }
		} else if (loss_type == HU2) {
			double t = loss_param; 
			for(j=0; j<l; j++) { hdot[j] = (z[j] < 1-t) ? -1.0 : (z[j] < 1) ? 1.0/(t)*(z[j]-1) : 0; }
		} else if (loss_type == LOG) {
			for(j=0; j<l; j++) { hdot[j] = -1.0/(1+exp(z[j])); }
		} else if (loss_type == LS) {
			for(j=0; j<l; j++) { hdot[j] = -2.0*(1-z[j]); }
		}
		// initialize qdot
		for(j=0; j<l; j++) { qdot[j] = hdot[j]; }

		// compute curv's if necessary
		if (PREC==false) {
			if (loss_type == L2 && curv_type == NC) {
				double epsi = param->curv_param;
				for(j=0; j<l; j++) { curv[j] = (z[j] < 1) ? 2.0 : epsi; }
			} else if (loss_type == L1 && curv_type == OC) {
				double t = loss_param;
				for(j=0; j<l; j++) { curv[j] = (fabs(z[j] - 1) < t) ? 1/(2*t) : 1 / (2*fabs(1-z[j])); }
			} else if (loss_type == L1 && curv_type == NC) {
				double t = loss_param;
				double epsi = param->curv_param;
				for(j=0; j<l; j++) { curv[j] = (fabs(z[j] - 1) < t) ? 1/(2*t) : epsi; }
			} else if (loss_type == HU1 && curv_type == OC) {
				double t = loss_param;
				for(j=0; j<l; j++) { curv[j] = (fabs(z[j] - 1) < t) ? 1/(2*t) : 1 / (2*fabs(1-z[j])); }
			} else if (loss_type == HU1 && curv_type == NC) {
				double t = loss_param;
				double epsi = param->curv_param;
				for(j=0; j<l; j++) { curv[j] = (fabs(z[j] - 1) < t) ? 1/(2*t) : epsi; }
			} else if (loss_type == HU2 && curv_type == OC) {
				double t = loss_param;
				for(j=0; j<l; j++) { curv[j] = (fabs(1 - t/2 - z[j]) < t/2) ? 1/t : 1 / (2*fabs(1-t/2-z[j]));}
			} else if (loss_type == HU2 && curv_type == NC) {
				double t = loss_param;
				double epsi = param->curv_param;
				for(j=0; j<l; j++) { curv[j] = (fabs(1 - t/2 - z[j]) < t/2) ? 1/t : epsi;}
			} else if (loss_type == LOG && curv_type == OC) {
				for(j=0; j<l; j++) { 
					double ez = exp(z[j]);
					double emz = exp(-z[j]);
					double eme = ez - emz;
					curv[j] = (fabs(eme)<1e-3) ? 1.0/4.0 : fabs(eme/z[j])/(2*(2+ez+emz));
				}
			} else if (loss_type == LOG && curv_type == NC) {
				for(j=0; j<l; j++) { 
					double ee = exp(z[j])+exp(-z[j]);
					curv[j] = 1.0/(2+ee);
				}
			} else {
				info("invalid loss and curv type combination\n");
				exit(0); //revisit
			}
		}

		for(j=0; j<w_size; j++)
			{

				double Djp = 0;
				double Djppnow = 0;

				x = prob_col->x[j];
				while(x->index != -1)
				{
					int ind = x->index-1;
					if(qdot[ind] != 0)
					{
						double val = x->value;
						Djp += C[GETI(ind)]*val*qdot[ind];
					}
					x++;
				}

				if (PREC == true || DENUPDATE == false) {
					Djppnow = Djpp[j];
				} else {
					x = prob_col->x[j];
					while(x->index != -1)
					{
						int ind = x->index-1;
						double val = x->value;
						Djppnow += C[GETI(ind)]*val*val*curv[ind];
						Djpp[j] = Djppnow;
						x++;
					}
				}

				if (reg_param > 0) {
					Djp += reg_param * w[j];
					Djppnow += reg_param;
				}
				// newton step
				d = -Djp/Djppnow;

				double wjhat = w[j] + d;

				if (reg_param < 1) {
					wjhat = shrink(wjhat, (1-reg_param)/(Djppnow));
				}

				double difwj  = wjhat-w[j]; // difference
				w[j]=wjhat;

				// update qdot
				x = prob_col->x[j];
				while(x->index != -1)
				{
					int ind = x->index-1;
					double val = x->value;
					qdot[ind] += val*curv[ind]*difwj;
					x++;
				}
			}

		// // update z[i]
		if (curv_param > 1e-12) {
			for(j=0;j<l;j++)
				z[j] += (qdot[j]-hdot[j])/curv[j];
		} else { // if there is zero curvature value (possible for some loss if param->curv_param=0)
			info("#");
			for(int i=0; i<l; i++)
				z[i] = 0;

			for(int i=0; i<w_size; i++)
			{
				if(w[i]==0) continue;
				x = prob_col->x[i];
				while(x->index != -1)
				{
					z[x->index-1] += w[i]*x->value;
					x++;
				}
			}
		}


		iter++;
		
		if(iter % 10 == 0) {
			if (param->chat_level == 0) // display a . every 10th when no other info displayed
				info(".");
		} 
		
		if(param->save_each_iter!=0) {char filenametosave[1024]; sprintf(filenametosave,"%s%d.model",param->save_each_iter,iter); save_model(filenametosave,model_);}
		if (param->chat_level > 0)
		{
			cpu_now = clock();
			cpu_time_elapsed = ((double) (cpu_now - cpu_begin)) / ((double) CLOCKS_PER_SEC);																					
			v = mmcd_obj(prob_col,param,w,z,y,C,&nnz);																										
			__QMMCHAT__
			cpu_begin += (clock() - cpu_now);
		}
	}


	info("\noptimization finished, #iter = %d\n", iter);
	if(iter >= max_iter)
		info("\nWARNING: reaching max number of iterations\n");

	// calculate objective value
	v = mmcd_obj(prob_col,param,w,z,y,C,&nnz);

	info("Objective value = %lf\n", v);
	info("#nonzeros/#features = %d/%d\n", nnz, w_size);


	for(j=0; j<w_size; j++)
	{
		x = prob_col->x[j];
		while(x->index != -1)
		{
			x->value *= prob_col->y[x->index-1]; // restore x->value
			x++;
		}
	}

	delete [] index;
	delete [] y;
	delete [] z;
	delete [] hdot;
	delete [] qdot;
	delete [] curv;
	delete [] xj_sq;
	delete [] Djpp;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb20, %rsp            # imm = 0xB20
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movsd %xmm0, -0x18(%rbp)
movsd %xmm1, -0x20(%rbp)
movsd %xmm2, -0x28(%rbp)
movq %rdx, -0x30(%rbp)
movq %rcx, -0x38(%rbp)
movq %r8, -0x40(%rbp)
leaq 0xec18(%rip), %rdi      # 0x2579d
movb $0x0, %al
callq 0x3050
movq -0x8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x44(%rbp)
movq -0x8(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x48(%rbp)
movl $0x0, -0x54(%rbp)
movl $0x3e8, -0x58(%rbp)     # imm = 0x3E8
xorps %xmm0, %xmm0
movsd %xmm0, -0x68(%rbp)
movsd 0xd483(%rip), %xmm0     # 0x24040
movsd %xmm0, -0x78(%rbp)
movsd 0xd476(%rip), %xmm0     # 0x24040
movsd %xmm0, -0x88(%rbp)
movsd 0xd466(%rip), %xmm0     # 0x24040
movsd %xmm0, -0x98(%rbp)
movslq -0x48(%rbp), %rax
movl $0x4, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0xb0(%rbp)
movslq -0x44(%rbp), %rdi
callq 0x3030
movq %rax, -0xb8(%rbp)
movslq -0x44(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0xc0(%rbp)
movslq -0x44(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0xc8(%rbp)
movslq -0x44(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0xd0(%rbp)
movslq -0x44(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0xd8(%rbp)
movslq -0x48(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0xe0(%rbp)
movslq -0x48(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0xe8(%rbp)
movslq -0x48(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, -0xf0(%rbp)
movb $0x0, -0xf9(%rbp)
movb $0x1, -0xfa(%rbp)
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x100(%rbp)
movq -0x30(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x104(%rbp)
movq -0x30(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x110(%rbp)
movq -0x30(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0x118(%rbp)
movq -0x30(%rbp), %rax
movsd 0x20(%rax), %xmm0
movsd %xmm0, -0x120(%rbp)
movq $0x0, -0x128(%rbp)
leaq -0x130(%rbp), %rax
movq %rax, -0x138(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x148(%rbp)
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x160(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x158(%rbp)
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movq -0x30(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x16e47
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0xede0
movq %rax, -0x128(%rbp)
cmpq $0x0, %rax
jne 0x16e45
movq 0x141b6(%rip), %rax     # 0x2afd8
movq (%rax), %rdi
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rdx
leaq 0xe8ea(%rip), %rsi      # 0x2571e
movb $0x0, %al
callq 0x3400
movl $0x1, %edi
callq 0x3380
jmp 0x16e47
cmpq $0x0, -0x128(%rbp)
je 0x170fa
movq -0x128(%rbp), %rax
movl 0xb4(%rax), %eax
cmpl -0x48(%rbp), %eax
je 0x16e7c
leaq 0xe8ca(%rip), %rdi      # 0x25738
movb $0x0, %al
callq 0x9490
xorl %edi, %edi
callq 0x3380
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x16ee5
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x16ec9
movq -0xb8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movb $0x1, (%rax,%rcx)
jmp 0x16ed8
movq -0xb8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movb $-0x1, (%rax,%rcx)
jmp 0x16eda
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x16e83
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x17028
movq -0x128(%rbp), %rax
movq 0xb8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %edx
movq -0xb0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpl $-0x1, (%rax)
je 0x17018
movq -0xf8(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x168(%rbp)
movq -0xf8(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x170(%rbp)
movq -0xb8(%rbp), %rax
movslq -0x168(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cvtsi2sd %eax, %xmm0
movq -0xf8(%rbp), %rax
mulsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rax)
movq -0xb8(%rbp), %rax
movslq -0x168(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x160(%rbp,%rax,8), %xmm0
mulsd -0x170(%rbp), %xmm0
movsd -0x170(%rbp), %xmm2
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0xf8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
jmp 0x16f57
jmp 0x1701a
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x16eec
movl $0x0, -0x174(%rbp)
movl -0x174(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x170f5
movq -0x10(%rbp), %rax
movslq -0x174(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x17061
jp 0x17061
jmp 0x170e1
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x174(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpl $-0x1, (%rax)
je 0x170df
movq -0x10(%rbp), %rax
movslq -0x174(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0xf8(%rbp), %rax
movsd 0x8(%rax), %xmm2
movq -0xc0(%rbp), %rax
movq -0xf8(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0xf8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
jmp 0x1707b
jmp 0x170e1
movl -0x174(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x174(%rbp)
jmp 0x17032
jmp 0x17294
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17163
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x17147
movq -0xb8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movb $0x1, (%rax,%rcx)
jmp 0x17156
movq -0xb8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movb $-0x1, (%rax,%rcx)
jmp 0x17158
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17101
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x17292
movq -0x10(%rbp), %rax
movslq -0x4c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %edx
movq -0xb0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpl $-0x1, (%rax)
je 0x17282
movq -0xf8(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x178(%rbp)
movq -0xf8(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x180(%rbp)
movq -0xb8(%rbp), %rax
movslq -0x178(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cvtsi2sd %eax, %xmm0
movq -0xf8(%rbp), %rax
mulsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rax)
movq -0xb8(%rbp), %rax
movslq -0x178(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x160(%rbp,%rax,8), %xmm0
mulsd -0x180(%rbp), %xmm0
movsd -0x180(%rbp), %xmm2
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0xf8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
jmp 0x171c1
jmp 0x17284
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1716a
jmp 0x17294
cmpl $0x0, -0x104(%rbp)
jne 0x1759d
movb $0x1, -0xf9(%rbp)
cmpl $0x1, -0x100(%rbp)
jne 0x1732a
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x172f3
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xdfb5(%rip), %xmm0     # 0x25288
mulsd (%rax,%rcx,8), %xmm0
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x172b8
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17325
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xdf73(%rip), %xmm0     # 0x25288
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x172fa
jmp 0x1759b
cmpl $0x0, -0x100(%rbp)
jne 0x173c0
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x17381
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xcccf(%rip), %xmm0     # 0x24028
mulsd (%rax,%rcx,8), %xmm0
divsd -0x110(%rbp), %xmm0
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1733e
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x173bb
movsd 0xcc90(%rip), %xmm0     # 0x24028
divsd -0x110(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17388
jmp 0x17599
cmpl $0x3, -0x100(%rbp)
jne 0x1746e
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x17423
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xcc39(%rip), %xmm0     # 0x24028
mulsd (%rax,%rcx,8), %xmm0
movsd 0xde8c(%rip), %xmm1     # 0x25288
mulsd -0x110(%rbp), %xmm1
divsd %xmm1, %xmm0
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x173d4
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17469
movsd 0xde4e(%rip), %xmm1     # 0x25288
mulsd -0x110(%rbp), %xmm1
movsd 0xcbde(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1742a
jmp 0x17597
cmpl $0x4, -0x100(%rbp)
jne 0x17504
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x174c5
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xcb8b(%rip), %xmm0     # 0x24028
mulsd (%rax,%rcx,8), %xmm0
divsd -0x110(%rbp), %xmm0
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17482
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x174ff
movsd 0xcb4c(%rip), %xmm0     # 0x24028
divsd -0x110(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x174cc
jmp 0x17595
cmpl $0x2, -0x100(%rbp)
jne 0x17593
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x1755f
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xcaf5(%rip), %xmm0     # 0x24028
mulsd (%rax,%rcx,8), %xmm0
movsd 0xdba0(%rip), %xmm1     # 0x250e0
divsd %xmm1, %xmm0
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17518
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17591
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xdb67(%rip), %xmm0     # 0x250e8
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17566
jmp 0x17593
jmp 0x17595
jmp 0x17597
jmp 0x17599
jmp 0x1759b
jmp 0x1759d
cmpl $0x5, -0x100(%rbp)
jne 0x1762a
movb $0x1, -0xf9(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x175f3
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xdcb5(%rip), %xmm0     # 0x25288
mulsd (%rax,%rcx,8), %xmm0
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x175b8
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17625
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xdc73(%rip), %xmm0     # 0x25288
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x175fa
jmp 0x176bf
cmpl $0x1, -0x100(%rbp)
jne 0x176bd
cmpl $0x1, -0x104(%rbp)
jne 0x176bd
movb $0x1, -0xf9(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x17689
movq -0xe0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xdc1f(%rip), %xmm0     # 0x25288
mulsd (%rax,%rcx,8), %xmm0
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1764e
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x176bb
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xdbdd(%rip), %xmm0     # 0x25288
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17690
jmp 0x176bd
jmp 0x176bf
movq -0x30(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x176fa
leaq -0x580(%rbp), %rdi
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rdx
movl -0x54(%rbp), %ecx
leaq 0xda4d(%rip), %rsi      # 0x25130
movb $0x0, %al
callq 0x30a0
leaq -0x580(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0xe810
movq -0x30(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jle 0x17868
callq 0x3180
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rax
subq -0x40(%rbp), %rax
cvtsi2sd %rax, %xmm0
movsd 0xc8dc(%rip), %xmm1     # 0x24008
divsd %xmm1, %xmm0
movsd %xmm0, -0x148(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0xc0(%rbp), %rcx
movq -0xb8(%rbp), %r8
leaq -0x160(%rbp), %r9
leaq -0x164(%rbp), %rax
movq %rax, (%rsp)
callq 0x1ee70
movsd %xmm0, -0x130(%rbp)
movq -0x30(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jle 0x17854
movl -0x54(%rbp), %esi
movsd -0x148(%rbp), %xmm0
leaq 0xd9aa(%rip), %rdi      # 0x2513b
movb $0x1, %al
callq 0x9490
movq -0x30(%rbp), %rax
cmpl $0x1, 0x40(%rax)
jle 0x17846
movq -0x30(%rbp), %rax
cmpl $0x2, 0x40(%rax)
jle 0x17844
movq -0x138(%rbp), %rax
movsd (%rax), %xmm0
leaq 0xd98d(%rip), %rdi      # 0x25153
movb $0x1, %al
callq 0x9490
movq -0x30(%rbp), %rax
cmpl $0x3, 0x40(%rax)
jle 0x17842
movq -0x30(%rbp), %rax
cmpq $0x0, 0x30(%rax)
jne 0x17804
movq 0x137ef(%rip), %rax     # 0x2afd8
movq (%rax), %rdi
leaq 0xd975(%rip), %rsi      # 0x25168
movb $0x0, %al
callq 0x3400
movl $0x1, %edi
callq 0x3380
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x38(%rbp), %rsi
callq 0x20fa0
leaq 0xd986(%rip), %rdi      # 0x251a2
movb $0x1, %al
callq 0x9490
movq -0x30(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x38(%rbp), %rsi
callq 0x20fa0
leaq 0xd977(%rip), %rdi      # 0x251b2
movb $0x1, %al
callq 0x9490
jmp 0x17844
jmp 0x17846
leaq 0xd7e0(%rip), %rdi      # 0x2502d
movb $0x0, %al
callq 0x9490
callq 0x3180
subq -0x140(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
jmp 0x1786a
movl -0x54(%rbp), %eax
cmpl -0x58(%rbp), %eax
jge 0x18cdd
cmpl $0x1, -0x100(%rbp)
jne 0x1790f
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x1790a
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xc783(%rip), %xmm0     # 0x24028
ucomisd (%rax,%rcx,8), %xmm0
jbe 0x178da
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xc769(%rip), %xmm1     # 0x24028
subsd (%rax,%rcx,8), %xmm1
movsd 0xd9dc(%rip), %xmm0     # 0x252a8
mulsd %xmm1, %xmm0
movsd %xmm0, -0xa68(%rbp)
jmp 0x178e7
xorps %xmm0, %xmm0
movsd %xmm0, -0xa68(%rbp)
jmp 0x178e7
movsd -0xa68(%rbp), %xmm0
movq -0xc8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1788a
jmp 0x17c6e
cmpl $0x0, -0x100(%rbp)
jne 0x1797e
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17979
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd 0xc6f1(%rip), %xmm3     # 0x24030
xorps %xmm2, %xmm2
movsd 0xc6de(%rip), %xmm1     # 0x24028
cmpltsd %xmm1, %xmm0
movaps %xmm0, %xmm1
andpd %xmm3, %xmm1
andnpd %xmm2, %xmm0
orpd %xmm1, %xmm0
movq -0xc8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1791f
jmp 0x17c6c
cmpl $0x3, -0x100(%rbp)
jne 0x17aa5
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x588(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17aa0
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xc662(%rip), %xmm0     # 0x24028
subsd -0x588(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x179e9
movsd 0xc654(%rip), %xmm0     # 0x24030
movsd %xmm0, -0xa70(%rbp)
jmp 0x17a7a
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xc627(%rip), %xmm0     # 0x24028
addsd -0x588(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x17a5d
movsd 0xd871(%rip), %xmm1     # 0x25288
mulsd -0x588(%rbp), %xmm1
movsd 0xc601(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xc5e5(%rip), %xmm2     # 0x24028
subsd %xmm2, %xmm1
subsd -0x588(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0xa78(%rbp)
jmp 0x17a6a
xorps %xmm0, %xmm0
movsd %xmm0, -0xa78(%rbp)
jmp 0x17a6a
movsd -0xa78(%rbp), %xmm0
movsd %xmm0, -0xa70(%rbp)
movsd -0xa70(%rbp), %xmm0
movq -0xc8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x179a2
jmp 0x17c6a
cmpl $0x4, -0x100(%rbp)
jne 0x17ba9
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x590(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17ba4
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xc53b(%rip), %xmm0     # 0x24028
subsd -0x590(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x17b0d
movsd 0xc52d(%rip), %xmm0     # 0x24030
movsd %xmm0, -0xa80(%rbp)
jmp 0x17b7e
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xc508(%rip), %xmm0     # 0x24028
ucomisd (%rax,%rcx,8), %xmm0
jbe 0x17b61
movsd 0xc4f9(%rip), %xmm0     # 0x24028
divsd -0x590(%rbp), %xmm0
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xc4d9(%rip), %xmm2     # 0x24028
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0xa88(%rbp)
jmp 0x17b6e
xorps %xmm0, %xmm0
movsd %xmm0, -0xa88(%rbp)
jmp 0x17b6e
movsd -0xa88(%rbp), %xmm0
movsd %xmm0, -0xa80(%rbp)
movsd -0xa80(%rbp), %xmm0
movq -0xc8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17ac9
jmp 0x17c68
cmpl $0x2, -0x100(%rbp)
jne 0x17c0b
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17c09
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x34d0
movsd 0xc44a(%rip), %xmm1     # 0x24028
addsd %xmm0, %xmm1
movsd 0xc446(%rip), %xmm0     # 0x24030
divsd %xmm1, %xmm0
movq -0xc8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17bb9
jmp 0x17c66
cmpl $0x5, -0x100(%rbp)
jne 0x17c64
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17c62
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xc3f2(%rip), %xmm1     # 0x24028
subsd (%rax,%rcx,8), %xmm1
movsd 0xd665(%rip), %xmm0     # 0x252a8
mulsd %xmm1, %xmm0
movq -0xc8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17c1b
jmp 0x17c64
jmp 0x17c66
jmp 0x17c68
jmp 0x17c6a
jmp 0x17c6c
jmp 0x17c6e
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17ca8
movq -0xc8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0xd0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17c75
movb -0xf9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x1858f
cmpl $0x1, -0x100(%rbp)
jne 0x17d5a
cmpl $0x2, -0x104(%rbp)
jne 0x17d5a
movq -0x30(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0x598(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17d55
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xc31f(%rip), %xmm0     # 0x24028
ucomisd (%rax,%rcx,8), %xmm0
jbe 0x17d22
movsd 0xd570(%rip), %xmm0     # 0x25288
movsd %xmm0, -0xa90(%rbp)
jmp 0x17d32
movsd -0x598(%rbp), %xmm0
movsd %xmm0, -0xa90(%rbp)
movsd -0xa90(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17cee
jmp 0x1858d
cmpl $0x0, -0x100(%rbp)
jne 0x17e60
cmpl $0x1, -0x104(%rbp)
jne 0x17e60
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x5a0(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17e5b
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xc279(%rip), %xmm0     # 0x24028
subsd %xmm0, %xmm1
movaps 0xd366(%rip), %xmm0     # 0x25120
pand %xmm0, %xmm1
movsd -0x5a0(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x17df2
movsd 0xd4b4(%rip), %xmm1     # 0x25288
mulsd -0x5a0(%rbp), %xmm1
movsd 0xc244(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movsd %xmm0, -0xa98(%rbp)
jmp 0x17e35
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xc223(%rip), %xmm0     # 0x24028
subsd (%rax,%rcx,8), %xmm0
movaps 0xd30f(%rip), %xmm1     # 0x25120
pand %xmm1, %xmm0
movsd 0xd46b(%rip), %xmm1     # 0x25288
mulsd %xmm0, %xmm1
movsd 0xc1ff(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movsd %xmm0, -0xa98(%rbp)
movsd -0xa98(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17d8b
jmp 0x1858b
cmpl $0x0, -0x100(%rbp)
jne 0x17f44
cmpl $0x2, -0x104(%rbp)
jne 0x17f44
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x5a8(%rbp)
movq -0x30(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0x5b0(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x17f3f
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xc162(%rip), %xmm0     # 0x24028
subsd %xmm0, %xmm1
movaps 0xd24f(%rip), %xmm0     # 0x25120
pand %xmm0, %xmm1
movsd -0x5a8(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x17f09
movsd 0xd39d(%rip), %xmm1     # 0x25288
mulsd -0x5a8(%rbp), %xmm1
movsd 0xc12d(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movsd %xmm0, -0xaa0(%rbp)
jmp 0x17f19
movsd -0x5b0(%rbp), %xmm0
movsd %xmm0, -0xaa0(%rbp)
movsd -0xaa0(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17ea2
jmp 0x18589
cmpl $0x3, -0x100(%rbp)
jne 0x1804a
cmpl $0x1, -0x104(%rbp)
jne 0x1804a
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x5b8(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x18045
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xc08f(%rip), %xmm0     # 0x24028
subsd %xmm0, %xmm1
movaps 0xd17c(%rip), %xmm0     # 0x25120
pand %xmm0, %xmm1
movsd -0x5b8(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x17fdc
movsd 0xd2ca(%rip), %xmm1     # 0x25288
mulsd -0x5b8(%rbp), %xmm1
movsd 0xc05a(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movsd %xmm0, -0xaa8(%rbp)
jmp 0x1801f
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd 0xc039(%rip), %xmm0     # 0x24028
subsd (%rax,%rcx,8), %xmm0
movaps 0xd125(%rip), %xmm1     # 0x25120
pand %xmm1, %xmm0
movsd 0xd281(%rip), %xmm1     # 0x25288
mulsd %xmm0, %xmm1
movsd 0xc015(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movsd %xmm0, -0xaa8(%rbp)
movsd -0xaa8(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x17f75
jmp 0x18587
cmpl $0x3, -0x100(%rbp)
jne 0x1812e
cmpl $0x2, -0x104(%rbp)
jne 0x1812e
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x5c0(%rbp)
movq -0x30(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0x5c8(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x18129
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0xbf78(%rip), %xmm0     # 0x24028
subsd %xmm0, %xmm1
movaps 0xd065(%rip), %xmm0     # 0x25120
pand %xmm0, %xmm1
movsd -0x5c0(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x180f3
movsd 0xd1b3(%rip), %xmm1     # 0x25288
mulsd -0x5c0(%rbp), %xmm1
movsd 0xbf43(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movsd %xmm0, -0xab0(%rbp)
jmp 0x18103
movsd -0x5c8(%rbp), %xmm0
movsd %xmm0, -0xab0(%rbp)
movsd -0xab0(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1808c
jmp 0x18585
cmpl $0x4, -0x100(%rbp)
jne 0x18260
cmpl $0x1, -0x104(%rbp)
jne 0x18260
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x5d0(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x1825b
movsd -0x5d0(%rbp), %xmm0
movsd 0xd10d(%rip), %xmm1     # 0x25288
divsd %xmm1, %xmm0
movsd 0xbea1(%rip), %xmm1     # 0x24028
subsd %xmm0, %xmm1
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm1
movaps 0xcf7e(%rip), %xmm0     # 0x25120
pand %xmm0, %xmm1
movsd -0x5d0(%rbp), %xmm0
movsd 0xd0d2(%rip), %xmm2     # 0x25288
divsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x181da
movsd 0xbe60(%rip), %xmm0     # 0x24028
divsd -0x5d0(%rbp), %xmm0
movsd %xmm0, -0xab8(%rbp)
jmp 0x18235
movsd -0x5d0(%rbp), %xmm1
movsd 0xd09e(%rip), %xmm0     # 0x25288
divsd %xmm0, %xmm1
movsd 0xbe32(%rip), %xmm0     # 0x24028
subsd %xmm1, %xmm0
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm0
movaps 0xcf0f(%rip), %xmm1     # 0x25120
pand %xmm1, %xmm0
movsd 0xd06b(%rip), %xmm1     # 0x25288
mulsd %xmm0, %xmm1
movsd 0xbdff(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movsd %xmm0, -0xab8(%rbp)
movsd -0xab8(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x1815f
jmp 0x18583
cmpl $0x4, -0x100(%rbp)
jne 0x18358
cmpl $0x2, -0x104(%rbp)
jne 0x18358
movsd -0x110(%rbp), %xmm0
movsd %xmm0, -0x5d8(%rbp)
movq -0x30(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0x5e0(%rbp)
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x18353
movsd -0x5d8(%rbp), %xmm0
movsd 0xcfca(%rip), %xmm1     # 0x25288
divsd %xmm1, %xmm0
movsd 0xbd5e(%rip), %xmm1     # 0x24028
subsd %xmm0, %xmm1
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm1
movaps 0xce3b(%rip), %xmm0     # 0x25120
pand %xmm0, %xmm1
movsd -0x5d8(%rbp), %xmm0
movsd 0xcf8f(%rip), %xmm2     # 0x25288
divsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x1831d
movsd 0xbd1d(%rip), %xmm0     # 0x24028
divsd -0x5d8(%rbp), %xmm0
movsd %xmm0, -0xac0(%rbp)
jmp 0x1832d
movsd -0x5e0(%rbp), %xmm0
movsd %xmm0, -0xac0(%rbp)
movsd -0xac0(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x182a2
jmp 0x18581
cmpl $0x2, -0x100(%rbp)
jne 0x1849f
cmpl $0x1, -0x104(%rbp)
jne 0x1849f
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x1849a
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x34d0
movsd %xmm0, -0x5e8(%rbp)
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
callq 0x34d0
movsd %xmm0, -0x5f0(%rbp)
movsd -0x5e8(%rbp), %xmm0
subsd -0x5f0(%rbp), %xmm0
movsd %xmm0, -0x5f8(%rbp)
movsd -0x5f8(%rbp), %xmm1
movaps 0xcd23(%rip), %xmm0     # 0x25120
pand %xmm0, %xmm1
movsd 0xbc0f(%rip), %xmm0     # 0x24018
ucomisd %xmm1, %xmm0
jbe 0x18421
movsd 0xccd1(%rip), %xmm0     # 0x250e8
movsd %xmm0, -0xac8(%rbp)
jmp 0x18474
movsd -0x5f8(%rbp), %xmm0
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
divsd (%rax,%rcx,8), %xmm0
movaps 0xcce0(%rip), %xmm1     # 0x25120
pand %xmm1, %xmm0
movsd 0xce3c(%rip), %xmm2     # 0x25288
addsd -0x5e8(%rbp), %xmm2
addsd -0x5f0(%rbp), %xmm2
movsd 0xce24(%rip), %xmm1     # 0x25288
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0xac8(%rbp)
movsd -0xac8(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x18379
jmp 0x1857f
cmpl $0x2, -0x100(%rbp)
jne 0x18568
cmpl $0x2, -0x104(%rbp)
jne 0x18568
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x18566
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x34d0
movsd %xmm0, -0xad0(%rbp)
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
callq 0x34d0
movaps %xmm0, %xmm1
movsd -0xad0(%rbp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x600(%rbp)
movsd 0xcd54(%rip), %xmm1     # 0x25288
addsd -0x600(%rbp), %xmm1
movsd 0xbae4(%rip), %xmm0     # 0x24028
divsd %xmm1, %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x184c0
jmp 0x1857d
leaq 0xd206(%rip), %rdi      # 0x25775
movb $0x0, %al
callq 0x9490
xorl %edi, %edi
callq 0x3380
jmp 0x1857f
jmp 0x18581
jmp 0x18583
jmp 0x18585
jmp 0x18587
jmp 0x18589
jmp 0x1858b
jmp 0x1858d
jmp 0x1858f
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x18969
xorps %xmm0, %xmm0
movsd %xmm0, -0x608(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x610(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpl $-0x1, (%rax)
je 0x1868f
movq -0xf8(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x614(%rbp)
movq -0xd0(%rbp), %rax
movslq -0x614(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x18611
jp 0x18611
jmp 0x18678
movq -0xf8(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x620(%rbp)
movq -0xb8(%rbp), %rax
movslq -0x614(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x160(%rbp,%rax,8), %xmm0
mulsd -0x620(%rbp), %xmm0
movq -0xd0(%rbp), %rax
movslq -0x614(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x608(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x608(%rbp)
movq -0xf8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
jmp 0x185cf
movb -0xf9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
je 0x186af
movb -0xfa(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x186cc
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x610(%rbp)
jmp 0x187a5
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpl $-0x1, (%rax)
je 0x187a3
movq -0xf8(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x624(%rbp)
movq -0xf8(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x630(%rbp)
movq -0xb8(%rbp), %rax
movslq -0x624(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x160(%rbp,%rax,8), %xmm0
mulsd -0x630(%rbp), %xmm0
mulsd -0x630(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x624(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x610(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x610(%rbp)
movsd -0x610(%rbp), %xmm0
movq -0xe8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0xf8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
jmp 0x186e3
jmp 0x187a5
movsd -0x120(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x187fb
movsd -0x120(%rbp), %xmm0
movq -0x10(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x608(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x608(%rbp)
movsd -0x120(%rbp), %xmm0
addsd -0x610(%rbp), %xmm0
movsd %xmm0, -0x610(%rbp)
movsd -0x608(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
divsd -0x610(%rbp), %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x10(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
addsd -0x60(%rbp), %xmm0
movsd %xmm0, -0x638(%rbp)
movsd 0xb7df(%rip), %xmm0     # 0x24028
ucomisd -0x120(%rbp), %xmm0
jbe 0x18880
movsd -0x638(%rbp), %xmm0
movsd 0xb7c5(%rip), %xmm1     # 0x24028
subsd -0x120(%rbp), %xmm1
divsd -0x610(%rbp), %xmm1
callq 0x1f4d0
movsd %xmm0, -0x638(%rbp)
movsd -0x638(%rbp), %xmm0
movq -0x10(%rbp), %rax
movslq -0x4c(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x640(%rbp)
movsd -0x638(%rbp), %xmm0
movq -0x10(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpl $-0x1, (%rax)
je 0x18959
movq -0xf8(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x644(%rbp)
movq -0xf8(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x650(%rbp)
movsd -0x650(%rbp), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x644(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd -0x640(%rbp), %xmm2
movq -0xd0(%rbp), %rax
movslq -0x644(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0xf8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
jmp 0x188c9
jmp 0x1895b
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x18596
movsd -0x118(%rbp), %xmm0
movsd 0xc797(%rip), %xmm1     # 0x25110
ucomisd %xmm1, %xmm0
jbe 0x189e3
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x189de
movq -0xd0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0xc8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm0
movq -0xd8(%rbp), %rax
movslq -0x4c(%rbp), %rcx
divsd (%rax,%rcx,8), %xmm0
movq -0xc0(%rbp), %rax
movslq -0x4c(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x18986
jmp 0x18afc
leaq 0xcc67(%rip), %rdi      # 0x25651
movb $0x0, %al
callq 0x9490
movl $0x0, -0x654(%rbp)
movl -0x654(%rbp), %eax
cmpl -0x44(%rbp), %eax
jge 0x18a2d
movq -0xc0(%rbp), %rax
movslq -0x654(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x654(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x654(%rbp)
jmp 0x189fb
movl $0x0, -0x658(%rbp)
movl -0x658(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x18afa
movq -0x10(%rbp), %rax
movslq -0x658(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x18a66
jp 0x18a66
jmp 0x18ae6
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x658(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpl $-0x1, (%rax)
je 0x18ae4
movq -0x10(%rbp), %rax
movslq -0x658(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0xf8(%rbp), %rax
movsd 0x8(%rax), %xmm2
movq -0xc0(%rbp), %rax
movq -0xf8(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0xf8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
jmp 0x18a80
jmp 0x18ae6
movl -0x658(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x658(%rbp)
jmp 0x18a37
jmp 0x18afc
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
movl -0x54(%rbp), %eax
movl $0xa, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x18b2f
movq -0x30(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x18b2d
leaq 0xcc4d(%rip), %rdi      # 0x25773
movb $0x0, %al
callq 0x9490
jmp 0x18b2f
movq -0x30(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x18b6a
leaq -0xa60(%rbp), %rdi
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rdx
movl -0x54(%rbp), %ecx
leaq 0xc5dd(%rip), %rsi      # 0x25130
movb $0x0, %al
callq 0x30a0
leaq -0xa60(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0xe810
movq -0x30(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jle 0x18cd8
callq 0x3180
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rax
subq -0x40(%rbp), %rax
cvtsi2sd %rax, %xmm0
movsd 0xb46c(%rip), %xmm1     # 0x24008
divsd %xmm1, %xmm0
movsd %xmm0, -0x148(%rbp)
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0xc0(%rbp), %rcx
movq -0xb8(%rbp), %r8
leaq -0x160(%rbp), %r9
leaq -0x164(%rbp), %rax
movq %rax, (%rsp)
callq 0x1ee70
movsd %xmm0, -0x130(%rbp)
movq -0x30(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jle 0x18cc4
movl -0x54(%rbp), %esi
movsd -0x148(%rbp), %xmm0
leaq 0xc53a(%rip), %rdi      # 0x2513b
movb $0x1, %al
callq 0x9490
movq -0x30(%rbp), %rax
cmpl $0x1, 0x40(%rax)
jle 0x18cb6
movq -0x30(%rbp), %rax
cmpl $0x2, 0x40(%rax)
jle 0x18cb4
movq -0x138(%rbp), %rax
movsd (%rax), %xmm0
leaq 0xc51d(%rip), %rdi      # 0x25153
movb $0x1, %al
callq 0x9490
movq -0x30(%rbp), %rax
cmpl $0x3, 0x40(%rax)
jle 0x18cb2
movq -0x30(%rbp), %rax
cmpq $0x0, 0x30(%rax)
jne 0x18c74
movq 0x1237f(%rip), %rax     # 0x2afd8
movq (%rax), %rdi
leaq 0xc505(%rip), %rsi      # 0x25168
movb $0x0, %al
callq 0x3400
movl $0x1, %edi
callq 0x3380
movq -0x30(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x38(%rbp), %rsi
callq 0x20fa0
leaq 0xc516(%rip), %rdi      # 0x251a2
movb $0x1, %al
callq 0x9490
movq -0x30(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x38(%rbp), %rsi
callq 0x20fa0
leaq 0xc507(%rip), %rdi      # 0x251b2
movb $0x1, %al
callq 0x9490
jmp 0x18cb4
jmp 0x18cb6
leaq 0xc370(%rip), %rdi      # 0x2502d
movb $0x0, %al
callq 0x9490
callq 0x3180
subq -0x140(%rbp), %rax
addq -0x40(%rbp), %rax
movq %rax, -0x40(%rbp)
jmp 0x1786a
movl -0x54(%rbp), %esi
leaq 0xc713(%rip), %rdi      # 0x253fa
movb $0x0, %al
callq 0x9490
movl -0x54(%rbp), %eax
cmpl -0x58(%rbp), %eax
jl 0x18d04
leaq 0xc721(%rip), %rdi      # 0x2541e
movb $0x0, %al
callq 0x9490
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0xc0(%rbp), %rcx
movq -0xb8(%rbp), %r8
leaq -0x160(%rbp), %r9
leaq -0x164(%rbp), %rax
movq %rax, (%rsp)
callq 0x1ee70
movsd %xmm0, -0x130(%rbp)
movsd -0x130(%rbp), %xmm0
leaq 0xc6ff(%rip), %rdi      # 0x2544b
movb $0x1, %al
callq 0x9490
movl -0x164(%rbp), %esi
movl -0x48(%rbp), %edx
leaq 0xc8f0(%rip), %rdi      # 0x25653
movb $0x0, %al
callq 0x9490
movl $0x0, -0x4c(%rbp)
movl -0x4c(%rbp), %eax
cmpl -0x48(%rbp), %eax
jge 0x18dea
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x4c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rax
cmpl $-0x1, (%rax)
je 0x18ddd
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq -0xf8(%rbp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0xf8(%rbp), %rax
mulsd 0x8(%rax), %xmm0
movsd %xmm0, 0x8(%rax)
movq -0xf8(%rbp), %rax
addq $0x10, %rax
movq %rax, -0xf8(%rbp)
jmp 0x18d90
jmp 0x18ddf
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x18d71
movq -0xb0(%rbp), %rax
movq %rax, -0xad8(%rbp)
cmpq $0x0, %rax
je 0x18e0a
movq -0xad8(%rbp), %rdi
callq 0x33b0
movq -0xb8(%rbp), %rax
movq %rax, -0xae0(%rbp)
cmpq $0x0, %rax
je 0x18e2a
movq -0xae0(%rbp), %rdi
callq 0x33b0
movq -0xc0(%rbp), %rax
movq %rax, -0xae8(%rbp)
cmpq $0x0, %rax
je 0x18e4a
movq -0xae8(%rbp), %rdi
callq 0x33b0
movq -0xc8(%rbp), %rax
movq %rax, -0xaf0(%rbp)
cmpq $0x0, %rax
je 0x18e6a
movq -0xaf0(%rbp), %rdi
callq 0x33b0
movq -0xd0(%rbp), %rax
movq %rax, -0xaf8(%rbp)
cmpq $0x0, %rax
je 0x18e8a
movq -0xaf8(%rbp), %rdi
callq 0x33b0
movq -0xd8(%rbp), %rax
movq %rax, -0xb00(%rbp)
cmpq $0x0, %rax
je 0x18eaa
movq -0xb00(%rbp), %rdi
callq 0x33b0
movq -0xe0(%rbp), %rax
movq %rax, -0xb08(%rbp)
cmpq $0x0, %rax
je 0x18eca
movq -0xb08(%rbp), %rdi
callq 0x33b0
movq -0xe8(%rbp), %rax
movq %rax, -0xb10(%rbp)
cmpq $0x0, %rax
je 0x18eea
movq -0xb10(%rbp), %rdi
callq 0x33b0
addq $0xb20, %rsp            # imm = 0xB20
popq %rbp
retq
nopw %cs:(%rax,%rax)