// File: lvandeve[P]lodepng/lodepng_unittest.cpp
// Function: testXYZ()
void testXYZ() {
  std::cout << "testXYZ" << std::endl;
  unsigned w = 512, h = 512;
  std::vector<unsigned char> v(w * h * 4 * 2);
  for(size_t i = 0; i < v.size(); i++) {
    v[i] = getRandom() & 255;
  }

  // Test sRGB -> XYZ -> sRGB roundtrip

  unsigned rendering_intent = 3; // test with absolute for now

  // 8-bit
  {
    // Default state, the conversions use 8-bit sRGB
    lodepng::State state;
    std::vector<float> f(w * h * 4);
    float whitepoint[3];
    assertNoError(lodepng::convertToXYZ(f.data(), whitepoint, v.data(), w, h, &state));

    std::vector<unsigned char> v2(w * h * 4);
    assertNoError(lodepng::convertFromXYZ(v2.data(), f.data(), w, h, &state, whitepoint, rendering_intent));

    for(size_t i = 0; i < v2.size(); i++) {
      ASSERT_EQUALS(v[i], v2[i]);
    }
  }

  // 16-bit
  {
    // Default state but with 16-bit, the conversions use 16-bit sRGB
    lodepng::State state;
    state.info_raw.bitdepth = 16;
    std::vector<float> f(w * h * 4);
    float whitepoint[3];
    assertNoError(lodepng::convertToXYZ(f.data(), whitepoint, v.data(), w, h, &state));

    std::vector<unsigned char> v2(w * h * 8);
    assertNoError(lodepng::convertFromXYZ(v2.data(), f.data(), w, h, &state, whitepoint, rendering_intent));

    for(size_t i = 0; i < v2.size(); i++) {
      ASSERT_EQUALS(v[i], v2[i]);
    }
  }

  // Test custom RGB+gamma -> XYZ -> custom RGB+gamma roundtrip

  LodePNGInfo info_custom;
  lodepng_info_init(&info_custom);
  info_custom.gama_defined = 1;
  info_custom.gama_gamma =   30000; // default 45455
  info_custom.chrm_defined = 1;
  info_custom.chrm_white_x = 10000; // default 31270
  info_custom.chrm_white_y = 20000; // default 32900
  info_custom.chrm_red_x =   30000; // default 64000
  info_custom.chrm_red_y =   50000; // default 33000
  info_custom.chrm_green_x = 70000; // default 30000
  info_custom.chrm_green_y = 11000; // default 60000
  info_custom.chrm_blue_x =  13000; // default 15000
  info_custom.chrm_blue_y =  17000; // default 6000

  // 8-bit
  {
    lodepng::State state;
    lodepng_info_copy(&state.info_png, &info_custom);
    std::vector<float> f(w * h * 4);
    float whitepoint[3];
    assertNoError(lodepng::convertToXYZ(f.data(), whitepoint, v.data(), w, h, &state));

    std::vector<unsigned char> v2(w * h * 4);
    assertNoError(lodepng::convertFromXYZ(v2.data(), f.data(), w, h, &state, whitepoint, rendering_intent));

    for(size_t i = 0; i < v2.size(); i++) {
      // Allow near instead of exact due to numerical issues with low values,
      // see description at the 16-bit test below.
      unsigned maxdist = 0;
      if(v[i] <= 2) maxdist = 3;
      else if(v[i] <= 4) maxdist = 2;
      else maxdist = 0;
      ASSERT_NEAR(v[i], v2[i], maxdist);
    }
  }

  // 16-bit
  {
    lodepng::State state;
    lodepng_info_copy(&state.info_png, &info_custom);
    state.info_raw.bitdepth = 16;
    std::vector<float> f(w * h * 4);
    float whitepoint[3];
    assertNoError(lodepng::convertToXYZ(f.data(), whitepoint, v.data(), w, h, &state));

    std::vector<unsigned char> v2(w * h * 8);
    assertNoError(lodepng::convertFromXYZ(v2.data(), f.data(), w, h, &state, whitepoint, rendering_intent));

    for(size_t i = 0; i < v2.size(); i += 2) {
      unsigned a = v[i + 0] * 256u + v[i + 1];
      unsigned a2 = v2[i + 0] * 256u + v2[i + 1];
      // There are numerical issues with low values due to the precision of float,
      // so allow some distance for low values (low compared to 65535).
      // The issue seems to be: the combination of how the gamma correction affects
      // low values and the color conversion matrix operating on single precision
      // floating point. With the sRGB's gamma the problem seems not to happen, maybe
      // because that linear part near 0 behaves better than power.
      // TODO: check if it can be fixed without using double for the image and without slow double precision pow.
      unsigned maxdist = 0;
      if(a < 2048) maxdist = 768;
      else if(a < 4096) maxdist = 24;
      else if(a < 16384) maxdist = 4;
      else maxdist = 2;
      ASSERT_NEAR(a, a2, maxdist);
    }
  }

  lodepng_info_cleanup(&info_custom);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1550, %rsp           # imm = 0x1550
movq 0x72376(%rip), %rdi     # 0xf7fd8
leaq 0x30b11(%rip), %rsi     # 0xb677a
callq 0x3230
movq %rax, %rdi
movq 0x72348(%rip), %rsi     # 0xf7fc0
callq 0x3280
movl $0x200, -0x4(%rbp)      # imm = 0x200
movl $0x200, -0x8(%rbp)      # imm = 0x200
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x3, %eax
movq %rax, -0x11a8(%rbp)
movb $0x0, -0x21(%rbp)
leaq -0x22(%rbp), %rdi
movq %rdi, -0x11a0(%rbp)
callq 0x1bfa0
movq -0x11a8(%rbp), %rsi
movq -0x11a0(%rbp), %rcx
leaq -0x20(%rbp), %rdi
leaq -0x21(%rbp), %rdx
callq 0xaab60
jmp 0x85ccf
leaq -0x22(%rbp), %rdi
callq 0x1bff0
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x11b8(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x1a400
movq %rax, -0x11b0(%rbp)
jmp 0x85cfd
movq -0x11b8(%rbp), %rax
movq -0x11b0(%rbp), %rcx
cmpq %rcx, %rax
jae 0x85d79
callq 0x290f0
movb %al, -0x11c1(%rbp)
movq -0x40(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x11c0(%rbp)
jmp 0x85d31
movq -0x11c0(%rbp), %rax
movb -0x11c1(%rbp), %cl
movb %cl, (%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x85ce0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x22(%rbp), %rdi
callq 0x1bff0
jmp 0x87b84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87b77
movl $0x3, -0x44(%rbp)
leaq -0x2c8(%rbp), %rdi
callq 0x11ad0
jmp 0x85d8e
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x2, %eax
movq %rax, -0x11d8(%rbp)
movl $0x0, -0x2e4(%rbp)
leaq -0x2e5(%rbp), %rdi
movq %rdi, -0x11d0(%rbp)
callq 0xab820
movq -0x11d8(%rbp), %rsi
movq -0x11d0(%rbp), %rcx
leaq -0x2e0(%rbp), %rdi
leaq -0x2e4(%rbp), %rdx
callq 0xab840
jmp 0x85de1
leaq -0x2e5(%rbp), %rdi
callq 0xab8c0
leaq -0x2e0(%rbp), %rdi
callq 0xab8e0
movq %rax, -0x11e0(%rbp)
jmp 0x85e02
leaq -0x2f4(%rbp), %rax
movq %rax, -0x11f0(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xab120
movq %rax, -0x11e8(%rbp)
jmp 0x85e22
movq -0x11e8(%rbp), %rdx
movq -0x11f0(%rbp), %rsi
movq -0x11e0(%rbp), %rdi
movl -0x4(%rbp), %ecx
movl -0x8(%rbp), %r8d
leaq -0x2c8(%rbp), %r9
callq 0x1dfd0
movl %eax, -0x11f4(%rbp)
jmp 0x85e52
movl -0x11f4(%rbp), %edi
callq 0x28fb0
jmp 0x85e5f
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x2, %eax
movq %rax, -0x1208(%rbp)
movb $0x0, -0x311(%rbp)
leaq -0x312(%rbp), %rdi
movq %rdi, -0x1200(%rbp)
callq 0x1bfa0
movq -0x1208(%rbp), %rsi
movq -0x1200(%rbp), %rcx
leaq -0x310(%rbp), %rdi
leaq -0x311(%rbp), %rdx
callq 0xaab60
jmp 0x85eaf
leaq -0x312(%rbp), %rdi
callq 0x1bff0
leaq -0x310(%rbp), %rdi
callq 0xab120
movq %rax, -0x1210(%rbp)
jmp 0x85ed0
leaq -0x2e0(%rbp), %rdi
callq 0xab8e0
movq %rax, -0x1218(%rbp)
jmp 0x85ee5
movq -0x1218(%rbp), %rsi
movq -0x1210(%rbp), %rdi
movl -0x4(%rbp), %edx
movl -0x8(%rbp), %ecx
movl -0x44(%rbp), %r8d
movq %rsp, %rax
movl %r8d, (%rax)
leaq -0x2c8(%rbp), %r8
leaq -0x2f4(%rbp), %r9
callq 0x1f890
movl %eax, -0x121c(%rbp)
jmp 0x85f1e
movl -0x121c(%rbp), %edi
callq 0x28fb0
jmp 0x85f2b
movq $0x0, -0x320(%rbp)
movq -0x320(%rbp), %rax
movq %rax, -0x1230(%rbp)
leaq -0x310(%rbp), %rdi
callq 0x1a400
movq %rax, -0x1228(%rbp)
jmp 0x85f59
movq -0x1230(%rbp), %rax
movq -0x1228(%rbp), %rcx
cmpq %rcx, %rax
jae 0x86363
movq -0x320(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1238(%rbp)
jmp 0x85f89
movq -0x1238(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0x1244(%rbp)
movq -0x320(%rbp), %rsi
leaq -0x310(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1240(%rbp)
jmp 0x85fb5
movl -0x1244(%rbp), %eax
movq -0x1240(%rbp), %rcx
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x8634a
leaq -0x3c1(%rbp), %rdi
movq %rdi, -0x1250(%rbp)
callq 0x3440
movq -0x1250(%rbp), %rdx
leaq 0x2d127(%rip), %rsi     # 0xb3115
leaq -0x3c0(%rbp), %rdi
callq 0x3340
jmp 0x85ffc
leaq 0x3077f(%rip), %rdx     # 0xb6782
leaq -0x3a0(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
callq 0xaa1b0
jmp 0x86018
leaq 0x306c4(%rip), %rdx     # 0xb66e3
leaq -0x380(%rbp), %rdi
leaq -0x3a0(%rbp), %rsi
callq 0xaa1b0
jmp 0x86034
leaq 0x3074c(%rip), %rdx     # 0xb6787
leaq -0x360(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0xaa1b0
jmp 0x86050
leaq 0x2d106(%rip), %rdx     # 0xb315d
leaq -0x340(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0xaa1b0
jmp 0x8606c
movq 0x71f65(%rip), %rdi     # 0xf7fd8
leaq -0x340(%rbp), %rsi
callq 0x3200
jmp 0x86081
leaq -0x340(%rbp), %rdi
callq 0x34a8
jmp 0x8608f
leaq -0x360(%rbp), %rdi
callq 0x34a8
jmp 0x8609d
leaq -0x380(%rbp), %rdi
callq 0x34a8
jmp 0x860ab
leaq -0x3a0(%rbp), %rdi
callq 0x34a8
jmp 0x860b9
leaq -0x3c0(%rbp), %rdi
callq 0x34a8
jmp 0x860c7
leaq -0x3c1(%rbp), %rdi
callq 0x3290
movq 0x71efe(%rip), %rdi     # 0xf7fd8
leaq 0x55d6a(%rip), %rsi     # 0xdbe4b
callq 0x3230
movq %rax, -0x1258(%rbp)
jmp 0x860ef
movq -0x320(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1260(%rbp)
jmp 0x86108
movq -0x1260(%rbp), %rsi
leaq -0x3e8(%rbp), %rdi
callq 0x28c00
jmp 0x8611d
movq -0x1258(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x3200
movq %rax, -0x1268(%rbp)
jmp 0x86139
movq -0x1268(%rbp), %rdi
leaq 0x2d02e(%rip), %rsi     # 0xb3175
callq 0x3230
movq %rax, -0x1270(%rbp)
jmp 0x86155
movq -0x320(%rbp), %rsi
leaq -0x310(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1278(%rbp)
jmp 0x86171
movq -0x1278(%rbp), %rsi
leaq -0x408(%rbp), %rdi
callq 0x28c00
jmp 0x86186
movq -0x1270(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0x3200
movq %rax, -0x1280(%rbp)
jmp 0x861a2
movq -0x1280(%rbp), %rdi
leaq 0x2ceac(%rip), %rsi     # 0xb305c
callq 0x3230
movq %rax, -0x1288(%rbp)
jmp 0x861be
movq -0x1288(%rbp), %rdi
movq 0x71df4(%rip), %rsi     # 0xf7fc0
callq 0x3280
jmp 0x861d3
leaq -0x408(%rbp), %rdi
callq 0x34a8
jmp 0x861e1
leaq -0x3e8(%rbp), %rdi
callq 0x34a8
jmp 0x861ef
callq 0x28bd0
jmp 0x861f6
jmp 0x8634a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x2e5(%rbp), %rdi
callq 0xab8c0
jmp 0x86840
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86830
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x312(%rbp), %rdi
callq 0x1bff0
jmp 0x86830
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86812
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x862fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x862ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x862dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x862cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x862bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x34a8
jmp 0x862ba
jmp 0x862bc
leaq -0x360(%rbp), %rdi
callq 0x34a8
jmp 0x862ca
jmp 0x862cc
leaq -0x380(%rbp), %rdi
callq 0x34a8
jmp 0x862da
jmp 0x862dc
leaq -0x3a0(%rbp), %rdi
callq 0x34a8
jmp 0x862ea
jmp 0x862ec
leaq -0x3c0(%rbp), %rdi
callq 0x34a8
jmp 0x862fa
jmp 0x862fc
leaq -0x3c1(%rbp), %rdi
callq 0x3290
jmp 0x86812
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86337
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x408(%rbp), %rdi
callq 0x34a8
jmp 0x86335
jmp 0x86337
leaq -0x3e8(%rbp), %rdi
callq 0x34a8
jmp 0x86345
jmp 0x86812
jmp 0x8634c
movq -0x320(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x320(%rbp)
jmp 0x85f36
leaq -0x310(%rbp), %rdi
callq 0x1a4c0
jmp 0x86371
leaq -0x2e0(%rbp), %rdi
callq 0xab900
jmp 0x8637f
leaq -0x2c8(%rbp), %rdi
callq 0x11b20
jmp 0x8638d
leaq -0x688(%rbp), %rdi
callq 0x11ad0
jmp 0x8639b
movl $0x10, -0x5dc(%rbp)
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x2, %eax
movq %rax, -0x1298(%rbp)
movl $0x0, -0x6a4(%rbp)
leaq -0x6a5(%rbp), %rdi
movq %rdi, -0x1290(%rbp)
callq 0xab820
movq -0x1298(%rbp), %rsi
movq -0x1290(%rbp), %rcx
leaq -0x6a0(%rbp), %rdi
leaq -0x6a4(%rbp), %rdx
callq 0xab840
jmp 0x863f8
leaq -0x6a5(%rbp), %rdi
callq 0xab8c0
leaq -0x6a0(%rbp), %rdi
callq 0xab8e0
movq %rax, -0x12a0(%rbp)
jmp 0x86419
leaq -0x6b4(%rbp), %rax
movq %rax, -0x12b0(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xab120
movq %rax, -0x12a8(%rbp)
jmp 0x86439
movq -0x12a8(%rbp), %rdx
movq -0x12b0(%rbp), %rsi
movq -0x12a0(%rbp), %rdi
movl -0x4(%rbp), %ecx
movl -0x8(%rbp), %r8d
leaq -0x688(%rbp), %r9
callq 0x1dfd0
movl %eax, -0x12b4(%rbp)
jmp 0x86469
movl -0x12b4(%rbp), %edi
callq 0x28fb0
jmp 0x86476
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x3, %eax
movq %rax, -0x12c8(%rbp)
movb $0x0, -0x6d1(%rbp)
leaq -0x6d2(%rbp), %rdi
movq %rdi, -0x12c0(%rbp)
callq 0x1bfa0
movq -0x12c8(%rbp), %rsi
movq -0x12c0(%rbp), %rcx
leaq -0x6d0(%rbp), %rdi
leaq -0x6d1(%rbp), %rdx
callq 0xaab60
jmp 0x864c6
leaq -0x6d2(%rbp), %rdi
callq 0x1bff0
leaq -0x6d0(%rbp), %rdi
callq 0xab120
movq %rax, -0x12d0(%rbp)
jmp 0x864e7
leaq -0x6a0(%rbp), %rdi
callq 0xab8e0
movq %rax, -0x12d8(%rbp)
jmp 0x864fc
movq -0x12d8(%rbp), %rsi
movq -0x12d0(%rbp), %rdi
movl -0x4(%rbp), %edx
movl -0x8(%rbp), %ecx
movl -0x44(%rbp), %r8d
movq %rsp, %rax
movl %r8d, (%rax)
leaq -0x688(%rbp), %r8
leaq -0x6b4(%rbp), %r9
callq 0x1f890
movl %eax, -0x12dc(%rbp)
jmp 0x86535
movl -0x12dc(%rbp), %edi
callq 0x28fb0
jmp 0x86542
movq $0x0, -0x6e0(%rbp)
movq -0x6e0(%rbp), %rax
movq %rax, -0x12f0(%rbp)
leaq -0x6d0(%rbp), %rdi
callq 0x1a400
movq %rax, -0x12e8(%rbp)
jmp 0x86570
movq -0x12f0(%rbp), %rax
movq -0x12e8(%rbp), %rcx
cmpq %rcx, %rax
jae 0x869bb
movq -0x6e0(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x12f8(%rbp)
jmp 0x865a0
movq -0x12f8(%rbp), %rax
movzbl (%rax), %eax
movl %eax, -0x1304(%rbp)
movq -0x6e0(%rbp), %rsi
leaq -0x6d0(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1300(%rbp)
jmp 0x865cc
movl -0x1304(%rbp), %eax
movq -0x1300(%rbp), %rcx
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x869a2
leaq -0x781(%rbp), %rdi
movq %rdi, -0x1310(%rbp)
callq 0x3440
movq -0x1310(%rbp), %rdx
leaq 0x2cb10(%rip), %rsi     # 0xb3115
leaq -0x780(%rbp), %rdi
callq 0x3340
jmp 0x86613
leaq 0x30173(%rip), %rdx     # 0xb678d
leaq -0x760(%rbp), %rdi
leaq -0x780(%rbp), %rsi
callq 0xaa1b0
jmp 0x8662f
leaq 0x300ad(%rip), %rdx     # 0xb66e3
leaq -0x740(%rbp), %rdi
leaq -0x760(%rbp), %rsi
callq 0xaa1b0
jmp 0x8664b
leaq 0x30135(%rip), %rdx     # 0xb6787
leaq -0x720(%rbp), %rdi
leaq -0x740(%rbp), %rsi
callq 0xaa1b0
jmp 0x86667
leaq 0x2caef(%rip), %rdx     # 0xb315d
leaq -0x700(%rbp), %rdi
leaq -0x720(%rbp), %rsi
callq 0xaa1b0
jmp 0x86683
movq 0x7194e(%rip), %rdi     # 0xf7fd8
leaq -0x700(%rbp), %rsi
callq 0x3200
jmp 0x86698
leaq -0x700(%rbp), %rdi
callq 0x34a8
jmp 0x866a6
leaq -0x720(%rbp), %rdi
callq 0x34a8
jmp 0x866b4
leaq -0x740(%rbp), %rdi
callq 0x34a8
jmp 0x866c2
leaq -0x760(%rbp), %rdi
callq 0x34a8
jmp 0x866d0
leaq -0x780(%rbp), %rdi
callq 0x34a8
jmp 0x866de
leaq -0x781(%rbp), %rdi
callq 0x3290
movq 0x718e7(%rip), %rdi     # 0xf7fd8
leaq 0x55753(%rip), %rsi     # 0xdbe4b
callq 0x3230
movq %rax, -0x1318(%rbp)
jmp 0x86706
movq -0x6e0(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1320(%rbp)
jmp 0x8671f
movq -0x1320(%rbp), %rsi
leaq -0x7a8(%rbp), %rdi
callq 0x28c00
jmp 0x86734
movq -0x1318(%rbp), %rdi
leaq -0x7a8(%rbp), %rsi
callq 0x3200
movq %rax, -0x1328(%rbp)
jmp 0x86750
movq -0x1328(%rbp), %rdi
leaq 0x2ca17(%rip), %rsi     # 0xb3175
callq 0x3230
movq %rax, -0x1330(%rbp)
jmp 0x8676c
movq -0x6e0(%rbp), %rsi
leaq -0x6d0(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1338(%rbp)
jmp 0x86788
movq -0x1338(%rbp), %rsi
leaq -0x7c8(%rbp), %rdi
callq 0x28c00
jmp 0x8679d
movq -0x1330(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
callq 0x3200
movq %rax, -0x1340(%rbp)
jmp 0x867b9
movq -0x1340(%rbp), %rdi
leaq 0x2c895(%rip), %rsi     # 0xb305c
callq 0x3230
movq %rax, -0x1348(%rbp)
jmp 0x867d5
movq -0x1348(%rbp), %rdi
movq 0x717dd(%rip), %rsi     # 0xf7fc0
callq 0x3280
jmp 0x867ea
leaq -0x7c8(%rbp), %rdi
callq 0x34a8
jmp 0x867f8
leaq -0x7a8(%rbp), %rdi
callq 0x34a8
jmp 0x86806
callq 0x28bd0
jmp 0x8680d
jmp 0x869a2
leaq -0x310(%rbp), %rdi
callq 0x1a4c0
jmp 0x86820
jmp 0x86830
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86840
leaq -0x2e0(%rbp), %rdi
callq 0xab900
jmp 0x8683e
jmp 0x86840
leaq -0x2c8(%rbp), %rdi
callq 0x11b20
jmp 0x8684e
jmp 0x87b77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x6a5(%rbp), %rdi
callq 0xab8c0
jmp 0x86cd9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86cc9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x6d2(%rbp), %rdi
callq 0x1bff0
jmp 0x86cc9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86cab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86954
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86944
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86934
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86924
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86914
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x700(%rbp), %rdi
callq 0x34a8
jmp 0x86912
jmp 0x86914
leaq -0x720(%rbp), %rdi
callq 0x34a8
jmp 0x86922
jmp 0x86924
leaq -0x740(%rbp), %rdi
callq 0x34a8
jmp 0x86932
jmp 0x86934
leaq -0x760(%rbp), %rdi
callq 0x34a8
jmp 0x86942
jmp 0x86944
leaq -0x780(%rbp), %rdi
callq 0x34a8
jmp 0x86952
jmp 0x86954
leaq -0x781(%rbp), %rdi
callq 0x3290
jmp 0x86cab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x8698f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x7c8(%rbp), %rdi
callq 0x34a8
jmp 0x8698d
jmp 0x8698f
leaq -0x7a8(%rbp), %rdi
callq 0x34a8
jmp 0x8699d
jmp 0x86cab
jmp 0x869a4
movq -0x6e0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x6e0(%rbp)
jmp 0x8654d
leaq -0x6d0(%rbp), %rdi
callq 0x1a4c0
jmp 0x869c9
leaq -0x6a0(%rbp), %rdi
callq 0xab900
jmp 0x869d7
leaq -0x688(%rbp), %rdi
callq 0x11b20
jmp 0x869e5
leaq -0x970(%rbp), %rdi
callq 0x6530
jmp 0x869f3
movl $0x1, -0x8a8(%rbp)
movl $0x7530, -0x8a4(%rbp)   # imm = 0x7530
movl $0x1, -0x8a0(%rbp)
movl $0x2710, -0x89c(%rbp)   # imm = 0x2710
movl $0x4e20, -0x898(%rbp)   # imm = 0x4E20
movl $0x7530, -0x894(%rbp)   # imm = 0x7530
movl $0xc350, -0x890(%rbp)   # imm = 0xC350
movl $0x11170, -0x88c(%rbp)  # imm = 0x11170
movl $0x2af8, -0x888(%rbp)   # imm = 0x2AF8
movl $0x32c8, -0x884(%rbp)   # imm = 0x32C8
movl $0x4268, -0x880(%rbp)   # imm = 0x4268
leaq -0xbf0(%rbp), %rdi
callq 0x11ad0
jmp 0x86a6f
leaq -0xb20(%rbp), %rdi
leaq -0x970(%rbp), %rsi
callq 0x6920
jmp 0x86a84
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x2, %eax
movq %rax, -0x1358(%rbp)
movl $0x0, -0xc0c(%rbp)
leaq -0xc0d(%rbp), %rdi
movq %rdi, -0x1350(%rbp)
callq 0xab820
movq -0x1358(%rbp), %rsi
movq -0x1350(%rbp), %rcx
leaq -0xc08(%rbp), %rdi
leaq -0xc0c(%rbp), %rdx
callq 0xab840
jmp 0x86ad7
leaq -0xc0d(%rbp), %rdi
callq 0xab8c0
leaq -0xc08(%rbp), %rdi
callq 0xab8e0
movq %rax, -0x1360(%rbp)
jmp 0x86af8
leaq -0xc1c(%rbp), %rax
movq %rax, -0x1370(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xab120
movq %rax, -0x1368(%rbp)
jmp 0x86b18
movq -0x1368(%rbp), %rdx
movq -0x1370(%rbp), %rsi
movq -0x1360(%rbp), %rdi
movl -0x4(%rbp), %ecx
movl -0x8(%rbp), %r8d
leaq -0xbf0(%rbp), %r9
callq 0x1dfd0
movl %eax, -0x1374(%rbp)
jmp 0x86b48
movl -0x1374(%rbp), %edi
callq 0x28fb0
jmp 0x86b55
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x2, %eax
movq %rax, -0x1388(%rbp)
movb $0x0, -0xc39(%rbp)
leaq -0xc3a(%rbp), %rdi
movq %rdi, -0x1380(%rbp)
callq 0x1bfa0
movq -0x1388(%rbp), %rsi
movq -0x1380(%rbp), %rcx
leaq -0xc38(%rbp), %rdi
leaq -0xc39(%rbp), %rdx
callq 0xaab60
jmp 0x86ba5
leaq -0xc3a(%rbp), %rdi
callq 0x1bff0
leaq -0xc38(%rbp), %rdi
callq 0xab120
movq %rax, -0x1390(%rbp)
jmp 0x86bc6
leaq -0xc08(%rbp), %rdi
callq 0xab8e0
movq %rax, -0x1398(%rbp)
jmp 0x86bdb
movq -0x1398(%rbp), %rsi
movq -0x1390(%rbp), %rdi
movl -0x4(%rbp), %edx
movl -0x8(%rbp), %ecx
movl -0x44(%rbp), %r8d
movq %rsp, %rax
movl %r8d, (%rax)
leaq -0xbf0(%rbp), %r8
leaq -0xc1c(%rbp), %r9
callq 0x1f890
movl %eax, -0x139c(%rbp)
jmp 0x86c14
movl -0x139c(%rbp), %edi
callq 0x28fb0
jmp 0x86c21
movq $0x0, -0xc48(%rbp)
movq -0xc48(%rbp), %rax
movq %rax, -0x13b0(%rbp)
leaq -0xc38(%rbp), %rdi
callq 0x1a400
movq %rax, -0x13a8(%rbp)
jmp 0x86c4f
movq -0x13b0(%rbp), %rax
movq -0x13a8(%rbp), %rcx
cmpq %rcx, %rax
jae 0x872af
movl $0x0, -0xc4c(%rbp)
movq -0xc48(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x13b8(%rbp)
jmp 0x86c89
movq -0x13b8(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x2, %eax
jg 0x86d59
movl $0x3, -0xc4c(%rbp)
jmp 0x86d99
leaq -0x6d0(%rbp), %rdi
callq 0x1a4c0
jmp 0x86cb9
jmp 0x86cc9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x86cd9
leaq -0x6a0(%rbp), %rdi
callq 0xab900
jmp 0x86cd7
jmp 0x86cd9
leaq -0x688(%rbp), %rdi
callq 0x11b20
jmp 0x86ce7
jmp 0x87b77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x875f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xc0d(%rbp), %rdi
callq 0xab8c0
jmp 0x875f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x875e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xc3a(%rbp), %rdi
callq 0x1bff0
jmp 0x875e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x875d7
movq -0xc48(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x13c0(%rbp)
jmp 0x86d72
movq -0x13c0(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x4, %eax
jg 0x86d8d
movl $0x2, -0xc4c(%rbp)
jmp 0x86d97
movl $0x0, -0xc4c(%rbp)
jmp 0x86d99
movq -0xc48(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x13c8(%rbp)
jmp 0x86db2
movq -0x13c8(%rbp), %rax
movb (%rax), %al
movb %al, -0x13d1(%rbp)
movq -0xc48(%rbp), %rsi
leaq -0xc38(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x13d0(%rbp)
jmp 0x86ddd
movb -0x13d1(%rbp), %al
movq -0x13d0(%rbp), %rcx
movzbl (%rcx), %esi
movl -0xc4c(%rbp), %edx
movzbl %al, %edi
callq 0xab980
movb %al, -0x13d2(%rbp)
jmp 0x86e03
movb -0x13d2(%rbp), %al
testb $0x1, %al
jne 0x87296
jmp 0x86e13
leaq -0xcf1(%rbp), %rdi
movq %rdi, -0x13e0(%rbp)
callq 0x3440
movq -0x13e0(%rbp), %rdx
leaq 0x2c2e1(%rip), %rsi     # 0xb3115
leaq -0xcf0(%rbp), %rdi
callq 0x3340
jmp 0x86e42
leaq 0x2f949(%rip), %rdx     # 0xb6792
leaq -0xcd0(%rbp), %rdi
leaq -0xcf0(%rbp), %rsi
callq 0xaa1b0
jmp 0x86e5e
leaq 0x2f87e(%rip), %rdx     # 0xb66e3
leaq -0xcb0(%rbp), %rdi
leaq -0xcd0(%rbp), %rsi
callq 0xaa1b0
jmp 0x86e7a
leaq 0x2f906(%rip), %rdx     # 0xb6787
leaq -0xc90(%rbp), %rdi
leaq -0xcb0(%rbp), %rsi
callq 0xaa1b0
jmp 0x86e96
leaq 0x2f833(%rip), %rdx     # 0xb66d0
leaq -0xc70(%rbp), %rdi
leaq -0xc90(%rbp), %rsi
callq 0xaa1b0
jmp 0x86eb2
movq 0x7111f(%rip), %rdi     # 0xf7fd8
leaq -0xc70(%rbp), %rsi
callq 0x3200
jmp 0x86ec7
leaq -0xc70(%rbp), %rdi
callq 0x34a8
jmp 0x86ed5
leaq -0xc90(%rbp), %rdi
callq 0x34a8
jmp 0x86ee3
leaq -0xcb0(%rbp), %rdi
callq 0x34a8
jmp 0x86ef1
leaq -0xcd0(%rbp), %rdi
callq 0x34a8
jmp 0x86eff
leaq -0xcf0(%rbp), %rdi
callq 0x34a8
jmp 0x86f0d
leaq -0xcf1(%rbp), %rdi
callq 0x3290
movq 0x710b8(%rip), %rdi     # 0xf7fd8
leaq 0x2f7bf(%rip), %rsi     # 0xb66e6
callq 0x3230
movq %rax, -0x13e8(%rbp)
jmp 0x86f35
movq -0xc48(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x13f0(%rbp)
jmp 0x86f4e
movq -0x13f0(%rbp), %rsi
leaq -0xd18(%rbp), %rdi
callq 0x28c00
jmp 0x86f63
movq -0x13e8(%rbp), %rdi
leaq -0xd18(%rbp), %rsi
callq 0x3200
movq %rax, -0x13f8(%rbp)
jmp 0x86f7f
movq -0x13f8(%rbp), %rdi
leaq 0x2c1e8(%rip), %rsi     # 0xb3175
callq 0x3230
movq %rax, -0x1400(%rbp)
jmp 0x86f9b
movq -0xc48(%rbp), %rsi
leaq -0xc38(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1408(%rbp)
jmp 0x86fb7
movq -0x1408(%rbp), %rsi
leaq -0xd38(%rbp), %rdi
callq 0x28c00
jmp 0x86fcc
movq -0x1400(%rbp), %rdi
leaq -0xd38(%rbp), %rsi
callq 0x3200
movq %rax, -0x1410(%rbp)
jmp 0x86fe8
movq -0x1410(%rbp), %rdi
leaq 0x2f70f(%rip), %rsi     # 0xb6705
callq 0x3230
movq %rax, -0x1418(%rbp)
jmp 0x87004
leaq -0xd58(%rbp), %rdi
leaq -0xc4c(%rbp), %rsi
callq 0xaa7f0
jmp 0x87019
movq -0x1418(%rbp), %rdi
leaq -0xd58(%rbp), %rsi
callq 0x3200
movq %rax, -0x1420(%rbp)
jmp 0x87035
movq -0x1420(%rbp), %rdi
leaq 0x2f6d3(%rip), %rsi     # 0xb6716
callq 0x3230
movq %rax, -0x1428(%rbp)
jmp 0x87051
movq -0xc48(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1430(%rbp)
jmp 0x8706a
movq -0x1430(%rbp), %rax
movb (%rax), %al
movb %al, -0x1439(%rbp)
movq -0xc48(%rbp), %rsi
leaq -0xc38(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x1438(%rbp)
jmp 0x87095
movb -0x1439(%rbp), %al
movq -0x1438(%rbp), %rcx
movzbl (%rcx), %esi
movzbl %al, %edi
callq 0xab7e0
movb %al, -0x143a(%rbp)
jmp 0x870b5
movb -0x143a(%rbp), %al
movb %al, -0xd79(%rbp)
leaq -0xd78(%rbp), %rdi
leaq -0xd79(%rbp), %rsi
callq 0x28c00
jmp 0x870d6
movq -0x1428(%rbp), %rdi
leaq -0xd78(%rbp), %rsi
callq 0x3200
movq %rax, -0x1448(%rbp)
jmp 0x870f2
movq -0x1448(%rbp), %rdi
leaq 0x2bf5c(%rip), %rsi     # 0xb305c
callq 0x3230
movq %rax, -0x1450(%rbp)
jmp 0x8710e
movq -0x1450(%rbp), %rdi
movq 0x70ea4(%rip), %rsi     # 0xf7fc0
callq 0x3280
jmp 0x87123
leaq -0xd78(%rbp), %rdi
callq 0x34a8
jmp 0x87131
leaq -0xd58(%rbp), %rdi
callq 0x34a8
jmp 0x8713f
leaq -0xd38(%rbp), %rdi
callq 0x34a8
jmp 0x8714d
leaq -0xd18(%rbp), %rdi
callq 0x34a8
jmp 0x8715b
callq 0x28bd0
jmp 0x87162
jmp 0x87296
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x8720c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x871fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x871ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x871dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x871cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xc70(%rbp), %rdi
callq 0x34a8
jmp 0x871ca
jmp 0x871cc
leaq -0xc90(%rbp), %rdi
callq 0x34a8
jmp 0x871da
jmp 0x871dc
leaq -0xcb0(%rbp), %rdi
callq 0x34a8
jmp 0x871ea
jmp 0x871ec
leaq -0xcd0(%rbp), %rdi
callq 0x34a8
jmp 0x871fa
jmp 0x871fc
leaq -0xcf0(%rbp), %rdi
callq 0x34a8
jmp 0x8720a
jmp 0x8720c
leaq -0xcf1(%rbp), %rdi
callq 0x3290
jmp 0x875d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87283
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87273
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87263
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xd78(%rbp), %rdi
callq 0x34a8
jmp 0x87261
jmp 0x87263
leaq -0xd58(%rbp), %rdi
callq 0x34a8
jmp 0x87271
jmp 0x87273
leaq -0xd38(%rbp), %rdi
callq 0x34a8
jmp 0x87281
jmp 0x87283
leaq -0xd18(%rbp), %rdi
callq 0x34a8
jmp 0x87291
jmp 0x875d7
jmp 0x87298
movq -0xc48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc48(%rbp)
jmp 0x86c2c
leaq -0xc38(%rbp), %rdi
callq 0x1a4c0
jmp 0x872bd
leaq -0xc08(%rbp), %rdi
callq 0xab900
jmp 0x872cb
leaq -0xbf0(%rbp), %rdi
callq 0x11b20
jmp 0x872d9
leaq -0x1000(%rbp), %rdi
callq 0x11ad0
jmp 0x872e7
leaq -0xf30(%rbp), %rdi
leaq -0x970(%rbp), %rsi
callq 0x6920
jmp 0x872fc
movl $0x10, -0xf54(%rbp)
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x2, %eax
movq %rax, -0x1460(%rbp)
movl $0x0, -0x101c(%rbp)
leaq -0x101d(%rbp), %rdi
movq %rdi, -0x1458(%rbp)
callq 0xab820
movq -0x1460(%rbp), %rsi
movq -0x1458(%rbp), %rcx
leaq -0x1018(%rbp), %rdi
leaq -0x101c(%rbp), %rdx
callq 0xab840
jmp 0x87359
leaq -0x101d(%rbp), %rdi
callq 0xab8c0
leaq -0x1018(%rbp), %rdi
callq 0xab8e0
movq %rax, -0x1468(%rbp)
jmp 0x8737a
leaq -0x102c(%rbp), %rax
movq %rax, -0x1478(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xab120
movq %rax, -0x1470(%rbp)
jmp 0x8739a
movq -0x1470(%rbp), %rdx
movq -0x1478(%rbp), %rsi
movq -0x1468(%rbp), %rdi
movl -0x4(%rbp), %ecx
movl -0x8(%rbp), %r8d
leaq -0x1000(%rbp), %r9
callq 0x1dfd0
movl %eax, -0x147c(%rbp)
jmp 0x873ca
movl -0x147c(%rbp), %edi
callq 0x28fb0
jmp 0x873d7
movl -0x4(%rbp), %eax
movl -0x8(%rbp), %ecx
imull %ecx, %eax
shll $0x3, %eax
movq %rax, -0x1490(%rbp)
movb $0x0, -0x1049(%rbp)
leaq -0x104a(%rbp), %rdi
movq %rdi, -0x1488(%rbp)
callq 0x1bfa0
movq -0x1490(%rbp), %rsi
movq -0x1488(%rbp), %rcx
leaq -0x1048(%rbp), %rdi
leaq -0x1049(%rbp), %rdx
callq 0xaab60
jmp 0x87427
leaq -0x104a(%rbp), %rdi
callq 0x1bff0
leaq -0x1048(%rbp), %rdi
callq 0xab120
movq %rax, -0x1498(%rbp)
jmp 0x87448
leaq -0x1018(%rbp), %rdi
callq 0xab8e0
movq %rax, -0x14a0(%rbp)
jmp 0x8745d
movq -0x14a0(%rbp), %rsi
movq -0x1498(%rbp), %rdi
movl -0x4(%rbp), %edx
movl -0x8(%rbp), %ecx
movl -0x44(%rbp), %r8d
movq %rsp, %rax
movl %r8d, (%rax)
leaq -0x1000(%rbp), %r8
leaq -0x102c(%rbp), %r9
callq 0x1f890
movl %eax, -0x14a4(%rbp)
jmp 0x87496
movl -0x14a4(%rbp), %edi
callq 0x28fb0
jmp 0x874a3
movq $0x0, -0x1058(%rbp)
movq -0x1058(%rbp), %rax
movq %rax, -0x14b8(%rbp)
leaq -0x1048(%rbp), %rdi
callq 0x1a400
movq %rax, -0x14b0(%rbp)
jmp 0x874d1
movq -0x14b8(%rbp), %rax
movq -0x14b0(%rbp), %rcx
cmpq %rcx, %rax
jae 0x87afd
movq -0x1058(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x14c0(%rbp)
jmp 0x87501
movq -0x14c0(%rbp), %rax
movzbl (%rax), %eax
shll $0x8, %eax
movl %eax, -0x14cc(%rbp)
movq -0x1058(%rbp), %rsi
incq %rsi
leaq -0x20(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x14c8(%rbp)
jmp 0x87530
movl -0x14cc(%rbp), %eax
movq -0x14c8(%rbp), %rcx
movzbl (%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x105c(%rbp)
movq -0x1058(%rbp), %rsi
leaq -0x1048(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x14d8(%rbp)
jmp 0x87564
movq -0x14d8(%rbp), %rax
movzbl (%rax), %eax
shll $0x8, %eax
movl %eax, -0x14e4(%rbp)
movq -0x1058(%rbp), %rsi
incq %rsi
leaq -0x1048(%rbp), %rdi
callq 0x1a5f0
movq %rax, -0x14e0(%rbp)
jmp 0x87596
movl -0x14e4(%rbp), %eax
movq -0x14e0(%rbp), %rcx
movzbl (%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x1060(%rbp)
movl $0x0, -0x1064(%rbp)
cmpl $0x800, -0x105c(%rbp)   # imm = 0x800
jae 0x87677
movl $0x300, -0x1064(%rbp)   # imm = 0x300
jmp 0x876b5
leaq -0xc38(%rbp), %rdi
callq 0x1a4c0
jmp 0x875e5
jmp 0x875e7
leaq -0xc08(%rbp), %rdi
callq 0xab900
jmp 0x875f5
jmp 0x875f7
leaq -0xbf0(%rbp), %rdi
callq 0x11b20
jmp 0x87605
jmp 0x87b77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87b67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x101d(%rbp), %rdi
callq 0xab8c0
jmp 0x87b67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87b57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x104a(%rbp), %rdi
callq 0x1bff0
jmp 0x87b57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87b47
cmpl $0x1000, -0x105c(%rbp)  # imm = 0x1000
jae 0x8768f
movl $0x18, -0x1064(%rbp)
jmp 0x876b3
cmpl $0x4000, -0x105c(%rbp)  # imm = 0x4000
jae 0x876a7
movl $0x4, -0x1064(%rbp)
jmp 0x876b1
movl $0x2, -0x1064(%rbp)
jmp 0x876b3
jmp 0x876b5
movl -0x105c(%rbp), %edi
movl -0x1060(%rbp), %esi
movl -0x1064(%rbp), %edx
callq 0xab9e0
movb %al, -0x14e5(%rbp)
jmp 0x876d4
movb -0x14e5(%rbp), %al
testb $0x1, %al
jne 0x87ae4
jmp 0x876e4
leaq -0x1109(%rbp), %rdi
movq %rdi, -0x14f0(%rbp)
callq 0x3440
movq -0x14f0(%rbp), %rdx
leaq 0x2ba10(%rip), %rsi     # 0xb3115
leaq -0x1108(%rbp), %rdi
callq 0x3340
jmp 0x87713
leaq 0x2f07d(%rip), %rdx     # 0xb6797
leaq -0x10e8(%rbp), %rdi
leaq -0x1108(%rbp), %rsi
callq 0xaa1b0
jmp 0x8772f
leaq 0x2efad(%rip), %rdx     # 0xb66e3
leaq -0x10c8(%rbp), %rdi
leaq -0x10e8(%rbp), %rsi
callq 0xaa1b0
jmp 0x8774b
leaq 0x2f04a(%rip), %rdx     # 0xb679c
leaq -0x10a8(%rbp), %rdi
leaq -0x10c8(%rbp), %rsi
callq 0xaa1b0
jmp 0x87767
leaq 0x2ef62(%rip), %rdx     # 0xb66d0
leaq -0x1088(%rbp), %rdi
leaq -0x10a8(%rbp), %rsi
callq 0xaa1b0
jmp 0x87783
movq 0x7084e(%rip), %rdi     # 0xf7fd8
leaq -0x1088(%rbp), %rsi
callq 0x3200
jmp 0x87798
leaq -0x1088(%rbp), %rdi
callq 0x34a8
jmp 0x877a6
leaq -0x10a8(%rbp), %rdi
callq 0x34a8
jmp 0x877b4
leaq -0x10c8(%rbp), %rdi
callq 0x34a8
jmp 0x877c2
leaq -0x10e8(%rbp), %rdi
callq 0x34a8
jmp 0x877d0
leaq -0x1108(%rbp), %rdi
callq 0x34a8
jmp 0x877de
leaq -0x1109(%rbp), %rdi
callq 0x3290
movq 0x707e7(%rip), %rdi     # 0xf7fd8
leaq 0x2eeee(%rip), %rsi     # 0xb66e6
callq 0x3230
movq %rax, -0x14f8(%rbp)
jmp 0x87806
leaq -0x1130(%rbp), %rdi
leaq -0x105c(%rbp), %rsi
callq 0xaa7f0
jmp 0x8781b
movq -0x14f8(%rbp), %rdi
leaq -0x1130(%rbp), %rsi
callq 0x3200
movq %rax, -0x1500(%rbp)
jmp 0x87837
movq -0x1500(%rbp), %rdi
leaq 0x2b930(%rip), %rsi     # 0xb3175
callq 0x3230
movq %rax, -0x1508(%rbp)
jmp 0x87853
leaq -0x1150(%rbp), %rdi
leaq -0x1060(%rbp), %rsi
callq 0xaa7f0
jmp 0x87868
movq -0x1508(%rbp), %rdi
leaq -0x1150(%rbp), %rsi
callq 0x3200
movq %rax, -0x1510(%rbp)
jmp 0x87884
movq -0x1510(%rbp), %rdi
leaq 0x2ee73(%rip), %rsi     # 0xb6705
callq 0x3230
movq %rax, -0x1518(%rbp)
jmp 0x878a0
leaq -0x1170(%rbp), %rdi
leaq -0x1064(%rbp), %rsi
callq 0xaa7f0
jmp 0x878b5
movq -0x1518(%rbp), %rdi
leaq -0x1170(%rbp), %rsi
callq 0x3200
movq %rax, -0x1520(%rbp)
jmp 0x878d1
movq -0x1520(%rbp), %rdi
leaq 0x2ee37(%rip), %rsi     # 0xb6716
callq 0x3230
movq %rax, -0x1528(%rbp)
jmp 0x878ed
movl -0x105c(%rbp), %edi
movl -0x1060(%rbp), %esi
callq 0xaba20
movl %eax, -0x152c(%rbp)
jmp 0x87906
movl -0x152c(%rbp), %eax
movl %eax, -0x1194(%rbp)
leaq -0x1190(%rbp), %rdi
leaq -0x1194(%rbp), %rsi
callq 0xaa7f0
jmp 0x87927
movq -0x1528(%rbp), %rdi
leaq -0x1190(%rbp), %rsi
callq 0x3200
movq %rax, -0x1538(%rbp)
jmp 0x87943
movq -0x1538(%rbp), %rdi
leaq 0x2b70b(%rip), %rsi     # 0xb305c
callq 0x3230
movq %rax, -0x1540(%rbp)
jmp 0x8795f
movq -0x1540(%rbp), %rdi
movq 0x70653(%rip), %rsi     # 0xf7fc0
callq 0x3280
jmp 0x87974
leaq -0x1190(%rbp), %rdi
callq 0x34a8
jmp 0x87982
leaq -0x1170(%rbp), %rdi
callq 0x34a8
jmp 0x87990
leaq -0x1150(%rbp), %rdi
callq 0x34a8
jmp 0x8799e
leaq -0x1130(%rbp), %rdi
callq 0x34a8
jmp 0x879ac
callq 0x28bd0
jmp 0x879b3
jmp 0x87ae4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87a5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87a4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87a2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87a1d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x1088(%rbp), %rdi
callq 0x34a8
jmp 0x87a1b
jmp 0x87a1d
leaq -0x10a8(%rbp), %rdi
callq 0x34a8
jmp 0x87a2b
jmp 0x87a2d
leaq -0x10c8(%rbp), %rdi
callq 0x34a8
jmp 0x87a3b
jmp 0x87a3d
leaq -0x10e8(%rbp), %rdi
callq 0x34a8
jmp 0x87a4b
jmp 0x87a4d
leaq -0x1108(%rbp), %rdi
callq 0x34a8
jmp 0x87a5b
jmp 0x87a5d
leaq -0x1109(%rbp), %rdi
callq 0x3290
jmp 0x87b47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87ad4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87ac4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x87ab4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x1190(%rbp), %rdi
callq 0x34a8
jmp 0x87ab2
jmp 0x87ab4
leaq -0x1170(%rbp), %rdi
callq 0x34a8
jmp 0x87ac2
jmp 0x87ac4
leaq -0x1150(%rbp), %rdi
callq 0x34a8
jmp 0x87ad2
jmp 0x87ad4
leaq -0x1130(%rbp), %rdi
callq 0x34a8
jmp 0x87ae2
jmp 0x87b47
jmp 0x87ae6
movq -0x1058(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x1058(%rbp)
jmp 0x874ae
leaq -0x1048(%rbp), %rdi
callq 0x1a4c0
jmp 0x87b0b
leaq -0x1018(%rbp), %rdi
callq 0xab900
jmp 0x87b19
leaq -0x1000(%rbp), %rdi
callq 0x11b20
jmp 0x87b27
leaq -0x970(%rbp), %rdi
callq 0x6890
jmp 0x87b35
leaq -0x20(%rbp), %rdi
callq 0x1a4c0
addq $0x1550, %rsp           # imm = 0x1550
popq %rbp
retq
leaq -0x1048(%rbp), %rdi
callq 0x1a4c0
jmp 0x87b55
jmp 0x87b57
leaq -0x1018(%rbp), %rdi
callq 0xab900
jmp 0x87b65
jmp 0x87b67
leaq -0x1000(%rbp), %rdi
callq 0x11b20
jmp 0x87b75
jmp 0x87b77
leaq -0x20(%rbp), %rdi
callq 0x1a4c0
jmp 0x87b82
jmp 0x87b84
movq -0x30(%rbp), %rdi
callq 0x3430
movq %rax, %rdi
callq 0x1a490
nopw %cs:(%rax,%rax)