// File: bauerj4[P]Riemann1D/src/Fluxes.cpp
// Function: HLLC_FLUX(mesh_t&, std::vector<std::vector<double, std::allocator<double>>, std::allocator<std::vector<double, std::allocator<double>>>>&, double&)
int HLLC_FLUX(mesh_t &mesh, vector<vector<double> > &fluxes, double &smax)
{
  // From Toro 2009
  double gamma = 1.4; // Given.
  
  if (fluxes.size() != (mesh.NCells - 1)) // Should confirm that this is the correct number
    {
      printf("INVALID FLUX VECTOR SIZE!\n");
      return 1;
    }
  // Compute quantities in starred region
  
  double u_L, u_R, p_star, P_bar, P_L, P_R, rho_bar, rho_L, rho_R, tempSmax,
    a_bar, a_L, a_R, q_L, q_R, S_L, S_R, S_star, E_L, E_R, prefactor_L, prefactor_R;

  vector<double> Conserved_R(3,0);
  vector<double> Conserved_L(3,0);
  vector<double> Conserved_R_Star(3,0);
  vector<double> Conserved_L_Star(3,0);
  vector<double> Flux_R(3, 0.0);
  vector<double> Flux_L(3, 0.0);
  vector<double> Flux_R_Star(3,0.0);
  vector<double> Flux_L_Star(3,0.0);
  
  tempSmax = 0.;
  //print("COMPUTING FUNDAMENTALS...\n")
  for (int i = 1; i < (mesh.NCells ); i++)
    {
      //printf("ITERATION %d\n",i);
      P_L = mesh.FirstPressureElement[i-1];
      P_R = mesh.FirstPressureElement[i];

      if (P_L < 0)
	{
	  //P_L = 0;
	  printf("WARNING: P_L < 0\n");
	}

      if (P_R < 0)
	{
          //P_R =0;
          printf("WARNING: P_R = %10.10f  < 0\n", P_R);
	}

      P_bar = 0.5 * (P_L + P_R);

      rho_L = mesh.FirstDensityElement[i-1];
      rho_R = mesh.FirstDensityElement[i];
      rho_bar = 0.5 * (rho_L + rho_R);

      // The a's represent the sound speeds.
      // Compute as consequence of EoS
      a_L = pow((gamma * P_L / rho_L),0.5);
      a_R = pow((gamma * P_R / rho_R),0.5);
      a_bar = 0.5 * (a_L + a_R);
      //printf("SOUND SPEEDS: %10.10f, %10.10f, %10.10f\n", a_L,a_R,a_bar);

      u_L = mesh.FirstVelocityElement[i-1];
      u_R = mesh.FirstVelocityElement[i];

      p_star = P_bar - 0.5 * (u_R - u_L) * a_bar * rho_bar;
      printf("P STAR IS %10.10f\n", p_star);
      if (p_star < 0)
	{
	  //printf("P star is 0.\n");
	  p_star = 0.;
	}

      if (p_star <= P_L)
	{
	  q_L = 1.;
	}
      else
	{
	  double num = 1 + (((gamma + 1)/(2 * gamma)) * ((p_star/P_L) - 1));
	  q_L = pow(num,0.5);
	}

      if (p_star <= P_R)
	{
          q_R =1.;
	}
      else
	{
          double num = 1. + ((gamma + 1.)/(2. * gamma)) * ((p_star/P_R) - 1.);
          q_R =pow(num,0.5);
	}

      S_L = u_L - a_L * q_L;
      S_R = u_R + a_R * q_R;

      // MAKE SURE THIS IS RIGHT
      if (fabs(u_L) + a_L > tempSmax)
	{
	  tempSmax = fabs(u_L) + a_L;
	  //tempSmax = fabs(S_L);
	}
      if (fabs(u_R) + a_R  > tempSmax)
	{
          tempSmax = fabs(u_R) + a_R;
	  //tempSmax = fabs(S_R);
        }



      double numerator = P_R - P_L + (rho_L * u_L * (S_L - u_L)) - (rho_R * u_R * (S_R - u_R));
      double denominator = (rho_L * (S_L - u_L)) - (rho_R * (S_R - u_R));

      if (denominator == 0)
	{
	  printf("DENOMINATOR => DIVISION BY 0\n");
	  //return 1;
	}
      S_star = numerator / denominator;
      //printf("THE MAX SIGNAL SPEEDS ARE: %10.10f, %10.10f, %10.10f\n", S_L,S_R, S_star);

      printf("S_star is %10.10f\n",S_star);

      //printf("The signal speed is %10.10f\n", S_R);

      // Construct conserved L/R and L/R star vectors from previously defined functions

      vector<double> primative_L(3);
      double primative_L_arr[3] = {rho_L, u_L, P_L};
      primative_L.assign(&primative_L_arr[0], &primative_L_arr[0] + 3);
      //printf("%10.10f, %10.10f,%10.10f\n", primative_L[0], primative_L[1], primative_L[2]);
      //printf("The size of the primative variables is %d\n",(int)primative_L.size());
      vector<double> primative_R(3);
      double primative_R_arr[3] = {rho_R, u_R, P_R};
      primative_R.assign(&primative_R_arr[0], &primative_R_arr[0] + 3);


      Conserved_R = primativeTo1DConservative(primative_R);
      //printf("%10.10f, %10.10f,%10.10f\n", Conserved_R[0], Conserved_R[1], Conserved_R[2]); 

      Conserved_L = primativeTo1DConservative(primative_L);

      prefactor_L = rho_L * (S_L - u_L) / (S_L - S_star);
      prefactor_R = rho_R * (S_R - u_R) / (S_R - S_star);

      E_L = rho_L *(P_L / (rho_L*(gamma - 1)) + 0.5 * pow(u_L,2.0));
      E_R = rho_R *(P_R / (rho_R*(gamma - 1)) + 0.5 * pow(u_R,2.0));
      

      Conserved_L_Star[0] = prefactor_L;
      Conserved_L_Star[1] = prefactor_L * S_star;
      Conserved_L_Star[2] = prefactor_L * ((E_L / rho_L) + (S_star - u_L) * (S_star + (P_L)/(rho_L*(S_L - u_L))));

      Conserved_R_Star[0] = prefactor_R;
      Conserved_R_Star[1] = prefactor_R * S_star;
      Conserved_R_Star[2] = prefactor_R * ((E_R / rho_R) + (S_star - u_R) * (S_star + (P_R)/(rho_R*(S_R - u_R))));

      Flux_R[0] = rho_R * u_R;
      Flux_R[1] = rho_R * u_R * u_R + P_R;
      Flux_R[2] = u_R * (E_R + P_R);

      Flux_L[0] = rho_L * u_L;
      Flux_L[1] = rho_L * u_L * u_L + P_L;
      Flux_L[2] = u_L * (E_L + P_L);

      Flux_R_Star[0] = Flux_R[0] + S_R * (Conserved_R_Star[0] - Conserved_R[0]);
      Flux_R_Star[1] = Flux_R[1] + S_R * (Conserved_R_Star[1] - Conserved_R[1]);
      Flux_R_Star[2] = Flux_R[2] + S_R * (Conserved_R_Star[2] - Conserved_R[2]);

      Flux_L_Star[0] = Flux_L[0] + S_L * (Conserved_L_Star[0] - Conserved_L[0]);
      Flux_L_Star[1] = Flux_L[1] + S_L * (Conserved_L_Star[1] - Conserved_L[1]);
      Flux_L_Star[2] = Flux_L[2] + S_L * (Conserved_L_Star[2] - Conserved_L[2]);

      // Construct the HLLC flux
      //printf("Constructing fluxes...\n");
      
      //int debugCount = 0;
      if (S_L >= 0)
{
  fluxes[i-1] = Flux_L;
  printf("Condition 1 tripped.\n");
  //debugCount++;
}

      else if (S_star >= 0 && S_L <= 0)
{
  fluxes[i-1] = Flux_L_Star;
          printf("Condition 2 tripped.\n");
  //debugCount++;
}

      else if (S_star <= 0 && S_R >= 0)
{
  fluxes[i-1] = Flux_R_Star;
          printf("Condition 3 tripped.\n");
  //debugCount++;
}

      else if (S_R <= 0)
{
  fluxes[i-1] = Flux_R;
          printf("Condition 4 tripped.\n");
  //debugCount++;
}
      //printf("The debug count is %d\n", debugCount);
      printf("flux = [%10.10f, %10.10f, %10.10f]\n", fluxes[i-1][0], fluxes[i-1][1], fluxes[i-1][2]);
  
    }

  //  printf("flux = [%10.10f, %10.10f, %10.10f]", fluxes[i][0], fluxes[i][1], fluxes[i][2]);
  smax = tempSmax;
  return 0;
}

// Assembly:
subq $0x4d8, %rsp            # imm = 0x4D8
movq %rdi, 0x4c8(%rsp)
movq %rsi, 0x4c0(%rsp)
movq %rdx, 0x4b8(%rsp)
movsd 0x12b19(%rip), %xmm0    # 0x182d0
movsd %xmm0, 0x4b0(%rsp)
movq 0x4c0(%rsp), %rdi
callq 0x129a0
movq 0x4c8(%rsp), %rcx
movl (%rcx), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
cmpq %rcx, %rax
je 0x5800
leaq 0x12b42(%rip), %rdi     # 0x1832b
movb $0x0, %al
callq 0x2040
movl $0x1, 0x4d4(%rsp)
jmp 0x7154
movq $0x0, 0x3e0(%rsp)
leaq 0x3df(%rsp), %rdi
movq %rdi, 0x1a8(%rsp)
callq 0x128a0
movq 0x1a8(%rsp), %rcx
leaq 0x3e8(%rsp), %rdi
movl $0x3, %esi
leaq 0x3e0(%rsp), %rdx
callq 0x128b0
jmp 0x5845
leaq 0x3df(%rsp), %rdi
callq 0x12930
movq $0x0, 0x3a8(%rsp)
leaq 0x3a7(%rsp), %rdi
movq %rdi, 0x1a0(%rsp)
callq 0x128a0
movq 0x1a0(%rsp), %rcx
leaq 0x3b0(%rsp), %rdi
movl $0x3, %esi
leaq 0x3a8(%rsp), %rdx
callq 0x128b0
jmp 0x5897
leaq 0x3a7(%rsp), %rdi
callq 0x12930
movq $0x0, 0x380(%rsp)
leaq 0x37f(%rsp), %rdi
movq %rdi, 0x198(%rsp)
callq 0x128a0
movq 0x198(%rsp), %rcx
leaq 0x388(%rsp), %rdi
movl $0x3, %esi
leaq 0x380(%rsp), %rdx
callq 0x128b0
jmp 0x58e9
leaq 0x37f(%rsp), %rdi
callq 0x12930
movq $0x0, 0x358(%rsp)
leaq 0x357(%rsp), %rdi
movq %rdi, 0x190(%rsp)
callq 0x128a0
movq 0x190(%rsp), %rcx
leaq 0x360(%rsp), %rdi
movl $0x3, %esi
leaq 0x358(%rsp), %rdx
callq 0x128b0
jmp 0x593b
leaq 0x357(%rsp), %rdi
callq 0x12930
movq $0x0, 0x330(%rsp)
leaq 0x32f(%rsp), %rdi
movq %rdi, 0x188(%rsp)
callq 0x128a0
movq 0x188(%rsp), %rcx
leaq 0x338(%rsp), %rdi
movl $0x3, %esi
leaq 0x330(%rsp), %rdx
callq 0x128b0
jmp 0x598d
leaq 0x32f(%rsp), %rdi
callq 0x12930
movq $0x0, 0x308(%rsp)
leaq 0x307(%rsp), %rdi
movq %rdi, 0x180(%rsp)
callq 0x128a0
movq 0x180(%rsp), %rcx
leaq 0x310(%rsp), %rdi
movl $0x3, %esi
leaq 0x308(%rsp), %rdx
callq 0x128b0
jmp 0x59df
leaq 0x307(%rsp), %rdi
callq 0x12930
movq $0x0, 0x2e0(%rsp)
leaq 0x2df(%rsp), %rdi
movq %rdi, 0x178(%rsp)
callq 0x128a0
movq 0x178(%rsp), %rcx
leaq 0x2e8(%rsp), %rdi
movl $0x3, %esi
leaq 0x2e0(%rsp), %rdx
callq 0x128b0
jmp 0x5a31
leaq 0x2df(%rsp), %rdi
callq 0x12930
movq $0x0, 0x2b8(%rsp)
leaq 0x2b7(%rsp), %rdi
movq %rdi, 0x170(%rsp)
callq 0x128a0
movq 0x170(%rsp), %rcx
leaq 0x2c0(%rsp), %rdi
movl $0x3, %esi
leaq 0x2b8(%rsp), %rdx
callq 0x128b0
jmp 0x5a83
leaq 0x2b7(%rsp), %rdi
callq 0x12930
xorps %xmm0, %xmm0
movsd %xmm0, 0x460(%rsp)
movl $0x1, 0x2b0(%rsp)
movl 0x2b0(%rsp), %eax
movq 0x4c8(%rsp), %rcx
cmpl (%rcx), %eax
jge 0x7060
movq 0x4c8(%rsp), %rax
movq 0x18(%rax), %rax
movl 0x2b0(%rsp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, 0x488(%rsp)
movq 0x4c8(%rsp), %rax
movq 0x18(%rax), %rax
movslq 0x2b0(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, 0x480(%rsp)
xorps %xmm0, %xmm0
ucomisd 0x488(%rsp), %xmm0
jbe 0x5c77
leaq 0x12826(%rip), %rdi     # 0x18346
xorl %eax, %eax
callq 0x2040
jmp 0x5b29
jmp 0x5c77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x3df(%rsp), %rdi
callq 0x12930
jmp 0x7163
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x3a7(%rsp), %rdi
callq 0x12930
jmp 0x7145
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x37f(%rsp), %rdi
callq 0x12930
jmp 0x7138
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x357(%rsp), %rdi
callq 0x12930
jmp 0x712b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x32f(%rsp), %rdi
callq 0x12930
jmp 0x711e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x307(%rsp), %rdi
callq 0x12930
jmp 0x7111
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x2df(%rsp), %rdi
callq 0x12930
jmp 0x7104
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x2b7(%rsp), %rdi
callq 0x12930
jmp 0x70f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
jmp 0x70ea
xorps %xmm0, %xmm0
ucomisd 0x480(%rsp), %xmm0
jbe 0x5ca0
movsd 0x480(%rsp), %xmm0
leaq 0x126c3(%rip), %rdi     # 0x18358
movb $0x1, %al
callq 0x2040
jmp 0x5c9e
jmp 0x5ca0
movsd 0x488(%rsp), %xmm0
movsd 0x480(%rsp), %xmm1
addsd %xmm1, %xmm0
movsd 0x12602(%rip), %xmm1    # 0x182c0
movsd %xmm1, 0x168(%rsp)
mulsd %xmm1, %xmm0
movsd %xmm0, 0x490(%rsp)
movq 0x4c8(%rsp), %rax
movq 0x10(%rax), %rax
movl 0x2b0(%rsp), %ecx
decl %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, 0x470(%rsp)
movq 0x4c8(%rsp), %rax
movq 0x10(%rax), %rax
movslq 0x2b0(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, 0x468(%rsp)
movsd 0x470(%rsp), %xmm0
movsd 0x468(%rsp), %xmm2
addsd %xmm2, %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, 0x478(%rsp)
movsd 0x4b0(%rsp), %xmm0
movsd 0x488(%rsp), %xmm2
mulsd %xmm2, %xmm0
movsd 0x470(%rsp), %xmm2
divsd %xmm2, %xmm0
callq 0x23c0
movsd 0x168(%rsp), %xmm1
movsd %xmm0, 0x450(%rsp)
movsd 0x4b0(%rsp), %xmm0
movsd 0x480(%rsp), %xmm2
mulsd %xmm2, %xmm0
movsd 0x468(%rsp), %xmm2
divsd %xmm2, %xmm0
callq 0x23c0
movsd 0x168(%rsp), %xmm2
movsd %xmm0, 0x448(%rsp)
movsd 0x450(%rsp), %xmm0
movsd 0x448(%rsp), %xmm1
addsd %xmm1, %xmm0
mulsd %xmm2, %xmm0
movsd %xmm0, 0x458(%rsp)
movq 0x4c8(%rsp), %rax
movq 0x20(%rax), %rax
movl 0x2b0(%rsp), %ecx
decl %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, 0x4a8(%rsp)
movq 0x4c8(%rsp), %rax
movq 0x20(%rax), %rax
movslq 0x2b0(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movsd %xmm0, 0x4a0(%rsp)
movsd 0x490(%rsp), %xmm0
movsd 0x4a0(%rsp), %xmm1
movsd 0x4a8(%rsp), %xmm3
subsd %xmm3, %xmm1
mulsd %xmm2, %xmm1
movsd 0x458(%rsp), %xmm2
mulsd %xmm2, %xmm1
movsd 0x478(%rsp), %xmm2
mulsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x498(%rsp)
movsd 0x498(%rsp), %xmm0
leaq 0x124fd(%rip), %rdi     # 0x18375
movb $0x1, %al
callq 0x2040
jmp 0x5e81
xorps %xmm0, %xmm0
ucomisd 0x498(%rsp), %xmm0
jbe 0x5e9b
xorps %xmm0, %xmm0
movsd %xmm0, 0x498(%rsp)
movsd 0x498(%rsp), %xmm1
movsd 0x488(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jb 0x5ec6
movsd 0x123f5(%rip), %xmm0    # 0x182b0
movsd %xmm0, 0x440(%rsp)
jmp 0x5f42
movsd 0x123e2(%rip), %xmm0    # 0x182b0
addsd 0x4b0(%rsp), %xmm0
movsd 0x123d9(%rip), %xmm1    # 0x182b8
mulsd 0x4b0(%rsp), %xmm1
divsd %xmm1, %xmm0
movsd 0x498(%rsp), %xmm1
divsd 0x488(%rsp), %xmm1
movsd 0x123aa(%rip), %xmm2    # 0x182b0
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd 0x1239a(%rip), %xmm1    # 0x182b0
addsd %xmm1, %xmm0
movsd %xmm0, 0x2a8(%rsp)
movsd 0x2a8(%rsp), %xmm0
movsd 0x1238c(%rip), %xmm1    # 0x182c0
callq 0x23c0
movsd %xmm0, 0x440(%rsp)
movsd 0x498(%rsp), %xmm1
movsd 0x480(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jb 0x5f6d
movsd 0x1234e(%rip), %xmm0    # 0x182b0
movsd %xmm0, 0x438(%rsp)
jmp 0x5fe9
movsd 0x1233b(%rip), %xmm0    # 0x182b0
addsd 0x4b0(%rsp), %xmm0
movsd 0x12332(%rip), %xmm1    # 0x182b8
mulsd 0x4b0(%rsp), %xmm1
divsd %xmm1, %xmm0
movsd 0x498(%rsp), %xmm1
divsd 0x480(%rsp), %xmm1
movsd 0x12303(%rip), %xmm2    # 0x182b0
subsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd 0x122f3(%rip), %xmm1    # 0x182b0
addsd %xmm1, %xmm0
movsd %xmm0, 0x2a0(%rsp)
movsd 0x2a0(%rsp), %xmm0
movsd 0x122e5(%rip), %xmm1    # 0x182c0
callq 0x23c0
movsd %xmm0, 0x438(%rsp)
movsd 0x4a8(%rsp), %xmm1
movsd 0x450(%rsp), %xmm0
movsd 0x440(%rsp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x430(%rsp)
movsd 0x4a0(%rsp), %xmm1
movsd 0x448(%rsp), %xmm0
movsd 0x438(%rsp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x428(%rsp)
movsd 0x4a8(%rsp), %xmm0
movaps 0x12178(%rip), %xmm1    # 0x181e0
pand %xmm1, %xmm0
addsd 0x450(%rsp), %xmm0
ucomisd 0x460(%rsp), %xmm0
jbe 0x60a6
movsd 0x4a8(%rsp), %xmm0
movaps 0x12150(%rip), %xmm1    # 0x181e0
pand %xmm1, %xmm0
addsd 0x450(%rsp), %xmm0
movsd %xmm0, 0x460(%rsp)
movsd 0x4a0(%rsp), %xmm0
movaps 0x1212a(%rip), %xmm1    # 0x181e0
pand %xmm1, %xmm0
addsd 0x448(%rsp), %xmm0
ucomisd 0x460(%rsp), %xmm0
jbe 0x60f4
movsd 0x4a0(%rsp), %xmm0
movaps 0x12102(%rip), %xmm1    # 0x181e0
pand %xmm1, %xmm0
addsd 0x448(%rsp), %xmm0
movsd %xmm0, 0x460(%rsp)
movsd 0x480(%rsp), %xmm0
subsd 0x488(%rsp), %xmm0
movsd 0x470(%rsp), %xmm1
mulsd 0x4a8(%rsp), %xmm1
movsd 0x430(%rsp), %xmm2
subsd 0x4a8(%rsp), %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x468(%rsp), %xmm0
mulsd 0x4a0(%rsp), %xmm0
movsd 0x428(%rsp), %xmm2
subsd 0x4a0(%rsp), %xmm2
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x298(%rsp)
movsd 0x470(%rsp), %xmm0
movsd 0x430(%rsp), %xmm2
subsd 0x4a8(%rsp), %xmm2
movsd 0x468(%rsp), %xmm1
movsd 0x428(%rsp), %xmm3
subsd 0x4a0(%rsp), %xmm3
mulsd %xmm3, %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x290(%rsp)
movsd 0x290(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x6206
jp 0x6206
leaq 0x1218d(%rip), %rdi     # 0x18388
xorl %eax, %eax
callq 0x2040
jmp 0x6204
jmp 0x6206
movsd 0x298(%rsp), %xmm0
movsd 0x290(%rsp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x420(%rsp)
movsd 0x420(%rsp), %xmm0
leaq 0x12171(%rip), %rdi     # 0x183a6
movb $0x1, %al
callq 0x2040
jmp 0x623e
leaq 0x277(%rsp), %rdi
movq %rdi, 0x160(%rsp)
callq 0x128a0
movq 0x160(%rsp), %rdx
leaq 0x278(%rsp), %rdi
movl $0x3, %esi
callq 0x129c0
jmp 0x626f
leaq 0x277(%rsp), %rdi
callq 0x12930
movsd 0x470(%rsp), %xmm0
movsd %xmm0, 0x250(%rsp)
movsd 0x4a8(%rsp), %xmm0
movsd %xmm0, 0x258(%rsp)
movsd 0x488(%rsp), %xmm0
movsd %xmm0, 0x260(%rsp)
leaq 0x268(%rsp), %rdx
leaq 0x278(%rsp), %rdi
leaq 0x250(%rsp), %rsi
callq 0x12a40
jmp 0x62d1
leaq 0x237(%rsp), %rdi
movq %rdi, 0x158(%rsp)
callq 0x128a0
movq 0x158(%rsp), %rdx
leaq 0x238(%rsp), %rdi
movl $0x3, %esi
callq 0x129c0
jmp 0x6302
leaq 0x237(%rsp), %rdi
callq 0x12930
movsd 0x468(%rsp), %xmm0
movsd %xmm0, 0x210(%rsp)
movsd 0x4a0(%rsp), %xmm0
movsd %xmm0, 0x218(%rsp)
movsd 0x480(%rsp), %xmm0
movsd %xmm0, 0x220(%rsp)
leaq 0x228(%rsp), %rdx
leaq 0x238(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x12a40
jmp 0x6364
leaq 0x1e0(%rsp), %rdi
leaq 0x238(%rsp), %rsi
callq 0x12a70
jmp 0x637b
leaq 0x1f8(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x52f0
jmp 0x6392
leaq 0x3e8(%rsp), %rdi
leaq 0x1f8(%rsp), %rsi
movq %rsi, 0x150(%rsp)
callq 0x12b70
movq 0x150(%rsp), %rdi
callq 0x12940
leaq 0x1e0(%rsp), %rdi
callq 0x12940
leaq 0x1b0(%rsp), %rdi
leaq 0x278(%rsp), %rsi
callq 0x12a70
jmp 0x63e0
leaq 0x1c8(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x52f0
jmp 0x63f7
leaq 0x3b0(%rsp), %rdi
leaq 0x1c8(%rsp), %rsi
callq 0x12b70
leaq 0x1c8(%rsp), %rdi
callq 0x12940
leaq 0x1b0(%rsp), %rdi
callq 0x12940
movsd 0x470(%rsp), %xmm0
movsd 0x430(%rsp), %xmm1
subsd 0x4a8(%rsp), %xmm1
mulsd %xmm1, %xmm0
movsd 0x430(%rsp), %xmm1
subsd 0x420(%rsp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x408(%rsp)
movsd 0x468(%rsp), %xmm0
movsd 0x428(%rsp), %xmm1
subsd 0x4a0(%rsp), %xmm1
mulsd %xmm1, %xmm0
movsd 0x428(%rsp), %xmm1
subsd 0x420(%rsp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x400(%rsp)
movsd 0x470(%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
movsd 0x488(%rsp), %xmm0
movsd 0x470(%rsp), %xmm1
movsd 0x4b0(%rsp), %xmm2
movsd 0x11ddc(%rip), %xmm3    # 0x182b0
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x10(%rsp)
movsd 0x4a8(%rsp), %xmm0
movsd 0x11dc1(%rip), %xmm1    # 0x182b8
callq 0x23c0
movsd 0x10(%rsp), %xmm2
movaps %xmm0, %xmm1
movsd 0x18(%rsp), %xmm0
movsd 0x11dad(%rip), %xmm3    # 0x182c0
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, 0x418(%rsp)
movsd 0x468(%rsp), %xmm0
movsd %xmm0, 0x28(%rsp)
movsd 0x480(%rsp), %xmm0
movsd 0x468(%rsp), %xmm1
movsd 0x4b0(%rsp), %xmm2
movsd 0x11d56(%rip), %xmm3    # 0x182b0
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x4a0(%rsp), %xmm0
movsd 0x11d3b(%rip), %xmm1    # 0x182b8
callq 0x23c0
movsd 0x20(%rsp), %xmm2
movaps %xmm0, %xmm1
movsd 0x28(%rsp), %xmm0
movsd 0x11d27(%rip), %xmm3    # 0x182c0
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, 0x410(%rsp)
movsd 0x408(%rsp), %xmm0
movsd %xmm0, 0x30(%rsp)
leaq 0x360(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd 0x30(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x408(%rsp), %xmm0
mulsd 0x420(%rsp), %xmm0
movsd %xmm0, 0x38(%rsp)
leaq 0x360(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd 0x38(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x408(%rsp), %xmm0
movsd 0x418(%rsp), %xmm2
divsd 0x470(%rsp), %xmm2
movsd 0x420(%rsp), %xmm1
subsd 0x4a8(%rsp), %xmm1
movsd 0x420(%rsp), %xmm3
movsd 0x488(%rsp), %xmm4
movsd 0x470(%rsp), %xmm5
movsd 0x430(%rsp), %xmm6
subsd 0x4a8(%rsp), %xmm6
mulsd %xmm6, %xmm5
divsd %xmm5, %xmm4
addsd %xmm4, %xmm3
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, 0x40(%rsp)
leaq 0x360(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd 0x40(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x400(%rsp), %xmm0
movsd %xmm0, 0x48(%rsp)
leaq 0x388(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd 0x48(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x400(%rsp), %xmm0
mulsd 0x420(%rsp), %xmm0
movsd %xmm0, 0x50(%rsp)
leaq 0x388(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd 0x50(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x400(%rsp), %xmm0
movsd 0x410(%rsp), %xmm2
divsd 0x468(%rsp), %xmm2
movsd 0x420(%rsp), %xmm1
subsd 0x4a0(%rsp), %xmm1
movsd 0x420(%rsp), %xmm3
movsd 0x480(%rsp), %xmm4
movsd 0x468(%rsp), %xmm5
movsd 0x428(%rsp), %xmm6
subsd 0x4a0(%rsp), %xmm6
mulsd %xmm6, %xmm5
divsd %xmm5, %xmm4
addsd %xmm4, %xmm3
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, 0x58(%rsp)
leaq 0x388(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd 0x58(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x468(%rsp), %xmm0
mulsd 0x4a0(%rsp), %xmm0
movsd %xmm0, 0x60(%rsp)
leaq 0x338(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd 0x60(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x468(%rsp), %xmm0
mulsd 0x4a0(%rsp), %xmm0
movsd 0x4a0(%rsp), %xmm2
movsd 0x480(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x68(%rsp)
leaq 0x338(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd 0x68(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x4a0(%rsp), %xmm0
movsd 0x410(%rsp), %xmm1
addsd 0x480(%rsp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, 0x70(%rsp)
leaq 0x338(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd 0x70(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x470(%rsp), %xmm0
mulsd 0x4a8(%rsp), %xmm0
movsd %xmm0, 0x78(%rsp)
leaq 0x310(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd 0x78(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x470(%rsp), %xmm0
mulsd 0x4a8(%rsp), %xmm0
movsd 0x4a8(%rsp), %xmm2
movsd 0x488(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x80(%rsp)
leaq 0x310(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd 0x80(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x4a8(%rsp), %xmm0
movsd 0x418(%rsp), %xmm1
addsd 0x488(%rsp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, 0x88(%rsp)
leaq 0x310(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd 0x88(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x338(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0xa0(%rsp)
movsd 0x428(%rsp), %xmm0
movsd %xmm0, 0x98(%rsp)
leaq 0x388(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0x90(%rsp)
leaq 0x3e8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd 0x90(%rsp), %xmm2
movsd 0x98(%rsp), %xmm0
movsd 0xa0(%rsp), %xmm1
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xa8(%rsp)
leaq 0x2e8(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd 0xa8(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x338(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0xc0(%rsp)
movsd 0x428(%rsp), %xmm0
movsd %xmm0, 0xb8(%rsp)
leaq 0x388(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0xb0(%rsp)
leaq 0x3e8(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd 0xb0(%rsp), %xmm2
movsd 0xb8(%rsp), %xmm0
movsd 0xc0(%rsp), %xmm1
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xc8(%rsp)
leaq 0x2e8(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd 0xc8(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x338(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0xe0(%rsp)
movsd 0x428(%rsp), %xmm0
movsd %xmm0, 0xd8(%rsp)
leaq 0x388(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0xd0(%rsp)
leaq 0x3e8(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd 0xd0(%rsp), %xmm2
movsd 0xd8(%rsp), %xmm0
movsd 0xe0(%rsp), %xmm1
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xe8(%rsp)
leaq 0x2e8(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd 0xe8(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x310(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0x100(%rsp)
movsd 0x430(%rsp), %xmm0
movsd %xmm0, 0xf8(%rsp)
leaq 0x360(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0xf0(%rsp)
leaq 0x3b0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd 0xf0(%rsp), %xmm2
movsd 0xf8(%rsp), %xmm0
movsd 0x100(%rsp), %xmm1
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x108(%rsp)
leaq 0x2c0(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd 0x108(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x310(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0x120(%rsp)
movsd 0x430(%rsp), %xmm0
movsd %xmm0, 0x118(%rsp)
leaq 0x360(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0x110(%rsp)
leaq 0x3b0(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd 0x110(%rsp), %xmm2
movsd 0x118(%rsp), %xmm0
movsd 0x120(%rsp), %xmm1
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x128(%rsp)
leaq 0x2c0(%rsp), %rdi
movl $0x1, %esi
callq 0x4ff0
movsd 0x128(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x310(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0x140(%rsp)
movsd 0x430(%rsp), %xmm0
movsd %xmm0, 0x138(%rsp)
leaq 0x360(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0x130(%rsp)
leaq 0x3b0(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd 0x130(%rsp), %xmm2
movsd 0x138(%rsp), %xmm0
movsd 0x140(%rsp), %xmm1
subsd (%rax), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x148(%rsp)
leaq 0x2c0(%rsp), %rdi
movl $0x2, %esi
callq 0x4ff0
movsd 0x148(%rsp), %xmm0
movsd %xmm0, (%rax)
movsd 0x430(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x6e60
movq 0x4c0(%rsp), %rdi
movl 0x2b0(%rsp), %eax
decl %eax
movslq %eax, %rsi
callq 0x4fd0
movq %rax, %rdi
leaq 0x310(%rsp), %rsi
callq 0x12bb0
jmp 0x6d81
leaq 0x11631(%rip), %rdi     # 0x183b9
xorl %eax, %eax
callq 0x2040
jmp 0x6d91
jmp 0x6f6e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x277(%rsp), %rdi
callq 0x12930
jmp 0x70ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
jmp 0x704e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x237(%rsp), %rdi
callq 0x12930
jmp 0x704e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
jmp 0x7041
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0x12940
jmp 0x7041
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3d0(%rsp)
movl %eax, 0x3cc(%rsp)
leaq 0x1b0(%rsp), %rdi
callq 0x12940
jmp 0x7041
movsd 0x420(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x6ec0
xorps %xmm0, %xmm0
ucomisd 0x430(%rsp), %xmm0
jb 0x6ec0
movq 0x4c0(%rsp), %rdi
movl 0x2b0(%rsp), %eax
decl %eax
movslq %eax, %rsi
callq 0x4fd0
movq %rax, %rdi
leaq 0x2c0(%rsp), %rsi
callq 0x12bb0
jmp 0x6eab
leaq 0x1151d(%rip), %rdi     # 0x183cf
xorl %eax, %eax
callq 0x2040
jmp 0x6ebb
jmp 0x6f6c
xorps %xmm0, %xmm0
ucomisd 0x420(%rsp), %xmm0
jb 0x6f1d
movsd 0x428(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jb 0x6f1d
movq 0x4c0(%rsp), %rdi
movl 0x2b0(%rsp), %eax
decl %eax
movslq %eax, %rsi
callq 0x4fd0
movq %rax, %rdi
leaq 0x2e8(%rsp), %rsi
callq 0x12bb0
jmp 0x6f0b
leaq 0x114d3(%rip), %rdi     # 0x183e5
xorl %eax, %eax
callq 0x2040
jmp 0x6f1b
jmp 0x6f6a
xorps %xmm0, %xmm0
ucomisd 0x428(%rsp), %xmm0
jb 0x6f68
movq 0x4c0(%rsp), %rdi
movl 0x2b0(%rsp), %eax
decl %eax
movslq %eax, %rsi
callq 0x4fd0
movq %rax, %rdi
leaq 0x338(%rsp), %rsi
callq 0x12bb0
jmp 0x6f56
leaq 0x1149e(%rip), %rdi     # 0x183fb
xorl %eax, %eax
callq 0x2040
jmp 0x6f66
jmp 0x6f68
jmp 0x6f6a
jmp 0x6f6c
jmp 0x6f6e
movq 0x4c0(%rsp), %rdi
movl 0x2b0(%rsp), %eax
decl %eax
movslq %eax, %rsi
callq 0x4fd0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, (%rsp)
movq 0x4c0(%rsp), %rdi
movl 0x2b0(%rsp), %eax
decl %eax
movslq %eax, %rsi
callq 0x4fd0
movq %rax, %rdi
movl $0x1, %esi
callq 0x4ff0
movsd (%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x4c0(%rsp), %rdi
movl 0x2b0(%rsp), %eax
decl %eax
movslq %eax, %rsi
callq 0x4fd0
movq %rax, %rdi
movl $0x2, %esi
callq 0x4ff0
movsd (%rsp), %xmm0
movsd 0x8(%rsp), %xmm1
movsd (%rax), %xmm2
leaq 0x11409(%rip), %rdi     # 0x18411
movb $0x3, %al
callq 0x2040
jmp 0x7011
leaq 0x238(%rsp), %rdi
callq 0x12940
leaq 0x278(%rsp), %rdi
callq 0x12940
movl 0x2b0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2b0(%rsp)
jmp 0x5aa7
leaq 0x238(%rsp), %rdi
callq 0x12940
leaq 0x278(%rsp), %rdi
callq 0x12940
jmp 0x70ea
movsd 0x460(%rsp), %xmm0
movq 0x4b8(%rsp), %rax
movsd %xmm0, (%rax)
movl $0x0, 0x4d4(%rsp)
leaq 0x2c0(%rsp), %rdi
callq 0x12940
leaq 0x2e8(%rsp), %rdi
callq 0x12940
leaq 0x310(%rsp), %rdi
callq 0x12940
leaq 0x338(%rsp), %rdi
callq 0x12940
leaq 0x360(%rsp), %rdi
callq 0x12940
leaq 0x388(%rsp), %rdi
callq 0x12940
leaq 0x3b0(%rsp), %rdi
callq 0x12940
leaq 0x3e8(%rsp), %rdi
callq 0x12940
jmp 0x7154
leaq 0x2c0(%rsp), %rdi
callq 0x12940
leaq 0x2e8(%rsp), %rdi
callq 0x12940
leaq 0x310(%rsp), %rdi
callq 0x12940
leaq 0x338(%rsp), %rdi
callq 0x12940
leaq 0x360(%rsp), %rdi
callq 0x12940
leaq 0x388(%rsp), %rdi
callq 0x12940
leaq 0x3b0(%rsp), %rdi
callq 0x12940
leaq 0x3e8(%rsp), %rdi
callq 0x12940
jmp 0x7163
movl 0x4d4(%rsp), %eax
addq $0x4d8, %rsp            # imm = 0x4D8
retq
movq 0x3d0(%rsp), %rdi
callq 0x23d0