// File: marxn[P]pupp/3rdparty/gmp/mpn/div_q.c
// Function: _gmpn_div_q
void
mpn_div_q (mp_ptr qp,
	   mp_srcptr np, mp_size_t nn,
	   mp_srcptr dp, mp_size_t dn, mp_ptr scratch)
{
  mp_ptr new_dp, new_np, tp, rp;
  mp_limb_t cy, dh, qh;
  mp_size_t new_nn, qn;
  gmp_pi1_t dinv;
  int cnt;
  TMP_DECL;
  TMP_MARK;

  ASSERT (nn >= dn);
  ASSERT (dn > 0);
  ASSERT (dp[dn - 1] != 0);
  ASSERT (! MPN_OVERLAP_P (qp, nn - dn + 1, np, nn));
  ASSERT (! MPN_OVERLAP_P (qp, nn - dn + 1, dp, dn));
  ASSERT (MPN_SAME_OR_SEPARATE_P (np, scratch, nn));

  ASSERT_ALWAYS (FUDGE >= 2);

  if (dn == 1)
    {
      mpn_divrem_1 (qp, 0L, np, nn, dp[dn - 1]);
      return;
    }

  qn = nn - dn + 1;		/* Quotient size, high limb might be zero */

  if (qn + FUDGE >= dn)
    {
      /* |________________________|
                          |_______|  */
      new_np = scratch;

      dh = dp[dn - 1];
      if (LIKELY ((dh & GMP_NUMB_HIGHBIT) == 0))
	{
	  count_leading_zeros (cnt, dh);

	  cy = mpn_lshift (new_np, np, nn, cnt);
	  new_np[nn] = cy;
	  new_nn = nn + (cy != 0);

	  new_dp = TMP_ALLOC_LIMBS (dn);
	  mpn_lshift (new_dp, dp, dn, cnt);

	  if (dn == 2)
	    {
	      qh = mpn_divrem_2 (qp, 0L, new_np, new_nn, new_dp);
	    }
	  else if (BELOW_THRESHOLD (dn, DC_DIV_Q_THRESHOLD) ||
		   BELOW_THRESHOLD (new_nn - dn, DC_DIV_Q_THRESHOLD))
	    {
	      invert_pi1 (dinv, new_dp[dn - 1], new_dp[dn - 2]);
	      qh = mpn_sbpi1_div_q (qp, new_np, new_nn, new_dp, dn, dinv.inv32);
	    }
	  else if (BELOW_THRESHOLD (dn, MUPI_DIV_Q_THRESHOLD) ||   /* fast condition */
		   BELOW_THRESHOLD (nn, 2 * MU_DIV_Q_THRESHOLD) || /* fast condition */
		   (double) (2 * (MU_DIV_Q_THRESHOLD - MUPI_DIV_Q_THRESHOLD)) * dn /* slow... */
		   + (double) MUPI_DIV_Q_THRESHOLD * nn > (double) dn * nn)   /* ...condition */
	    {
	      invert_pi1 (dinv, new_dp[dn - 1], new_dp[dn - 2]);
	      qh = mpn_dcpi1_div_q (qp, new_np, new_nn, new_dp, dn, &dinv);
	    }
	  else
	    {
	      mp_size_t itch = mpn_mu_div_q_itch (new_nn, dn, 0);
	      mp_ptr scratch = TMP_ALLOC_LIMBS (itch);
	      qh = mpn_mu_div_q (qp, new_np, new_nn, new_dp, dn, scratch);
	    }
	  if (cy == 0)
	    qp[qn - 1] = qh;
	  else if (UNLIKELY (qh != 0))
	    {
	      /* This happens only when the quotient is close to B^n and
		 mpn_*_divappr_q returned B^n.  */
	      mp_size_t i, n;
	      n = new_nn - dn;
	      for (i = 0; i < n; i++)
		qp[i] = GMP_NUMB_MAX;
	      qh = 0;		/* currently ignored */
	    }
	}
      else  /* divisor is already normalised */
	{
	  if (new_np != np)
	    MPN_COPY (new_np, np, nn);

	  if (dn == 2)
	    {
	      qh = mpn_divrem_2 (qp, 0L, new_np, nn, dp);
	    }
	  else if (BELOW_THRESHOLD (dn, DC_DIV_Q_THRESHOLD) ||
		   BELOW_THRESHOLD (nn - dn, DC_DIV_Q_THRESHOLD))
	    {
	      invert_pi1 (dinv, dh, dp[dn - 2]);
	      qh = mpn_sbpi1_div_q (qp, new_np, nn, dp, dn, dinv.inv32);
	    }
	  else if (BELOW_THRESHOLD (dn, MUPI_DIV_Q_THRESHOLD) ||   /* fast condition */
		   BELOW_THRESHOLD (nn, 2 * MU_DIV_Q_THRESHOLD) || /* fast condition */
		   (double) (2 * (MU_DIV_Q_THRESHOLD - MUPI_DIV_Q_THRESHOLD)) * dn /* slow... */
		   + (double) MUPI_DIV_Q_THRESHOLD * nn > (double) dn * nn)   /* ...condition */
	    {
	      invert_pi1 (dinv, dh, dp[dn - 2]);
	      qh = mpn_dcpi1_div_q (qp, new_np, nn, dp, dn, &dinv);
	    }
	  else
	    {
	      mp_size_t itch = mpn_mu_div_q_itch (nn, dn, 0);
	      mp_ptr scratch = TMP_ALLOC_LIMBS (itch);
	      qh = mpn_mu_div_q (qp, np, nn, dp, dn, scratch);
	    }
	  qp[nn - dn] = qh;
	}
    }
  else
    {
      /* |________________________|
                |_________________|  */
      tp = TMP_ALLOC_LIMBS (qn + 1);

      new_np = scratch;
      new_nn = 2 * qn + 1;
      if (new_np == np)
	/* We need {np,nn} to remain untouched until the final adjustment, so
	   we need to allocate separate space for new_np.  */
	new_np = TMP_ALLOC_LIMBS (new_nn + 1);


      dh = dp[dn - 1];
      if (LIKELY ((dh & GMP_NUMB_HIGHBIT) == 0))
	{
	  count_leading_zeros (cnt, dh);

	  cy = mpn_lshift (new_np, np + nn - new_nn, new_nn, cnt);
	  new_np[new_nn] = cy;

	  new_nn += (cy != 0);

	  new_dp = TMP_ALLOC_LIMBS (qn + 1);
	  mpn_lshift (new_dp, dp + dn - (qn + 1), qn + 1, cnt);
	  new_dp[0] |= dp[dn - (qn + 1) - 1] >> (GMP_NUMB_BITS - cnt);

	  if (qn + 1 == 2)
	    {
	      qh = mpn_divrem_2 (tp, 0L, new_np, new_nn, new_dp);
	    }
	  else if (BELOW_THRESHOLD (qn, DC_DIVAPPR_Q_THRESHOLD - 1))
	    {
	      invert_pi1 (dinv, new_dp[qn], new_dp[qn - 1]);
	      qh = mpn_sbpi1_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, dinv.inv32);
	    }
	  else if (BELOW_THRESHOLD (qn, MU_DIVAPPR_Q_THRESHOLD - 1))
	    {
	      invert_pi1 (dinv, new_dp[qn], new_dp[qn - 1]);
	      qh = mpn_dcpi1_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, &dinv);
	    }
	  else
	    {
	      mp_size_t itch = mpn_mu_divappr_q_itch (new_nn, qn + 1, 0);
	      mp_ptr scratch = TMP_ALLOC_LIMBS (itch);
	      qh = mpn_mu_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, scratch);
	    }
	  if (cy == 0)
	    tp[qn] = qh;
	  else if (UNLIKELY (qh != 0))
	    {
	      /* This happens only when the quotient is close to B^n and
		 mpn_*_divappr_q returned B^n.  */
	      mp_size_t i, n;
	      n = new_nn - (qn + 1);
	      for (i = 0; i < n; i++)
		tp[i] = GMP_NUMB_MAX;
	      qh = 0;		/* currently ignored */
	    }
	}
      else  /* divisor is already normalised */
	{
	  MPN_COPY (new_np, np + nn - new_nn, new_nn); /* pointless if MU will be used */

	  new_dp = (mp_ptr) dp + dn - (qn + 1);

	  if (qn == 2 - 1)
	    {
	      qh = mpn_divrem_2 (tp, 0L, new_np, new_nn, new_dp);
	    }
	  else if (BELOW_THRESHOLD (qn, DC_DIVAPPR_Q_THRESHOLD - 1))
	    {
	      invert_pi1 (dinv, dh, new_dp[qn - 1]);
	      qh = mpn_sbpi1_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, dinv.inv32);
	    }
	  else if (BELOW_THRESHOLD (qn, MU_DIVAPPR_Q_THRESHOLD - 1))
	    {
	      invert_pi1 (dinv, dh, new_dp[qn - 1]);
	      qh = mpn_dcpi1_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, &dinv);
	    }
	  else
	    {
	      mp_size_t itch = mpn_mu_divappr_q_itch (new_nn, qn + 1, 0);
	      mp_ptr scratch = TMP_ALLOC_LIMBS (itch);
	      qh = mpn_mu_divappr_q (tp, new_np, new_nn, new_dp, qn + 1, scratch);
	    }
	  tp[qn] = qh;
	}

      MPN_COPY (qp, tp + 1, qn);
      if (tp[0] <= 4)
        {
	  mp_size_t rn;

          rp = TMP_ALLOC_LIMBS (dn + qn);
          mpn_mul (rp, dp, dn, tp + 1, qn);
	  rn = dn + qn;
	  rn -= rp[rn - 1] == 0;

          if (rn > nn || mpn_cmp (np, rp, nn) < 0)
            mpn_decr_u (qp, 1);
        }
    }

  TMP_FREE;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2f0, %rsp            # imm = 0x2F0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq $0x0, -0x90(%rbp)
jmp 0x3b120
jmp 0x3b122
jmp 0x3b124
jmp 0x3b126
jmp 0x3b128
jmp 0x3b12a
jmp 0x3b12c
jmp 0x3b12e
jmp 0x3b130
jmp 0x3b132
jmp 0x3b134
jmp 0x3b136
jmp 0x3b138
cmpq $0x1, -0x28(%rbp)
jne 0x3b169
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rsi
subq $0x1, %rsi
movq (%rax,%rsi,8), %r8
xorl %eax, %eax
movl %eax, %esi
callq 0x37ba0
jmp 0x3cdd5
movq -0x18(%rbp), %rax
subq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
addq $0x5, %rax
cmpq -0x28(%rbp), %rax
jl 0x3be73
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x60(%rbp)
movabsq $-0x8000000000000000, %rax # imm = 0x8000000000000000
andq -0x60(%rbp), %rax
cmpq $0x0, %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b92c
jmp 0x3b1da
jmp 0x3b1dc
jmp 0x3b1de
movq -0x60(%rbp), %rax
movq %rax, -0x290(%rbp)
bsrq -0x290(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
xorq $0x3f, %rax
movl %eax, -0x84(%rbp)
movq -0x40(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movl -0x84(%rbp), %ecx
callq 0x37320
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdx
movq -0x40(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x18(%rbp), %rax
cmpq $0x0, -0x58(%rbp)
setne %cl
andb $0x1, %cl
movzbl %cl, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x28(%rbp), %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b29b
movq -0x28(%rbp), %rax
leaq 0xf(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2a8(%rbp)
jmp 0x3b2b6
movq -0x28(%rbp), %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2a8(%rbp)
movq -0x2a8(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movl -0x84(%rbp), %ecx
callq 0x37320
cmpq $0x2, -0x28(%rbp)
jne 0x3b301
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rdx
movq -0x70(%rbp), %rcx
movq -0x38(%rbp), %r8
xorl %eax, %eax
movl %eax, %esi
callq 0x37dc0
movq %rax, -0x68(%rbp)
jmp 0x3b88f
cmpq $0x108, -0x28(%rbp)     # imm = 0x108
jl 0x3b31f
movq -0x70(%rbp), %rax
subq -0x28(%rbp), %rax
cmpq $0x108, %rax            # imm = 0x108
jge 0x3b550
jmp 0x3b321
jmp 0x3b323
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x55530
movq %rax, -0xa0(%rbp)
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
imulq -0xa0(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
addq -0xa8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x2, %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x3b437
movq -0xa0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xa0(%rbp)
movq -0xa8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0xc0(%rbp)
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rcx
movq -0xa8(%rbp), %rax
subq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0xc0(%rbp), %rax
addq -0xa0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0xc0(%rbp), %rcx
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rdx
subq $0x1, %rdx
andq (%rax,%rdx,8), %rcx
movq -0xa8(%rbp), %rax
subq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
movq -0xa0(%rbp), %rcx
movq %rcx, -0x298(%rbp)
mulq -0x298(%rbp)
movq %rax, -0xb8(%rbp)
movq %rdx, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
addq -0xa8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
cmpq -0xb0(%rbp), %rax
jae 0x3b51f
movq -0xa0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xa0(%rbp)
movq -0xa8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b51d
movq -0xa8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
ja 0x3b509
movq -0xb8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x2, %rdx
cmpq (%rcx,%rdx,8), %rax
jb 0x3b51b
movq -0xa0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xa0(%rbp)
jmp 0x3b51d
jmp 0x3b51f
movq -0xa0(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x80(%rbp), %r9
callq 0x4f470
movq %rax, -0x68(%rbp)
jmp 0x3b88d
cmpq $0x5d, -0x28(%rbp)
jl 0x3b5a3
cmpq $0xdb0, -0x18(%rbp)     # imm = 0xDB0
jl 0x3b5a3
cvtsi2sdq -0x28(%rbp), %xmm0
cvtsi2sdq -0x18(%rbp), %xmm2
movsd 0x28553(%rip), %xmm1    # 0x63ac8
mulsd %xmm2, %xmm1
movsd 0x2853f(%rip), %xmm2    # 0x63ac0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsi2sdq -0x28(%rbp), %xmm1
cvtsi2sdq -0x18(%rbp), %xmm2
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x3b7d4
jmp 0x3b5a5
jmp 0x3b5a7
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x55530
movq %rax, -0xc8(%rbp)
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
imulq -0xc8(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
addq -0xd0(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x2, %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x3b6bb
movq -0xc8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xc8(%rbp)
movq -0xd0(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0xe8(%rbp)
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rcx
movq -0xd0(%rbp), %rax
subq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0xe8(%rbp), %rax
addq -0xc8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xe8(%rbp), %rcx
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rdx
subq $0x1, %rdx
andq (%rax,%rdx,8), %rcx
movq -0xd0(%rbp), %rax
subq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0x38(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
movq -0xc8(%rbp), %rcx
movq %rcx, -0x2a0(%rbp)
mulq -0x2a0(%rbp)
movq %rax, -0xe0(%rbp)
movq %rdx, -0xd8(%rbp)
movq -0xd8(%rbp), %rax
addq -0xd0(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rax
cmpq -0xd8(%rbp), %rax
jae 0x3b7a3
movq -0xc8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xc8(%rbp)
movq -0xd0(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b7a1
movq -0xd0(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
ja 0x3b78d
movq -0xe0(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x2, %rdx
cmpq (%rcx,%rdx,8), %rax
jb 0x3b79f
movq -0xc8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x3b7a1
jmp 0x3b7a3
movq -0xc8(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %r8
leaq -0x80(%rbp), %r9
callq 0x517d0
movq %rax, -0x68(%rbp)
jmp 0x3b88b
movq -0x70(%rbp), %rdi
movq -0x28(%rbp), %rsi
xorl %edx, %edx
callq 0x552e0
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b83b
movq -0xf0(%rbp), %rax
leaq 0xf(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2b0(%rbp)
jmp 0x3b859
movq -0xf0(%rbp), %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2b0(%rbp)
movq -0x2b0(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0xf8(%rbp), %r9
callq 0x54e30
movq %rax, -0x68(%rbp)
jmp 0x3b88d
jmp 0x3b88f
cmpq $0x0, -0x58(%rbp)
jne 0x3b8ac
movq -0x68(%rbp), %rdx
movq -0x8(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x3b927
cmpq $0x0, -0x68(%rbp)
setne %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b925
movq -0x70(%rbp), %rax
subq -0x28(%rbp), %rax
movq %rax, -0x108(%rbp)
movq $0x0, -0x100(%rbp)
movq -0x100(%rbp), %rax
cmpq -0x108(%rbp), %rax
jge 0x3b91d
movq -0x8(%rbp), %rax
movq -0x100(%rbp), %rcx
movq $-0x1, (%rax,%rcx,8)
movq -0x100(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x100(%rbp)
jmp 0x3b8e6
movq $0x0, -0x68(%rbp)
jmp 0x3b927
jmp 0x3be6e
movq -0x40(%rbp), %rax
cmpq -0x10(%rbp), %rax
je 0x3b95b
jmp 0x3b938
jmp 0x3b93a
jmp 0x3b93c
jmp 0x3b93e
jmp 0x3b940
jmp 0x3b942
jmp 0x3b944
jmp 0x3b946
movq -0x40(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x554c6
jmp 0x3b959
jmp 0x3b95b
cmpq $0x2, -0x28(%rbp)
jne 0x3b984
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rdx
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %r8
xorl %eax, %eax
movl %eax, %esi
callq 0x37dc0
movq %rax, -0x68(%rbp)
jmp 0x3be5a
cmpq $0x108, -0x28(%rbp)     # imm = 0x108
jl 0x3b9a2
movq -0x18(%rbp), %rax
subq -0x28(%rbp), %rax
cmpq $0x108, %rax            # imm = 0x108
jge 0x3bb77
jmp 0x3b9a4
jmp 0x3b9a6
movq -0x60(%rbp), %rdi
callq 0x55530
movq %rax, -0x110(%rbp)
movq -0x60(%rbp), %rax
imulq -0x110(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
addq -0x118(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x118(%rbp), %rax
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x2, %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x3ba7a
movq -0x110(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x110(%rbp)
movq -0x118(%rbp), %rax
cmpq -0x60(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x130(%rbp)
movq -0x60(%rbp), %rcx
movq -0x118(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x118(%rbp)
movq -0x130(%rbp), %rax
addq -0x110(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x130(%rbp), %rcx
andq -0x60(%rbp), %rcx
movq -0x118(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x118(%rbp)
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
movq -0x110(%rbp), %rcx
movq %rcx, -0x280(%rbp)
mulq -0x280(%rbp)
movq %rax, -0x128(%rbp)
movq %rdx, -0x120(%rbp)
movq -0x120(%rbp), %rax
addq -0x118(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x118(%rbp), %rax
cmpq -0x120(%rbp), %rax
jae 0x3bb46
movq -0x110(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x110(%rbp)
movq -0x118(%rbp), %rax
cmpq -0x60(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3bb44
movq -0x118(%rbp), %rax
cmpq -0x60(%rbp), %rax
ja 0x3bb30
movq -0x128(%rbp), %rax
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x2, %rdx
cmpq (%rcx,%rdx,8), %rax
jb 0x3bb42
movq -0x110(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x110(%rbp)
jmp 0x3bb44
jmp 0x3bb46
movq -0x110(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x80(%rbp), %r9
callq 0x4f470
movq %rax, -0x68(%rbp)
jmp 0x3be58
cmpq $0x5d, -0x28(%rbp)
jl 0x3bbca
cmpq $0xdb0, -0x18(%rbp)     # imm = 0xDB0
jl 0x3bbca
cvtsi2sdq -0x28(%rbp), %xmm0
cvtsi2sdq -0x18(%rbp), %xmm2
movsd 0x27f2c(%rip), %xmm1    # 0x63ac8
mulsd %xmm2, %xmm1
movsd 0x27f18(%rip), %xmm2    # 0x63ac0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsi2sdq -0x28(%rbp), %xmm1
cvtsi2sdq -0x18(%rbp), %xmm2
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x3bd9f
jmp 0x3bbcc
jmp 0x3bbce
movq -0x60(%rbp), %rdi
callq 0x55530
movq %rax, -0x138(%rbp)
movq -0x60(%rbp), %rax
imulq -0x138(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
addq -0x140(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rax
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x2, %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x3bca2
movq -0x138(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x138(%rbp)
movq -0x140(%rbp), %rax
cmpq -0x60(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x158(%rbp)
movq -0x60(%rbp), %rcx
movq -0x140(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x140(%rbp)
movq -0x158(%rbp), %rax
addq -0x138(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x158(%rbp), %rcx
andq -0x60(%rbp), %rcx
movq -0x140(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x140(%rbp)
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
movq -0x138(%rbp), %rcx
movq %rcx, -0x288(%rbp)
mulq -0x288(%rbp)
movq %rax, -0x150(%rbp)
movq %rdx, -0x148(%rbp)
movq -0x148(%rbp), %rax
addq -0x140(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x140(%rbp), %rax
cmpq -0x148(%rbp), %rax
jae 0x3bd6e
movq -0x138(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x138(%rbp)
movq -0x140(%rbp), %rax
cmpq -0x60(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3bd6c
movq -0x140(%rbp), %rax
cmpq -0x60(%rbp), %rax
ja 0x3bd58
movq -0x150(%rbp), %rax
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %rdx
subq $0x2, %rdx
cmpq (%rcx,%rdx,8), %rax
jb 0x3bd6a
movq -0x138(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x138(%rbp)
jmp 0x3bd6c
jmp 0x3bd6e
movq -0x138(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
leaq -0x80(%rbp), %r9
callq 0x517d0
movq %rax, -0x68(%rbp)
jmp 0x3be56
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rsi
xorl %edx, %edx
callq 0x552e0
movq %rax, -0x160(%rbp)
movq -0x160(%rbp), %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3be06
movq -0x160(%rbp), %rax
leaq 0xf(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2b8(%rbp)
jmp 0x3be24
movq -0x160(%rbp), %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2b8(%rbp)
movq -0x2b8(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x168(%rbp), %r9
callq 0x54e30
movq %rax, -0x68(%rbp)
jmp 0x3be58
jmp 0x3be5a
movq -0x68(%rbp), %rdx
movq -0x8(%rbp), %rax
movq -0x18(%rbp), %rcx
subq -0x28(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x3cda2
movq -0x78(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3bec2
movq -0x78(%rbp), %rax
leaq 0x17(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2c0(%rbp)
jmp 0x3bee1
movq -0x78(%rbp), %rsi
addq $0x1, %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2c0(%rbp)
movq -0x2c0(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x78(%rbp), %rax
shlq %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x10(%rbp), %rax
jne 0x3bf86
movq -0x70(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3bf5c
movq -0x70(%rbp), %rax
leaq 0x17(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2c8(%rbp)
jmp 0x3bf7b
movq -0x70(%rbp), %rsi
addq $0x1, %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2c8(%rbp)
movq -0x2c8(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x60(%rbp)
movabsq $-0x8000000000000000, %rax # imm = 0x8000000000000000
andq -0x60(%rbp), %rax
cmpq $0x0, %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3c725
jmp 0x3bfcd
jmp 0x3bfcf
jmp 0x3bfd1
movq -0x60(%rbp), %rax
movq %rax, -0x268(%rbp)
bsrq -0x268(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x170(%rbp), %rax
xorq $0x3f, %rax
movl %eax, -0x84(%rbp)
movq -0x40(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
xorl %eax, %eax
subq -0x70(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x70(%rbp), %rdx
movl -0x84(%rbp), %ecx
callq 0x37320
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdx
movq -0x40(%rbp), %rax
movq -0x70(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
cmpq $0x0, -0x58(%rbp)
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
addq -0x70(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x78(%rbp), %rax
addq $0x1, %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3c0a5
movq -0x78(%rbp), %rax
leaq 0x17(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2d0(%rbp)
jmp 0x3c0c4
movq -0x78(%rbp), %rsi
addq $0x1, %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2d0(%rbp)
movq -0x2d0(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x78(%rbp), %rcx
addq $0x1, %rcx
xorl %eax, %eax
subq %rcx, %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x78(%rbp), %rdx
addq $0x1, %rdx
movl -0x84(%rbp), %ecx
callq 0x37320
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
movq -0x78(%rbp), %rdx
addq $0x1, %rdx
subq %rdx, %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movl $0x40, %ecx
subl -0x84(%rbp), %ecx
movl %ecx, %ecx
shrq %cl, %rax
movq %rax, %rcx
movq -0x38(%rbp), %rax
orq (%rax), %rcx
movq %rcx, (%rax)
movq -0x78(%rbp), %rax
addq $0x1, %rax
cmpq $0x2, %rax
jne 0x3c171
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rdx
movq -0x70(%rbp), %rcx
movq -0x38(%rbp), %r8
xorl %eax, %eax
movl %eax, %esi
callq 0x37dc0
movq %rax, -0x68(%rbp)
jmp 0x3c682
cmpq $0x107, -0x78(%rbp)     # imm = 0x107
jge 0x3c398
jmp 0x3c181
jmp 0x3c183
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x55530
movq %rax, -0x178(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
movq (%rax,%rcx,8), %rax
imulq -0x178(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
addq -0x180(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x180(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x3c283
movq -0x178(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x178(%rbp)
movq -0x180(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x198(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x180(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x180(%rbp)
movq -0x198(%rbp), %rax
addq -0x178(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x198(%rbp), %rcx
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rdx
andq (%rax,%rdx,8), %rcx
movq -0x180(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x180(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movq -0x178(%rbp), %rcx
movq %rcx, -0x270(%rbp)
mulq -0x270(%rbp)
movq %rax, -0x190(%rbp)
movq %rdx, -0x188(%rbp)
movq -0x188(%rbp), %rax
addq -0x180(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x180(%rbp), %rax
cmpq -0x188(%rbp), %rax
jae 0x3c363
movq -0x178(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x178(%rbp)
movq -0x180(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3c361
movq -0x180(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
ja 0x3c34d
movq -0x190(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
jb 0x3c35f
movq -0x178(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x178(%rbp)
jmp 0x3c361
jmp 0x3c363
movq -0x178(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %r8
addq $0x1, %r8
movq -0x80(%rbp), %r9
callq 0x50ac0
movq %rax, -0x68(%rbp)
jmp 0x3c680
cmpq $0x6d7, -0x78(%rbp)     # imm = 0x6D7
jge 0x3c5bf
jmp 0x3c3a8
jmp 0x3c3aa
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x55530
movq %rax, -0x1a0(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
movq (%rax,%rcx,8), %rax
imulq -0x1a0(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
addq -0x1a8(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x1a8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x3c4aa
movq -0x1a0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x1a0(%rbp)
movq -0x1a8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x1c0(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x1a8(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x1a8(%rbp)
movq -0x1c0(%rbp), %rax
addq -0x1a0(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x1c0(%rbp), %rcx
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rdx
andq (%rax,%rdx,8), %rcx
movq -0x1a8(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x1a8(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movq -0x1a0(%rbp), %rcx
movq %rcx, -0x278(%rbp)
mulq -0x278(%rbp)
movq %rax, -0x1b8(%rbp)
movq %rdx, -0x1b0(%rbp)
movq -0x1b0(%rbp), %rax
addq -0x1a8(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x1a8(%rbp), %rax
cmpq -0x1b0(%rbp), %rax
jae 0x3c58a
movq -0x1a0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x1a0(%rbp)
movq -0x1a8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3c588
movq -0x1a8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
cmpq (%rcx,%rdx,8), %rax
ja 0x3c574
movq -0x1b8(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
jb 0x3c586
movq -0x1a0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x1a0(%rbp)
jmp 0x3c588
jmp 0x3c58a
movq -0x1a0(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %r8
addq $0x1, %r8
leaq -0x80(%rbp), %r9
callq 0x52c00
movq %rax, -0x68(%rbp)
jmp 0x3c67e
movq -0x70(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq $0x1, %rsi
xorl %edx, %edx
callq 0x54cd0
movq %rax, -0x1c8(%rbp)
movq -0x1c8(%rbp), %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3c62a
movq -0x1c8(%rbp), %rax
leaq 0xf(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2d8(%rbp)
jmp 0x3c648
movq -0x1c8(%rbp), %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2d8(%rbp)
movq -0x2d8(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %r8
addq $0x1, %r8
movq -0x1d0(%rbp), %r9
callq 0x54300
movq %rax, -0x68(%rbp)
jmp 0x3c680
jmp 0x3c682
cmpq $0x0, -0x58(%rbp)
jne 0x3c69e
movq -0x68(%rbp), %rdx
movq -0x48(%rbp), %rax
movq -0x78(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x3c720
cmpq $0x0, -0x68(%rbp)
setne %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3c71e
movq -0x70(%rbp), %rax
movq -0x78(%rbp), %rcx
addq $0x1, %rcx
subq %rcx, %rax
movq %rax, -0x1e0(%rbp)
movq $0x0, -0x1d8(%rbp)
movq -0x1d8(%rbp), %rax
cmpq -0x1e0(%rbp), %rax
jge 0x3c716
movq -0x48(%rbp), %rax
movq -0x1d8(%rbp), %rcx
movq $-0x1, (%rax,%rcx,8)
movq -0x1d8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x1d8(%rbp)
jmp 0x3c6df
movq $0x0, -0x68(%rbp)
jmp 0x3c720
jmp 0x3cc51
jmp 0x3c727
jmp 0x3c729
jmp 0x3c72b
jmp 0x3c72d
jmp 0x3c72f
jmp 0x3c731
jmp 0x3c733
jmp 0x3c735
movq -0x40(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
xorl %eax, %eax
subq -0x70(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x70(%rbp), %rdx
callq 0x554c6
jmp 0x3c760
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x78(%rbp), %rdx
addq $0x1, %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
cmpq $0x1, -0x78(%rbp)
jne 0x3c7b0
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rdx
movq -0x70(%rbp), %rcx
movq -0x38(%rbp), %r8
xorl %eax, %eax
movl %eax, %esi
callq 0x37dc0
movq %rax, -0x68(%rbp)
jmp 0x3cc41
cmpq $0x107, -0x78(%rbp)     # imm = 0x107
jge 0x3c997
jmp 0x3c7c0
jmp 0x3c7c2
movq -0x60(%rbp), %rdi
callq 0x55530
movq %rax, -0x1e8(%rbp)
movq -0x60(%rbp), %rax
imulq -0x1e8(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
addq -0x1f0(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x3c896
movq -0x1e8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x1e8(%rbp)
movq -0x1f0(%rbp), %rax
cmpq -0x60(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x208(%rbp)
movq -0x60(%rbp), %rcx
movq -0x1f0(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x1f0(%rbp)
movq -0x208(%rbp), %rax
addq -0x1e8(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq -0x208(%rbp), %rcx
andq -0x60(%rbp), %rcx
movq -0x1f0(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x1f0(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movq -0x1e8(%rbp), %rcx
movq %rcx, -0x258(%rbp)
mulq -0x258(%rbp)
movq %rax, -0x200(%rbp)
movq %rdx, -0x1f8(%rbp)
movq -0x1f8(%rbp), %rax
addq -0x1f0(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq -0x1f0(%rbp), %rax
cmpq -0x1f8(%rbp), %rax
jae 0x3c962
movq -0x1e8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x1e8(%rbp)
movq -0x1f0(%rbp), %rax
cmpq -0x60(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3c960
movq -0x1f0(%rbp), %rax
cmpq -0x60(%rbp), %rax
ja 0x3c94c
movq -0x200(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
jb 0x3c95e
movq -0x1e8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x1e8(%rbp)
jmp 0x3c960
jmp 0x3c962
movq -0x1e8(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %r8
addq $0x1, %r8
movq -0x80(%rbp), %r9
callq 0x50ac0
movq %rax, -0x68(%rbp)
jmp 0x3cc3f
cmpq $0x6d7, -0x78(%rbp)     # imm = 0x6D7
jge 0x3cb7e
jmp 0x3c9a7
jmp 0x3c9a9
movq -0x60(%rbp), %rdi
callq 0x55530
movq %rax, -0x210(%rbp)
movq -0x60(%rbp), %rax
imulq -0x210(%rbp), %rax
movq %rax, -0x218(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
addq -0x218(%rbp), %rax
movq %rax, -0x218(%rbp)
movq -0x218(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
jae 0x3ca7d
movq -0x210(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x210(%rbp)
movq -0x218(%rbp), %rax
cmpq -0x60(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
xorl %eax, %eax
subq %rcx, %rax
movq %rax, -0x230(%rbp)
movq -0x60(%rbp), %rcx
movq -0x218(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x218(%rbp)
movq -0x230(%rbp), %rax
addq -0x210(%rbp), %rax
movq %rax, -0x210(%rbp)
movq -0x230(%rbp), %rcx
andq -0x60(%rbp), %rcx
movq -0x218(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x218(%rbp)
movq -0x38(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movq -0x210(%rbp), %rcx
movq %rcx, -0x260(%rbp)
mulq -0x260(%rbp)
movq %rax, -0x228(%rbp)
movq %rdx, -0x220(%rbp)
movq -0x220(%rbp), %rax
addq -0x218(%rbp), %rax
movq %rax, -0x218(%rbp)
movq -0x218(%rbp), %rax
cmpq -0x220(%rbp), %rax
jae 0x3cb49
movq -0x210(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x210(%rbp)
movq -0x218(%rbp), %rax
cmpq -0x60(%rbp), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3cb47
movq -0x218(%rbp), %rax
cmpq -0x60(%rbp), %rax
ja 0x3cb33
movq -0x228(%rbp), %rax
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
cmpq (%rcx,%rdx,8), %rax
jb 0x3cb45
movq -0x210(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x210(%rbp)
jmp 0x3cb47
jmp 0x3cb49
movq -0x210(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %r8
addq $0x1, %r8
leaq -0x80(%rbp), %r9
callq 0x52c00
movq %rax, -0x68(%rbp)
jmp 0x3cc3d
movq -0x70(%rbp), %rdi
movq -0x78(%rbp), %rsi
addq $0x1, %rsi
xorl %edx, %edx
callq 0x54cd0
movq %rax, -0x238(%rbp)
movq -0x238(%rbp), %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3cbe9
movq -0x238(%rbp), %rax
leaq 0xf(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2e0(%rbp)
jmp 0x3cc07
movq -0x238(%rbp), %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2e0(%rbp)
movq -0x2e0(%rbp), %rax
movq %rax, -0x240(%rbp)
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x78(%rbp), %r8
addq $0x1, %r8
movq -0x240(%rbp), %r9
callq 0x54300
movq %rax, -0x68(%rbp)
jmp 0x3cc3f
jmp 0x3cc41
movq -0x68(%rbp), %rdx
movq -0x48(%rbp), %rax
movq -0x78(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x3cc53
jmp 0x3cc55
jmp 0x3cc57
jmp 0x3cc59
jmp 0x3cc5b
jmp 0x3cc5d
jmp 0x3cc5f
jmp 0x3cc61
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rsi
addq $0x8, %rsi
movq -0x78(%rbp), %rdx
callq 0x554c6
jmp 0x3cc78
movq -0x48(%rbp), %rax
cmpq $0x4, (%rax)
ja 0x3cda0
movq -0x28(%rbp), %rax
addq -0x78(%rbp), %rax
shlq $0x3, %rax
cmpq $0x7f00, %rax           # imm = 0x7F00
setbe %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3ccdc
movq -0x28(%rbp), %rax
movq -0x78(%rbp), %rcx
addq %rcx, %rax
leaq 0xf(,%rax,8), %rcx
andq $-0x10, %rcx
movq %rsp, %rax
subq %rcx, %rax
movq %rax, %rsp
movq %rax, -0x2e8(%rbp)
jmp 0x3ccfb
movq -0x28(%rbp), %rsi
addq -0x78(%rbp), %rsi
shlq $0x3, %rsi
leaq -0x90(%rbp), %rdi
callq 0x56430
movq %rax, -0x2e8(%rbp)
movq -0x2e8(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x48(%rbp), %rcx
addq $0x8, %rcx
movq -0x78(%rbp), %r8
callq 0x37f00
movq -0x28(%rbp), %rax
addq -0x78(%rbp), %rax
movq %rax, -0x248(%rbp)
movq -0x50(%rbp), %rax
movq -0x248(%rbp), %rcx
subq $0x1, %rcx
cmpq $0x0, (%rax,%rcx,8)
sete %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x248(%rbp), %rax
subq %rcx, %rax
movq %rax, -0x248(%rbp)
movq -0x248(%rbp), %rax
cmpq -0x18(%rbp), %rax
jg 0x3cd85
movq -0x10(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x3b060
cmpl $0x0, %eax
jge 0x3cd9e
jmp 0x3cd87
movq -0x8(%rbp), %rax
subq $0x1, (%rax)
leaq 0x8(%rax), %rax
jb 0x3cd8b
movq %rax, -0x250(%rbp)
jmp 0x3cd9e
jmp 0x3cda0
jmp 0x3cda2
jmp 0x3cda4
cmpq $0x0, -0x90(%rbp)
setne %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3cdd3
movq -0x90(%rbp), %rdi
callq 0x564a0
jmp 0x3cdd5
movq %rbp, %rsp
popq %rbp
retq
nopw (%rax,%rax)