// File: cjlin1[P]liblinear/linear.cpp
// Function: solve_l1r_lr(problem const*, parameter const*, double*, double, double, double)
static int solve_l1r_lr(const problem *prob_col, const parameter *param, double *w, double Cp, double Cn, double eps)
{
	int l = prob_col->l;
	int w_size = prob_col->n;
	int regularize_bias = param->regularize_bias;
	int j, s, newton_iter=0, iter=0;
	int max_newton_iter = 100;
	int max_iter = 1000;
	int max_num_linesearch = 20;
	int active_size;
	int QP_active_size;

	double nu = 1e-12;
	double inner_eps = 1;
	double sigma = 0.01;
	double w_norm, w_norm_new;
	double z, G, H;
	double Gnorm1_init = -1.0; // Gnorm1_init is initialized at the first iteration
	double Gmax_old = INF;
	double Gmax_new, Gnorm1_new;
	double QP_Gmax_old = INF;
	double QP_Gmax_new, QP_Gnorm1_new;
	double delta, negsum_xTd, cond;

	int *index = new int[w_size];
	schar *y = new schar[l];
	double *Hdiag = new double[w_size];
	double *Grad = new double[w_size];
	double *wpd = new double[w_size];
	double *xjneg_sum = new double[w_size];
	double *xTd = new double[l];
	double *exp_wTx = new double[l];
	double *exp_wTx_new = new double[l];
	double *tau = new double[l];
	double *D = new double[l];
	feature_node *x;

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

	// Initial w can be set here.
	for(j=0; j<w_size; j++)
		w[j] = 0;

	for(j=0; j<l; j++)
	{
		if(prob_col->y[j] > 0)
			y[j] = 1;
		else
			y[j] = -1;

		exp_wTx[j] = 0;
	}

	w_norm = 0;
	for(j=0; j<w_size; j++)
	{
		w_norm += fabs(w[j]);
		wpd[j] = w[j];
		index[j] = j;
		xjneg_sum[j] = 0;
		x = prob_col->x[j];
		while(x->index != -1)
		{
			int ind = x->index-1;
			double val = x->value;
			exp_wTx[ind] += w[j]*val;
			if(y[ind] == -1)
				xjneg_sum[j] += C[GETI(ind)]*val;
			x++;
		}
	}
	if (regularize_bias == 0)
		w_norm -= fabs(w[w_size-1]);

	for(j=0; j<l; j++)
	{
		exp_wTx[j] = exp(exp_wTx[j]);
		double tau_tmp = 1/(1+exp_wTx[j]);
		tau[j] = C[GETI(j)]*tau_tmp;
		D[j] = C[GETI(j)]*exp_wTx[j]*tau_tmp*tau_tmp;
	}

	while(newton_iter < max_newton_iter)
	{
		Gmax_new = 0;
		Gnorm1_new = 0;
		active_size = w_size;

		for(s=0; s<active_size; s++)
		{
			j = index[s];
			Hdiag[j] = nu;
			Grad[j] = 0;

			double tmp = 0;
			x = prob_col->x[j];
			while(x->index != -1)
			{
				int ind = x->index-1;
				Hdiag[j] += x->value*x->value*D[ind];
				tmp += x->value*tau[ind];
				x++;
			}
			Grad[j] = -tmp + xjneg_sum[j];

			double violation = 0;
			if (j == w_size-1 && regularize_bias == 0)
				violation = fabs(Grad[j]);
			else
			{
				double Gp = Grad[j]+1;
				double Gn = Grad[j]-1;
				if(w[j] == 0)
				{
					if(Gp < 0)
						violation = -Gp;
					else if(Gn > 0)
						violation = Gn;
					//outer-level shrinking
					else if(Gp>Gmax_old/l && Gn<-Gmax_old/l)
					{
						active_size--;
						swap(index[s], index[active_size]);
						s--;
						continue;
					}
				}
				else if(w[j] > 0)
					violation = fabs(Gp);
				else
					violation = fabs(Gn);
			}
			Gmax_new = max(Gmax_new, violation);
			Gnorm1_new += violation;
		}

		if(newton_iter == 0)
			Gnorm1_init = Gnorm1_new;

		if(Gnorm1_new <= eps*Gnorm1_init)
			break;

		iter = 0;
		QP_Gmax_old = INF;
		QP_active_size = active_size;

		for(int i=0; i<l; i++)
			xTd[i] = 0;

		// optimize QP over wpd
		while(iter < max_iter)
		{
			QP_Gmax_new = 0;
			QP_Gnorm1_new = 0;

			for(j=0; j<QP_active_size; j++)
			{
				int i = j+rand()%(QP_active_size-j);
				swap(index[i], index[j]);
			}

			for(s=0; s<QP_active_size; s++)
			{
				j = index[s];
				H = Hdiag[j];

				x = prob_col->x[j];
				G = Grad[j] + (wpd[j]-w[j])*nu;
				while(x->index != -1)
				{
					int ind = x->index-1;
					G += x->value*D[ind]*xTd[ind];
					x++;
				}

				double violation = 0;
				if (j == w_size-1 && regularize_bias == 0)
				{
					// bias term not shrunken
					violation = fabs(G);
					z = -G/H;
				}
				else
				{
					double Gp = G+1;
					double Gn = G-1;
					if(wpd[j] == 0)
					{
						if(Gp < 0)
							violation = -Gp;
						else if(Gn > 0)
							violation = Gn;
						//inner-level shrinking
						else if(Gp>QP_Gmax_old/l && Gn<-QP_Gmax_old/l)
						{
							QP_active_size--;
							swap(index[s], index[QP_active_size]);
							s--;
							continue;
						}
					}
					else if(wpd[j] > 0)
						violation = fabs(Gp);
					else
						violation = fabs(Gn);

					// obtain solution of one-variable problem
					if(Gp < H*wpd[j])
						z = -Gp/H;
					else if(Gn > H*wpd[j])
						z = -Gn/H;
					else
						z = -wpd[j];
				}
				QP_Gmax_new = max(QP_Gmax_new, violation);
				QP_Gnorm1_new += violation;

				if(fabs(z) < 1.0e-12)
					continue;
				z = min(max(z,-10.0),10.0);

				wpd[j] += z;

				x = prob_col->x[j];
				sparse_operator::axpy(z, x, xTd);
			}

			iter++;

			if(QP_Gnorm1_new <= inner_eps*Gnorm1_init)
			{
				//inner stopping
				if(QP_active_size == active_size)
					break;
				//active set reactivation
				else
				{
					QP_active_size = active_size;
					QP_Gmax_old = INF;
					continue;
				}
			}

			QP_Gmax_old = QP_Gmax_new;
		}

		if(iter >= max_iter)
			info("WARNING: reaching max number of inner iterations\n");

		delta = 0;
		w_norm_new = 0;
		for(j=0; j<w_size; j++)
		{
			delta += Grad[j]*(wpd[j]-w[j]);
			if(wpd[j] != 0)
				w_norm_new += fabs(wpd[j]);
		}
		if (regularize_bias == 0)
			w_norm_new -= fabs(wpd[w_size-1]);
		delta += (w_norm_new-w_norm);

		negsum_xTd = 0;
		for(int i=0; i<l; i++)
			if(y[i] == -1)
				negsum_xTd += C[GETI(i)]*xTd[i];

		int num_linesearch;
		for(num_linesearch=0; num_linesearch < max_num_linesearch; num_linesearch++)
		{
			cond = w_norm_new - w_norm + negsum_xTd - sigma*delta;

			for(int i=0; i<l; i++)
			{
				double exp_xTd = exp(xTd[i]);
				exp_wTx_new[i] = exp_wTx[i]*exp_xTd;
				cond += C[GETI(i)]*log((1+exp_wTx_new[i])/(exp_xTd+exp_wTx_new[i]));
			}

			if(cond <= 0)
			{
				w_norm = w_norm_new;
				for(j=0; j<w_size; j++)
					w[j] = wpd[j];
				for(int i=0; i<l; i++)
				{
					exp_wTx[i] = exp_wTx_new[i];
					double tau_tmp = 1/(1+exp_wTx[i]);
					tau[i] = C[GETI(i)]*tau_tmp;
					D[i] = C[GETI(i)]*exp_wTx[i]*tau_tmp*tau_tmp;
				}
				break;
			}
			else
			{
				w_norm_new = 0;
				for(j=0; j<w_size; j++)
				{
					wpd[j] = (w[j]+wpd[j])*0.5;
					if(wpd[j] != 0)
						w_norm_new += fabs(wpd[j]);
				}
				if (regularize_bias == 0)
					w_norm_new -= fabs(wpd[w_size-1]);
				delta *= 0.5;
				negsum_xTd *= 0.5;
				for(int i=0; i<l; i++)
					xTd[i] *= 0.5;
			}
		}

		// Recompute some info due to too many line search steps
		if(num_linesearch >= max_num_linesearch)
		{
			for(int i=0; i<l; i++)
				exp_wTx[i] = 0;

			for(int i=0; i<w_size; i++)
			{
				if(w[i]==0) continue;
				x = prob_col->x[i];
				sparse_operator::axpy(w[i], x, exp_wTx);
			}

			for(int i=0; i<l; i++)
				exp_wTx[i] = exp(exp_wTx[i]);
		}

		if(iter == 1)
			inner_eps *= 0.25;

		newton_iter++;
		Gmax_old = Gmax_new;

		info("iter %3d  #CD cycles %d\n", newton_iter, iter);
	}

	info("=========================\n");
	info("optimization finished, #iter = %d\n", newton_iter);
	if(newton_iter >= max_newton_iter)
		info("WARNING: reaching max number of iterations\n");

	// calculate objective value

	double v = 0;
	int nnz = 0;
	for(j=0; j<w_size; j++)
		if(w[j] != 0)
		{
			v += fabs(w[j]);
			nnz++;
		}
	if (regularize_bias == 0)
		v -= fabs(w[w_size-1]);
	for(j=0; j<l; j++)
		if(y[j] == 1)
			v += C[GETI(j)]*log(1+1/exp_wTx[j]);
		else
			v += C[GETI(j)]*log(1+exp_wTx[j]);

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

	delete [] index;
	delete [] y;
	delete [] Hdiag;
	delete [] Grad;
	delete [] wpd;
	delete [] xjneg_sum;
	delete [] xTd;
	delete [] exp_wTx;
	delete [] exp_wTx_new;
	delete [] tau;
	delete [] D;

	return newton_iter;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x290, %rsp            # imm = 0x290
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movsd %xmm0, -0x20(%rbp)
movsd %xmm1, -0x28(%rbp)
movsd %xmm2, -0x30(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movl 0x48(%rax), %eax
movl %eax, -0x3c(%rbp)
movl $0x0, -0x48(%rbp)
movl $0x0, -0x4c(%rbp)
movl $0x64, -0x50(%rbp)
movl $0x3e8, -0x54(%rbp)     # imm = 0x3E8
movl $0x14, -0x58(%rbp)
movsd 0x4a42(%rip), %xmm0     # 0x12c80
movsd %xmm0, -0x68(%rbp)
movsd 0x3ddd(%rip), %xmm0     # 0x12028
movsd %xmm0, -0x70(%rbp)
movsd 0x3dd8(%rip), %xmm0     # 0x12030
movsd %xmm0, -0x78(%rbp)
movsd 0x3da3(%rip), %xmm0     # 0x12008
movsd %xmm0, -0xa8(%rbp)
movsd 0x3d9b(%rip), %xmm0     # 0x12010
movsd %xmm0, -0xb0(%rbp)
movsd 0x3d8b(%rip), %xmm0     # 0x12010
movsd %xmm0, -0xc8(%rbp)
movslq -0x38(%rbp), %rax
movl $0x4, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0xf8(%rbp)
movslq -0x34(%rbp), %rdi
callq 0x2030
movq %rax, -0x100(%rbp)
movslq -0x38(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x108(%rbp)
movslq -0x38(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x110(%rbp)
movslq -0x38(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x118(%rbp)
movslq -0x38(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x120(%rbp)
movslq -0x34(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x128(%rbp)
movslq -0x34(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x130(%rbp)
movslq -0x34(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x138(%rbp)
movslq -0x34(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x140(%rbp)
movslq -0x34(%rbp), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x2030
movq %rax, -0x148(%rbp)
movsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x170(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x168(%rbp)
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x160(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0xe4a4
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xe481
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xe50b
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xe4de
movq -0x100(%rbp), %rax
movslq -0x40(%rbp), %rcx
movb $0x1, (%rax,%rcx)
jmp 0xe4ed
movq -0x100(%rbp), %rax
movslq -0x40(%rbp), %rcx
movb $-0x1, (%rax,%rcx)
movq -0x130(%rbp), %rax
movslq -0x40(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xe4ab
xorps %xmm0, %xmm0
movsd %xmm0, -0x80(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0xe68e
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x4766(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
addsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x40(%rbp), %edx
movq -0xf8(%rbp), %rax
movslq -0x40(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x120(%rbp), %rax
movslq -0x40(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x150(%rbp)
movq -0x150(%rbp), %rax
cmpl $-0x1, (%rax)
je 0xe67e
movq -0x150(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x174(%rbp)
movq -0x150(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x180(%rbp)
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd -0x180(%rbp), %xmm2
movq -0x130(%rbp), %rax
movslq -0x174(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x100(%rbp), %rax
movslq -0x174(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $-0x1, %eax
jne 0xe667
movq -0x100(%rbp), %rax
movslq -0x174(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
movsd -0x180(%rbp), %xmm2
movq -0x120(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x150(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x150(%rbp)
jmp 0xe5a0
jmp 0xe680
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xe51a
cmpl $0x0, -0x3c(%rbp)
jne 0xe6bf
movq -0x18(%rbp), %rax
movl -0x38(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movaps 0x45f3(%rip), %xmm0     # 0x12ca0
pand %xmm0, %xmm1
movsd -0x80(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x80(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xe7b3
movq -0x130(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x2270
movq -0x130(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x130(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd 0x391e(%rip), %xmm1     # 0x12028
addsd (%rax,%rcx,8), %xmm1
movsd 0x3911(%rip), %xmm0     # 0x12028
divsd %xmm1, %xmm0
movsd %xmm0, -0x188(%rbp)
movq -0x100(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
mulsd -0x188(%rbp), %xmm0
movq -0x140(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x100(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
movq -0x130(%rbp), %rax
movslq -0x40(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
mulsd -0x188(%rbp), %xmm0
mulsd -0x188(%rbp), %xmm0
movq -0x148(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xe6c6
jmp 0xe7b5
movl -0x48(%rbp), %eax
cmpl -0x50(%rbp), %eax
jge 0xf957
xorps %xmm0, %xmm0
movsd %xmm0, -0xb8(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xc0(%rbp)
movl -0x38(%rbp), %eax
movl %eax, -0x5c(%rbp)
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
cmpl -0x5c(%rbp), %eax
jge 0xeb7b
movq -0xf8(%rbp), %rax
movslq -0x44(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x40(%rbp)
movsd -0x68(%rbp), %xmm0
movq -0x108(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x110(%rbp), %rax
movslq -0x40(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
xorps %xmm0, %xmm0
movsd %xmm0, -0x190(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x150(%rbp)
movq -0x150(%rbp), %rax
cmpl $-0x1, (%rax)
je 0xe903
movq -0x150(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x194(%rbp)
movq -0x150(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x150(%rbp), %rax
mulsd 0x8(%rax), %xmm0
movq -0x148(%rbp), %rax
movslq -0x194(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movq -0x108(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x150(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x140(%rbp), %rax
movslq -0x194(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x190(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x190(%rbp)
movq -0x150(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x150(%rbp)
jmp 0xe84b
movsd -0x190(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movq -0x120(%rbp), %rax
movslq -0x40(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movq -0x110(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
xorps %xmm0, %xmm0
movsd %xmm0, -0x1a0(%rbp)
movl -0x40(%rbp), %eax
movl -0x38(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0xe988
cmpl $0x0, -0x3c(%rbp)
jne 0xe988
movq -0x110(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x4329(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
movsd %xmm0, -0x1a0(%rbp)
jmp 0xeb38
movq -0x110(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd 0x368d(%rip), %xmm0     # 0x12028
addsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x1a8(%rbp)
movq -0x110(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd 0x3668(%rip), %xmm1     # 0x12028
subsd %xmm1, %xmm0
movsd %xmm0, -0x1b0(%rbp)
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xeae6
jp 0xeae6
xorps %xmm0, %xmm0
ucomisd -0x1a8(%rbp), %xmm0
jbe 0xea25
movsd -0x1a8(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x1a0(%rbp)
jmp 0xeae4
movsd -0x1b0(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xea4b
movsd -0x1b0(%rbp), %xmm0
movsd %xmm0, -0x1a0(%rbp)
jmp 0xeae2
movsd -0x1a8(%rbp), %xmm0
movsd -0xb0(%rbp), %xmm1
cvtsi2sdl -0x34(%rbp), %xmm2
divsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xeae0
movsd -0x1b0(%rbp), %xmm1
movsd -0xb0(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
cvtsi2sdl -0x34(%rbp), %xmm2
divsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0xeae0
movl -0x5c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x5c(%rbp)
movq -0xf8(%rbp), %rdi
movslq -0x44(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rdi
movq -0xf8(%rbp), %rsi
movslq -0x5c(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x70b0
movl -0x44(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0xeb6d
jmp 0xeae2
jmp 0xeae4
jmp 0xeb36
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xeb19
movsd -0x1a8(%rbp), %xmm0
movaps 0x4195(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
movsd %xmm0, -0x1a0(%rbp)
jmp 0xeb34
movsd -0x1b0(%rbp), %xmm0
movaps 0x4178(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
movsd %xmm0, -0x1a0(%rbp)
jmp 0xeb36
jmp 0xeb38
movsd -0xb8(%rbp), %xmm0
movsd -0x1a0(%rbp), %xmm1
callq 0x7070
movsd %xmm0, -0xb8(%rbp)
movsd -0x1a0(%rbp), %xmm0
addsd -0xc0(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0xe7e4
cmpl $0x0, -0x48(%rbp)
jne 0xeb91
movsd -0xc0(%rbp), %xmm0
movsd %xmm0, -0xa8(%rbp)
movsd -0xc0(%rbp), %xmm1
movsd -0x30(%rbp), %xmm0
mulsd -0xa8(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jb 0xebb1
jmp 0xf957
movl $0x0, -0x4c(%rbp)
movsd 0x3450(%rip), %xmm0     # 0x12010
movsd %xmm0, -0xc8(%rbp)
movl -0x5c(%rbp), %eax
movl %eax, -0x60(%rbp)
movl $0x0, -0x1b4(%rbp)
movl -0x1b4(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xec0a
movq -0x128(%rbp), %rax
movslq -0x1b4(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x1b4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b4(%rbp)
jmp 0xebd8
jmp 0xec0c
movl -0x4c(%rbp), %eax
cmpl -0x54(%rbp), %eax
jge 0xf1dc
xorps %xmm0, %xmm0
movsd %xmm0, -0xd0(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xd8(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x60(%rbp), %eax
jge 0xec99
movl -0x40(%rbp), %eax
movl %eax, -0x220(%rbp)
callq 0x2090
movl -0x60(%rbp), %ecx
subl -0x40(%rbp), %ecx
cltd
idivl %ecx
movl -0x220(%rbp), %eax
addl %edx, %eax
movl %eax, -0x1b8(%rbp)
movq -0xf8(%rbp), %rdi
movslq -0x1b8(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rdi
movq -0xf8(%rbp), %rsi
movslq -0x40(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x70b0
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xec35
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
cmpl -0x60(%rbp), %eax
jge 0xf17e
movq -0xf8(%rbp), %rax
movslq -0x44(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, -0x40(%rbp)
movq -0x108(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0xa0(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x150(%rbp)
movq -0x110(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm0
movsd -0x68(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x98(%rbp)
movq -0x150(%rbp), %rax
cmpl $-0x1, (%rax)
je 0xedaa
movq -0x150(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
movl %eax, -0x1bc(%rbp)
movq -0x150(%rbp), %rax
movsd 0x8(%rax), %xmm0
movq -0x148(%rbp), %rax
movslq -0x1bc(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movq -0x128(%rbp), %rax
movslq -0x1bc(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x98(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x98(%rbp)
movq -0x150(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x150(%rbp)
jmp 0xed2e
xorps %xmm0, %xmm0
movsd %xmm0, -0x1c8(%rbp)
movl -0x40(%rbp), %eax
movl -0x38(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jne 0xee17
cmpl $0x0, -0x3c(%rbp)
jne 0xee17
movsd -0x98(%rbp), %xmm0
movaps 0x3ec9(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
movsd %xmm0, -0x1c8(%rbp)
movsd -0x98(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
divsd -0xa0(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0xf09f
movsd 0x3209(%rip), %xmm0     # 0x12028
addsd -0x98(%rbp), %xmm0
movsd %xmm0, -0x1d0(%rbp)
movsd -0x98(%rbp), %xmm0
movsd 0x31e9(%rip), %xmm1     # 0x12028
subsd %xmm1, %xmm0
movsd %xmm0, -0x1d8(%rbp)
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xef68
jp 0xef68
xorps %xmm0, %xmm0
ucomisd -0x1d0(%rbp), %xmm0
jbe 0xeea7
movsd -0x1d0(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x1c8(%rbp)
jmp 0xef66
movsd -0x1d8(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xeecd
movsd -0x1d8(%rbp), %xmm0
movsd %xmm0, -0x1c8(%rbp)
jmp 0xef64
movsd -0x1d0(%rbp), %xmm0
movsd -0xc8(%rbp), %xmm1
cvtsi2sdl -0x34(%rbp), %xmm2
divsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xef62
movsd -0x1d8(%rbp), %xmm1
movsd -0xc8(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
cvtsi2sdl -0x34(%rbp), %xmm2
divsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0xef62
movl -0x60(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x60(%rbp)
movq -0xf8(%rbp), %rdi
movslq -0x44(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rdi
movq -0xf8(%rbp), %rsi
movslq -0x60(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x70b0
movl -0x44(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0xf170
jmp 0xef64
jmp 0xef66
jmp 0xefbb
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xef9e
movsd -0x1d0(%rbp), %xmm0
movaps 0x3d10(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
movsd %xmm0, -0x1c8(%rbp)
jmp 0xefb9
movsd -0x1d8(%rbp), %xmm0
movaps 0x3cf3(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
movsd %xmm0, -0x1c8(%rbp)
jmp 0xefbb
movsd -0x1d0(%rbp), %xmm1
movsd -0xa0(%rbp), %xmm0
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xf015
movsd -0x1d0(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
divsd -0xa0(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0xf09d
movsd -0x1d8(%rbp), %xmm0
movsd -0xa0(%rbp), %xmm1
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm1
ucomisd %xmm1, %xmm0
jbe 0xf06c
movsd -0x1d8(%rbp), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
divsd -0xa0(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0xf09b
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0xf09d
jmp 0xf09f
movsd -0xd0(%rbp), %xmm0
movsd -0x1c8(%rbp), %xmm1
callq 0x7070
movsd %xmm0, -0xd0(%rbp)
movsd -0x1c8(%rbp), %xmm0
addsd -0xd8(%rbp), %xmm0
movsd %xmm0, -0xd8(%rbp)
movsd -0x90(%rbp), %xmm1
movaps 0x3bbd(%rip), %xmm0     # 0x12ca0
pand %xmm0, %xmm1
movsd 0x3b91(%rip), %xmm0     # 0x12c80
ucomisd %xmm1, %xmm0
jbe 0xf0f7
jmp 0xf170
movsd -0x90(%rbp), %xmm0
movsd 0x3d39(%rip), %xmm1     # 0x12e40
callq 0x7070
movsd 0x3ce4(%rip), %xmm1     # 0x12df8
callq 0x5f30
movsd %xmm0, -0x90(%rbp)
movsd -0x90(%rbp), %xmm0
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x150(%rbp)
movsd -0x90(%rbp), %xmm0
movq -0x150(%rbp), %rdi
movq -0x128(%rbp), %rsi
callq 0x11590
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0xeca0
movl -0x4c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4c(%rbp)
movsd -0xd8(%rbp), %xmm1
movsd -0x70(%rbp), %xmm0
mulsd -0xa8(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jb 0xf1c7
movl -0x60(%rbp), %eax
cmpl -0x5c(%rbp), %eax
jne 0xf1ac
jmp 0xf1dc
movl -0x5c(%rbp), %eax
movl %eax, -0x60(%rbp)
movsd 0x2e56(%rip), %xmm0     # 0x12010
movsd %xmm0, -0xc8(%rbp)
jmp 0xec0c
movsd -0xd0(%rbp), %xmm0
movsd %xmm0, -0xc8(%rbp)
jmp 0xec0c
movl -0x4c(%rbp), %eax
cmpl -0x54(%rbp), %eax
jl 0xf1f2
leaq 0x42f7(%rip), %rdi      # 0x134e2
movb $0x0, %al
callq 0x7120
xorps %xmm0, %xmm0
movsd %xmm0, -0xe0(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0xf2b8
movq -0x110(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm2
movsd -0xe0(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xe0(%rbp)
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xf27d
jp 0xf27d
jmp 0xf2a8
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x3a0c(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
jmp 0xf2aa
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xf20f
cmpl $0x0, -0x3c(%rbp)
jne 0xf2f2
movq -0x118(%rbp), %rax
movl -0x38(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movaps 0x39c6(%rip), %xmm0     # 0x12ca0
pand %xmm0, %xmm1
movsd -0x88(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
subsd -0x80(%rbp), %xmm0
addsd -0xe0(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xe8(%rbp)
movl $0x0, -0x1dc(%rbp)
movl -0x1dc(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xf3a4
movq -0x100(%rbp), %rax
movslq -0x1dc(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $-0x1, %eax
jne 0xf391
movq -0x100(%rbp), %rax
movslq -0x1dc(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
movq -0x128(%rbp), %rax
movslq -0x1dc(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0xe8(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xe8(%rbp)
jmp 0xf393
movl -0x1dc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1dc(%rbp)
jmp 0xf324
movl $0x0, -0x1e0(%rbp)
movl -0x1e0(%rbp), %eax
cmpl -0x58(%rbp), %eax
jge 0xf7ef
movsd -0x88(%rbp), %xmm1
subsd -0x80(%rbp), %xmm1
addsd -0xe8(%rbp), %xmm1
movsd -0x78(%rbp), %xmm0
movsd -0xe0(%rbp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xf0(%rbp)
movl $0x0, -0x1e4(%rbp)
movl -0x1e4(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xf50b
movq -0x128(%rbp), %rax
movslq -0x1e4(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x2270
movsd %xmm0, -0x1f0(%rbp)
movq -0x130(%rbp), %rax
movslq -0x1e4(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
mulsd -0x1f0(%rbp), %xmm0
movq -0x138(%rbp), %rax
movslq -0x1e4(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x100(%rbp), %rax
movslq -0x1e4(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
movsd %xmm0, -0x228(%rbp)
movq -0x138(%rbp), %rax
movslq -0x1e4(%rbp), %rcx
movsd 0x2b7d(%rip), %xmm0     # 0x12028
addsd (%rax,%rcx,8), %xmm0
movsd -0x1f0(%rbp), %xmm1
movq -0x138(%rbp), %rax
movslq -0x1e4(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm1
divsd %xmm1, %xmm0
callq 0x20e0
movaps %xmm0, %xmm2
movsd -0x228(%rbp), %xmm0
movsd -0xf0(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xf0(%rbp)
movl -0x1e4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e4(%rbp)
jmp 0xf410
xorps %xmm0, %xmm0
ucomisd -0xf0(%rbp), %xmm0
jb 0xf678
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0xf560
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xf530
movl $0x0, -0x1f4(%rbp)
movl -0x1f4(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xf673
movq -0x138(%rbp), %rax
movslq -0x1f4(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x130(%rbp), %rax
movslq -0x1f4(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x130(%rbp), %rax
movslq -0x1f4(%rbp), %rcx
movsd 0x2a73(%rip), %xmm1     # 0x12028
addsd (%rax,%rcx,8), %xmm1
movsd 0x2a66(%rip), %xmm0     # 0x12028
divsd %xmm1, %xmm0
movsd %xmm0, -0x200(%rbp)
movq -0x100(%rbp), %rax
movslq -0x1f4(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
mulsd -0x200(%rbp), %xmm0
movq -0x140(%rbp), %rax
movslq -0x1f4(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x100(%rbp), %rax
movslq -0x1f4(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
movq -0x130(%rbp), %rax
movslq -0x1f4(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
mulsd -0x200(%rbp), %xmm0
mulsd -0x200(%rbp), %xmm0
movq -0x148(%rbp), %rax
movslq -0x1f4(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x1f4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1f4(%rbp)
jmp 0xf56a
jmp 0xf7ef
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0xf727
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x295d(%rip), %xmm1     # 0x12018
mulsd %xmm1, %xmm0
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xf6ec
jp 0xf6ec
jmp 0xf717
movq -0x118(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x359d(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
addsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
jmp 0xf719
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xf68a
cmpl $0x0, -0x3c(%rbp)
jne 0xf761
movq -0x118(%rbp), %rax
movl -0x38(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movaps 0x3557(%rip), %xmm0     # 0x12ca0
pand %xmm0, %xmm1
movsd -0x88(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x88(%rbp)
movsd 0x28af(%rip), %xmm0     # 0x12018
mulsd -0xe0(%rbp), %xmm0
movsd %xmm0, -0xe0(%rbp)
movsd 0x2897(%rip), %xmm0     # 0x12018
mulsd -0xe8(%rbp), %xmm0
movsd %xmm0, -0xe8(%rbp)
movl $0x0, -0x204(%rbp)
movl -0x204(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xf7d7
movq -0x128(%rbp), %rax
movslq -0x204(%rbp), %rcx
movsd 0x285c(%rip), %xmm0     # 0x12018
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x204(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x204(%rbp)
jmp 0xf79b
jmp 0xf7d9
jmp 0xf7db
movl -0x1e0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e0(%rbp)
jmp 0xf3ae
movl -0x1e0(%rbp), %eax
cmpl -0x58(%rbp), %eax
jl 0xf90d
movl $0x0, -0x208(%rbp)
movl -0x208(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xf83a
movq -0x130(%rbp), %rax
movslq -0x208(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x208(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x208(%rbp)
jmp 0xf808
movl $0x0, -0x20c(%rbp)
movl -0x20c(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0xf8ba
movq -0x18(%rbp), %rax
movslq -0x20c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xf86c
jp 0xf86c
jmp 0xf8a9
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x20c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x150(%rbp)
movq -0x18(%rbp), %rax
movslq -0x20c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x150(%rbp), %rdi
movq -0x130(%rbp), %rsi
callq 0x11590
movl -0x20c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20c(%rbp)
jmp 0xf844
movl $0x0, -0x210(%rbp)
movl -0x210(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xf90b
movq -0x130(%rbp), %rax
movslq -0x210(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
callq 0x2270
movq -0x130(%rbp), %rax
movslq -0x210(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x210(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x210(%rbp)
jmp 0xf8c4
jmp 0xf90d
cmpl $0x1, -0x4c(%rbp)
jne 0xf925
movsd 0x351d(%rip), %xmm0     # 0x12e38
mulsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movl -0x48(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x48(%rbp)
movsd -0xb8(%rbp), %xmm0
movsd %xmm0, -0xb0(%rbp)
movl -0x48(%rbp), %esi
movl -0x4c(%rbp), %edx
leaq 0x3bc9(%rip), %rdi      # 0x13514
movb $0x0, %al
callq 0x7120
jmp 0xe7b5
leaq 0x3bcf(%rip), %rdi      # 0x1352d
movb $0x0, %al
callq 0x7120
movl -0x48(%rbp), %esi
leaq 0x357e(%rip), %rdi      # 0x12eed
movb $0x0, %al
callq 0x7120
movl -0x48(%rbp), %eax
cmpl -0x50(%rbp), %eax
jl 0xf98c
leaq 0x358c(%rip), %rdi      # 0x12f11
movb $0x0, %al
callq 0x7120
xorps %xmm0, %xmm0
movsd %xmm0, -0x218(%rbp)
movl $0x0, -0x21c(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0xfa0e
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xf9ca
jp 0xf9ca
jmp 0xfa01
movq -0x18(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movaps 0x32c2(%rip), %xmm1     # 0x12ca0
pand %xmm1, %xmm0
addsd -0x218(%rbp), %xmm0
movsd %xmm0, -0x218(%rbp)
movl -0x21c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x21c(%rbp)
jmp 0xfa03
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xf9a8
cmpl $0x0, -0x3c(%rbp)
jne 0xfa45
movq -0x18(%rbp), %rax
movl -0x38(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm1
movaps 0x3273(%rip), %xmm0     # 0x12ca0
pand %xmm0, %xmm1
movsd -0x218(%rbp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, -0x218(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0xfb54
movq -0x100(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0xfadf
movq -0x100(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
movsd %xmm0, -0x230(%rbp)
movq -0x130(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd 0x2584(%rip), %xmm1     # 0x12028
divsd (%rax,%rcx,8), %xmm1
movsd 0x2577(%rip), %xmm0     # 0x12028
addsd %xmm1, %xmm0
callq 0x20e0
movaps %xmm0, %xmm2
movsd -0x230(%rbp), %xmm0
movsd -0x218(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x218(%rbp)
jmp 0xfb44
movq -0x100(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsbl (%rax,%rcx), %eax
addl $0x1, %eax
cltq
movsd -0x170(%rbp,%rax,8), %xmm0
movsd %xmm0, -0x238(%rbp)
movq -0x130(%rbp), %rax
movslq -0x40(%rbp), %rcx
movsd 0x2511(%rip), %xmm0     # 0x12028
addsd (%rax,%rcx,8), %xmm0
callq 0x20e0
movaps %xmm0, %xmm2
movsd -0x238(%rbp), %xmm0
movsd -0x218(%rbp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x218(%rbp)
jmp 0xfb46
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xfa4c
movsd -0x218(%rbp), %xmm0
leaq 0x33da(%rip), %rdi      # 0x12f3d
movb $0x1, %al
callq 0x7120
movl -0x21c(%rbp), %esi
movl -0x38(%rbp), %edx
leaq 0x394b(%rip), %rdi      # 0x134c5
movb $0x0, %al
callq 0x7120
movq -0xf8(%rbp), %rax
movq %rax, -0x240(%rbp)
cmpq $0x0, %rax
je 0xfba1
movq -0x240(%rbp), %rdi
callq 0x21b0
movq -0x100(%rbp), %rax
movq %rax, -0x248(%rbp)
cmpq $0x0, %rax
je 0xfbc1
movq -0x248(%rbp), %rdi
callq 0x21b0
movq -0x108(%rbp), %rax
movq %rax, -0x250(%rbp)
cmpq $0x0, %rax
je 0xfbe1
movq -0x250(%rbp), %rdi
callq 0x21b0
movq -0x110(%rbp), %rax
movq %rax, -0x258(%rbp)
cmpq $0x0, %rax
je 0xfc01
movq -0x258(%rbp), %rdi
callq 0x21b0
movq -0x118(%rbp), %rax
movq %rax, -0x260(%rbp)
cmpq $0x0, %rax
je 0xfc21
movq -0x260(%rbp), %rdi
callq 0x21b0
movq -0x120(%rbp), %rax
movq %rax, -0x268(%rbp)
cmpq $0x0, %rax
je 0xfc41
movq -0x268(%rbp), %rdi
callq 0x21b0
movq -0x128(%rbp), %rax
movq %rax, -0x270(%rbp)
cmpq $0x0, %rax
je 0xfc61
movq -0x270(%rbp), %rdi
callq 0x21b0
movq -0x130(%rbp), %rax
movq %rax, -0x278(%rbp)
cmpq $0x0, %rax
je 0xfc81
movq -0x278(%rbp), %rdi
callq 0x21b0
movq -0x138(%rbp), %rax
movq %rax, -0x280(%rbp)
cmpq $0x0, %rax
je 0xfca1
movq -0x280(%rbp), %rdi
callq 0x21b0
movq -0x140(%rbp), %rax
movq %rax, -0x288(%rbp)
cmpq $0x0, %rax
je 0xfcc1
movq -0x288(%rbp), %rdi
callq 0x21b0
movq -0x148(%rbp), %rax
movq %rax, -0x290(%rbp)
cmpq $0x0, %rax
je 0xfce1
movq -0x290(%rbp), %rdi
callq 0x21b0
movl -0x48(%rbp), %eax
addq $0x290, %rsp            # imm = 0x290
popq %rbp
retq
nopl (%rax)