// File: canzarlab[P]Trajan/geno/lbfgsb.cpp
// Function: LBFGSB::subsm()
void LBFGSB::subsm() {
  Vector tmp2 = _M * _c;
  Vector tmp3 = _S * tmp2.head(_S.cols()) + _Y * tmp2.tail(_Y.cols());
  Vector r = (tmp3 - (_g + _theta*(_xCP - _x))).cwiseProduct(_workingSet);
  Vector wv(_M.rows());
  wv.head(_Y.cols()) = _Y.transpose() * r;
  wv.tail(_S.cols()) = _S.transpose() * r;
  wv.tail(_S.cols()) *= _theta;

  wv.head(_Y.cols()) = _Q * wv.head(_Y.cols());
  wv.tail(_S.cols()) = _Q * wv.tail(_S.cols());
  Vector wvl = wv;
  _L.triangularView<Eigen::Lower>().solveInPlace(wvl);
  wvl = _E*wvl;
 _L.transpose().triangularView<Eigen::Upper>().solveInPlace(wvl);
  wvl.tail(_S.cols()) *= _theta;
  wvl.head(_Y.cols()) = _Q.transpose() * wvl.head(_Y.cols());
  wvl.tail(_S.cols()) = _Q.transpose() * wvl.tail(_S.cols());


  Vector tmp8 = _Y * wvl.head(_Y.cols()) + _S * wvl.tail(_S.cols());
  Vector d = 1.0/_theta * r + 1.0 / (_theta * _theta) * tmp8;
  d = d.cwiseProduct(_workingSet);


  _xSubspace = _xCP + d;
  // Project _xSubspace back to bounds.
  _xSubspace = _xSubspace.array().max(_lb.array()).min(_ub.array());

  const Scalar machinePrecision = std::numeric_limits<Scalar>::epsilon();
  Scalar dummy = (_xSubspace - _x).dot(_g);
  if (dummy < 0 || d.norm() < machinePrecision)
  {
    return;
  }

  if (_verbose)
    printf("\npositive directional derivative, using backtracking line search\n");

  // Backtrack solution
  Vector alphaLB = (d.array() >= 0).select(std::numeric_limits<Scalar>::infinity(), (_lb - _xCP).cwiseQuotient(d));
  Vector alphaUB = (d.array() <= 0).select(std::numeric_limits<Scalar>::infinity(), (_ub - _xCP).cwiseQuotient(d));

  Index indexLB;
  Scalar minAlphaLB = alphaLB.minCoeff(&indexLB);
  Index indexUB;
  Scalar minAlphaUB = alphaUB.minCoeff(&indexUB);

  Index index2 = 0;
  Scalar alpha = std::min(minAlphaLB, minAlphaUB);
  if (alpha == minAlphaUB)
    index2 = 1;

  if (alpha < 1) {
    _xSubspace = _xCP + d * alpha;
    // Just to eliminate roundoff errors.
    if (0 == index2)  // Did we hit a lower bound?
      _xSubspace(indexLB) = _lb(indexLB);
    else
      _xSubspace(indexUB) = _ub(indexUB);
  } else {
    _xSubspace = _xCP + d;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf60, %rsp            # imm = 0xF60
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rsi
movq %rsi, -0xda8(%rbp)
movq %rsi, %rdi
addq $0x110, %rdi            # imm = 0x110
addq $0x200, %rsi            # imm = 0x200
callq 0x28650
movq %rax, -0x28(%rbp)
movq %rdx, -0x20(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x28780
movq -0xda8(%rbp), %rdi
addq $0xa8, %rdi
movq %rdi, -0xda0(%rbp)
callq 0x26800
movq %rax, -0xd98(%rbp)
jmp 0x22dc8
movq -0xd98(%rbp), %rdx
leaq -0x138(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x14810
jmp 0x22de1
movq -0xda0(%rbp), %rsi
leaq -0x100(%rbp), %rdi
leaq -0x138(%rbp), %rdx
callq 0x287c0
jmp 0x22dfd
movq -0xda8(%rbp), %rdi
addq $0xc0, %rdi
movq %rdi, -0xdb8(%rbp)
callq 0x26800
movq %rax, -0xdb0(%rbp)
jmp 0x22e20
movq -0xdb0(%rbp), %rdx
leaq -0x1c0(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x16040
jmp 0x22e39
movq -0xdb8(%rbp), %rsi
leaq -0x188(%rbp), %rdi
leaq -0x1c0(%rbp), %rdx
callq 0x287c0
jmp 0x22e55
leaq -0xc0(%rbp), %rdi
leaq -0x100(%rbp), %rsi
leaq -0x188(%rbp), %rdx
callq 0x28810
jmp 0x22e71
leaq -0x38(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x28880
jmp 0x22e83
movq -0xda8(%rbp), %rdx
movq %rdx, %rax
addq $0x40, %rax
movq %rax, -0xdc8(%rbp)
movq %rdx, %rax
addq $0xd8, %rax
movq %rax, -0xdc0(%rbp)
movq %rdx, %rsi
addq $0x1d0, %rsi            # imm = 0x1D0
addq $0x10, %rdx
leaq -0x350(%rbp), %rdi
callq 0x27be0
jmp 0x22ec4
movq -0xdc0(%rbp), %rsi
leaq -0x338(%rbp), %rdi
leaq -0x350(%rbp), %rdx
callq 0x289a0
jmp 0x22ee0
movq -0xdc8(%rbp), %rsi
leaq -0x2f8(%rbp), %rdi
leaq -0x338(%rbp), %rdx
callq 0x28930
jmp 0x22efc
leaq -0x2a8(%rbp), %rdi
leaq -0x38(%rbp), %rsi
leaq -0x2f8(%rbp), %rdx
callq 0x288c0
jmp 0x22f15
movq -0xda8(%rbp), %rdx
addq $0x1e0, %rdx            # imm = 0x1E0
leaq -0x248(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x28a40
jmp 0x22f38
leaq -0x1d0(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x28ab0
jmp 0x22f4d
movq -0xda8(%rbp), %rdi
addq $0x110, %rdi            # imm = 0x110
callq 0x26850
movq %rax, -0xdd0(%rbp)
jmp 0x22f69
movq -0xdd0(%rbp), %rax
movq %rax, -0x368(%rbp)
leaq -0x360(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x13bd0
jmp 0x22f8c
movq -0xda8(%rbp), %rdi
addq $0xc0, %rdi
callq 0x26900
movq %rax, -0xdd8(%rbp)
jmp 0x22fa8
movq -0xdd8(%rbp), %rax
movq %rax, -0x380(%rbp)
leaq -0x380(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x26930
movq %rdx, -0xde8(%rbp)
movq %rax, -0xde0(%rbp)
jmp 0x22fd9
movq -0xda8(%rbp), %rdi
movq -0xde8(%rbp), %rax
movq -0xde0(%rbp), %rcx
movq %rcx, -0x378(%rbp)
movq %rax, -0x370(%rbp)
addq $0xc0, %rdi
callq 0x26800
movq %rax, -0xdf0(%rbp)
jmp 0x23011
movq -0xdf0(%rbp), %rdx
leaq -0x3b8(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x14810
jmp 0x2302d
leaq -0x3b8(%rbp), %rdi
leaq -0x378(%rbp), %rsi
callq 0x28310
jmp 0x23042
movq -0xda8(%rbp), %rdi
addq $0xa8, %rdi
callq 0x26900
movq %rax, -0xdf8(%rbp)
jmp 0x2305e
movq -0xdf8(%rbp), %rax
movq %rax, -0x3d0(%rbp)
leaq -0x3d0(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x26930
movq %rdx, -0xe08(%rbp)
movq %rax, -0xe00(%rbp)
jmp 0x2308f
movq -0xda8(%rbp), %rdi
movq -0xe08(%rbp), %rax
movq -0xe00(%rbp), %rcx
movq %rcx, -0x3c8(%rbp)
movq %rax, -0x3c0(%rbp)
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0xe10(%rbp)
jmp 0x230c7
movq -0xe10(%rbp), %rdx
leaq -0x408(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x16040
jmp 0x230e3
leaq -0x408(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
callq 0x28310
jmp 0x230f8
movq -0xda8(%rbp), %rdi
movq %rdi, %rax
addq $0xd8, %rax
movq %rax, -0xe20(%rbp)
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0xe18(%rbp)
jmp 0x23124
movq -0xe18(%rbp), %rdx
leaq -0x440(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x16040
jmp 0x23140
movq -0xe20(%rbp), %rsi
leaq -0x440(%rbp), %rdi
callq 0x28af0
jmp 0x23155
movq -0xda8(%rbp), %rdi
movq %rdi, %rax
addq $0x128, %rax            # imm = 0x128
movq %rax, -0xe30(%rbp)
addq $0xc0, %rdi
callq 0x26800
movq %rax, -0xe28(%rbp)
jmp 0x23181
movq -0xe28(%rbp), %rdx
leaq -0x4b8(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x14810
jmp 0x2319d
movq -0xe30(%rbp), %rsi
leaq -0x480(%rbp), %rdi
leaq -0x4b8(%rbp), %rdx
callq 0x287c0
jmp 0x231b9
movq -0xda8(%rbp), %rdi
addq $0xc0, %rdi
callq 0x26800
movq %rax, -0xe38(%rbp)
jmp 0x231d5
movq -0xe38(%rbp), %rdx
leaq -0x4f0(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x14810
jmp 0x231f1
leaq -0x4f0(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0x28b70
jmp 0x23206
movq -0xda8(%rbp), %rdi
movq %rdi, %rax
addq $0x128, %rax            # imm = 0x128
movq %rax, -0xe48(%rbp)
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0xe40(%rbp)
jmp 0x23232
movq -0xe40(%rbp), %rdx
leaq -0x568(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x16040
jmp 0x2324e
movq -0xe48(%rbp), %rsi
leaq -0x530(%rbp), %rdi
leaq -0x568(%rbp), %rdx
callq 0x287c0
jmp 0x2326a
movq -0xda8(%rbp), %rdi
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0xe50(%rbp)
jmp 0x23286
movq -0xe50(%rbp), %rdx
leaq -0x5a0(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x16040
jmp 0x232a2
leaq -0x5a0(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0x28b70
jmp 0x232b7
leaq -0x5b0(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0x144f0
jmp 0x232cc
movq -0xda8(%rbp), %rdi
addq $0x158, %rdi            # imm = 0x158
callq 0x28bb0
movq %rax, -0xe58(%rbp)
jmp 0x232e8
movq -0xe58(%rbp), %rax
movq %rax, -0x5b8(%rbp)
leaq -0x5b8(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x28be0
jmp 0x2330b
movq -0xda8(%rbp), %rdi
addq $0x170, %rdi            # imm = 0x170
leaq -0x5b0(%rbp), %rsi
callq 0x28650
movq %rdx, -0xe68(%rbp)
movq %rax, -0xe60(%rbp)
jmp 0x23335
movq -0xe68(%rbp), %rax
movq -0xe60(%rbp), %rcx
movq %rcx, -0x5c8(%rbp)
movq %rax, -0x5c0(%rbp)
leaq -0x5b0(%rbp), %rdi
leaq -0x5c8(%rbp), %rsi
callq 0x28c10
jmp 0x23366
movq -0xda8(%rbp), %rdi
addq $0x158, %rdi            # imm = 0x158
callq 0x26900
movq %rax, -0xe70(%rbp)
jmp 0x23382
movq -0xe70(%rbp), %rax
movq %rax, -0x5d8(%rbp)
leaq -0x5d8(%rbp), %rdi
callq 0x28c40
movq %rax, -0xe78(%rbp)
jmp 0x233a5
movq -0xe78(%rbp), %rax
movq %rax, -0x5d0(%rbp)
leaq -0x5d0(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x28c70
jmp 0x233c8
movq -0xda8(%rbp), %rdi
movq %rdi, %rax
addq $0xd8, %rax
movq %rax, -0xe88(%rbp)
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0xe80(%rbp)
jmp 0x233f4
movq -0xe80(%rbp), %rdx
leaq -0x610(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x16040
jmp 0x23410
movq -0xe88(%rbp), %rsi
leaq -0x610(%rbp), %rdi
callq 0x28af0
jmp 0x23425
movq -0xda8(%rbp), %rdi
addq $0x128, %rdi            # imm = 0x128
callq 0x26900
movq %rax, -0xe90(%rbp)
jmp 0x23441
movq -0xda8(%rbp), %rdi
movq -0xe90(%rbp), %rax
movq %rax, -0x658(%rbp)
addq $0xc0, %rdi
callq 0x26800
movq %rax, -0xe98(%rbp)
jmp 0x2346b
movq -0xe98(%rbp), %rdx
leaq -0x690(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x14810
jmp 0x23487
leaq -0x650(%rbp), %rdi
leaq -0x658(%rbp), %rsi
leaq -0x690(%rbp), %rdx
callq 0x28ca0
jmp 0x234a3
movq -0xda8(%rbp), %rdi
addq $0xc0, %rdi
callq 0x26800
movq %rax, -0xea0(%rbp)
jmp 0x234bf
movq -0xea0(%rbp), %rdx
leaq -0x6c8(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x14810
jmp 0x234db
leaq -0x6c8(%rbp), %rdi
leaq -0x650(%rbp), %rsi
callq 0x28cf0
jmp 0x234f0
movq -0xda8(%rbp), %rdi
addq $0x128, %rdi            # imm = 0x128
callq 0x26900
movq %rax, -0xea8(%rbp)
jmp 0x2350c
movq -0xda8(%rbp), %rdi
movq -0xea8(%rbp), %rax
movq %rax, -0x710(%rbp)
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0xeb0(%rbp)
jmp 0x23536
movq -0xeb0(%rbp), %rdx
leaq -0x748(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x16040
jmp 0x23552
leaq -0x708(%rbp), %rdi
leaq -0x710(%rbp), %rsi
leaq -0x748(%rbp), %rdx
callq 0x28ca0
jmp 0x2356e
movq -0xda8(%rbp), %rdi
addq $0xa8, %rdi
callq 0x26800
movq %rax, -0xeb8(%rbp)
jmp 0x2358a
movq -0xeb8(%rbp), %rdx
leaq -0x780(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x16040
jmp 0x235a6
leaq -0x780(%rbp), %rdi
leaq -0x708(%rbp), %rsi
callq 0x28cf0
jmp 0x235bb
movq -0xda8(%rbp), %rdi
addq $0xc0, %rdi
movq %rdi, -0xec8(%rbp)
callq 0x26800
movq %rax, -0xec0(%rbp)
jmp 0x235de
movq -0xec0(%rbp), %rdx
leaq -0x890(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x14810
jmp 0x235fa
movq -0xec8(%rbp), %rsi
leaq -0x858(%rbp), %rdi
leaq -0x890(%rbp), %rdx
callq 0x287c0
jmp 0x23616
movq -0xda8(%rbp), %rdi
addq $0xa8, %rdi
movq %rdi, -0xed8(%rbp)
callq 0x26800
movq %rax, -0xed0(%rbp)
jmp 0x23639
movq -0xed0(%rbp), %rdx
leaq -0x908(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x16040
jmp 0x23655
movq -0xed8(%rbp), %rsi
leaq -0x8d0(%rbp), %rdi
leaq -0x908(%rbp), %rdx
callq 0x287c0
jmp 0x23671
leaq -0x818(%rbp), %rdi
leaq -0x858(%rbp), %rsi
leaq -0x8d0(%rbp), %rdx
callq 0x28810
jmp 0x2368d
leaq -0x790(%rbp), %rdi
leaq -0x818(%rbp), %rsi
callq 0x28880
jmp 0x236a2
movq -0xda8(%rbp), %rax
movsd 0xd8(%rax), %xmm1
movsd 0xea5af(%rip), %xmm0    # 0x10dc68
divsd %xmm1, %xmm0
movsd %xmm0, -0x9c0(%rbp)
leaq -0x9b8(%rbp), %rdi
leaq -0x9c0(%rbp), %rsi
leaq -0x1d0(%rbp), %rdx
callq 0x161e0
jmp 0x236e1
movq -0xda8(%rbp), %rax
movsd 0xd8(%rax), %xmm1
mulsd %xmm1, %xmm1
movsd 0xea56c(%rip), %xmm0    # 0x10dc68
divsd %xmm1, %xmm0
movsd %xmm0, -0x9f8(%rbp)
leaq -0x9f0(%rbp), %rdi
leaq -0x9f8(%rbp), %rsi
leaq -0x790(%rbp), %rdx
callq 0x161e0
jmp 0x23724
leaq -0x988(%rbp), %rdi
leaq -0x9b8(%rbp), %rsi
leaq -0x9f0(%rbp), %rdx
callq 0x28d30
jmp 0x23740
leaq -0x918(%rbp), %rdi
leaq -0x988(%rbp), %rsi
callq 0x28da0
jmp 0x23755
movq -0xda8(%rbp), %rdx
addq $0x1e0, %rdx            # imm = 0x1E0
leaq -0xa10(%rbp), %rdi
leaq -0x918(%rbp), %rsi
callq 0x26760
jmp 0x23778
leaq -0x918(%rbp), %rdi
leaq -0xa10(%rbp), %rsi
callq 0x267d0
jmp 0x2378d
movq -0xda8(%rbp), %rsi
addq $0x1d0, %rsi            # imm = 0x1D0
leaq -0xa28(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x28de0
jmp 0x237b0
movq -0xda8(%rbp), %rdi
addq $0x210, %rdi            # imm = 0x210
leaq -0xa28(%rbp), %rsi
callq 0x28e50
jmp 0x237cc
movq -0xda8(%rbp), %rdi
addq $0x210, %rdi            # imm = 0x210
callq 0x28e80
movq %rax, -0xee0(%rbp)
jmp 0x237e8
movq -0xda8(%rbp), %rdi
movq -0xee0(%rbp), %rax
movq %rax, -0xa78(%rbp)
addq $0x20, %rdi
callq 0x28e80
movq %rax, -0xee8(%rbp)
jmp 0x2380f
movq -0xee8(%rbp), %rax
movq %rax, -0xa80(%rbp)
leaq -0xa70(%rbp), %rdi
leaq -0xa78(%rbp), %rsi
leaq -0xa80(%rbp), %rdx
callq 0x28eb0
jmp 0x23839
movq -0xda8(%rbp), %rdi
addq $0x30, %rdi
callq 0x28e80
movq %rax, -0xef0(%rbp)
jmp 0x23852
movq -0xef0(%rbp), %rax
movq %rax, -0xa88(%rbp)
leaq -0xa58(%rbp), %rdi
leaq -0xa70(%rbp), %rsi
leaq -0xa88(%rbp), %rdx
callq 0x28f20
jmp 0x2387c
movq -0xda8(%rbp), %rdi
addq $0x210, %rdi            # imm = 0x210
leaq -0xa58(%rbp), %rsi
callq 0x28f90
jmp 0x23898
callq 0x26750
movq -0xda8(%rbp), %rdx
movsd %xmm0, -0xa90(%rbp)
movq %rdx, %rsi
addq $0x210, %rsi            # imm = 0x210
addq $0x10, %rdx
leaq -0xab0(%rbp), %rdi
callq 0x27be0
jmp 0x238c8
movq -0xda8(%rbp), %rsi
addq $0x40, %rsi
leaq -0xab0(%rbp), %rdi
callq 0x28fc0
movsd %xmm0, -0xef8(%rbp)
jmp 0x238e9
movsd -0xef8(%rbp), %xmm0
movsd %xmm0, -0xa98(%rbp)
xorps %xmm0, %xmm0
ucomisd -0xa98(%rbp), %xmm0
ja 0x23936
leaq -0x918(%rbp), %rdi
callq 0x29030
movsd %xmm0, -0xf00(%rbp)
jmp 0x2391c
movsd -0xf00(%rbp), %xmm1
movsd 0xea334(%rip), %xmm0    # 0x10dc60
ucomisd %xmm1, %xmm0
jbe 0x239e6
movl $0x1, -0xab4(%rbp)
jmp 0x23e52
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
jmp 0x23efa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
jmp 0x23ef1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
jmp 0x23ee5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
jmp 0x23ed9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
jmp 0x23ecd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
jmp 0x23ec1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
jmp 0x23eb5
movq -0xda8(%rbp), %rax
testb $0x1, 0x58(%rax)
je 0x23a05
leaq 0xea4fd(%rip), %rdi     # 0x10def7
xorl %eax, %eax
callq 0xa080
jmp 0x23a03
jmp 0x23a05
leaq -0x918(%rbp), %rdi
callq 0x28e80
movq %rax, -0xf08(%rbp)
jmp 0x23a1a
movq -0xf08(%rbp), %rax
movq %rax, -0xb80(%rbp)
movq $0x0, -0xb88(%rbp)
leaq -0xb78(%rbp), %rdi
leaq -0xb80(%rbp), %rsi
leaq -0xb88(%rbp), %rdx
callq 0x29090
jmp 0x23a4f
callq 0x26640
movq -0xda8(%rbp), %rdx
movsd %xmm0, -0xb90(%rbp)
movq %rdx, %rsi
addq $0x20, %rsi
addq $0x1d0, %rdx            # imm = 0x1D0
leaq -0xbd8(%rbp), %rdi
callq 0x27be0
jmp 0x23a7f
leaq -0xbc0(%rbp), %rdi
leaq -0xbd8(%rbp), %rsi
leaq -0x918(%rbp), %rdx
callq 0x29190
jmp 0x23a9b
leaq -0xb48(%rbp), %rdi
leaq -0xb78(%rbp), %rsi
leaq -0xb90(%rbp), %rdx
leaq -0xbc0(%rbp), %rcx
callq 0x29100
jmp 0x23abe
leaq -0xac8(%rbp), %rdi
leaq -0xb48(%rbp), %rsi
callq 0x29200
jmp 0x23ad3
leaq -0x918(%rbp), %rdi
callq 0x28e80
movq %rax, -0xf10(%rbp)
jmp 0x23ae8
movq -0xf10(%rbp), %rax
movq %rax, -0xc90(%rbp)
movq $0x0, -0xc98(%rbp)
leaq -0xc88(%rbp), %rdi
leaq -0xc90(%rbp), %rsi
leaq -0xc98(%rbp), %rdx
callq 0x29240
jmp 0x23b1d
callq 0x26640
movq -0xda8(%rbp), %rdx
movsd %xmm0, -0xca0(%rbp)
movq %rdx, %rsi
addq $0x30, %rsi
addq $0x1d0, %rdx            # imm = 0x1D0
leaq -0xce8(%rbp), %rdi
callq 0x27be0
jmp 0x23b4d
leaq -0xcd0(%rbp), %rdi
leaq -0xce8(%rbp), %rsi
leaq -0x918(%rbp), %rdx
callq 0x29190
jmp 0x23b69
leaq -0xc60(%rbp), %rdi
leaq -0xc88(%rbp), %rsi
leaq -0xca0(%rbp), %rdx
leaq -0xcd0(%rbp), %rcx
callq 0x292b0
jmp 0x23b8c
leaq -0xbe8(%rbp), %rdi
leaq -0xc60(%rbp), %rsi
callq 0x29340
jmp 0x23ba1
leaq -0xac8(%rbp), %rdi
leaq -0xcf0(%rbp), %rsi
callq 0x29380
movsd %xmm0, -0xf18(%rbp)
jmp 0x23bbe
movsd -0xf18(%rbp), %xmm0
movsd %xmm0, -0xcf8(%rbp)
leaq -0xbe8(%rbp), %rdi
leaq -0xd00(%rbp), %rsi
callq 0x29380
movsd %xmm0, -0xf20(%rbp)
jmp 0x23beb
movsd -0xf20(%rbp), %xmm0
movsd %xmm0, -0xd08(%rbp)
movq $0x0, -0xd10(%rbp)
leaq -0xcf8(%rbp), %rdi
leaq -0xd08(%rbp), %rsi
callq 0x148e0
movq %rax, -0xf28(%rbp)
jmp 0x23c22
movq -0xf28(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xd18(%rbp)
movsd -0xd18(%rbp), %xmm0
ucomisd -0xd08(%rbp), %xmm0
jne 0x23c90
jp 0x23c90
movq $0x1, -0xd10(%rbp)
jmp 0x23c90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
jmp 0x23ea9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x140(%rbp)
movl %eax, -0x144(%rbp)
leaq -0xbe8(%rbp), %rdi
callq 0xff40
jmp 0x23ea9
movsd 0xe9fd0(%rip), %xmm0    # 0x10dc68
ucomisd -0xd18(%rbp), %xmm0
jbe 0x23def
movq -0xda8(%rbp), %rax
addq $0x1d0, %rax            # imm = 0x1D0
movq %rax, -0xf30(%rbp)
leaq -0xd78(%rbp), %rdi
leaq -0x918(%rbp), %rsi
leaq -0xd18(%rbp), %rdx
callq 0x29430
jmp 0x23cd6
movq -0xf30(%rbp), %rsi
leaq -0xd50(%rbp), %rdi
leaq -0xd78(%rbp), %rdx
callq 0x293c0
jmp 0x23cf2
movq -0xda8(%rbp), %rdi
addq $0x210, %rdi            # imm = 0x210
leaq -0xd50(%rbp), %rsi
callq 0x294e0
jmp 0x23d0e
xorl %eax, %eax
cmpq -0xd10(%rbp), %rax
jne 0x23d84
movq -0xda8(%rbp), %rdi
addq $0x20, %rdi
movq -0xcf0(%rbp), %rsi
callq 0x145f0
movq %rax, -0xf38(%rbp)
jmp 0x23d39
movq -0xda8(%rbp), %rdi
movq -0xf38(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xf48(%rbp)
addq $0x210, %rdi            # imm = 0x210
movq -0xcf0(%rbp), %rsi
callq 0x145f0
movq %rax, -0xf40(%rbp)
jmp 0x23d6f
movq -0xf40(%rbp), %rax
movsd -0xf48(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x23ded
movq -0xda8(%rbp), %rdi
addq $0x30, %rdi
movq -0xd00(%rbp), %rsi
callq 0x145f0
movq %rax, -0xf50(%rbp)
jmp 0x23da4
movq -0xda8(%rbp), %rdi
movq -0xf50(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0xf60(%rbp)
addq $0x210, %rdi            # imm = 0x210
movq -0xd00(%rbp), %rsi
callq 0x145f0
movq %rax, -0xf58(%rbp)
jmp 0x23dda
movq -0xf58(%rbp), %rax
movsd -0xf60(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x23e30
movq -0xda8(%rbp), %rsi
addq $0x1d0, %rsi            # imm = 0x1D0
leaq -0xd90(%rbp), %rdi
leaq -0x918(%rbp), %rdx
callq 0x28de0
jmp 0x23e12
movq -0xda8(%rbp), %rdi
addq $0x210, %rdi            # imm = 0x210
leaq -0xd90(%rbp), %rsi
callq 0x28e50
jmp 0x23e2e
jmp 0x23e30
leaq -0xbe8(%rbp), %rdi
callq 0xff40
leaq -0xac8(%rbp), %rdi
callq 0xff40
movl $0x0, -0xab4(%rbp)
leaq -0x918(%rbp), %rdi
callq 0xff40
leaq -0x790(%rbp), %rdi
callq 0xff40
leaq -0x5b0(%rbp), %rdi
callq 0xff40
leaq -0x360(%rbp), %rdi
callq 0xff40
leaq -0x1d0(%rbp), %rdi
callq 0xff40
leaq -0x38(%rbp), %rdi
callq 0xff40
leaq -0x18(%rbp), %rdi
callq 0xff40
addq $0xf60, %rsp            # imm = 0xF60
popq %rbp
retq
leaq -0xac8(%rbp), %rdi
callq 0xff40
leaq -0x918(%rbp), %rdi
callq 0xff40
leaq -0x790(%rbp), %rdi
callq 0xff40
leaq -0x5b0(%rbp), %rdi
callq 0xff40
leaq -0x360(%rbp), %rdi
callq 0xff40
leaq -0x1d0(%rbp), %rdi
callq 0xff40
leaq -0x38(%rbp), %rdi
callq 0xff40
leaq -0x18(%rbp), %rdi
callq 0xff40
movq -0x140(%rbp), %rdi
callq 0xa7c0
nop