// File: tomfunkhouser[P]gaps/apps/mshalign/mshalign.cpp
// Function: Align(gaps::R3Mesh*, gaps::R3Mesh*, double*, int, double*, int, int, int, int, int, int, int, int, int, int, int, int)
static int
Align(R3Mesh *mesh1, R3Mesh *mesh2, 
  RNScalar *weights1, int nweights1, RNScalar *weights2, int nweights2,
  int egi_rotation,
  int pca_translation, int pca_rotation, int pca_scale, 
  int ransac_translation, int ransac_rotation, int ransac_scale, 
  int icp_translation, int icp_rotation, int icp_scale,
  int sample_method)
{
  // Start statistics
  RNTime start_time;
  start_time.Read();

  // Initialize transformation
  R3Affine affine12(R3identity_affine);
  R3Affine affine21(R3identity_affine);
  RNBoolean converged = TRUE;
  RNScalar rmsd = FLT_MAX;

  // Compute info for mesh1
  R3Point centroid1 = mesh1->Centroid();
  RNScalar radius1 = (pca_scale) ? mesh1->AverageRadius(&centroid1) : 1;
  RNScalar scale1 = (pca_scale && (radius1 > 0)) ? 1.0 / radius1 : 1;
  R3Triad axes1 = (pca_rotation==1) ? mesh1->PrincipleAxes(&centroid1) : R3xyz_triad;
  R3Point *points1 = new R3Point [ max_points ];
  int npoints1 = CreatePoints(mesh1, weights1, nweights1, points1, max_points, sample_method);
  if ((scale1 == 0) || (npoints1 == 0)) {
    RNFail("Unable to process first mesh\n");
    return 0;
  }

  // Compute info for mesh2
  R3Point centroid2 = mesh2->Centroid();
  RNScalar scale2 = (pca_scale) ? mesh2->AverageRadius(&centroid2) : 1;
  R3Triad axes2 = (pca_rotation == 1) ? mesh2->PrincipleAxes(&centroid2) : R3xyz_triad;
  R3Affine affine02 = R3identity_affine;
  if (pca_translation) affine02.Translate(centroid2.Vector());
  if (pca_rotation==1) affine02.Transform(axes2.Matrix());
  if (pca_scale) affine02.Scale(scale2);
  R3Point *points2 = new R3Point [ max_points ];
  int npoints2 = CreatePoints(mesh2, weights2, nweights2, points2, max_points, sample_method);
  if ((scale2 == 0) || (npoints2 == 0)) {
    RNFail("Unable to process second mesh\n");
    return 0;
  }

  // Compute RMSD for alignment with all flips of principle axes
  if (pca_rotation) {
    for (int dim1 = 0; dim1 < 3; dim1++) {
      for (int dim2 = 0; dim2 < 3; dim2++) {
        if (dim1 == dim2) continue;
        for (int dir1 = 0; dir1 < 2; dir1++) {
          for (int dir2 = 0; dir2 < 2; dir2++) {
            // Create triad of axes for flip
            R3Vector axis1a = (dir1 == 1) ? axes1[dim1] : -axes1[dim1];
            R3Vector axis1b = (dir2 == 1) ? axes1[dim2] : -axes1[dim2];
            R3Vector axis1c = axis1a % axis1b;
            R3Triad triad1(axis1a, axis1b, axis1c);

            // Compute transformation for mesh1 (with flip)
            R3Affine affine10 = R3identity_affine;
            if (pca_scale) affine10.Scale(scale1);
            affine10.Transform(triad1.InverseMatrix());
            if (pca_translation) affine10.Translate(-centroid1.Vector());

            // Compute composite transformation and its inverse
            R3Affine flipped_affine12 = affine02;
            flipped_affine12.Transform(affine10);
            R3Affine flipped_affine21 = flipped_affine12.Inverse();

            // Refine alignment with ICP
            RNBoolean flipped_converged = FALSE;
            if (icp_translation || icp_rotation || icp_scale) {
              flipped_converged = ICPAlignmentTransformation(
                mesh1, points1, npoints1, 
                mesh2, points2, npoints2, 
                flipped_affine12, flipped_affine21, 
                icp_translation, icp_rotation, icp_scale);
            }

            // Compute RMSD for transformation
            RNScalar flipped_rmsd = RMSD(
              mesh1, points1, npoints1, 
              mesh2, points2, npoints2, 
              flipped_affine12, flipped_affine21);

            // Check if best so far -- if so, save
            if (flipped_rmsd < rmsd) {
              affine12 = flipped_affine12;
              affine21 = flipped_affine21;
              converged = flipped_converged;
              rmsd = flipped_rmsd;
            }

            // Print statistics
            if (print_debug) {
              const R4Matrix& m = flipped_affine12.Matrix();
              printf("Computed alignment transformation for flip %d %d %d %d ...\n", dim1, dim2, dir1, dir2);
              printf("  Time = %.2f seconds\n", start_time.Elapsed());
              printf("  Max Points = %d\n", max_points);
              printf("  Matrix[0][0-3] = %g %g %g %g\n", m[0][0], m[0][1], m[0][2], m[0][3]);
              printf("  Matrix[1][0-3] = %g %g %g %g\n", m[1][0], m[1][1], m[1][2], m[1][3]);
              printf("  Matrix[2][0-3] = %g %g %g %g\n", m[2][0], m[2][1], m[2][2], m[2][3]);
              printf("  Matrix[3][0-3] = %g %g %g %g\n", m[3][0], m[3][1], m[3][2], m[3][3]);
              printf("  Scale = %g\n", flipped_affine12.ScaleFactor());
              printf("  Converged = %d\n", flipped_converged);
              printf("  RMSD = %g\n", flipped_rmsd);
              fflush(stdout);
            }
          }
        }
      }
    }
  }
  else {
    // Compute transformation for mesh1
    R3Affine affine10 = R3identity_affine;
    if (pca_scale) affine10.Scale(scale1);
    if (pca_translation) affine10.Translate(-centroid1.Vector());

    // Compute composite transformation
    affine12 = affine02;
    affine12.Transform(affine10);
    affine21 = affine12.Inverse();

    // Refine alignment with ICP
    if (icp_translation || icp_rotation || icp_scale) {
      converged = ICPAlignmentTransformation(
        mesh1, points1, npoints1, 
        mesh2, points2, npoints2, 
        affine12, affine21,
        icp_translation, icp_rotation, icp_scale);
    }

    // Compute RMSD
    rmsd = RMSD(
      mesh1, points1, npoints1, 
      mesh2, points2, npoints2, 
      affine12, affine21);
  }

  // Consider ransac alignment
  if (ransac_translation || ransac_rotation || ransac_scale) {
    // Compute alignment with ransac 
    R3Affine ransac_affine12(R3identity_affine);
    R3Affine ransac_affine21(R3identity_affine);
    if (!RansacAlignmentTransformation(
      mesh1, points1, npoints1, 
      mesh2, points2, npoints2, 
      ransac_affine12, ransac_affine21,
      ransac_translation, ransac_rotation, ransac_scale)) {
      return 0;
    }

    // Refine alignment with ICP
    if (icp_translation || icp_rotation || icp_scale) {
      converged = ICPAlignmentTransformation(
        mesh1, points1, npoints1, 
        mesh2, points2, npoints2, 
        ransac_affine12, ransac_affine21,
        icp_translation, icp_rotation, icp_scale);
    }

    // Compute RMSD
    RNScalar ransac_rmsd = RMSD(
      mesh1, points1, npoints1, 
      mesh2, points2, npoints2, 
      ransac_affine12, ransac_affine21);

    // Check if best so far
    if (ransac_rmsd < rmsd) {
      affine12 = ransac_affine12;
      affine21 = ransac_affine21;
      rmsd = ransac_rmsd;
    }
  }

  // Apply transformation
  mesh1->Transform(affine12);

  // Print statistics
  if (print_verbose) {
    const R4Matrix& m = affine12.Matrix();
    printf("Computed alignment transformation ...\n");
    printf("  Time = %.2f seconds\n", start_time.Elapsed());
    printf("  Matrix[0][0-3] = %g %g %g %g\n", m[0][0], m[0][1], m[0][2], m[0][3]);
    printf("  Matrix[1][0-3] = %g %g %g %g\n", m[1][0], m[1][1], m[1][2], m[1][3]);
    printf("  Matrix[2][0-3] = %g %g %g %g\n", m[2][0], m[2][1], m[2][2], m[2][3]);
    printf("  Matrix[3][0-3] = %g %g %g %g\n", m[3][0], m[3][1], m[3][2], m[3][3]);
    printf("  Scale = %g\n", affine12.ScaleFactor());
    printf("  Converged = %d\n", converged);
    printf("  RMSD = %g\n", rmsd);
    fflush(stdout);
  }

  // Return success
  return 1;
}

// Assembly:
pushq %rbx
subq $0x1370, %rsp           # imm = 0x1370
movl 0x13d0(%rsp), %eax
movl 0x13c8(%rsp), %eax
movl 0x13c0(%rsp), %eax
movl 0x13b8(%rsp), %eax
movl 0x13b0(%rsp), %eax
movl 0x13a8(%rsp), %eax
movl 0x13a0(%rsp), %eax
movl 0x1398(%rsp), %eax
movl 0x1390(%rsp), %eax
movl 0x1388(%rsp), %eax
movl 0x1380(%rsp), %eax
movq %rdi, 0x1360(%rsp)
movq %rsi, 0x1358(%rsp)
movq %rdx, 0x1350(%rsp)
movl %ecx, 0x134c(%rsp)
movq %r8, 0x1340(%rsp)
movl %r9d, 0x133c(%rsp)
leaq 0x1328(%rsp), %rdi
movq %rdi, 0x308(%rsp)
callq 0xa2b30
movq 0x308(%rsp), %rdi
callq 0x15df0
leaq 0xbd2d3(%rip), %rsi     # 0xce1f0
movq %rsi, 0x310(%rsp)
leaq 0x1218(%rsp), %rdi
callq 0x15e80
movq 0x310(%rsp), %rsi
leaq 0x1108(%rsp), %rdi
callq 0x15e80
jmp 0x10f49
movl $0x1, 0x10f8(%rsp)
movabsq $0x47efffffe0000000, %rax # imm = 0x47EFFFFFE0000000
movq %rax, 0x10f0(%rsp)
movq 0x1360(%rsp), %rsi
leaq 0x10d8(%rsp), %rdi
callq 0x38470
jmp 0x10f7d
cmpl $0x0, 0x1398(%rsp)
je 0x10fbb
movq 0x1360(%rsp), %rdi
leaq 0x10d8(%rsp), %rsi
callq 0x38790
movsd %xmm0, 0x300(%rsp)
jmp 0x10fa7
movsd 0x300(%rsp), %xmm0
movsd %xmm0, 0x2f8(%rsp)
jmp 0x10fce
movsd 0x96045(%rip), %xmm0    # 0xa7008
movsd %xmm0, 0x2f8(%rsp)
jmp 0x10fce
movsd 0x2f8(%rsp), %xmm0
movsd %xmm0, 0x10d0(%rsp)
cmpl $0x0, 0x1398(%rsp)
je 0x11018
movsd 0x10d0(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x11018
movsd 0x96004(%rip), %xmm0    # 0xa7008
divsd 0x10d0(%rsp), %xmm0
movsd %xmm0, 0x2f0(%rsp)
jmp 0x1102b
movsd 0x95fe8(%rip), %xmm0    # 0xa7008
movsd %xmm0, 0x2f0(%rsp)
jmp 0x1102b
movsd 0x2f0(%rsp), %xmm0
movsd %xmm0, 0x10c8(%rsp)
cmpl $0x1, 0x1390(%rsp)
jne 0x1106c
movq 0x1360(%rsp), %rsi
xorl %eax, %eax
movl %eax, %ecx
leaq 0x1080(%rsp), %rdi
leaq 0x10d8(%rsp), %rdx
callq 0x38e80
jmp 0x1106a
jmp 0x11084
leaq 0xbd335(%rip), %rsi     # 0xce3a8
leaq 0x1080(%rsp), %rdi
callq 0x73c30
jmp 0x11082
jmp 0x11084
movslq 0xbc355(%rip), %rax     # 0xcd3e0
movq %rax, 0x2d8(%rsp)
movl $0x18, %ecx
mulq %rcx
movq %rax, %rdi
movq $-0x1, %rax
cmovoq %rax, %rdi
movq %rdi, 0x2e0(%rsp)
callq 0xd030
movq %rax, 0x2e8(%rsp)
jmp 0x110c0
movq 0x2d8(%rsp), %rax
cmpq $0x0, %rax
je 0x11130
movq 0x2e8(%rsp), %rax
movq 0x2d8(%rsp), %rcx
imulq $0x18, %rcx, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, 0x2c8(%rsp)
movq %rax, 0x2d0(%rsp)
movq 0x2d0(%rsp), %rdi
movq %rdi, 0x2c0(%rsp)
callq 0x7d340
jmp 0x1110f
movq 0x2c8(%rsp), %rcx
movq 0x2c0(%rsp), %rax
addq $0x18, %rax
cmpq %rcx, %rax
movq %rax, 0x2d0(%rsp)
jne 0x110f8
movq 0x2e8(%rsp), %rax
movq %rax, 0x1078(%rsp)
movq 0x1360(%rsp), %rdi
movq 0x1350(%rsp), %rsi
movl 0x134c(%rsp), %edx
movq 0x1078(%rsp), %rcx
movl 0xbc27a(%rip), %r8d     # 0xcd3e0
movl 0x13d0(%rsp), %r9d
callq 0x13120
movl %eax, 0x2bc(%rsp)
jmp 0x1117c
movl 0x2bc(%rsp), %eax
movl %eax, 0x1074(%rsp)
movsd 0x10c8(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x111a0
jp 0x111a0
jmp 0x111ae
cmpl $0x0, 0x1074(%rsp)
jne 0x11239
leaq 0x96159(%rip), %rdi     # 0xa730e
xorl %eax, %eax
callq 0xa6d50
jmp 0x111be
movl $0x0, 0x136c(%rsp)
movl $0x1, 0x1070(%rsp)
jmp 0x129ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
jmp 0x129f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
jmp 0x129e4
movq 0x2e0(%rsp), %rsi
movq 0x2e8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
callq 0xd760
jmp 0x129e4
movq 0x1358(%rsp), %rsi
leaq 0x1058(%rsp), %rdi
callq 0x38470
jmp 0x11250
cmpl $0x0, 0x1398(%rsp)
je 0x1128e
movq 0x1358(%rsp), %rdi
leaq 0x1058(%rsp), %rsi
callq 0x38790
movsd %xmm0, 0x2b0(%rsp)
jmp 0x1127a
movsd 0x2b0(%rsp), %xmm0
movsd %xmm0, 0x2a8(%rsp)
jmp 0x112a1
movsd 0x95d72(%rip), %xmm0    # 0xa7008
movsd %xmm0, 0x2a8(%rsp)
jmp 0x112a1
movsd 0x2a8(%rsp), %xmm0
movsd %xmm0, 0x1050(%rsp)
cmpl $0x1, 0x1390(%rsp)
jne 0x112e2
movq 0x1358(%rsp), %rsi
xorl %eax, %eax
movl %eax, %ecx
leaq 0x1008(%rsp), %rdi
leaq 0x1058(%rsp), %rdx
callq 0x38e80
jmp 0x112e0
jmp 0x112fa
leaq 0xbd0bf(%rip), %rsi     # 0xce3a8
leaq 0x1008(%rsp), %rdi
callq 0x73c30
jmp 0x112f8
jmp 0x112fa
leaq 0xbceef(%rip), %rsi     # 0xce1f0
leaq 0xef8(%rsp), %rdi
callq 0x15e80
jmp 0x11310
cmpl $0x0, 0x1388(%rsp)
je 0x11363
leaq 0xee0(%rsp), %rdi
leaq 0x1058(%rsp), %rsi
callq 0x15f70
jmp 0x11331
leaq 0xef8(%rsp), %rdi
leaq 0xee0(%rsp), %rsi
callq 0x15f30
jmp 0x11348
jmp 0x11363
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
jmp 0x129ab
cmpl $0x1, 0x1390(%rsp)
jne 0x113e9
leaq 0xd50(%rsp), %rdi
leaq 0x1008(%rsp), %rsi
callq 0x73eb0
jmp 0x11384
leaq 0xdd0(%rsp), %rdi
leaq 0xd50(%rsp), %rsi
xorl %edx, %edx
callq 0x72510
jmp 0x1139d
leaq 0xef8(%rsp), %rdi
leaq 0xdd0(%rsp), %rsi
callq 0x72880
jmp 0x113b4
leaq 0xdd0(%rsp), %rdi
callq 0x725b0
jmp 0x113e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
leaq 0xdd0(%rsp), %rdi
callq 0x725b0
jmp 0x129ab
cmpl $0x0, 0x1398(%rsp)
je 0x1140d
movsd 0x1050(%rsp), %xmm0
leaq 0xef8(%rsp), %rdi
callq 0x15fb0
jmp 0x1140b
jmp 0x1140d
movslq 0xbbfcc(%rip), %rax     # 0xcd3e0
movq %rax, 0x290(%rsp)
movl $0x18, %ecx
mulq %rcx
movq %rax, %rdi
movq $-0x1, %rax
cmovoq %rax, %rdi
movq %rdi, 0x298(%rsp)
callq 0xd030
movq %rax, 0x2a0(%rsp)
jmp 0x11449
movq 0x290(%rsp), %rax
cmpq $0x0, %rax
je 0x114b9
movq 0x2a0(%rsp), %rax
movq 0x290(%rsp), %rcx
imulq $0x18, %rcx, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, 0x280(%rsp)
movq %rax, 0x288(%rsp)
movq 0x288(%rsp), %rdi
movq %rdi, 0x278(%rsp)
callq 0x7d340
jmp 0x11498
movq 0x280(%rsp), %rcx
movq 0x278(%rsp), %rax
addq $0x18, %rax
cmpq %rcx, %rax
movq %rax, 0x288(%rsp)
jne 0x11481
movq 0x2a0(%rsp), %rax
movq %rax, 0xd48(%rsp)
movq 0x1358(%rsp), %rdi
movq 0x1340(%rsp), %rsi
movl 0x133c(%rsp), %edx
movq 0xd48(%rsp), %rcx
movl 0xbbef1(%rip), %r8d     # 0xcd3e0
movl 0x13d0(%rsp), %r9d
callq 0x13120
movl %eax, 0x274(%rsp)
jmp 0x11505
movl 0x274(%rsp), %eax
movl %eax, 0xd44(%rsp)
movsd 0x1050(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x11529
jp 0x11529
jmp 0x11533
cmpl $0x0, 0xd44(%rsp)
jne 0x1158c
leaq 0x95df2(%rip), %rdi     # 0xa732c
xorl %eax, %eax
callq 0xa6d50
jmp 0x11543
movl $0x0, 0x136c(%rsp)
movl $0x1, 0x1070(%rsp)
jmp 0x1299c
movq 0x298(%rsp), %rsi
movq 0x2a0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
callq 0xd760
jmp 0x129ab
cmpl $0x0, 0x1390(%rsp)
je 0x11fcf
movl $0x0, 0xd40(%rsp)
cmpl $0x3, 0xd40(%rsp)
jge 0x11fca
movl $0x0, 0xd3c(%rsp)
cmpl $0x3, 0xd3c(%rsp)
jge 0x11fb2
movl 0xd40(%rsp), %eax
cmpl 0xd3c(%rsp), %eax
jne 0x115e1
jmp 0x11f9c
movl $0x0, 0xd38(%rsp)
cmpl $0x2, 0xd38(%rsp)
jge 0x11f9a
movl $0x0, 0xd34(%rsp)
cmpl $0x2, 0xd34(%rsp)
jge 0x11f82
cmpl $0x1, 0xd38(%rsp)
jne 0x11654
movl 0xd40(%rsp), %esi
leaq 0x1080(%rsp), %rdi
callq 0x15ff0
movq %rax, 0x268(%rsp)
jmp 0x1163b
movq 0x268(%rsp), %rsi
leaq 0xd18(%rsp), %rdi
callq 0x7e4f0
jmp 0x11652
jmp 0x1168b
movl 0xd40(%rsp), %esi
leaq 0x1080(%rsp), %rdi
callq 0x15ff0
movq %rax, 0x260(%rsp)
jmp 0x11672
movq 0x260(%rsp), %rsi
leaq 0xd18(%rsp), %rdi
callq 0x7f7a0
jmp 0x11689
jmp 0x1168b
cmpl $0x1, 0xd34(%rsp)
jne 0x116cc
movl 0xd3c(%rsp), %esi
leaq 0x1080(%rsp), %rdi
callq 0x15ff0
movq %rax, 0x258(%rsp)
jmp 0x116b3
movq 0x258(%rsp), %rsi
leaq 0xd00(%rsp), %rdi
callq 0x7e4f0
jmp 0x116ca
jmp 0x11703
movl 0xd3c(%rsp), %esi
leaq 0x1080(%rsp), %rdi
callq 0x15ff0
movq %rax, 0x250(%rsp)
jmp 0x116ea
movq 0x250(%rsp), %rsi
leaq 0xd00(%rsp), %rdi
callq 0x7f7a0
jmp 0x11701
jmp 0x11703
leaq 0xce8(%rsp), %rdi
leaq 0xd18(%rsp), %rsi
leaq 0xd00(%rsp), %rdx
callq 0x7f2f0
jmp 0x11722
leaq 0xca0(%rsp), %rdi
leaq 0xd18(%rsp), %rsi
leaq 0xd00(%rsp), %rdx
leaq 0xce8(%rsp), %rcx
callq 0x73cd0
jmp 0x11749
leaq 0xbcaa0(%rip), %rsi     # 0xce1f0
leaq 0xb90(%rsp), %rdi
callq 0x15e80
jmp 0x1175f
cmpl $0x0, 0x1398(%rsp)
je 0x1179c
movsd 0x10c8(%rsp), %xmm0
leaq 0xb90(%rsp), %rdi
callq 0x15fb0
jmp 0x11781
jmp 0x1179c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
jmp 0x11f70
leaq 0xa00(%rsp), %rdi
leaq 0xca0(%rsp), %rsi
callq 0x74030
jmp 0x117b3
leaq 0xa80(%rsp), %rdi
leaq 0xa00(%rsp), %rsi
xorl %edx, %edx
callq 0x72510
jmp 0x117cc
leaq 0xb90(%rsp), %rdi
leaq 0xa80(%rsp), %rsi
callq 0x72880
jmp 0x117e3
leaq 0xa80(%rsp), %rdi
callq 0x725b0
cmpl $0x0, 0x1388(%rsp)
je 0x11867
leaq 0x9d0(%rsp), %rdi
leaq 0x10d8(%rsp), %rsi
callq 0x15f70
jmp 0x11811
leaq 0x9e8(%rsp), %rdi
leaq 0x9d0(%rsp), %rsi
callq 0x7f7a0
jmp 0x11828
leaq 0xb90(%rsp), %rdi
leaq 0x9e8(%rsp), %rsi
callq 0x15f30
jmp 0x1183f
jmp 0x11867
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
leaq 0xa80(%rsp), %rdi
callq 0x725b0
jmp 0x11f70
leaq 0x8c0(%rsp), %rdi
leaq 0xef8(%rsp), %rsi
callq 0x15e80
jmp 0x1187e
leaq 0x8c0(%rsp), %rdi
leaq 0xb90(%rsp), %rsi
callq 0x72880
jmp 0x11895
leaq 0x7b0(%rsp), %rdi
leaq 0x8c0(%rsp), %rsi
callq 0x16010
jmp 0x118ac
movl $0x0, 0x7ac(%rsp)
cmpl $0x0, 0x13b8(%rsp)
jne 0x118d9
cmpl $0x0, 0x13c0(%rsp)
jne 0x118d9
cmpl $0x0, 0x13c8(%rsp)
je 0x119a1
movq 0x1360(%rsp), %rdi
movq 0x1078(%rsp), %rsi
movl 0x1074(%rsp), %edx
movq 0x1358(%rsp), %rcx
movq 0xd48(%rsp), %r8
movl 0xd44(%rsp), %r9d
movl 0x13b8(%rsp), %r10d
movl 0x13c0(%rsp), %r11d
movl 0x13c8(%rsp), %ebx
movq %rsp, %rax
movl %ebx, 0x20(%rax)
movl %r11d, 0x18(%rax)
movl %r10d, 0x10(%rax)
leaq 0x7b0(%rsp), %r10
movq %r10, 0x8(%rax)
leaq 0x8c0(%rsp), %r10
movq %r10, (%rax)
callq 0x14050
movl %eax, 0x24c(%rsp)
jmp 0x11952
movl 0x24c(%rsp), %eax
movl %eax, 0x7ac(%rsp)
jmp 0x119a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
jmp 0x11f63
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
leaq 0x7b0(%rsp), %rdi
callq 0x725b0
jmp 0x11f63
movq 0x1360(%rsp), %rdi
movq 0x1078(%rsp), %rsi
movl 0x1074(%rsp), %edx
movq 0x1358(%rsp), %rcx
movq 0xd48(%rsp), %r8
movl 0xd44(%rsp), %r9d
movq %rsp, %rax
leaq 0x7b0(%rsp), %r10
movq %r10, 0x8(%rax)
leaq 0x8c0(%rsp), %r10
movq %r10, (%rax)
callq 0x14630
movsd %xmm0, 0x240(%rsp)
jmp 0x119fa
movsd 0x240(%rsp), %xmm0
movsd %xmm0, 0x7a0(%rsp)
movsd 0x7a0(%rsp), %xmm1
movsd 0x10f0(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x11a72
leaq 0x1218(%rsp), %rdi
leaq 0x8c0(%rsp), %rsi
callq 0x16070
jmp 0x11a3b
leaq 0x1108(%rsp), %rdi
leaq 0x7b0(%rsp), %rsi
callq 0x16070
jmp 0x11a52
movl 0x7ac(%rsp), %eax
movl %eax, 0x10f8(%rsp)
movsd 0x7a0(%rsp), %xmm0
movsd %xmm0, 0x10f0(%rsp)
cmpl $0x0, 0xbc19b(%rip)     # 0xcdc14
je 0x11f26
leaq 0x8c0(%rsp), %rdi
callq 0x160e0
movq %rax, 0x238(%rsp)
jmp 0x11a96
movq 0x238(%rsp), %rax
movq %rax, 0x798(%rsp)
movl 0xd40(%rsp), %esi
movl 0xd3c(%rsp), %edx
movl 0xd38(%rsp), %ecx
movl 0xd34(%rsp), %r8d
leaq 0x95881(%rip), %rdi     # 0xa734b
xorl %eax, %eax
callq 0xd070
jmp 0x11ad3
leaq 0x1328(%rsp), %rdi
callq 0xa2bf0
movsd %xmm0, 0x230(%rsp)
jmp 0x11aeb
movsd 0x230(%rsp), %xmm0
leaq 0x95718(%rip), %rdi     # 0xa7213
movb $0x1, %al
callq 0xd070
jmp 0x11b04
movl 0xbb8d6(%rip), %esi     # 0xcd3e0
leaq 0x95876(%rip), %rdi     # 0xa7387
xorl %eax, %eax
callq 0xd070
jmp 0x11b1a
movq 0x798(%rsp), %rdi
xorl %esi, %esi
callq 0x160f0
movq %rax, 0x228(%rsp)
jmp 0x11b33
movq 0x228(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x218(%rsp)
movq 0x798(%rsp), %rdi
xorl %esi, %esi
callq 0x160f0
movq %rax, 0x220(%rsp)
jmp 0x11b61
movq 0x220(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x208(%rsp)
movq 0x798(%rsp), %rdi
xorl %esi, %esi
callq 0x160f0
movq %rax, 0x210(%rsp)
jmp 0x11b90
movq 0x210(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0x1f8(%rsp)
movq 0x798(%rsp), %rdi
xorl %esi, %esi
callq 0x160f0
movq %rax, 0x200(%rsp)
jmp 0x11bbf
movsd 0x1f8(%rsp), %xmm2
movsd 0x208(%rsp), %xmm1
movsd 0x218(%rsp), %xmm0
movq 0x200(%rsp), %rax
movsd 0x18(%rax), %xmm3
leaq 0x957ac(%rip), %rdi     # 0xa739a
movb $0x4, %al
callq 0xd070
jmp 0x11bf7
movq 0x798(%rsp), %rdi
movl $0x1, %esi
callq 0x160f0
movq %rax, 0x1f0(%rsp)
jmp 0x11c13
movq 0x1f0(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x1e0(%rsp)
movq 0x798(%rsp), %rdi
movl $0x1, %esi
callq 0x160f0
movq %rax, 0x1e8(%rsp)
jmp 0x11c44
movq 0x1e8(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x1d0(%rsp)
movq 0x798(%rsp), %rdi
movl $0x1, %esi
callq 0x160f0
movq %rax, 0x1d8(%rsp)
jmp 0x11c76
movq 0x1d8(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0x1c0(%rsp)
movq 0x798(%rsp), %rdi
movl $0x1, %esi
callq 0x160f0
movq %rax, 0x1c8(%rsp)
jmp 0x11ca8
movsd 0x1c0(%rsp), %xmm2
movsd 0x1d0(%rsp), %xmm1
movsd 0x1e0(%rsp), %xmm0
movq 0x1c8(%rsp), %rax
movsd 0x18(%rax), %xmm3
leaq 0x956e3(%rip), %rdi     # 0xa73ba
movb $0x4, %al
callq 0xd070
jmp 0x11ce0
movq 0x798(%rsp), %rdi
movl $0x2, %esi
callq 0x160f0
movq %rax, 0x1b8(%rsp)
jmp 0x11cfc
movq 0x1b8(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x1a8(%rsp)
movq 0x798(%rsp), %rdi
movl $0x2, %esi
callq 0x160f0
movq %rax, 0x1b0(%rsp)
jmp 0x11d2d
movq 0x1b0(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x198(%rsp)
movq 0x798(%rsp), %rdi
movl $0x2, %esi
callq 0x160f0
movq %rax, 0x1a0(%rsp)
jmp 0x11d5f
movq 0x1a0(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0x188(%rsp)
movq 0x798(%rsp), %rdi
movl $0x2, %esi
callq 0x160f0
movq %rax, 0x190(%rsp)
jmp 0x11d91
movsd 0x188(%rsp), %xmm2
movsd 0x198(%rsp), %xmm1
movsd 0x1a8(%rsp), %xmm0
movq 0x190(%rsp), %rax
movsd 0x18(%rax), %xmm3
leaq 0x9561a(%rip), %rdi     # 0xa73da
movb $0x4, %al
callq 0xd070
jmp 0x11dc9
movq 0x798(%rsp), %rdi
movl $0x3, %esi
callq 0x160f0
movq %rax, 0x180(%rsp)
jmp 0x11de5
movq 0x180(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x170(%rsp)
movq 0x798(%rsp), %rdi
movl $0x3, %esi
callq 0x160f0
movq %rax, 0x178(%rsp)
jmp 0x11e16
movq 0x178(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x160(%rsp)
movq 0x798(%rsp), %rdi
movl $0x3, %esi
callq 0x160f0
movq %rax, 0x168(%rsp)
jmp 0x11e48
movq 0x168(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0x150(%rsp)
movq 0x798(%rsp), %rdi
movl $0x3, %esi
callq 0x160f0
movq %rax, 0x158(%rsp)
jmp 0x11e7a
movsd 0x150(%rsp), %xmm2
movsd 0x160(%rsp), %xmm1
movsd 0x170(%rsp), %xmm0
movq 0x158(%rsp), %rax
movsd 0x18(%rax), %xmm3
leaq 0x95551(%rip), %rdi     # 0xa73fa
movb $0x4, %al
callq 0xd070
jmp 0x11eb2
leaq 0x8c0(%rsp), %rdi
callq 0x72750
movsd %xmm0, 0x148(%rsp)
jmp 0x11eca
movsd 0x148(%rsp), %xmm0
leaq 0x95540(%rip), %rdi     # 0xa741a
movb $0x1, %al
callq 0xd070
jmp 0x11ee3
movl 0x7ac(%rsp), %esi
leaq 0x95537(%rip), %rdi     # 0xa7428
xorl %eax, %eax
callq 0xd070
jmp 0x11efa
movsd 0x7a0(%rsp), %xmm0
leaq 0x95530(%rip), %rdi     # 0xa743a
movb $0x1, %al
callq 0xd070
jmp 0x11f13
movq 0xbb086(%rip), %rax     # 0xccfa0
movq (%rax), %rdi
callq 0xd4c0
jmp 0x11f24
jmp 0x11f26
leaq 0x7b0(%rsp), %rdi
callq 0x725b0
leaq 0x8c0(%rsp), %rdi
callq 0x725b0
leaq 0xb90(%rsp), %rdi
callq 0x725b0
movl 0xd34(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xd34(%rsp)
jmp 0x11605
leaq 0x8c0(%rsp), %rdi
callq 0x725b0
leaq 0xb90(%rsp), %rdi
callq 0x725b0
jmp 0x129ab
jmp 0x11f84
movl 0xd38(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xd38(%rsp)
jmp 0x115ec
jmp 0x11f9c
movl 0xd3c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xd3c(%rsp)
jmp 0x115be
jmp 0x11fb4
movl 0xd40(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xd40(%rsp)
jmp 0x115a5
jmp 0x12236
leaq 0xbc21a(%rip), %rsi     # 0xce1f0
leaq 0x688(%rsp), %rdi
callq 0x15e80
jmp 0x11fe5
cmpl $0x0, 0x1398(%rsp)
je 0x12022
movsd 0x10c8(%rsp), %xmm0
leaq 0x688(%rsp), %rdi
callq 0x15fb0
jmp 0x12007
jmp 0x12022
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
jmp 0x12224
cmpl $0x0, 0x1388(%rsp)
je 0x12073
leaq 0x658(%rsp), %rdi
leaq 0x10d8(%rsp), %rsi
callq 0x15f70
jmp 0x12043
leaq 0x670(%rsp), %rdi
leaq 0x658(%rsp), %rsi
callq 0x7f7a0
jmp 0x1205a
leaq 0x688(%rsp), %rdi
leaq 0x670(%rsp), %rsi
callq 0x15f30
jmp 0x12071
jmp 0x12073
leaq 0x1218(%rsp), %rdi
leaq 0xef8(%rsp), %rsi
callq 0x16070
jmp 0x1208a
leaq 0x1218(%rsp), %rdi
leaq 0x688(%rsp), %rsi
callq 0x72880
jmp 0x120a1
leaq 0x548(%rsp), %rdi
leaq 0x1218(%rsp), %rsi
callq 0x16010
jmp 0x120b8
leaq 0x1108(%rsp), %rdi
leaq 0x548(%rsp), %rsi
callq 0x16070
jmp 0x120cf
leaq 0x548(%rsp), %rdi
callq 0x725b0
cmpl $0x0, 0x13b8(%rsp)
jne 0x120fe
cmpl $0x0, 0x13c0(%rsp)
jne 0x120fe
cmpl $0x0, 0x13c8(%rsp)
je 0x121aa
movq 0x1360(%rsp), %rdi
movq 0x1078(%rsp), %rsi
movl 0x1074(%rsp), %edx
movq 0x1358(%rsp), %rcx
movq 0xd48(%rsp), %r8
movl 0xd44(%rsp), %r9d
movl 0x13b8(%rsp), %r10d
movl 0x13c0(%rsp), %r11d
movl 0x13c8(%rsp), %ebx
movq %rsp, %rax
movl %ebx, 0x20(%rax)
movl %r11d, 0x18(%rax)
movl %r10d, 0x10(%rax)
leaq 0x1108(%rsp), %r10
movq %r10, 0x8(%rax)
leaq 0x1218(%rsp), %r10
movq %r10, (%rax)
callq 0x14050
movl %eax, 0x144(%rsp)
jmp 0x12177
movl 0x144(%rsp), %eax
movl %eax, 0x10f8(%rsp)
jmp 0x121aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
leaq 0x548(%rsp), %rdi
callq 0x725b0
jmp 0x12224
movq 0x1360(%rsp), %rdi
movq 0x1078(%rsp), %rsi
movl 0x1074(%rsp), %edx
movq 0x1358(%rsp), %rcx
movq 0xd48(%rsp), %r8
movl 0xd44(%rsp), %r9d
movq %rsp, %rax
leaq 0x1108(%rsp), %r10
movq %r10, 0x8(%rax)
leaq 0x1218(%rsp), %r10
movq %r10, (%rax)
callq 0x14630
movsd %xmm0, 0x138(%rsp)
jmp 0x12203
movsd 0x138(%rsp), %xmm0
movsd %xmm0, 0x10f0(%rsp)
leaq 0x688(%rsp), %rdi
callq 0x725b0
jmp 0x12236
leaq 0x688(%rsp), %rdi
callq 0x725b0
jmp 0x129ab
cmpl $0x0, 0x13a0(%rsp)
jne 0x12258
cmpl $0x0, 0x13a8(%rsp)
jne 0x12258
cmpl $0x0, 0x13b0(%rsp)
je 0x12523
leaq 0xbbf91(%rip), %rsi     # 0xce1f0
leaq 0x438(%rsp), %rdi
callq 0x15e80
jmp 0x1226e
leaq 0xbbf7b(%rip), %rsi     # 0xce1f0
leaq 0x328(%rsp), %rdi
callq 0x15e80
jmp 0x12284
movq 0x1360(%rsp), %rdi
movq 0x1078(%rsp), %rsi
movl 0x1074(%rsp), %edx
movq 0x1358(%rsp), %rcx
movq 0xd48(%rsp), %r8
movl 0xd44(%rsp), %r9d
movl 0x13a0(%rsp), %r10d
movl 0x13a8(%rsp), %r11d
movl 0x13b0(%rsp), %ebx
movq %rsp, %rax
movl %ebx, 0x20(%rax)
movl %r11d, 0x18(%rax)
movl %r10d, 0x10(%rax)
leaq 0x328(%rsp), %r10
movq %r10, 0x8(%rax)
leaq 0x438(%rsp), %r10
movq %r10, (%rax)
movl $0x0, 0x28(%rax)
xorps %xmm0, %xmm0
callq 0x14a60
movl %eax, 0x134(%rsp)
jmp 0x12307
movl 0x134(%rsp), %eax
cmpl $0x0, %eax
jne 0x1236d
movl $0x0, 0x136c(%rsp)
movl $0x1, 0x1070(%rsp)
jmp 0x124e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
jmp 0x12511
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1100(%rsp)
movl %eax, 0x10fc(%rsp)
leaq 0x328(%rsp), %rdi
callq 0x725b0
jmp 0x12511
cmpl $0x0, 0x13b8(%rsp)
jne 0x1238f
cmpl $0x0, 0x13c0(%rsp)
jne 0x1238f
cmpl $0x0, 0x13c8(%rsp)
je 0x12416
movq 0x1360(%rsp), %rdi
movq 0x1078(%rsp), %rsi
movl 0x1074(%rsp), %edx
movq 0x1358(%rsp), %rcx
movq 0xd48(%rsp), %r8
movl 0xd44(%rsp), %r9d
movl 0x13b8(%rsp), %r10d
movl 0x13c0(%rsp), %r11d
movl 0x13c8(%rsp), %ebx
movq %rsp, %rax
movl %ebx, 0x20(%rax)
movl %r11d, 0x18(%rax)
movl %r10d, 0x10(%rax)
leaq 0x328(%rsp), %r10
movq %r10, 0x8(%rax)
leaq 0x438(%rsp), %r10
movq %r10, (%rax)
callq 0x14050
movl %eax, 0x130(%rsp)
jmp 0x12408
movl 0x130(%rsp), %eax
movl %eax, 0x10f8(%rsp)
movq 0x1360(%rsp), %rdi
movq 0x1078(%rsp), %rsi
movl 0x1074(%rsp), %edx
movq 0x1358(%rsp), %rcx
movq 0xd48(%rsp), %r8
movl 0xd44(%rsp), %r9d
movq %rsp, %rax
leaq 0x328(%rsp), %r10
movq %r10, 0x8(%rax)
leaq 0x438(%rsp), %r10
movq %r10, (%rax)
callq 0x14630
movsd %xmm0, 0x128(%rsp)
jmp 0x1246f
movsd 0x128(%rsp), %xmm0
movsd %xmm0, 0x320(%rsp)
movsd 0x320(%rsp), %xmm1
movsd 0x10f0(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x124d9
leaq 0x1218(%rsp), %rdi
leaq 0x438(%rsp), %rsi
callq 0x16070
jmp 0x124b0
leaq 0x1108(%rsp), %rdi
leaq 0x328(%rsp), %rsi
callq 0x16070
jmp 0x124c7
movsd 0x320(%rsp), %xmm0
movsd %xmm0, 0x10f0(%rsp)
movl $0x0, 0x1070(%rsp)
leaq 0x328(%rsp), %rdi
callq 0x725b0
leaq 0x438(%rsp), %rdi
callq 0x725b0
movl 0x1070(%rsp), %eax
testl %eax, %eax
jne 0x1299c
jmp 0x1250f
jmp 0x12523
leaq 0x438(%rsp), %rdi
callq 0x725b0
jmp 0x129ab
movq 0x1360(%rsp), %rdi
movq (%rdi), %rax
movq 0x118(%rax), %rax
leaq 0x1218(%rsp), %rsi
callq *%rax
jmp 0x12541
cmpl $0x0, 0xbb6c8(%rip)     # 0xcdc10
je 0x12986
leaq 0x1218(%rsp), %rdi
callq 0x160e0
movq %rax, 0x120(%rsp)
jmp 0x12565
movq 0x120(%rsp), %rax
movq %rax, 0x318(%rsp)
leaq 0x94ecb(%rip), %rdi     # 0xa7447
xorl %eax, %eax
callq 0xd070
jmp 0x12585
leaq 0x1328(%rsp), %rdi
callq 0xa2bf0
movsd %xmm0, 0x118(%rsp)
jmp 0x1259d
movsd 0x118(%rsp), %xmm0
leaq 0x94c66(%rip), %rdi     # 0xa7213
movb $0x1, %al
callq 0xd070
jmp 0x125b6
movq 0x318(%rsp), %rdi
xorl %esi, %esi
callq 0x160f0
movq %rax, 0x110(%rsp)
jmp 0x125cf
movq 0x110(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x100(%rsp)
movq 0x318(%rsp), %rdi
xorl %esi, %esi
callq 0x160f0
movq %rax, 0x108(%rsp)
jmp 0x125fd
movq 0x108(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0xf0(%rsp)
movq 0x318(%rsp), %rdi
xorl %esi, %esi
callq 0x160f0
movq %rax, 0xf8(%rsp)
jmp 0x1262c
movq 0xf8(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0xe0(%rsp)
movq 0x318(%rsp), %rdi
xorl %esi, %esi
callq 0x160f0
movq %rax, 0xe8(%rsp)
jmp 0x1265b
movsd 0xe0(%rsp), %xmm2
movsd 0xf0(%rsp), %xmm1
movsd 0x100(%rsp), %xmm0
movq 0xe8(%rsp), %rax
movsd 0x18(%rax), %xmm3
leaq 0x94d10(%rip), %rdi     # 0xa739a
movb $0x4, %al
callq 0xd070
jmp 0x12693
movq 0x318(%rsp), %rdi
movl $0x1, %esi
callq 0x160f0
movq %rax, 0xd8(%rsp)
jmp 0x126af
movq 0xd8(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0xc8(%rsp)
movq 0x318(%rsp), %rdi
movl $0x1, %esi
callq 0x160f0
movq %rax, 0xd0(%rsp)
jmp 0x126e0
movq 0xd0(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0xb8(%rsp)
movq 0x318(%rsp), %rdi
movl $0x1, %esi
callq 0x160f0
movq %rax, 0xc0(%rsp)
jmp 0x12712
movq 0xc0(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0xa8(%rsp)
movq 0x318(%rsp), %rdi
movl $0x1, %esi
callq 0x160f0
movq %rax, 0xb0(%rsp)
jmp 0x12744
movsd 0xa8(%rsp), %xmm2
movsd 0xb8(%rsp), %xmm1
movsd 0xc8(%rsp), %xmm0
movq 0xb0(%rsp), %rax
movsd 0x18(%rax), %xmm3
leaq 0x94c47(%rip), %rdi     # 0xa73ba
movb $0x4, %al
callq 0xd070
jmp 0x1277c
movq 0x318(%rsp), %rdi
movl $0x2, %esi
callq 0x160f0
movq %rax, 0xa0(%rsp)
jmp 0x12798
movq 0xa0(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x90(%rsp)
movq 0x318(%rsp), %rdi
movl $0x2, %esi
callq 0x160f0
movq %rax, 0x98(%rsp)
jmp 0x127c9
movq 0x98(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x80(%rsp)
movq 0x318(%rsp), %rdi
movl $0x2, %esi
callq 0x160f0
movq %rax, 0x88(%rsp)
jmp 0x127fb
movq 0x88(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0x70(%rsp)
movq 0x318(%rsp), %rdi
movl $0x2, %esi
callq 0x160f0
movq %rax, 0x78(%rsp)
jmp 0x12827
movsd 0x70(%rsp), %xmm2
movsd 0x80(%rsp), %xmm1
movsd 0x90(%rsp), %xmm0
movq 0x78(%rsp), %rax
movsd 0x18(%rax), %xmm3
leaq 0x94b8a(%rip), %rdi     # 0xa73da
movb $0x4, %al
callq 0xd070
jmp 0x12859
movq 0x318(%rsp), %rdi
movl $0x3, %esi
callq 0x160f0
movq %rax, 0x68(%rsp)
jmp 0x12872
movq 0x68(%rsp), %rax
movsd (%rax), %xmm0
movsd %xmm0, 0x58(%rsp)
movq 0x318(%rsp), %rdi
movl $0x3, %esi
callq 0x160f0
movq %rax, 0x60(%rsp)
jmp 0x1289a
movq 0x60(%rsp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, 0x48(%rsp)
movq 0x318(%rsp), %rdi
movl $0x3, %esi
callq 0x160f0
movq %rax, 0x50(%rsp)
jmp 0x128c3
movq 0x50(%rsp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, 0x38(%rsp)
movq 0x318(%rsp), %rdi
movl $0x3, %esi
callq 0x160f0
movq %rax, 0x40(%rsp)
jmp 0x128ec
movsd 0x38(%rsp), %xmm2
movsd 0x48(%rsp), %xmm1
movsd 0x58(%rsp), %xmm0
movq 0x40(%rsp), %rax
movsd 0x18(%rax), %xmm3
leaq 0x94aeb(%rip), %rdi     # 0xa73fa
movb $0x4, %al
callq 0xd070
jmp 0x12918
leaq 0x1218(%rsp), %rdi
callq 0x72750
movsd %xmm0, 0x30(%rsp)
jmp 0x1292d
movsd 0x30(%rsp), %xmm0
leaq 0x94ae0(%rip), %rdi     # 0xa741a
movb $0x1, %al
callq 0xd070
jmp 0x12943
movl 0x10f8(%rsp), %esi
leaq 0x94ad7(%rip), %rdi     # 0xa7428
xorl %eax, %eax
callq 0xd070
jmp 0x1295a
movsd 0x10f0(%rsp), %xmm0
leaq 0x94ad0(%rip), %rdi     # 0xa743a
movb $0x1, %al
callq 0xd070
jmp 0x12973
movq 0xba626(%rip), %rax     # 0xccfa0
movq (%rax), %rdi
callq 0xd4c0
jmp 0x12984
jmp 0x12986
movl $0x1, 0x136c(%rsp)
movl $0x1, 0x1070(%rsp)
leaq 0xef8(%rsp), %rdi
callq 0x725b0
jmp 0x129ba
leaq 0xef8(%rsp), %rdi
callq 0x725b0
jmp 0x129e4
leaq 0x1108(%rsp), %rdi
callq 0x725b0
leaq 0x1218(%rsp), %rdi
callq 0x725b0
movl 0x136c(%rsp), %eax
addq $0x1370, %rsp           # imm = 0x1370
popq %rbx
retq
leaq 0x1108(%rsp), %rdi
callq 0x725b0
leaq 0x1218(%rsp), %rdi
callq 0x725b0
movq 0x1100(%rsp), %rdi
callq 0xd6a0
nopl (%rax,%rax)