// File: marxn[P]pupp/3rdparty/gmp/mpn/toom_interpolate_12pts.c
// Function: _gmpn_toom_interpolate_12pts
void
mpn_toom_interpolate_12pts (mp_ptr pp, mp_ptr r1, mp_ptr r3, mp_ptr r5,
			mp_size_t n, mp_size_t spt, int half, mp_ptr wsi)
{
  mp_limb_t cy;
  mp_size_t n3;
  mp_size_t n3p1;
  n3 = 3 * n;
  n3p1 = n3 + 1;

#define   r4    (pp + n3)			/* 3n+1 */
#define   r2    (pp + 7 * n)			/* 3n+1 */
#define   r0    (pp +11 * n)			/* s+t <= 2*n */

  /******************************* interpolation *****************************/
  if (half != 0) {
    cy = mpn_sub_n (r3, r3, r0, spt);
    MPN_DECR_U (r3 + spt, n3p1 - spt, cy);

    cy = DO_mpn_sublsh_n (r2, r0, spt, 10, wsi);
    MPN_DECR_U (r2 + spt, n3p1 - spt, cy);
    DO_mpn_subrsh(r5, n3p1, r0, spt, 2, wsi);

    cy = DO_mpn_sublsh_n (r1, r0, spt, 20, wsi);
    MPN_DECR_U (r1 + spt, n3p1 - spt, cy);
    DO_mpn_subrsh(r4, n3p1, r0, spt, 4, wsi);
  };

  r4[n3] -= DO_mpn_sublsh_n (r4 + n, pp, 2 * n, 20, wsi);
  DO_mpn_subrsh(r1 + n, 2 * n + 1, pp, 2 * n, 4, wsi);

#if HAVE_NATIVE_mpn_add_n_sub_n
  mpn_add_n_sub_n (r1, r4, r4, r1, n3p1);
#else
  ASSERT_NOCARRY(mpn_add_n (wsi, r1, r4, n3p1));
  mpn_sub_n (r4, r4, r1, n3p1); /* can be negative */
  MP_PTR_SWAP(r1, wsi);
#endif

  r5[n3] -= DO_mpn_sublsh_n (r5 + n, pp, 2 * n, 10, wsi);
  DO_mpn_subrsh(r2 + n, 2 * n + 1, pp, 2 * n, 2, wsi);

#if HAVE_NATIVE_mpn_add_n_sub_n
  mpn_add_n_sub_n (r2, r5, r5, r2, n3p1);
#else
  mpn_sub_n (wsi, r5, r2, n3p1); /* can be negative */
  ASSERT_NOCARRY(mpn_add_n (r2, r2, r5, n3p1));
  MP_PTR_SWAP(r5, wsi);
#endif

  r3[n3] -= mpn_sub_n (r3+n, r3+n, pp, 2 * n);

#if AORSMUL_FASTER_AORS_AORSLSH
  mpn_submul_1 (r4, r5, n3p1, 257); /* can be negative */
#else
  mpn_sub_n (r4, r4, r5, n3p1); /* can be negative */
  DO_mpn_sublsh_n (r4, r5, n3p1, 8, wsi); /* can be negative */
#endif
  /* A division by 2835x4 follows. Warning: the operand can be negative! */
  mpn_divexact_by2835x4(r4, r4, n3p1);
  if ((r4[n3] & (GMP_NUMB_MAX << (GMP_NUMB_BITS-3))) != 0)
    r4[n3] |= (GMP_NUMB_MAX << (GMP_NUMB_BITS-2));

#if AORSMUL_FASTER_2AORSLSH
  mpn_addmul_1 (r5, r4, n3p1, 60); /* can be negative */
#else
  DO_mpn_sublsh_n (r5, r4, n3p1, 2, wsi); /* can be negative */
  DO_mpn_addlsh_n (r5, r4, n3p1, 6, wsi); /* can give a carry */
#endif
  mpn_divexact_by255(r5, r5, n3p1);

  ASSERT_NOCARRY(DO_mpn_sublsh_n (r2, r3, n3p1, 5, wsi));

#if AORSMUL_FASTER_3AORSLSH
  ASSERT_NOCARRY(mpn_submul_1 (r1, r2, n3p1, 100));
#else
  ASSERT_NOCARRY(DO_mpn_sublsh_n (r1, r2, n3p1, 6, wsi));
  ASSERT_NOCARRY(DO_mpn_sublsh_n (r1, r2, n3p1, 5, wsi));
  ASSERT_NOCARRY(DO_mpn_sublsh_n (r1, r2, n3p1, 2, wsi));
#endif
  ASSERT_NOCARRY(DO_mpn_sublsh_n (r1, r3, n3p1, 9, wsi));
  mpn_divexact_by42525(r1, r1, n3p1);

#if AORSMUL_FASTER_AORS_2AORSLSH
  ASSERT_NOCARRY(mpn_submul_1 (r2, r1, n3p1, 225));
#else
  ASSERT_NOCARRY(mpn_sub_n (r2, r2, r1, n3p1));
  ASSERT_NOCARRY(DO_mpn_addlsh_n (r2, r1, n3p1, 5, wsi));
  ASSERT_NOCARRY(DO_mpn_sublsh_n (r2, r1, n3p1, 8, wsi));
#endif
  mpn_divexact_by9x4(r2, r2, n3p1);

  ASSERT_NOCARRY(mpn_sub_n (r3, r3, r2, n3p1));

  mpn_sub_n (r4, r2, r4, n3p1);
  ASSERT_NOCARRY(mpn_rshift(r4, r4, n3p1, 1));
  ASSERT_NOCARRY(mpn_sub_n (r2, r2, r4, n3p1));

  mpn_add_n (r5, r5, r1, n3p1);
  ASSERT_NOCARRY(mpn_rshift(r5, r5, n3p1, 1));

  /* last interpolation steps... */
  ASSERT_NOCARRY(mpn_sub_n (r3, r3, r1, n3p1));
  ASSERT_NOCARRY(mpn_sub_n (r1, r1, r5, n3p1));
  /* ... could be mixed with recomposition
	||H-r5|M-r5|L-r5|   ||H-r1|M-r1|L-r1|
  */

  /***************************** recomposition *******************************/
  /*
    pp[] prior to operations:
    |M r0|L r0|___||H r2|M r2|L r2|___||H r4|M r4|L r4|____|H_r6|L r6|pp

    summation scheme for remaining operations:
    |__12|n_11|n_10|n__9|n__8|n__7|n__6|n__5|n__4|n__3|n__2|n___|n___|pp
    |M r0|L r0|___||H r2|M r2|L r2|___||H r4|M r4|L r4|____|H_r6|L r6|pp
	||H r1|M r1|L r1|   ||H r3|M r3|L r3|   ||H_r5|M_r5|L_r5|
  */

  cy = mpn_add_n (pp + n, pp + n, r5, n);
  cy = mpn_add_1 (pp + 2 * n, r5 + n, n, cy);
#if HAVE_NATIVE_mpn_add_nc
  cy = r5[n3] + mpn_add_nc(pp + n3, pp + n3, r5 + 2 * n, n, cy);
#else
  MPN_INCR_U (r5 + 2 * n, n + 1, cy);
  cy = r5[n3] + mpn_add_n (pp + n3, pp + n3, r5 + 2 * n, n);
#endif
  MPN_INCR_U (pp + n3 + n, 2 * n + 1, cy);

  pp[2 * n3]+= mpn_add_n (pp + 5 * n, pp + 5 * n, r3, n);
  cy = mpn_add_1 (pp + 2 * n3, r3 + n, n, pp[2 * n3]);
#if HAVE_NATIVE_mpn_add_nc
  cy = r3[n3] + mpn_add_nc(pp + 7 * n, pp + 7 * n, r3 + 2 * n, n, cy);
#else
  MPN_INCR_U (r3 + 2 * n, n + 1, cy);
  cy = r3[n3] + mpn_add_n (pp + 7 * n, pp + 7 * n, r3 + 2 * n, n);
#endif
  MPN_INCR_U (pp + 8 * n, 2 * n + 1, cy);

  pp[10*n]+=mpn_add_n (pp + 9 * n, pp + 9 * n, r1, n);
  if (half) {
    cy = mpn_add_1 (pp + 10 * n, r1 + n, n, pp[10 * n]);
#if HAVE_NATIVE_mpn_add_nc
    if (LIKELY (spt > n)) {
      cy = r1[n3] + mpn_add_nc(pp + 11 * n, pp + 11 * n, r1 + 2 * n, n, cy);
      MPN_INCR_U (pp + 4 * n3, spt - n, cy);
    } else {
      ASSERT_NOCARRY(mpn_add_nc(pp + 11 * n, pp + 11 * n, r1 + 2 * n, spt, cy));
    }
#else
    MPN_INCR_U (r1 + 2 * n, n + 1, cy);
    if (LIKELY (spt > n)) {
      cy = r1[n3] + mpn_add_n (pp + 11 * n, pp + 11 * n, r1 + 2 * n, n);
      MPN_INCR_U (pp + 4 * n3, spt - n, cy);
    } else {
      ASSERT_NOCARRY(mpn_add_n (pp + 11 * n, pp + 11 * n, r1 + 2 * n, spt));
    }
#endif
  } else {
    ASSERT_NOCARRY(mpn_add_1 (pp + 10 * n, r1 + n, spt, pp[10 * n]));
  }

#undef   r0
#undef   r2
#undef   r4
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq 0x18(%rbp), %rax
movl 0x10(%rbp), %eax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
imulq $0x3, -0x28(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
cmpl $0x0, 0x10(%rbp)
je 0x4c3ac
movq -0x18(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x8(%rbp), %rdx
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x30(%rbp), %rcx
callq 0x36fe0
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq -0x30(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
subq %rcx, (%rax)
jae 0x4c191
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c186
movq %rax, -0x50(%rbp)
jmp 0x4c197
jmp 0x4c199
movq -0x8(%rbp), %rdi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %r8
movl $0xa, %ecx
callq 0x4cda0
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
imulq $0x7, -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x30(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
subq %rcx, (%rax)
jae 0x4c1fe
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c1f3
movq %rax, -0x58(%rbp)
jmp 0x4c204
jmp 0x4c206
jmp 0x4c208
jmp 0x4c20a
movq -0x20(%rbp), %rax
movq -0x8(%rbp), %rcx
imulq $0xb, -0x28(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x2, %rcx
subq %rcx, (%rax)
jae 0x4c22f
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c224
movq %rax, -0x68(%rbp)
jmp 0x4c235
jmp 0x4c237
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x8, %rsi
movq -0x30(%rbp), %rdx
subq $0x1, %rdx
movq 0x18(%rbp), %r8
movl $0x3e, %ecx
callq 0x4cda0
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rax
movq -0x30(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq -0x60(%rbp), %rcx
subq %rcx, (%rax)
jae 0x4c290
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c285
movq %rax, -0x70(%rbp)
jmp 0x4c296
jmp 0x4c298
jmp 0x4c29a
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rsi
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x30(%rbp), %rdx
movq 0x18(%rbp), %r8
movl $0x14, %ecx
callq 0x4cda0
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq -0x30(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
subq %rcx, (%rax)
jae 0x4c2e7
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c2dc
movq %rax, -0x78(%rbp)
jmp 0x4c2ed
jmp 0x4c2ef
jmp 0x4c2f1
jmp 0x4c2f3
movq -0x8(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x8(%rbp), %rcx
imulq $0xb, -0x28(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x4, %rcx
subq %rcx, (%rax)
jae 0x4c323
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c318
movq %rax, -0x88(%rbp)
jmp 0x4c32c
jmp 0x4c32e
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
addq $0x8, %rsi
movq -0x30(%rbp), %rdx
subq $0x1, %rdx
movq 0x18(%rbp), %r8
movl $0x3c, %ecx
callq 0x4cda0
movq %rax, -0x80(%rbp)
movq -0x8(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x30(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq -0x80(%rbp), %rcx
subq %rcx, (%rax)
jae 0x4c39d
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c392
movq %rax, -0x90(%rbp)
jmp 0x4c3a6
jmp 0x4c3a8
jmp 0x4c3aa
jmp 0x4c3ac
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rdx
shlq %rdx
movq 0x18(%rbp), %r8
movl $0x14, %ecx
callq 0x4cda0
movq %rax, %rsi
movq -0x8(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
subq %rsi, %rdx
movq %rdx, (%rax,%rcx,8)
jmp 0x4c402
movq -0x10(%rbp), %rax
movq -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
shrq $0x4, %rcx
subq %rcx, (%rax)
jae 0x4c42c
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c421
movq %rax, -0xa0(%rbp)
jmp 0x4c435
jmp 0x4c437
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
addq $0x8, %rsi
movq -0x28(%rbp), %rdx
shlq %rdx
subq $0x1, %rdx
movq 0x18(%rbp), %r8
movl $0x3c, %ecx
callq 0x4cda0
movq %rax, -0x98(%rbp)
movq -0x10(%rbp), %rax
movq -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x28(%rbp), %rcx
shlq %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq -0x98(%rbp), %rcx
subq %rcx, (%rax)
jae 0x4c4a6
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c49b
movq %rax, -0xa8(%rbp)
jmp 0x4c4af
jmp 0x4c4b1
jmp 0x4c4b3
movq 0x18(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x8(%rbp), %rdx
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x48(%rbp), %rcx
callq 0x36c80
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x10(%rbp), %rdx
movq -0x48(%rbp), %rcx
callq 0x36fe0
movq -0x10(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq 0x18(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0xb0(%rbp), %rax
movq %rax, 0x18(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rdx
shlq %rdx
movq 0x18(%rbp), %r8
movl $0xa, %ecx
callq 0x4cda0
movq %rax, %rsi
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
subq %rsi, %rdx
movq %rdx, (%rax,%rcx,8)
jmp 0x4c55c
movq -0x8(%rbp), %rax
imulq $0x7, -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
shrq $0x2, %rcx
subq %rcx, (%rax)
jae 0x4c592
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c587
movq %rax, -0xc0(%rbp)
jmp 0x4c59b
jmp 0x4c59d
movq -0x8(%rbp), %rdi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
addq $0x8, %rsi
movq -0x28(%rbp), %rdx
shlq %rdx
subq $0x1, %rdx
movq 0x18(%rbp), %r8
movl $0x3e, %ecx
callq 0x4cda0
movq %rax, -0xb8(%rbp)
movq -0x8(%rbp), %rax
imulq $0x7, -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x28(%rbp), %rcx
shlq %rcx
shlq $0x3, %rcx
addq %rcx, %rax
addq $-0x8, %rax
movq -0xb8(%rbp), %rcx
subq %rcx, (%rax)
jae 0x4c624
subq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4c619
movq %rax, -0xc8(%rbp)
jmp 0x4c62d
jmp 0x4c62f
jmp 0x4c631
movq 0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x8(%rbp), %rdx
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x48(%rbp), %rcx
callq 0x36fe0
movq -0x8(%rbp), %rdi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x20(%rbp), %rdx
movq -0x48(%rbp), %rcx
callq 0x36c80
movq -0x20(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq 0x18(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, 0x18(%rbp)
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x8(%rbp), %rdx
movq -0x28(%rbp), %rcx
shlq %rcx
callq 0x36fe0
movq %rax, %rsi
movq -0x18(%rbp), %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
subq %rsi, %rdx
movq %rdx, (%rax,%rcx,8)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x48(%rbp), %rdx
movl $0x101, %ecx            # imm = 0x101
callq 0x56760
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movl $0xb13, %ecx            # imm = 0xB13
movabsq $-0x6c7338faac1c88e5, %r8 # imm = 0x938CC70553E3771B
movl $0x2, %r9d
callq 0x553a8
movq -0x8(%rbp), %rcx
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x40(%rbp), %rdx
movabsq $-0x2000000000000000, %rax # imm = 0xE000000000000000
andq (%rcx,%rdx,8), %rax
cmpq $0x0, %rax
je 0x4c78a
movq -0x8(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x40(%rbp), %rcx
movabsq $-0x4000000000000000, %rdx # imm = 0xC000000000000000
orq (%rax,%rcx,8), %rdx
movq %rdx, (%rax,%rcx,8)
movq -0x20(%rbp), %rdi
movq -0x8(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movl $0x3c, %ecx
callq 0x56650
movq -0x20(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x48(%rbp), %rdx
movabsq $0x101010101010101, %rcx # imm = 0x101010101010101
xorl %eax, %eax
movl %eax, %r8d
callq 0x55430
movq -0x8(%rbp), %rdi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x48(%rbp), %rdx
movq 0x18(%rbp), %r8
movl $0x5, %ecx
callq 0x4cda0
movq -0x10(%rbp), %rdi
movq -0x8(%rbp), %rsi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movl $0x64, %ecx
callq 0x56760
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x48(%rbp), %rdx
movq 0x18(%rbp), %r8
movl $0x9, %ecx
callq 0x4cda0
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rdx
movl $0xa61d, %ecx           # imm = 0xA61D
movabsq $-0x184bf2bb60ceb3cb, %r8 # imm = 0xE7B40D449F314C35
xorl %r9d, %r9d
callq 0x553a8
movq -0x8(%rbp), %rdi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rdx
movl $0xe1, %ecx
callq 0x56760
movq -0x8(%rbp), %rdi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movl $0x9, %ecx
movabsq $-0x71c71c71c71c71c7, %r8 # imm = 0x8E38E38E38E38E39
movl $0x2, %r9d
callq 0x553a8
movq -0x18(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x8(%rbp), %rdx
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x48(%rbp), %rcx
callq 0x36fe0
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x8(%rbp), %rdx
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x48(%rbp), %rcx
callq 0x36fe0
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x48(%rbp), %rdx
movl $0x1, %ecx
callq 0x56880
movq -0x8(%rbp), %rdi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x8(%rbp), %rdx
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x48(%rbp), %rcx
callq 0x36fe0
movq -0x20(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0x48(%rbp), %rcx
callq 0x36c80
movq -0x20(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x48(%rbp), %rdx
movl $0x1, %ecx
callq 0x56880
movq -0x18(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0x48(%rbp), %rcx
callq 0x36fe0
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x48(%rbp), %rcx
callq 0x36fe0
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x36c80
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x38(%rbp), %rcx
callq 0x564f0
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
movq -0x40(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %r8
callq 0x36c60
movq %rax, %rcx
movq -0xf0(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
addq %rcx, (%rax)
jae 0x4cab1
addq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4caa6
movq %rax, -0xd8(%rbp)
jmp 0x4caba
jmp 0x4cabc
movq -0x8(%rbp), %rdi
imulq $0x5, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0x5, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x36c80
movq %rax, %rdx
movq -0x8(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq %rcx
addq (%rax,%rcx,8), %rdx
movq %rdx, (%rax,%rcx,8)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x8(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq %rcx
movq (%rax,%rcx,8), %rcx
callq 0x564f0
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf8(%rbp)
movq -0x8(%rbp), %rdi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0x7, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %r8
callq 0x36c60
movq %rax, %rcx
movq -0xf8(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq -0x28(%rbp), %rcx
shlq $0x3, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
addq %rcx, (%rax)
jae 0x4cbc6
addq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4cbbb
movq %rax, -0xe0(%rbp)
jmp 0x4cbcf
jmp 0x4cbd1
movq -0x8(%rbp), %rdi
imulq $0x9, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0x9, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x10(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x36c80
movq %rax, %rdx
movq -0x8(%rbp), %rax
imulq $0xa, -0x28(%rbp), %rcx
addq (%rax,%rcx,8), %rdx
movq %rdx, (%rax,%rcx,8)
cmpl $0x0, 0x10(%rbp)
je 0x4cd54
movq -0x8(%rbp), %rdi
imulq $0xa, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x28(%rbp), %rdx
movq -0x8(%rbp), %rax
imulq $0xa, -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
callq 0x564f0
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rax
cmpq -0x28(%rbp), %rax
setg %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x4cd13
movq -0x10(%rbp), %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x100(%rbp)
movq -0x8(%rbp), %rdi
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x10(%rbp), %rdx
movq -0x28(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x28(%rbp), %rcx
movq -0x38(%rbp), %r8
callq 0x36c60
movq %rax, %rcx
movq -0x100(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq -0x40(%rbp), %rcx
shlq $0x2, %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq -0x38(%rbp), %rcx
addq %rcx, (%rax)
jae 0x4cd06
addq $0x1, 0x8(%rax)
leaq 0x8(%rax), %rax
jb 0x4ccfb
movq %rax, -0xe8(%rbp)
jmp 0x4cd0f
jmp 0x4cd11
jmp 0x4cd52
movq -0x8(%rbp), %rdi
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x8(%rbp), %rsi
imulq $0xb, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x10(%rbp), %rdx
movq -0x28(%rbp), %rax
shlq %rax
shlq $0x3, %rax
addq %rax, %rdx
movq -0x30(%rbp), %rcx
movq -0x38(%rbp), %r8
callq 0x36c60
jmp 0x4cd89
movq -0x8(%rbp), %rdi
imulq $0xa, -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rsi
movq -0x30(%rbp), %rdx
movq -0x8(%rbp), %rax
imulq $0xa, -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
callq 0x564f0
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
nopw %cs:(%rax,%rax)