// File: dcarrey[P]hgt-detection/./utils_tree.cpp
// Function: NJ(double**, double**, int)
void NJ(double **D1,double **DA,int n)
{
	double **D,*T1,*S,*LP,Som,Smin,Sij,L,Lii,Ljj,l1,l2,l3;
	int *T,i,j,ii,jj,n1;

	D=(double **) malloc((n+1)*sizeof(double*));
	T1=(double *) malloc((n+1)*sizeof(double));
	S=(double *) malloc((n+1)*sizeof(double));
	LP=(double *) malloc((n+1)*sizeof(double));
	T=(int *) malloc((n+1)*sizeof(int));

	for (i=0;i<=n;i++)
	{
		D[i]=(double*)malloc((n+1)*sizeof(double));

		if (D[i]==NULL)
		{
			{ printf("Data matrix is too large"); return;}
		}
	}


	L=0;
	Som=0;
	for (i=1;i<=n;i++)
	{
		S[i]=0; LP[i]=0;
		for (j=1;j<=n;j++)
		{
			D[i][j]=D1[i][j];
			S[i]=S[i]+D[i][j];
		}
		Som=Som+S[i]/2;
		T[i]=i;
		T1[i]=0;
	}

	/* Procedure principale */
	for (n1=n;n1>3;n1--)
	{

		/* Recherche des plus proches voisins */
		Smin=2*Som;
		for (i=1;i<=n1-1;i++)
		{
			for (j=i+1;j<=n1;j++)
			{
				Sij=2*Som-S[i]-S[j]+D[i][j]*(n1-2);
				if (Sij<Smin)
				{
					Smin=Sij;
					ii=i;
					jj=j;
				}
			}
		}
		/* Nouveau groupement */

		Lii=(D[ii][jj]+(S[ii]-S[jj])/(n1-2))/2-LP[ii];
		Ljj=(D[ii][jj]+(S[jj]-S[ii])/(n1-2))/2-LP[jj];

		/* Mise a jour de D */

		if (Lii<2*epsilon) Lii=2*epsilon;
		if (Ljj<2*epsilon) Ljj=2*epsilon;
		L=L+Lii+Ljj;
		LP[ii]=0.5*D[ii][jj];

		Som=Som-(S[ii]+S[jj])/2;
		for (i=1;i<=n1;i++)
		{
			if ((i!=ii)&&(i!=jj))
			{
				S[i]=S[i]-0.5*(D[i][ii]+D[i][jj]);
				D[i][ii]=(D[i][ii]+D[i][jj])/2;
				D[ii][i]=D[i][ii];
			}
		}
		D[ii][ii]=0;
		S[ii]=0.5*(S[ii]+S[jj])-D[ii][jj];

		if (jj!=n1)
		{
			for (i=1;i<=n1-1;i++)
			{
				D[i][jj]=D[i][n1];
				D[jj][i]=D[n1][i];
			}
			D[jj][jj]=0;
			S[jj]=S[n1];
			LP[jj]=LP[n1];
		}
		/* Mise a jour de DA */
		for (i=1;i<=n;i++)
		{
			if (T[i]==ii) T1[i]=T1[i]+Lii;
			if (T[i]==jj) T1[i]=T1[i]+Ljj;
		}


		for (j=1;j<=n;j++)
		{
			if (T[j]==jj)
			{
				for (i=1;i<=n;i++)
				{
					if (T[i]==ii)
					{
						DA[i][j]=T1[i]+T1[j];
						DA[j][i]=DA[i][j];
					}
				}
			}
		}

		for (j=1;j<=n;j++)
			if (T[j]==jj)  T[j]=ii;

		if (jj!=n1)
		{
			for (j=1;j<=n;j++)
				if (T[j]==n1) T[j]=jj;
		}
	}

	/*Il reste 3 sommets */

	l1=(D[1][2]+D[1][3]-D[2][3])/2-LP[1];
	l2=(D[1][2]+D[2][3]-D[1][3])/2-LP[2];
	l3=(D[1][3]+D[2][3]-D[1][2])/2-LP[3];
	if (l1<2*epsilon) l1=2*epsilon;
	if (l2<2*epsilon) l2=2*epsilon;
	if (l3<2*epsilon) l3=2*epsilon;
	L=L+l1+l2+l3;

	for (j=1;j<=n;j++)
	{
		for (i=1;i<=n;i++)
		{
			if ((T[j]==1)&&(T[i]==2))
			{
				DA[i][j]=T1[i]+T1[j]+l1+l2;
				DA[j][i]=DA[i][j];
			}
			if ((T[j]==1)&&(T[i]==3))
			{
				DA[i][j]=T1[i]+T1[j]+l1+l3;
				DA[j][i]=DA[i][j];
			}
			if ((T[j]==2)&&(T[i]==3))
			{
				DA[i][j]=T1[i]+T1[j]+l2+l3;
				DA[j][i]=DA[i][j];
			}
		}
		DA[j][j]=0;
	}

	free(T);
	free(T1);
	free(S);
	free(LP);
	for (i=0;i<=n;i++)
	{
		free(D[i]);
	}
	free(D);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rdi
shlq $0x3, %rdi
callq 0x1110
movq %rax, -0x20(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rdi
shlq $0x3, %rdi
callq 0x1110
movq %rax, -0x28(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rdi
shlq $0x3, %rdi
callq 0x1110
movq %rax, -0x30(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rdi
shlq $0x3, %rdi
callq 0x1110
movq %rax, -0x38(%rbp)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rdi
shlq $0x2, %rdi
callq 0x1110
movq %rax, -0x88(%rbp)
movl $0x0, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x1968
movl -0x14(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rdi
shlq $0x3, %rdi
callq 0x1110
movq %rax, %rdx
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
cmpq $0x0, (%rax,%rcx,8)
jne 0x1955
leaq 0x23a95(%rip), %rdi     # 0x253de
movb $0x0, %al
callq 0x1030
jmp 0x271a
jmp 0x1957
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x1901
xorps %xmm0, %xmm0
movsd %xmm0, -0x58(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x40(%rbp)
movl $0x1, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x1abd
movq -0x30(%rbp), %rax
movslq -0x8c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x38(%rbp), %rax
movslq -0x8c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl $0x1, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x1a55
movq -0x8(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x30(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movq -0x30(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x19c1
movsd -0x40(%rbp), %xmm0
movq -0x30(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd 0x23596(%rip), %xmm2    # 0x25008
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movl -0x8c(%rbp), %edx
movq -0x88(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x1982
movl -0x14(%rbp), %eax
movl %eax, -0x9c(%rbp)
cmpl $0x3, -0x9c(%rbp)
jle 0x2311
movsd 0x2352d(%rip), %xmm0    # 0x25008
mulsd -0x40(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movl $0x1, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jg 0x1bfe
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0x9c(%rbp), %eax
jg 0x1be8
movsd -0x40(%rbp), %xmm1
movq -0x30(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
addsd %xmm1, %xmm1
addsd %xmm0, %xmm1
movq -0x30(%rbp), %rax
movslq -0x90(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm1
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movl -0x9c(%rbp), %eax
subl $0x2, %eax
cvtsi2sd %eax, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x50(%rbp)
movsd -0x50(%rbp), %xmm1
movsd -0x48(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x1bd2
movsd -0x50(%rbp), %xmm0
movsd %xmm0, -0x48(%rbp)
movl -0x8c(%rbp), %eax
movl %eax, -0x94(%rbp)
movl -0x90(%rbp), %eax
movl %eax, -0x98(%rbp)
jmp 0x1bd4
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x1b15
jmp 0x1bea
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x1aef
movq -0x20(%rbp), %rax
movslq -0x94(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x98(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rbp), %rax
movslq -0x94(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x30(%rbp), %rax
movslq -0x98(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm1
movl -0x9c(%rbp), %eax
subl $0x2, %eax
cvtsi2sd %eax, %xmm2
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd 0x233b2(%rip), %xmm1    # 0x25008
divsd %xmm1, %xmm0
movq -0x38(%rbp), %rax
movslq -0x94(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x60(%rbp)
movq -0x20(%rbp), %rax
movslq -0x94(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x98(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rbp), %rax
movslq -0x98(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x30(%rbp), %rax
movslq -0x94(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm1
movl -0x9c(%rbp), %eax
subl $0x2, %eax
cvtsi2sd %eax, %xmm2
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd 0x23341(%rip), %xmm1    # 0x25008
divsd %xmm1, %xmm0
movq -0x38(%rbp), %rax
movslq -0x98(%rbp), %rcx
subsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd 0x23328(%rip), %xmm0    # 0x25010
ucomisd -0x60(%rbp), %xmm0
jbe 0x1cfc
movsd 0x23319(%rip), %xmm0    # 0x25010
movsd %xmm0, -0x60(%rbp)
movsd 0x2330c(%rip), %xmm0    # 0x25010
ucomisd -0x68(%rbp), %xmm0
jbe 0x1d18
movsd 0x232fd(%rip), %xmm0    # 0x25010
movsd %xmm0, -0x68(%rbp)
movsd -0x58(%rbp), %xmm0
addsd -0x60(%rbp), %xmm0
addsd -0x68(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movq -0x20(%rbp), %rax
movslq -0x94(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x98(%rbp), %rcx
movsd 0x232ce(%rip), %xmm0    # 0x25018
mulsd (%rax,%rcx,8), %xmm0
movq -0x38(%rbp), %rax
movslq -0x94(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x40(%rbp), %xmm0
movq -0x30(%rbp), %rax
movslq -0x94(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x30(%rbp), %rax
movslq -0x98(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm1
movsd 0x2327c(%rip), %xmm2    # 0x25008
divsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movl $0x1, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
cmpl -0x9c(%rbp), %eax
jg 0x1ee8
movl -0x8c(%rbp), %eax
cmpl -0x94(%rbp), %eax
je 0x1ed2
movl -0x8c(%rbp), %eax
cmpl -0x98(%rbp), %eax
je 0x1ed2
movq -0x30(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x94(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x98(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x231f9(%rip), %xmm2    # 0x25020
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x94(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x98(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movsd 0x2318b(%rip), %xmm1    # 0x25008
divsd %xmm1, %xmm0
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x94(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x94(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movslq -0x94(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
jmp 0x1ed4
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x1da3
movq -0x20(%rbp), %rax
movslq -0x94(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x94(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x30(%rbp), %rax
movslq -0x94(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rbp), %rax
movslq -0x98(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movslq -0x94(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x98(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
movsd 0x230b8(%rip), %xmm2    # 0x25018
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq -0x30(%rbp), %rax
movslq -0x94(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x98(%rbp), %eax
cmpl -0x9c(%rbp), %eax
je 0x2089
movl $0x1, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
movl -0x9c(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jg 0x202b
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x9c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x98(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x20(%rbp), %rax
movslq -0x9c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x20(%rbp), %rax
movslq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x1f94
movq -0x20(%rbp), %rax
movslq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x98(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x30(%rbp), %rax
movslq -0x9c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rbp), %rax
movslq -0x98(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x38(%rbp), %rax
movslq -0x9c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x38(%rbp), %rax
movslq -0x98(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl $0x1, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x2134
movq -0x88(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x94(%rbp), %eax
jne 0x20e0
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
addsd -0x60(%rbp), %xmm0
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x88(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x98(%rbp), %eax
jne 0x211e
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
addsd -0x68(%rbp), %xmm0
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
jmp 0x2120
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x2093
movl $0x1, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x223b
movq -0x88(%rbp), %rax
movslq -0x90(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x98(%rbp), %eax
jne 0x2225
movl $0x1, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x2223
movq -0x88(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x94(%rbp), %eax
jne 0x220d
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movslq -0x90(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x10(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movslq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
jmp 0x220f
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x2174
jmp 0x2225
jmp 0x2227
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x213e
movl $0x1, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x2293
movq -0x88(%rbp), %rax
movslq -0x90(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x98(%rbp), %eax
jne 0x2280
movl -0x94(%rbp), %edx
movq -0x88(%rbp), %rax
movslq -0x90(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x2282
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x2245
movl -0x98(%rbp), %eax
cmpl -0x9c(%rbp), %eax
je 0x22fb
movl $0x1, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x22f9
movq -0x88(%rbp), %rax
movslq -0x90(%rbp), %rcx
movl (%rax,%rcx,4), %eax
cmpl -0x9c(%rbp), %eax
jne 0x22e6
movl -0x98(%rbp), %edx
movq -0x88(%rbp), %rax
movslq -0x90(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x22e8
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x22ab
jmp 0x22fb
jmp 0x22fd
movl -0x9c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x9c(%rbp)
jmp 0x1ac6
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x10(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
addsd 0x18(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
subsd 0x18(%rax), %xmm0
movsd 0x22cc8(%rip), %xmm1    # 0x25008
divsd %xmm1, %xmm0
movq -0x38(%rbp), %rax
subsd 0x8(%rax), %xmm0
movsd %xmm0, -0x70(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x10(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
addsd 0x18(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
subsd 0x18(%rax), %xmm0
movsd 0x22c87(%rip), %xmm1    # 0x25008
divsd %xmm1, %xmm0
movq -0x38(%rbp), %rax
subsd 0x10(%rax), %xmm0
movsd %xmm0, -0x78(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
addsd 0x18(%rax), %xmm0
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
subsd 0x10(%rax), %xmm0
movsd 0x22c46(%rip), %xmm1    # 0x25008
divsd %xmm1, %xmm0
movq -0x38(%rbp), %rax
subsd 0x18(%rax), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd 0x22c34(%rip), %xmm0    # 0x25010
ucomisd -0x70(%rbp), %xmm0
jbe 0x23f0
movsd 0x22c25(%rip), %xmm0    # 0x25010
movsd %xmm0, -0x70(%rbp)
movsd 0x22c18(%rip), %xmm0    # 0x25010
ucomisd -0x78(%rbp), %xmm0
jbe 0x240c
movsd 0x22c09(%rip), %xmm0    # 0x25010
movsd %xmm0, -0x78(%rbp)
movsd 0x22bfc(%rip), %xmm0    # 0x25010
ucomisd -0x80(%rbp), %xmm0
jbe 0x2428
movsd 0x22bed(%rip), %xmm0    # 0x25010
movsd %xmm0, -0x80(%rbp)
movsd -0x58(%rbp), %xmm0
addsd -0x70(%rbp), %xmm0
addsd -0x78(%rbp), %xmm0
addsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x58(%rbp)
movl $0x1, -0x90(%rbp)
movl -0x90(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x26b0
movl $0x1, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x267e
movq -0x88(%rbp), %rax
movslq -0x90(%rbp), %rcx
cmpl $0x1, (%rax,%rcx,4)
jne 0x251a
movq -0x88(%rbp), %rax
movslq -0x8c(%rbp), %rcx
cmpl $0x2, (%rax,%rcx,4)
jne 0x251a
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movslq -0x90(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
addsd -0x70(%rbp), %xmm0
addsd -0x78(%rbp), %xmm0
movq -0x10(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x10(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movslq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x88(%rbp), %rax
movslq -0x90(%rbp), %rcx
cmpl $0x1, (%rax,%rcx,4)
jne 0x25c1
movq -0x88(%rbp), %rax
movslq -0x8c(%rbp), %rcx
cmpl $0x3, (%rax,%rcx,4)
jne 0x25c1
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movslq -0x90(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
addsd -0x70(%rbp), %xmm0
addsd -0x80(%rbp), %xmm0
movq -0x10(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x10(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movslq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x88(%rbp), %rax
movslq -0x90(%rbp), %rcx
cmpl $0x2, (%rax,%rcx,4)
jne 0x2668
movq -0x88(%rbp), %rax
movslq -0x8c(%rbp), %rcx
cmpl $0x3, (%rax,%rcx,4)
jne 0x2668
movq -0x28(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x28(%rbp), %rax
movslq -0x90(%rbp), %rcx
addsd (%rax,%rcx,8), %xmm0
addsd -0x78(%rbp), %xmm0
addsd -0x80(%rbp), %xmm0
movq -0x10(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x10(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x10(%rbp), %rax
movslq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x8c(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
jmp 0x266a
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x2464
movq -0x10(%rbp), %rax
movslq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x90(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movl -0x90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x90(%rbp)
jmp 0x244b
movq -0x88(%rbp), %rdi
callq 0x10e0
movq -0x28(%rbp), %rdi
callq 0x10e0
movq -0x30(%rbp), %rdi
callq 0x10e0
movq -0x38(%rbp), %rdi
callq 0x10e0
movl $0x0, -0x8c(%rbp)
movl -0x8c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jg 0x2711
movq -0x20(%rbp), %rax
movslq -0x8c(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x10e0
movl -0x8c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8c(%rbp)
jmp 0x26e1
movq -0x20(%rbp), %rdi
callq 0x10e0
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)