// File: /workspace/github_cpp_makefile_star2_O3/ashlall[P]StreamStats/Test/QDigest_test.cpp
// Function: test_qdigest()
void test_qdigest()
{
	int n = 100; 
	int k = 5000; //compress factor, make an arbitrarily large k for testing 
					// usually the choose of k ranges from 0.3*stream_length  to 0.5*stream_length  in order to get the best query results
	long quantA,quantB,quantC,quantD,quantE,quantF,quantG,quantH;
	bool condA,condB,condC,condD,condE,condF,condG,condH;
    double upper,lower;
    
    int random_fix1 = rand()% RAND_MAX;
    //cout << "random_fix1: " << random_fix1 <<endl;
    int random_fix2 = rand()% RAND_MAX;
    //cout << "random_fix2: " << random_fix2 <<endl;
    int random_fix3 = rand()% RAND_MAX;
    //cout << "random_fix2: " << random_fix3 <<endl;

    
	QDigest a(k);
	QDigest b(k);
	QDigest c(k);
	QDigest d(k);
    QDigest e(k);
	QDigest f(k);
	QDigest g(k);
	QDigest h(k);
	
	for (double j = 0; j <= n; j++) //inserting in decreasing order
    {	
  		a.insert(j); 
    }
	bool condA1;
	int LA = a.get_stream_size(); //test the function get_stream_size()
	condA1= (LA == n+1);
	assert(condA1 == true);
    
	for (int i = n; i >= 0; i--) //inserting in desceding order
    {
  		b.insert(i); 
    }
    bool condB1;
	int LB = b.get_stream_size(); //test the function get_stream_size()
	condB1= (LB == n+1);
	assert(condB1 == true);
	
	for (int m = 1; m <= 3; m++) //create 3 "random" sequences that holds their randomness every time runs the code
  	{
  		 if (m == 1)
  		 {
  		   	 //cout << "sequence 1: " << endl;
  			 for (int i = 0; i <= n; i++)
   			 {
   			 	srand(i);
  				long rand_num=rand()%n;
  				//cout << rand_num << " ";
  				c.insert(rand_num);  //inserting float number from 0 to n
  			 }
  			 //cout << ""<<endl;
  			 bool condC1;
			 int LC = c.get_stream_size(); //test the function get_stream_size()
			 condC1= (LC == n+1);
			 assert(condC1 == true);
  		}
  		
  		else if(m == 2)
  		{
  		 	  //cout << "sequence 2: " << endl;
  			  for (int i = 0; i <= n; i++)
   			 {
   			    srand(i^2);
  				long rand_num=rand()%n;
  				//cout << rand_num << " ";
  				d.insert(rand_num); //inserting float number from 0 to n
  			 }  
  			 //cout << ""<<endl;
  			 bool condD1;
			 int LD = d.get_stream_size(); //test the function get_stream_size()
			 condD1= (LD == n+1);
			 assert(condD1 == true);  			 
  		}	
  		
  		else 
  		{	
  		  	 //cout << "sequence 3: " << endl;
  			  for (int i = 0; i <= n; i++)
   			 {
   			 	srand(n-i);
  				long rand_num=rand()%n;
  				//cout << rand_num << " ";
  				e.insert(rand_num); //inserting float number from 0 to n
  			 }  
  			 //cout <<""<<endl;
  			 bool condE1;
			 int LE = e.get_stream_size(); //test the function get_stream_size()
			 condE1= (LE == n+1);
			 assert(condE1 == true);
  		}
  	}
  	
  	  f.insert(random_fix1); //test corner case where n = 1
  	  g.insert(random_fix2); 
  	  h.insert(random_fix3); 
  	  
  	  bool condF1,condG1,condH1;
	  long LF = f.get_stream_size(); //test the function get_stream_size()
	  long LG = g.get_stream_size();
 	  long LH = h.get_stream_size();
      condF1 = (LF == 1);
      condG1 = (LG == 1);
	  condH1 = (LH == 1);
	  assert(condF1 == true);
	  assert(condG1 == true);
	  assert(condH1 == true);
  	
  for (float i=1;i<=100;i++)
  {
  	  double interval=i/100; //getting each probabilty interval
  	  
  	  quantA=a.getQuantile(interval); //getting quantile for each probability interval
  	  quantB=b.getQuantile(interval);//getting quantile for each probability interval
  	  quantC=c.getQuantile(interval);//getting quantile for each probability interval
  	  quantD=d.getQuantile(interval);
  	  quantE=e.getQuantile(interval);
  	  quantF=f.getQuantile(interval);
  	  quantG=g.getQuantile(interval);
  	  quantH=h.getQuantile(interval);
  	  
  	  lower=(interval-0.04)*n;
  	  upper=(interval+0.04)*n;
  	  
  	  condA= ((lower<=quantA) && (upper>=quantA));
  	  //checking if quantile is within error range
  	  
  	  condB= ((lower<=quantB) && (upper >=quantB));
  	  //checking if quantile is within error range
  	  
  	  condC= ((lower<=quantC) && (upper>=quantC));
  	  condD= ((lower<=quantD) && (upper>=quantD));
  	  condE= ((lower<=quantE) && (upper>=quantE));
  	  //checking if quantile is within error range
  	  
  	  
  	  condF= (random_fix1 == quantF);
  	  condG= (random_fix2 == quantG);
  	  condH= (random_fix3 == quantH);
  	  //checking if the condition holds in the corner case where stream size = 1

  	  
  	  assert(condA==true);
  	  assert(condB==true);
  	  assert(condC==true);
  	  assert(condD==true);
  	  assert(condE==true);
  	  assert(condF==true);
  	  assert(condG==true);
  	  assert(condH==true);
  } 
	/*
	QDigest a(35000);
	for(int i=1; i<=100000; i++)
	{
		a.insert(i);
	}

	cout << "median:" << a.getQuantile(0.5) << endl;
	cout << "0.1: "<<a.getQuantile(0.1) << endl;
	cout << "0.3: "<<a.getQuantile(0.3) << endl;
	cout << "0.4: "<<a.getQuantile(0.4) << endl;
	cout << "0.8: "<<a.getQuantile(0.8) << endl;
	*/
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3d8, %rsp            # imm = 0x3D8
callq 0x2050
cltq
movq %rax, %rdx
shlq $0x1e, %rdx
addq %rax, %rdx
movq %rdx, %rcx
shrq $0x3f, %rcx
sarq $0x3d, %rdx
addl %ecx, %edx
addl %edx, %eax
shll $0x1f, %edx
addl %eax, %edx
movq %rdx, -0x40(%rbp)
callq 0x2050
cltq
movq %rax, %rdx
shlq $0x1e, %rdx
addq %rax, %rdx
movq %rdx, %rcx
shrq $0x3f, %rcx
sarq $0x3d, %rdx
addl %ecx, %edx
addl %edx, %eax
shll $0x1f, %edx
addl %eax, %edx
movq %rdx, -0x50(%rbp)
callq 0x2050
leaq 0x4c1d(%rip), %r12      # 0x7d70
leaq -0x150(%rbp), %r15
movq %r12, -0x8(%r15)
leaq -0x120(%rbp), %r9
movq %r9, -0x30(%r9)
movl $0x1, %ecx
movq %rcx, -0x28(%r9)
xorpd %xmm0, %xmm0
movupd %xmm0, -0x20(%r9)
movl $0x3f800000, %edx       # imm = 0x3F800000
movl %edx, -0x10(%r9)
movupd %xmm0, -0x8(%r9)
movabsq $0x40b3880000000000, %rsi # imm = 0x40B3880000000000
movq %rsi, 0x28(%r9)
movq %rcx, 0x10(%r9)
xorl %r14d, %r14d
movq %r14, 0x8(%r9)
movq %r14, 0x30(%r9)
movl $0x3b9aca00, %edi       # imm = 0x3B9ACA00
movq %rdi, 0x18(%r9)
movq $-0x3b9aca00, %r8       # imm = 0xC4653600
movq %r8, 0x20(%r9)
leaq -0xe0(%rbp), %r13
movq %r12, -0x8(%r13)
leaq -0xb0(%rbp), %r9
movq %r9, -0x30(%r9)
movq %rcx, -0x28(%r9)
movupd %xmm0, -0x20(%r9)
movl %edx, -0x10(%r9)
movupd %xmm0, -0x8(%r9)
movq %rsi, 0x28(%r9)
movq %rcx, 0x10(%r9)
movq %r14, 0x8(%r9)
movq %r14, 0x30(%r9)
movq %rdi, 0x18(%r9)
movq %r8, 0x20(%r9)
leaq -0x3f0(%rbp), %r9
movq %r12, -0x8(%r9)
leaq -0x3c0(%rbp), %r9
movq %r9, -0x30(%r9)
movq %rcx, -0x28(%r9)
movupd %xmm0, -0x20(%r9)
movl %edx, -0x10(%r9)
movupd %xmm0, -0x8(%r9)
movq %rsi, 0x28(%r9)
movq %rcx, 0x10(%r9)
movq %r14, 0x8(%r9)
movq %r14, 0x30(%r9)
movq %rdi, 0x18(%r9)
movq %r8, 0x20(%r9)
leaq -0x380(%rbp), %r9
movq %r12, -0x8(%r9)
leaq -0x350(%rbp), %r9
movq %r9, -0x30(%r9)
movq %rcx, -0x28(%r9)
movupd %xmm0, -0x20(%r9)
movl %edx, -0x10(%r9)
movupd %xmm0, -0x8(%r9)
movq %rsi, 0x28(%r9)
movq %rcx, 0x10(%r9)
movq %r14, 0x8(%r9)
movq %r14, 0x30(%r9)
movq %rdi, 0x18(%r9)
movq %r8, 0x20(%r9)
leaq -0x310(%rbp), %r9
movq %r12, -0x8(%r9)
leaq -0x2e0(%rbp), %r9
movq %r9, -0x30(%r9)
movq %rcx, -0x28(%r9)
movupd %xmm0, -0x20(%r9)
movl %edx, -0x10(%r9)
movupd %xmm0, -0x8(%r9)
movq %rsi, 0x28(%r9)
movq %rcx, 0x10(%r9)
movq %r14, 0x8(%r9)
movq %r14, 0x30(%r9)
movq %rdi, 0x18(%r9)
movq %r8, 0x20(%r9)
leaq -0x2a0(%rbp), %r9
movq %r12, -0x8(%r9)
leaq -0x270(%rbp), %r9
movq %r9, -0x30(%r9)
movq %rcx, -0x28(%r9)
movupd %xmm0, -0x20(%r9)
movl %edx, -0x10(%r9)
movupd %xmm0, -0x8(%r9)
movq %rsi, 0x28(%r9)
movq %rcx, 0x10(%r9)
movq %r14, 0x8(%r9)
movq %r14, 0x30(%r9)
movq %rdi, 0x18(%r9)
movq %r8, 0x20(%r9)
leaq -0x230(%rbp), %r9
movq %r12, -0x8(%r9)
leaq -0x200(%rbp), %r9
movq %r9, -0x30(%r9)
movq %rcx, -0x28(%r9)
movupd %xmm0, -0x20(%r9)
movl %edx, -0x10(%r9)
movupd %xmm0, -0x8(%r9)
movq %rsi, 0x28(%r9)
movq %rcx, 0x10(%r9)
movq %r14, 0x8(%r9)
movq %r14, 0x30(%r9)
movq %rdi, 0x18(%r9)
movq %r8, 0x20(%r9)
leaq -0x1c0(%rbp), %r9
movq %r12, -0x8(%r9)
leaq -0x190(%rbp), %r9
movq %r9, -0x30(%r9)
movq %rcx, -0x28(%r9)
movupd %xmm0, -0x20(%r9)
movl %edx, -0x10(%r9)
movupd %xmm0, -0x8(%r9)
movq %rsi, 0x28(%r9)
movq %rcx, 0x10(%r9)
movq %r14, 0x8(%r9)
movq %r14, 0x30(%r9)
movq %rdi, 0x18(%r9)
cltq
movq %r8, 0x20(%r9)
movq %rax, %rdx
shlq $0x1e, %rdx
addq %rax, %rdx
movq %rdx, %rcx
shrq $0x3f, %rcx
sarq $0x3d, %rdx
addl %ecx, %edx
addl %edx, %eax
shll $0x1f, %edx
addl %eax, %edx
movq %rdx, -0x48(%rbp)
leaq -0x158(%rbp), %rbx
xorps %xmm0, %xmm0
cvtsi2sd %r14d, %xmm0
movq %rbx, %rdi
callq 0x24ee
incl %r14d
cmpl $0x65, %r14d
jne 0x33b5
cmpl $0x65, -0xf0(%rbp)
jne 0x399c
movl $0x64, %r14d
leaq -0xe8(%rbp), %rbx
xorps %xmm0, %xmm0
cvtsi2sd %r14d, %xmm0
movq %rbx, %rdi
callq 0x24ee
addl $-0x1, %r14d
jb 0x33e8
cmpl $0x65, -0x80(%rbp)
jne 0x39bb
movl $0x1, %r13d
leaq -0x3f8(%rbp), %rbx
leaq -0x388(%rbp), %r14
leaq -0x318(%rbp), %r15
cmpl $0x1, %r13d
je 0x348b
cmpl $0x2, %r13d
jne 0x34dc
xorl %r12d, %r12d
movl %r12d, %edi
xorl $0x2, %edi
callq 0x2110
callq 0x2050
cltq
imulq $0x51eb851f, %rax, %rcx # imm = 0x51EB851F
movq %rcx, %rdx
shrq $0x3f, %rdx
sarq $0x25, %rcx
addl %edx, %ecx
imull $0x64, %ecx, %ecx
subl %ecx, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movq %r14, %rdi
callq 0x24ee
incl %r12d
cmpl $0x65, %r12d
jne 0x3436
cmpl $0x65, -0x320(%rbp)
je 0x352c
jmp 0x395e
xorl %r12d, %r12d
movl %r12d, %edi
callq 0x2110
callq 0x2050
cltq
imulq $0x51eb851f, %rax, %rcx # imm = 0x51EB851F
movq %rcx, %rdx
shrq $0x3f, %rdx
sarq $0x25, %rcx
addl %edx, %ecx
imull $0x64, %ecx, %ecx
subl %ecx, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movq %rbx, %rdi
callq 0x24ee
incl %r12d
cmpl $0x65, %r12d
jne 0x348e
cmpl $0x65, -0x390(%rbp)
je 0x352c
jmp 0x397d
movl $0x64, %r12d
movl %r12d, %edi
callq 0x2110
callq 0x2050
cltq
imulq $0x51eb851f, %rax, %rcx # imm = 0x51EB851F
movq %rcx, %rdx
shrq $0x3f, %rdx
sarq $0x25, %rcx
addl %edx, %ecx
imull $0x64, %ecx, %ecx
subl %ecx, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movq %r15, %rdi
callq 0x24ee
addl $-0x1, %r12d
jb 0x34e2
cmpl $0x65, -0x2b0(%rbp)
jne 0x393f
incl %r13d
cmpl $0x4, %r13d
jne 0x3423
movq -0x40(%rbp), %rbx
xorps %xmm0, %xmm0
cvtsi2sd %ebx, %xmm0
leaq -0x2a8(%rbp), %rdi
callq 0x24ee
movq -0x50(%rbp), %r15
movq -0x48(%rbp), %r12
xorps %xmm0, %xmm0
cvtsi2sd %r15d, %xmm0
leaq -0x238(%rbp), %rdi
callq 0x24ee
xorps %xmm0, %xmm0
cvtsi2sd %r12d, %xmm0
leaq -0x1c8(%rbp), %rdi
callq 0x24ee
cmpq $0x1, -0x240(%rbp)
jne 0x39da
cmpq $0x1, -0x1d0(%rbp)
jne 0x39f9
cmpq $0x1, -0x160(%rbp)
jne 0x3a18
movslq %ebx, %r14
movslq %r15d, %r15
movslq %r12d, %r12
movl $0x1, %r13d
leaq -0x1c8(%rbp), %rbx
xorps %xmm0, %xmm0
cvtsi2ss %r13d, %xmm0
divss 0x1a80(%rip), %xmm0     # 0x5050
cvtss2sd %xmm0, %xmm0
leaq -0x158(%rbp), %rdi
movaps %xmm0, -0x40(%rbp)
callq 0x26cc
movsd %xmm0, -0x50(%rbp)
leaq -0xe8(%rbp), %rdi
movaps -0x40(%rbp), %xmm0
callq 0x26cc
movsd %xmm0, -0x48(%rbp)
leaq -0x3f8(%rbp), %rdi
movaps -0x40(%rbp), %xmm0
callq 0x26cc
movsd %xmm0, -0x78(%rbp)
leaq -0x388(%rbp), %rdi
movaps -0x40(%rbp), %xmm0
callq 0x26cc
movsd %xmm0, -0x70(%rbp)
leaq -0x318(%rbp), %rdi
movaps -0x40(%rbp), %xmm0
callq 0x26cc
movsd %xmm0, -0x68(%rbp)
leaq -0x2a8(%rbp), %rdi
movaps -0x40(%rbp), %xmm0
callq 0x26cc
movsd %xmm0, -0x60(%rbp)
leaq -0x238(%rbp), %rdi
movaps -0x40(%rbp), %xmm0
callq 0x26cc
movsd %xmm0, -0x58(%rbp)
movq %rbx, %rdi
movaps -0x40(%rbp), %xmm0
callq 0x26cc
cvttsd2si -0x50(%rbp), %rax
movapd -0x40(%rbp), %xmm4
movapd %xmm4, %xmm1
addsd 0x19ae(%rip), %xmm1     # 0x5038
movsd 0x19ae(%rip), %xmm3     # 0x5040
mulsd %xmm3, %xmm1
addsd 0x19aa(%rip), %xmm4     # 0x5048
cvtsi2sd %rax, %xmm2
ucomisd %xmm1, %xmm2
jb 0x3920
mulsd %xmm3, %xmm4
ucomisd %xmm2, %xmm4
jb 0x3920
cvttsd2si -0x48(%rbp), %rax
xorps %xmm2, %xmm2
cvtsi2sd %rax, %xmm2
ucomisd %xmm1, %xmm2
jb 0x3901
ucomisd %xmm2, %xmm4
jb 0x3901
cvttsd2si -0x78(%rbp), %rax
xorps %xmm2, %xmm2
cvtsi2sd %rax, %xmm2
movapd %xmm1, %xmm3
cmplepd %xmm2, %xmm3
cmplepd %xmm4, %xmm2
andpd %xmm3, %xmm2
movd %xmm2, %eax
testb $0x1, %al
je 0x38e2
cvttsd2si -0x70(%rbp), %rax
xorps %xmm2, %xmm2
cvtsi2sd %rax, %xmm2
movapd %xmm1, %xmm3
cmplepd %xmm2, %xmm3
cmplepd %xmm4, %xmm2
andpd %xmm3, %xmm2
movd %xmm2, %eax
testb $0x1, %al
je 0x38c3
cvttsd2si -0x68(%rbp), %rax
xorps %xmm2, %xmm2
cvtsi2sd %rax, %xmm2
cmplepd %xmm2, %xmm1
cmplepd %xmm4, %xmm2
andpd %xmm1, %xmm2
movd %xmm2, %eax
testb $0x1, %al
je 0x38a4
cvttsd2si -0x60(%rbp), %rax
cmpq %rax, %r14
jne 0x3885
cvttsd2si -0x58(%rbp), %rax
cmpq %rax, %r15
jne 0x3866
cvttsd2si %xmm0, %rax
cmpq %rax, %r12
jne 0x3847
incl %r13d
cmpl $0x65, %r13d
jne 0x35c0
leaq 0x45d3(%rip), %rbx      # 0x7d70
movq %rbx, -0x1c8(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x3c2a
movq %rbx, -0x238(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x3c2a
movq %rbx, -0x2a8(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x3c2a
movq %rbx, -0x318(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x3c2a
movq %rbx, -0x388(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x3c2a
movq %rbx, -0x3f8(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x3c2a
movq %rbx, -0xe8(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x3c2a
movq %rbx, -0x158(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x3c2a
addq $0x3d8, %rsp            # imm = 0x3D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1920(%rip), %rdi      # 0x516e
leaq 0x1837(%rip), %rsi      # 0x508c
leaq 0x1841(%rip), %rcx      # 0x509d
movl $0xa4, %edx
callq 0x20d0
leaq 0x18f5(%rip), %rdi      # 0x5162
leaq 0x1818(%rip), %rsi      # 0x508c
leaq 0x1822(%rip), %rcx      # 0x509d
movl $0xa3, %edx
callq 0x20d0
leaq 0x18ca(%rip), %rdi      # 0x5156
leaq 0x17f9(%rip), %rsi      # 0x508c
leaq 0x1803(%rip), %rcx      # 0x509d
movl $0xa2, %edx
callq 0x20d0
leaq 0x189f(%rip), %rdi      # 0x514a
leaq 0x17da(%rip), %rsi      # 0x508c
leaq 0x17e4(%rip), %rcx      # 0x509d
movl $0xa1, %edx
callq 0x20d0
leaq 0x1874(%rip), %rdi      # 0x513e
leaq 0x17bb(%rip), %rsi      # 0x508c
leaq 0x17c5(%rip), %rcx      # 0x509d
movl $0xa0, %edx
callq 0x20d0
leaq 0x1849(%rip), %rdi      # 0x5132
leaq 0x179c(%rip), %rsi      # 0x508c
leaq 0x17a6(%rip), %rcx      # 0x509d
movl $0x9f, %edx
callq 0x20d0
leaq 0x181e(%rip), %rdi      # 0x5126
leaq 0x177d(%rip), %rsi      # 0x508c
leaq 0x1787(%rip), %rcx      # 0x509d
movl $0x9e, %edx
callq 0x20d0
leaq 0x17f3(%rip), %rdi      # 0x511a
leaq 0x175e(%rip), %rsi      # 0x508c
leaq 0x1768(%rip), %rcx      # 0x509d
movl $0x9d, %edx
callq 0x20d0
leaq 0x1798(%rip), %rdi      # 0x50de
leaq 0x173f(%rip), %rsi      # 0x508c
leaq 0x1749(%rip), %rcx      # 0x509d
movl $0x68, %edx
callq 0x20d0
leaq 0x176a(%rip), %rdi      # 0x50cf
leaq 0x1720(%rip), %rsi      # 0x508c
leaq 0x172a(%rip), %rcx      # 0x509d
movl $0x57, %edx
callq 0x20d0
leaq 0x173c(%rip), %rdi      # 0x50c0
leaq 0x1701(%rip), %rsi      # 0x508c
leaq 0x170b(%rip), %rcx      # 0x509d
movl $0x46, %edx
callq 0x20d0
leaq 0x16da(%rip), %rdi      # 0x507d
leaq 0x16e2(%rip), %rsi      # 0x508c
leaq 0x16ec(%rip), %rcx      # 0x509d
movl $0x2b, %edx
callq 0x20d0
leaq 0x16ef(%rip), %rdi      # 0x50b1
leaq 0x16c3(%rip), %rsi      # 0x508c
leaq 0x16cd(%rip), %rcx      # 0x509d
movl $0x34, %edx
callq 0x20d0
leaq 0x170c(%rip), %rdi      # 0x50ed
leaq 0x16a4(%rip), %rsi      # 0x508c
leaq 0x16ae(%rip), %rcx      # 0x509d
movl $0x77, %edx
callq 0x20d0
leaq 0x16fc(%rip), %rdi      # 0x50fc
leaq 0x1685(%rip), %rsi      # 0x508c
leaq 0x168f(%rip), %rcx      # 0x509d
movl $0x78, %edx
callq 0x20d0
leaq 0x16ec(%rip), %rdi      # 0x510b
leaq 0x1666(%rip), %rsi      # 0x508c
leaq 0x1670(%rip), %rcx      # 0x509d
movl $0x79, %edx
callq 0x20d0
jmp 0x3a46
jmp 0x3a3b
movq %rax, %rbx
jmp 0x3a5e
jmp 0x3a46
jmp 0x3a46
jmp 0x3a46
movq %rax, %rbx
leaq -0x150(%rbp), %r15
leaq 0x4319(%rip), %r12      # 0x7d70
leaq -0xe0(%rbp), %r13
movq %r12, -0x1c8(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x3c2a
movq %r12, -0x238(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x3c2a
movq %r12, -0x2a8(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x3c2a
movq %r12, -0x318(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x3c2a
movq %r12, -0x388(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x3c2a
movq %r12, -0x3f8(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x3c2a
movq %r12, -0xe8(%rbp)
movq %r13, %rdi
callq 0x3c2a
movq %r12, -0x158(%rbp)
movq %r15, %rdi
callq 0x3c2a
movq %rbx, %rdi
callq 0x21e0