// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/match/firstcodes.c
// Function: storefirstcodes_getencseqkmers_twobitencoding
int storefirstcodes_getencseqkmers_twobitencoding(const GtEncseq *encseq,
                                                  unsigned int kmersize,
                                                  unsigned int numofparts,
                                                  GtUword maximumspace,
                                                  unsigned int minmatchlength,
                                                  bool withsuftabcheck,
                                                  bool onlyaccumulation,
                                                  bool onlyallfirstcodes,
                                                  GT_UNUSED
                                                  unsigned int addbscache_depth,
                                                  GtUword phase2extra,
                    GT_UNUSED bool radixsmall,      /* set to true */
                    GT_UNUSED unsigned int radixparts, /* set to 2U */
                                                  GtFirstcodesintervalprocess
                                                    itvprocess,
                                                 GtFirstcodesintervalprocess_end
                                                     itvprocess_end,
                                                  void *itvprocessdatatab,
                                                  GtLogger *logger,
                                                  GtError *err)
{
  GtTimer *timer = NULL;
  GtFirstcodesinfo fci;
  size_t suftab_size = 0;
  unsigned int part, threadcount;
  GtUword maxbucketsize, suftabentries = 0, largest_width,
                totallength = gt_encseq_total_length(encseq),
                maxseqlength = gt_encseq_max_seq_length(encseq);
  GtSfxmappedrangelist *sfxmrlist = NULL;
  GtSuftabparts *suftabparts = NULL;
  GtShortreadsortworkinfo **srswtab = NULL;
  const GtReadmode readmode = GT_READMODE_FORWARD;
  bool haserr = false;
#ifdef GT_THREADS_ENABLED
  const unsigned int threads = gt_jobs;
#else
  const unsigned int threads = 1U;
#endif

  if (maxseqlength < (GtUword) minmatchlength)
  {
    return 0;
  }
  if (gt_firstcodes_init(&fci,
                         encseq,
                         kmersize,
                         withsuftabcheck,
                         minmatchlength,
                         err) != 0)
  {
    haserr = true;
  }
  if (!haserr)
  {
    sfxmrlist = gt_Sfxmappedrangelist_new();
    if (gt_showtime_enabled())
    {
      timer = gt_timer_new_with_progress_description("to collect initial "
                                                     "prefixes");
      gt_timer_start(timer);
    }
    gt_firstcodes_collectcodes(&fci,
                               encseq,
                               readmode,
                               kmersize,
                               minmatchlength,
                               addbscache_depth,
                               onlyallfirstcodes,
                               logger,
                               timer);
    if (fci.differentcodes > 0 && onlyallfirstcodes)
    {
      gt_free(fci.allfirstcodes);
      fci.allfirstcodes = NULL;
      gt_marksubstring_delete(fci.buf.markprefix,true);
      gt_marksubstring_delete(fci.buf.marksuffix,true);
      gt_firstcodes_countocc_delete(fci.fcsl,&fci.tab);
      gt_firstcodes_binsearchcache_delete(fci.binsearchcache,fci.fcsl);
      gt_firstcodes_spacelog_delete(fci.fcsl);
      gt_seqnumrelpos_delete(fci.buf.snrp);
      gt_Sfxmappedrangelist_delete(sfxmrlist);
      fci.binsearchcache = NULL;
      if (timer != NULL)
      {
        gt_timer_delete(timer);
      }
      return 0;
    }
    fci.flushcount = 0;
    fci.codebuffer_total = 0;
    if (gt_firstcodes_allocspace(&fci,
                                 numofparts,
                                 maximumspace,
                                 phase2extra,
                                 err) != 0)
    {
      haserr = true;
    }
  }
  fci.buf.nextfree = 0;
  if (!haserr)
  {
    gt_firstcodes_accumulatecounts_run(&fci,
                                       encseq,
                                       kmersize,
                                       minmatchlength,
                                       logger,
                                       timer);
    suftabentries = fci.firstcodehits + fci.numofsequences;
    if (timer != NULL)
    {
      gt_timer_show_progress(timer,"to compute partial sums",stdout);
    }
    maxbucketsize = gt_firstcodes_partialsums(fci.fcsl,&fci.tab,
                                              fci.allfirstcodes,suftabentries);
    gt_firstcodes_restore_from_differences(&fci);
    gt_logger_log(logger,"maximum space after computing partial sums: %.2f MB",
                  GT_MEGABYTES(gt_firstcodes_spacelog_total(fci.fcsl)));
    gt_logger_log(logger,"maxbucketsize="GT_WU"",maxbucketsize);
    gt_firstcodes_map_sections(&fci,sfxmrlist);
    if (numofparts == 0 || maximumspace > 0)
    {
      int retval = gt_firstcodes_auto_parts(&fci,
                                            sfxmrlist,
                                            numofparts,
                                            &maximumspace,
                                            maxbucketsize,
                                            kmersize,
                                            totallength,
                                            maxseqlength,
                                            suftabentries,
                                            phase2extra,
                                            err);
      if (retval < 0)
      {
        haserr = true;
      } else
      {
        numofparts = (unsigned int) retval;
      }
    }
  }
  if (!haserr)
  {
    gt_assert(numofparts > 0);
    suftabparts = gt_suftabparts_new(numofparts,
                                     NULL,
                                     (GtCodetype) 1,
                                     (GtCodetype) 0,
                                     &fci.tab,
                                     sfxmrlist,
                                     suftabentries,
                                     0,
                                     logger);
    gt_assert(suftabparts != NULL);
    gt_suftabparts_showallrecords(suftabparts,true);
    gt_assert(fci.allfirstcodes[fci.differentcodes - 1] ==
              gt_firstcodes_idx2code(&fci,
                                     gt_suftabparts_maxindex_last(suftabparts))
             );
    gt_Sfxmappedrangelist_delete(sfxmrlist);
    sfxmrlist = NULL;
    gt_firstcodes_samples_delete(fci.fcsl,&fci.tab);
    gt_assert(fci.buf.nextfree == 0);
    gt_firstcodes_handle_tmp(&fci,suftabparts);
    largest_width = gt_suftabparts_largest_width(suftabparts);
    fci.spmsuftab = gt_spmsuftab_new(largest_width,
                                     totallength,
                                     fci.bitsforposref,
                                     logger);
    suftab_size = gt_spmsuftab_requiredspace(largest_width,totallength,
                                             fci.bitsforposref);
    GT_FCI_ADDWORKSPACE(fci.fcsl,"suftab",suftab_size);
    fci.buf.flush_function = gt_firstcodes_insertsuffixes_flush;
    srswtab = gt_malloc(sizeof (*srswtab) * threads);
    for (threadcount = 0; threadcount < threads; threadcount++)
    {
      srswtab[threadcount]
        = gt_shortreadsort_new(maxbucketsize,maxseqlength - kmersize,
                               readmode,true,false);
    }
    GT_FCI_ADDWORKSPACE(fci.fcsl,"shortreadsort",
                        threads * gt_shortreadsort_size(true,maxbucketsize,
                                                        maxseqlength-kmersize));
    gt_firstcodes_allocsize_for_insertion(&fci,
                                          maximumspace,
                                          suftabparts,
                                          phase2extra);
    if (!onlyaccumulation)
    {
      fci.radixsort_codepos = gt_radixsort_new_ulongpair(fci.buf.allocated);
      GT_FCI_ADDWORKSPACE(fci.fcsl,"radixsort_codepos",
                          gt_radixsort_size(fci.radixsort_codepos));
      fci.buf.spaceGtUwordPair
        = gt_radixsort_space_ulongpair(fci.radixsort_codepos);
    }
    fci.codebuffer_total = 0;
    fci.flushcount = 0;
    for (part = 0; !haserr && !onlyaccumulation &&
                   part < gt_suftabparts_numofparts(suftabparts); part++)
    {
      if (gt_firstcodes_process_part(&fci,
                                     encseq,
                                     readmode,
                                     kmersize,
                                     minmatchlength,
                                     suftabparts,
                                     part,
                                     maximumspace,
                                     threads,
                                     suftabentries,
                                     withsuftabcheck,
                                     srswtab,
                                     itvprocess,
                                     itvprocess_end,
                                     itvprocessdatatab,
                                     logger,
                                     timer,
                                     err) != 0)
      {
        haserr = true;
      }
    }
  }
  if (timer != NULL)
  {
    gt_timer_show_progress(timer, "cleaning up",stdout);
  }
  if (!haserr)
  {
    GT_FCI_SUBTRACTWORKSPACE(fci.fcsl,"shortreadsort");
  }
  if (!haserr && !onlyaccumulation && srswtab != NULL)
  {
    GtUword sumofstoredvalues = 0;

    for (threadcount=0; threadcount<threads; threadcount++)
    {
      sumofstoredvalues +=
        gt_shortreadsort_sumofstoredvalues(srswtab[threadcount]);
    }
    gt_logger_log(logger,"average short read depth is %.2f",
                      (double) sumofstoredvalues/fci.firstcodeposhits);
  }
  if (!haserr)
  {
    if (!onlyaccumulation)
    {
      gt_assert(fci.flushcount > 0);
      gt_logger_log(logger,"firstcodeposhits="GT_WU" (%.3f%% of all suffixes), "
                           "%u rounds (avg length "GT_WU")",
                           fci.firstcodeposhits,
                           100.0 * (double) fci.firstcodeposhits/totallength,
                           fci.flushcount,
                           fci.codebuffer_total/fci.flushcount);
      gt_assert(fci.firstcodeposhits == suftabentries);
    } else
    {
      gt_firstcode_delete_before_end(&fci);
    }
  }
  if (srswtab != NULL)
  {
    for (threadcount=0; threadcount<threads; threadcount++)
    {
      gt_shortreadsort_delete(srswtab[threadcount]);
    }
    gt_free(srswtab);
  }
  if (haserr)
  {
    gt_firstcode_delete_before_end(&fci);
    gt_free(fci.allfirstcodes);
    fci.allfirstcodes = NULL;
    gt_Sfxmappedrangelist_delete(sfxmrlist);
    fci.buf.spaceGtUword = NULL;
    gt_radixsort_delete(fci.radixsort_code);
  }
  gt_suftabparts_delete(suftabparts);
  gt_firstcodes_countocc_delete(fci.fcsl,&fci.tab);
  gt_firstcodes_tab_delete(fci.fcsl,&fci.tab);
  if (fci.spmsuftab != NULL)
  {
    gt_spmsuftab_delete(fci.spmsuftab);
    GT_FCI_SUBTRACTWORKSPACE(fci.fcsl,"suftab");
    fci.spmsuftab = NULL;
  }
  gt_Sfxmappedrange_delete(fci.mappedleftborder);
  if (fci.mappedallfirstcodes == NULL && fci.allfirstcodes != NULL)
  {
    GT_FCI_SUBTRACTSPLITSPACE(fci.fcsl,"allfirstcodes");
  }
  gt_Sfxmappedrange_delete(fci.mappedallfirstcodes);
  gt_seqnumrelpos_delete(fci.buf.snrp);
  gt_firstcodes_spacelog_stop_diff(fci.fcsl);
  GT_FCI_SUBTRACTWORKSPACE(fci.fcsl,"encseq");
  gt_firstcodes_spacelog_delete(fci.fcsl);
  if (timer != NULL)
  {
    gt_timer_show_progress_final(timer, stdout);
    gt_timer_delete(timer);
  }
  return haserr ? -1 : 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2d8, %rsp            # imm = 0x2D8
movl %r9d, 0x84(%rsp)
movl %r8d, %ebx
movq %rcx, 0x90(%rsp)
movl %edx, %r14d
movl %esi, 0x54(%rsp)
movq %rdi, %rbp
callq 0xec1d8
movq %rax, %r15
movq %rbp, %rdi
callq 0xf035e
movl %ebx, 0x80(%rsp)
movl %ebx, %r12d
xorl %ebx, %ebx
cmpq %r12, %rax
jb 0x1b5697
movq %rax, 0x78(%rsp)
movq %r15, 0x258(%rsp)
leaq 0x311738(%rip), %rax    # 0x4c4e18
movl (%rax), %r13d
movq %rbp, %rdi
callq 0xf035e
movq %rax, %rbx
movq %rbp, 0x70(%rsp)
movq %rbp, %rdi
callq 0xec1d8
movq %rax, %xmm1
punpckldq 0x19d1d8(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x19d1e0(%rip), %xmm1   # 0x3508f0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
callq 0x17610
addsd 0x1ab74f(%rip), %xmm0   # 0x35ee78
callq 0x17d40
cvttsd2si %xmm0, %rcx
cmpl $0x8, %ecx
jb 0x1b374c
addl $-0x8, %ecx
cmpl $0x9, %ecx
movl $0x8, %eax
cmovael %ecx, %eax
movl 0x54(%rsp), %edx
jmp 0x1b375f
movl 0x54(%rsp), %edx
movl %edx, %ecx
shrl %ecx
cmpl $0x8, %ecx
movl $0x8, %eax
cmovbl %ecx, %eax
cmpl $0x2, %eax
movl %eax, %ecx
adcl $-0x1, %ecx
movl %eax, 0x11c(%rsp)
movl %ecx, 0x118(%rsp)
addl %ecx, %eax
cmpl %edx, %eax
jbe 0x1b37a6
movl %edx, %eax
shrl %eax
testb $0x1, %cl
jne 0x1b3794
movl %eax, 0x11c(%rsp)
movl %eax, 0x118(%rsp)
jmp 0x1b37a6
movl %eax, 0x118(%rsp)
movl %edx, %ecx
subl %eax, %ecx
movl %ecx, 0x11c(%rsp)
movl 0x118(%rsp), %edx
movl 0x11c(%rsp), %esi
leaq 0x1fba0d(%rip), %rdi    # 0x3af1c8
xorl %r15d, %r15d
xorl %eax, %eax
callq 0x108e02
movq %rbx, %rax
subq %r12, %rax
cmovaeq %rax, %r15
movq %r15, %rdi
callq 0x10af48
movl %eax, %r15d
movl %eax, %edi
movq 0x70(%rsp), %r12
movq %r12, %rsi
callq 0x1ec454
movq %rax, 0x1b8(%rsp)
movb $0x0, 0x1c8(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x190(%rsp)
movq %r12, %rdi
callq 0xec1e8
movq %rax, 0xd8(%rsp)
testq %rax, %rax
je 0x1b5708
decq %rax
movq %rax, %rdi
callq 0x10af48
movl %eax, %r12d
leal (%r12,%r15), %ebp
cmpl $0x41, %ebp
setae %al
movl %eax, 0x50(%rsp)
jb 0x1b387d
movq 0x1b8(%rsp), %rdi
callq 0x1ec492
movq $0x0, 0x1b8(%rsp)
movq 0xd8(%rsp), %rdx
leaq 0x1fb9b4(%rip), %rsi    # 0x3af219
movq 0x360(%rsp), %rdi
movq %rbx, %rcx
movl %r12d, %r8d
movl %r15d, %r9d
xorl %eax, %eax
callq 0x1019cf
callq 0x320b68
movq %rax, %rbx
movq %rax, 0x168(%rsp)
movq $0x0, 0x108(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x128(%rsp)
movupd %xmm0, 0x138(%rsp)
movupd %xmm0, 0x148(%rsp)
movupd %xmm0, 0x1a8(%rsp)
movq 0x70(%rsp), %r12
movq %r12, %rdi
callq 0xfac04
movq %rax, (%rsp)
leaq 0x1fb6ff(%rip), %rdx    # 0x3aefd8
leaq 0x1dccf6(%rip), %r8     # 0x3905d6
movq %rbx, %rdi
movl $0x2e6, %esi            # imm = 0x2E6
movl $0x1, %ecx
movl $0x1, %r9d
callq 0x320ca8
cmpb $0x0, 0x84(%rsp)
je 0x1b390f
movq 0x168(%rsp), %rdi
callq 0x320b9b
cmpl $0x40, %ebp
jbe 0x1b3922
movq $0x0, 0x158(%rsp)
jmp 0x1b3975
movq 0xd8(%rsp), %rbx
shlq $0x3, %rbx
leaq 0x1fb6a3(%rip), %r15    # 0x3aefd8
movq %rbx, %rdi
movq %r15, %rsi
movl $0x2ef, %edx            # imm = 0x2EF
callq 0x1092b2
movq %rax, 0x158(%rsp)
movq 0x168(%rsp), %rdi
movq %rbx, (%rsp)
leaq 0x19ff0e(%rip), %r8     # 0x35386e
movl $0x2f0, %esi            # imm = 0x2F0
movq %r15, %rdx
movl $0x1, %ecx
xorl %r9d, %r9d
callq 0x320ca8
leaq 0x1d0(%rsp), %rbx
movq %rbx, %rdi
callq 0x321eff
xorpd %xmm0, %xmm0
movapd %xmm0, -0x110(%rbx)
movq $0x0, -0x100(%rbx)
movl %ebp, -0xb0(%rbx)
cmpl $0x40, %ebp
movq %r13, 0xa8(%rsp)
jbe 0x1b39e7
movq $0x0, 0x68(%rsp)
xorl %r15d, %r15d
movq $0x0, 0x180(%rsp)
cmpb $0x0, 0x50(%rsp)
movq %r15, 0x98(%rsp)
je 0x1b3a1a
movq $0x0, 0x88(%rsp)
jmp 0x1b4421
callq 0x1f8c31
movq %rax, 0x68(%rsp)
callq 0x11ed94
testb %al, %al
je 0x1b3ed5
leaq 0x1fb5b7(%rip), %rdi    # 0x3aefbc
callq 0x1226d6
movq %rax, %r15
movq %rax, %rdi
callq 0x122733
jmp 0x1b3ed8
testq %r15, %r15
movq 0x328(%rsp), %rbp
je 0x1b3a40
movq 0x3104ba(%rip), %rax    # 0x4c3ee8
movq (%rax), %rdx
leaq 0x1fb9b9(%rip), %rsi    # 0x3af3f1
movq %r15, %rdi
callq 0x1229c8
movq 0x188(%rsp), %rdi
testq %rdi, %rdi
je 0x1b5721
leaq 0x170(%rsp), %r15
callq 0x114961
movq %rax, -0x48(%r15)
movq %rax, %rdi
callq 0x115422
movq %rax, 0x40(%r15)
movq -0x48(%r15), %rdi
movq -0x8(%r15), %rbx
callq 0x114bbf
movq %rax, (%rsp)
leaq 0x1fb552(%rip), %rdx    # 0x3aefd8
leaq 0x1fb9b3(%rip), %r8     # 0x3af440
movq %rbx, %rdi
movl $0x37f, %esi            # imm = 0x37F
movl $0x1, %ecx
movl $0x1, %r9d
callq 0x320ca8
leaq 0xc0(%rsp), %rbx
movq %rbx, 0x50(%r15)
leaq 0x20d1(%rip), %rax      # 0x1b5b89
movq %rax, 0x30(%r15)
movq -0x8(%r15), %rdi
callq 0x320bae
movq %rax, %xmm1
punpckldq 0x19ce0e(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x19ce16(%rip), %xmm1   # 0x3508f0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x19ce12(%rip), %xmm0   # 0x350900
leaq 0x1fb95a(%rip), %rsi    # 0x3af44f
movq 0x358(%rsp), %r13
movq %r13, %rdi
movb $0x1, %al
callq 0x10906e
movq %r12, %rdi
movl 0x54(%rsp), %esi
movl 0x80(%rsp), %edx
movq %r15, %rcx
callq 0x31bfdc
movq %rbx, %rdi
callq 0x1b5b89
movq 0x20(%rbx), %r15
movq %r15, %xmm0
punpckldq 0x19cdaa(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x19cdb2(%rip), %xmm0   # 0x3508f0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
mulsd 0x19ec9e(%rip), %xmm1   # 0x3527f0
movapd %xmm1, 0x270(%rsp)
movq %r12, %rdi
callq 0xec1d8
movq %rax, %xmm0
punpckldq 0x19cd70(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x19cd78(%rip), %xmm0   # 0x3508f0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movapd 0x270(%rsp), %xmm0
divsd %xmm1, %xmm0
leaq 0x1fb8e5(%rip), %rsi    # 0x3af47d
movq %r13, %rdi
movq %r15, %rdx
movb $0x1, %al
callq 0x10906e
movq (%rbx), %rbx
testq %rbx, %rbx
movq 0x98(%rsp), %r15
je 0x1b3c67
cmpl $0x0, 0x110(%rsp)
je 0x1b573f
movq %rbx, %xmm0
movq 0x19cd0c(%rip), %xmm1   # 0x3508e0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x19cd10(%rip), %xmm1   # 0x3508f0
subpd %xmm1, %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
mulsd 0x19ebf8(%rip), %xmm1   # 0x3527f0
movapd %xmm1, 0x270(%rsp)
movq %r12, %rdi
callq 0xec1d8
movq %rax, %xmm0
punpckldq 0x19ccca(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x19ccd2(%rip), %xmm0   # 0x3508f0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movapd 0x270(%rsp), %xmm0
divsd %xmm1, %xmm0
movl 0x110(%rsp), %ecx
movq 0xe0(%rsp), %rax
xorl %edx, %edx
divq %rcx
leaq 0x1fb86d(%rip), %rsi    # 0x3af4bf
movq 0x358(%rsp), %rdi
movq %rbx, %rdx
movq %rax, %r8
movb $0x1, %al
callq 0x10906e
movq 0x128(%rsp), %rdi
callq 0x114bc7
xorl %eax, %eax
movq %rax, 0x128(%rsp)
movq 0x168(%rsp), %rdi
movq %rax, (%rsp)
leaq 0x1fb347(%rip), %rdx    # 0x3aefd8
leaq 0x1fb7a8(%rip), %r8     # 0x3af440
movl $0x397, %esi            # imm = 0x397
xorl %ecx, %ecx
movl $0x1, %r9d
callq 0x320ca8
movq 0xd8(%rsp), %rax
addq 0xc0(%rsp), %rax
movq %rax, 0x88(%rsp)
testq %r15, %r15
je 0x1b3ce0
movq 0x31021a(%rip), %rax    # 0x4c3ee8
movq (%rax), %rdx
leaq 0x1fb317(%rip), %rsi    # 0x3aefef
movq %r15, %rdi
callq 0x1229c8
movq 0x158(%rsp), %rdx
movq 0x168(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
movq 0x88(%rsp), %rcx
callq 0x3217a6
movq %rax, %r13
movq 0x158(%rsp), %rax
movq 0x160(%rsp), %rcx
movq %rcx, (%rax)
cmpq $0x2, 0xf8(%rsp)
jb 0x1b3d4d
movl $0x1, %ecx
movq 0x228(%rsp), %rdx
andq (%rax,%rcx,8), %rdx
addq -0x8(%rax,%rcx,8), %rdx
movq %rdx, (%rax,%rcx,8)
incq %rcx
cmpq 0xf8(%rsp), %rcx
jb 0x1b3d2b
leaq 0xc0(%rsp), %rbx
movq 0xa8(%rbx), %rdi
callq 0x320bae
movq %rax, %xmm1
punpckldq 0x19cb72(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x19cb7a(%rip), %xmm1   # 0x3508f0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x19cb76(%rip), %xmm0   # 0x350900
leaq 0x1fb276(%rip), %rsi    # 0x3af007
movq 0x358(%rsp), %r12
movq %r12, %rdi
movb $0x1, %al
callq 0x10906e
leaq 0x1fb291(%rip), %rsi    # 0x3af03b
movq %r12, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0x10906e
movq 0xd0(%rbx), %rdi
callq 0x1c0918
leaq 0x1fb51b(%rip), %rdi    # 0x3af2e5
leaq 0x1e78(%rip), %rcx      # 0x1b5c49
movq %rax, %rsi
xorl %edx, %edx
movq %rbx, %r8
callq 0x1f8614
movq %rax, 0x90(%rbx)
movq 0x68(%rsp), %r12
movq %r12, %rdi
movq %rax, %rsi
callq 0x1f8c58
movq 0x38(%rbx), %rsi
testq %rsi, %rsi
je 0x1b3e5b
leaq 0x19fa69(%rip), %rdi    # 0x35386e
movl $0x1, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x1f8614
movq %rax, 0x148(%rsp)
movq %r12, %rdi
movq %rax, %rsi
callq 0x1f8c58
movq 0xf8(%rsp), %rsi
incq %rsi
leaq 0x1c43f1(%rip), %rdi    # 0x37822a
movl $0x2, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x1f8614
movq %rax, 0x140(%rsp)
movq %r12, %rdi
movq %rax, %rsi
callq 0x1f8c58
testl %r14d, %r14d
setne %al
movq 0x90(%rsp), %rdx
testq %rdx, %rdx
sete %cl
testb %cl, %al
jne 0x1b4421
testl %r14d, %r14d
setne %al
testq %rdx, %rdx
setne %cl
orb %al, %cl
jne 0x1b42bb
movq 0x168(%rsp), %rdi
callq 0x320bba
movq %rax, %rbx
movl 0x54(%rsp), %eax
movq 0x78(%rsp), %rdx
subq %rax, %rdx
movl $0x1, %edi
movq %r13, %rsi
callq 0x1fe904
addq %rbp, %rbx
addq %rbx, %rax
addq $0x4000, %rax           # imm = 0x4000
movq %rax, 0x90(%rsp)
leaq 0x1d0(%rsp), %rdi
jmp 0x1b42cc
xorl %r15d, %r15d
xorpd %xmm0, %xmm0
movupd %xmm0, 0x8(%rsp)
leaq 0xc0(%rsp), %rbx
movq %rbx, (%rsp)
leaq 0x1c61(%rip), %r9       # 0x1b5b56
movq %r12, %rdi
xorl %esi, %esi
movl 0x54(%rsp), %edx
movl 0x80(%rsp), %ecx
movl $0x1, %r8d
callq 0x200bb0
movq 0x10(%rbx), %rdx
movq %rdx, 0x18(%rbx)
leaq 0x1fb34f(%rip), %rsi    # 0x3af26e
movq 0x358(%rsp), %rdi
xorl %eax, %eax
callq 0x10906e
testq %r15, %r15
je 0x1b3f4c
movq 0x30ffae(%rip), %rax    # 0x4c3ee8
movq (%rax), %rdx
leaq 0x1fb347(%rip), %rsi    # 0x3af28b
movq %r15, %rdi
callq 0x1229c8
movq 0xd8(%rsp), %rsi
movq 0x158(%rsp), %rdi
callq 0x114e0b
testq %r15, %r15
je 0x1b3f7f
movq 0x30ff7b(%rip), %rax    # 0x4c3ee8
movq (%rax), %rdx
leaq 0x1fb32d(%rip), %rsi    # 0x3af2a4
movq %r15, %rdi
callq 0x1229c8
movq %r15, %r12
movq 0x70(%rsp), %rdi
callq 0xf02b7
cmpl $0x4, %eax
jne 0x1b5717
movl 0x11c(%rsp), %ecx
movl $0x4, %edi
movl 0x54(%rsp), %ebp
movl %ebp, %esi
xorl %edx, %edx
callq 0x1c0798
movq %rax, 0x190(%rsp)
movq %rax, %rdi
callq 0x1c0914
addl $0x6, %eax
movl %eax, 0x114(%rsp)
movq 0x168(%rsp), %r15
movq 0x190(%rsp), %rdi
callq 0x1c091d
movq %rax, (%rsp)
leaq 0x1faff0(%rip), %rbx    # 0x3aefd8
leaq 0x1fb2f6(%rip), %r8     # 0x3af2e5
movq %r15, %rdi
movl $0x324, %esi            # imm = 0x324
movq %rbx, %rdx
movl $0x1, %ecx
xorl %r9d, %r9d
callq 0x320ca8
movl 0x118(%rsp), %ecx
movl $0x4, %edi
movl %ebp, %esi
movl $0x1, %edx
callq 0x1c0798
movq %rax, 0x198(%rsp)
movq 0x168(%rsp), %r15
movq %rax, %rdi
callq 0x1c091d
movq %rax, (%rsp)
leaq 0x1fb2ae(%rip), %r8     # 0x3af2f0
movq %r15, %rdi
movl $0x328, %esi            # imm = 0x328
movq %rbx, %rdx
movl $0x1, %ecx
movl $0x1, %r9d
callq 0x320ca8
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x1b571c
movl 0x320(%rsp), %eax
movb 0x318(%rsp), %bpl
leaq 0x108(%rsp), %rbx
movq (%rdi), %rcx
movq %rcx, 0x58(%rbx)
movq -0x30(%rbx), %rcx
movq 0x60(%rbx), %rsi
movq 0x88(%rbx), %r8
movq 0x90(%rbx), %r9
movq 0x358(%rsp), %rdx
movq %rdx, 0x18(%rsp)
movzbl %bpl, %edx
movl %edx, 0x10(%rsp)
movl %eax, 0x8(%rsp)
movq %rbx, (%rsp)
leaq 0x1d0(%rsp), %rdx
callq 0x321030
movq %rax, -0x10(%rbx)
testq %rax, %rax
movq %r12, %r15
je 0x1b413e
cmpq 0xd8(%rsp), %rax
jae 0x1b413e
movq 0x158(%rsp), %rdi
shlq $0x3, %rax
leaq 0x1faee3(%rip), %rbx    # 0x3aefd8
movq %rax, %rsi
movq %rbx, %rdx
movl $0x339, %ecx            # imm = 0x339
callq 0x1094e6
movq %rax, 0x158(%rsp)
movq 0xf8(%rsp), %rax
movq 0x168(%rsp), %rdi
shlq $0x3, %rax
movq %rax, (%rsp)
leaq 0x19f742(%rip), %r8     # 0x35386e
movl $0x33c, %esi            # imm = 0x33C
movq %rbx, %rdx
xorl %ecx, %ecx
xorl %r9d, %r9d
callq 0x320ca8
movq 0xf8(%rsp), %rax
testq %rax, %rax
sete %cl
xorb $0x1, %bpl
orb %cl, %bpl
movq 0x70(%rsp), %r12
jne 0x1b4211
movq 0x158(%rsp), %rdi
leaq 0x1fae6b(%rip), %rsi    # 0x3aefd8
movl $0x52d, %edx            # imm = 0x52D
callq 0x109670
xorl %ebx, %ebx
movq %rbx, 0x158(%rsp)
movq 0x190(%rsp), %rdi
movl $0x1, %esi
callq 0x1c0876
movq 0x198(%rsp), %rdi
movl $0x1, %esi
callq 0x1c0876
movq 0x168(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x321e4a
movq 0x108(%rsp), %rdi
movq 0x168(%rsp), %rsi
callq 0x31e4af
movq 0x168(%rsp), %rdi
callq 0x320c59
movq 0x1b8(%rsp), %rdi
callq 0x1ec492
movq 0x68(%rsp), %rdi
callq 0x1f8d59
movq %rbx, 0x108(%rsp)
testq %r15, %r15
je 0x1b5697
movq %r15, %rdi
callq 0x122d79
jmp 0x1b5697
movl $0x0, 0x110(%rsp)
movq $0x0, 0xe0(%rsp)
movq 0x90(%rsp), %rbp
testq %rbp, %rbp
je 0x1b4294
movq 0x168(%rsp), %rdi
callq 0x320bae
movq %rax, %rbx
movq 0x328(%rsp), %r13
addq %r13, %rbx
movq 0x168(%rsp), %rdi
callq 0x320bae
cmpq %rbp, %rbx
jae 0x1b42fb
addq %r13, %rax
movq %rbp, %rdi
subq %rax, %rdi
callq 0x114ddf
movq 0xf8(%rsp), %rcx
shrq $0x4, %rcx
cmpq %rcx, %rax
cmovaq %rax, %rcx
movq %rcx, 0x188(%rsp)
jmp 0x1b56d9
testl %r14d, %r14d
je 0x1b56ab
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
mulq %rcx
shrq $0x2, %rdx
movq %rdx, 0x188(%rsp)
jmp 0x1b56d9
testq %rdx, %rdx
leaq 0x1d0(%rsp), %rdi
je 0x1b5762
movq 0x140(%rsp), %rbx
testq %rbx, %rbx
je 0x1b438b
movq %rdi, %r12
callq 0x321cef
leaq -0x1(%rax), %rdx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x1f88c2
movq %rax, %rbx
jmp 0x1b4390
movq %rax, %xmm1
movq 0x19c5d8(%rip), %xmm2   # 0x3508e0
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x19c5dc(%rip), %xmm3   # 0x3508f0
subpd %xmm3, %xmm1
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
movsd 0x19c5d4(%rip), %xmm4   # 0x350900
mulsd %xmm4, %xmm0
movq %r13, %xmm5
punpckldq %xmm2, %xmm5    # xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
subpd %xmm3, %xmm5
movapd %xmm5, %xmm1
unpckhpd %xmm5, %xmm1            # xmm1 = xmm1[1],xmm5[1]
addsd %xmm5, %xmm1
mulsd %xmm4, %xmm1
movq %rbp, %xmm5
punpckldq %xmm2, %xmm5    # xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1]
subpd %xmm3, %xmm5
movapd %xmm5, %xmm2
unpckhpd %xmm5, %xmm2            # xmm2 = xmm2[1],xmm5[1]
addsd %xmm5, %xmm2
mulsd %xmm4, %xmm2
leaq 0x1fb01f(%rip), %rsi    # 0x3af390
movq 0x360(%rsp), %rdi
movb $0x3, %al
callq 0x1019cf
movb $0x1, %al
movl %eax, 0x50(%rsp)
jmp 0x1b39bb
xorl %ebx, %ebx
movq %rdi, %r12
movq 0x168(%rsp), %rdi
callq 0x320bae
addq %rbp, %rbx
addq %rax, %rbx
movl 0x120(%rsp), %eax
movq 0x360(%rsp), %rcx
movq %rcx, 0x20(%rsp)
movq 0x88(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movl %eax, (%rsp)
movl $0x0, 0x18(%rsp)
movq $0x0, 0x8(%rsp)
movq %rbx, %rdi
movq 0x90(%rsp), %rsi
xorl %edx, %edx
movq %r12, %rcx
movq 0x68(%rsp), %r8
movq 0x258(%rsp), %r9
callq 0x1f96ac
testl %eax, %eax
js 0x1b4405
jne 0x1b440a
callq 0x653fa
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
testl %eax, %eax
movzbl 0x50(%rsp), %ecx
movl $0x1, %edx
cmovnsl %ecx, %edx
movl %edx, 0x50(%rsp)
cmovnsl %eax, %r14d
cmpb $0x0, 0x50(%rsp)
je 0x1b443f
xorl %r12d, %r12d
xorl %edi, %edi
movq 0xa8(%rsp), %r13
movq 0x68(%rsp), %r14
jmp 0x1b52e4
testl %r14d, %r14d
je 0x1b5726
movq 0x358(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x88(%rsp), %rax
movq %rax, (%rsp)
movq $0x0, 0x8(%rsp)
movl $0x1, %edx
movl %r14d, %edi
xorl %esi, %esi
xorl %ecx, %ecx
leaq 0x1d0(%rsp), %r8
movq 0x68(%rsp), %r9
callq 0x1f905f
testq %rax, %rax
je 0x1b572b
movq %rax, %r15
movq %rax, %rdi
movl $0x1, %esi
callq 0x1f8d94
leaq 0xc0(%rsp), %rbx
movq 0x38(%rbx), %rax
movq 0x98(%rbx), %rcx
movq -0x8(%rcx,%rax,8), %r14
movq %r15, %rdi
callq 0x1f9612
movq %rbx, %rdi
movq %rax, %rsi
callq 0x1b5767
cmpq %rax, %r14
jne 0x1b5730
movq 0x68(%rsp), %rdi
callq 0x1f8d59
movq 0x168(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x321de9
cmpq $0x0, 0x180(%rsp)
jne 0x1b5735
movq %r15, 0x58(%rsp)
movq 0x140(%rsp), %rbx
testq %rbx, %rbx
je 0x1b573a
leaq 0x1d0(%rsp), %r12
movq %r12, %rdi
callq 0x321f2d
movq %rax, %r14
movq %r12, %rdi
callq 0x321f23
movq %rax, %r15
movq %r12, %rdi
callq 0x321cef
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
movq %rax, %rcx
movl $0x1, %r8d
callq 0x1f8811
movq 0x58(%rsp), %rdi
callq 0x1f969d
cmpl $0x2, %eax
jb 0x1b4649
cmpq $0x0, 0x158(%rsp)
je 0x1b5744
movq 0x148(%rsp), %rdi
testq %rdi, %rdi
je 0x1b5749
leaq 0x158(%rsp), %rbx
movq %rbx, %rsi
xorl %edx, %edx
callq 0x1f86eb
movq 0x10(%rbx), %rdi
movq $0x0, (%rsp)
leaq 0x1faa2a(%rip), %rdx    # 0x3aefd8
leaq 0x19f2b9(%rip), %r8     # 0x35386e
movl $0x402, %esi            # imm = 0x402
xorl %ecx, %ecx
xorl %r9d, %r9d
callq 0x320ca8
cmpq $0x0, (%rbx)
jne 0x1b574e
movq 0x190(%rsp), %rdi
xorl %esi, %esi
callq 0x1c0921
movq 0x150(%rsp), %rbx
testq %rbx, %rbx
je 0x1b5753
movq 0x190(%rsp), %rdi
callq 0x1c0940
movq %rbx, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x1f87fc
movq 0x168(%rsp), %rdi
movq $0x0, (%rsp)
leaq 0x1fa9b9(%rip), %rdx    # 0x3aefd8
leaq 0x1facbf(%rip), %r8     # 0x3af2e5
movl $0x40a, %esi            # imm = 0x40A
xorl %ecx, %ecx
xorl %r9d, %r9d
callq 0x320ca8
movq 0x190(%rsp), %rdi
movl $0x1, %esi
callq 0x1c0921
jmp 0x1b4675
movq 0x148(%rsp), %rdi
callq 0x1f8bb6
xorl %ebx, %ebx
movq %rbx, 0x148(%rsp)
movq 0x150(%rsp), %rdi
callq 0x1f8bb6
movq %rbx, 0x150(%rsp)
movq 0x58(%rsp), %rdi
callq 0x1f967d
movq %rax, %rbx
movl 0x120(%rsp), %edx
movq %rax, %rdi
movq 0x258(%rsp), %r14
movq %r14, %rsi
movq 0x358(%rsp), %rcx
callq 0x208264
movq %rax, 0x138(%rsp)
movl 0x120(%rsp), %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x20834e
movq 0x168(%rsp), %rdi
movq %rax, (%rsp)
leaq 0x1fa907(%rip), %rbx    # 0x3aefd8
leaq 0x236fb0(%rip), %r8     # 0x3eb688
movl $0x591, %esi            # imm = 0x591
movq %rbx, %rdx
movl $0x1, %ecx
movl $0x1, %r9d
callq 0x320ca8
leaq 0x1093(%rip), %rax      # 0x1b578a
movq %rax, 0x1a0(%rsp)
movq 0xa8(%rsp), %r15
leaq (,%r15,8), %rdi
movq %rdi, 0x290(%rsp)
movq %rbx, %rsi
movl $0x593, %edx            # imm = 0x593
callq 0x1092b2
movq %rax, %rbp
testq %r15, %r15
je 0x1b475d
movl 0x54(%rsp), %eax
movq 0x78(%rsp), %rbx
subq %rax, %rbx
xorl %r14d, %r14d
movq %r13, %rdi
movq %rbx, %rsi
xorl %edx, %edx
movl $0x1, %ecx
xorl %r8d, %r8d
callq 0x1fe9ca
movq %rax, (%rbp,%r14,8)
incq %r14
cmpq %r14, %r15
jne 0x1b473b
movq %rbp, 0xa0(%rsp)
movq 0x168(%rsp), %rbx
movl 0x54(%rsp), %eax
movq 0x78(%rsp), %rdx
movq %rax, 0x288(%rsp)
subq %rax, %rdx
movl $0x1, %edi
movq %r13, %rsi
callq 0x1fe904
imulq %r15, %rax
movq %rax, (%rsp)
leaq 0x1fa83b(%rip), %rdx    # 0x3aefd8
leaq 0x1fd608(%rip), %r8     # 0x3b1dac
movq %rbx, %rdi
movl $0x59c, %esi            # imm = 0x59C
movl $0x1, %ecx
movl $0x1, %r9d
callq 0x320ca8
movq 0x90(%rsp), %r14
testq %r14, %r14
movq %r15, %r13
je 0x1b4813
movq 0x168(%rsp), %rdi
callq 0x320bb6
movq %rax, %rbx
movq 0x58(%rsp), %rdi
callq 0x1f968d
movq 0x328(%rsp), %rcx
addq %rax, %rcx
addq %rbx, %rcx
movq %r14, %rdi
subq %rcx, %rdi
movq 0x98(%rsp), %r15
jbe 0x1b4825
callq 0x114de7
movq %rax, 0x188(%rsp)
jmp 0x1b482e
shrq 0x188(%rsp)
movq 0x98(%rsp), %r15
jmp 0x1b486f
shrq $0x2, 0x188(%rsp)
movq 0xd8(%rsp), %rcx
addq 0xe0(%rsp), %rcx
movq %rcx, %rax
xorl %edx, %edx
divq 0x188(%rsp)
cmpq $0x191, %rax            # imm = 0x191
jb 0x1b486f
shrq $0x4, %rcx
movabsq $0xa3d70a3d70a3d71, %rdx # imm = 0xA3D70A3D70A3D71
movq %rcx, %rax
mulq %rdx
movq %rdx, 0x188(%rsp)
cmpb $0x0, 0x310(%rsp)
jne 0x1b48dd
movq 0x188(%rsp), %rdi
callq 0x114b8a
movq %rax, 0x130(%rsp)
movq 0x168(%rsp), %rbx
movq %rax, %rdi
callq 0x114bbf
movq %rax, (%rsp)
leaq 0x1fa72f(%rip), %rdx    # 0x3aefd8
leaq 0x1fa856(%rip), %r8     # 0x3af106
movq %rbx, %rdi
movl $0x5a5, %esi            # imm = 0x5A5
movl $0x1, %ecx
movl $0x1, %r9d
callq 0x320ca8
movq 0x130(%rsp), %rdi
callq 0x115439
movq %rax, 0x1a8(%rsp)
movq $0x0, 0xe0(%rsp)
movl $0x0, 0x110(%rsp)
xorl %r14d, %r14d
movl 0x50(%rsp), %ecx
testb %cl, %cl
jne 0x1b52d7
movsd 0x88(%rsp), %xmm0
unpcklps 0x19bfcd(%rip), %xmm0   # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x19bfd5(%rip), %xmm0   # 0x3508f0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movapd %xmm1, 0x2c0(%rsp)
leal -0x1(%r13), %eax
movq %rax, 0x68(%rsp)
movq %r13, %rax
shlq $0x7, %rax
leaq (%rax,%r13,8), %rax
movq %rax, 0x280(%rsp)
movl %ecx, %ebp
xorl %r12d, %r12d
cmpb $0x0, 0x310(%rsp)
jne 0x1b52d7
movq 0x58(%rsp), %rdi
callq 0x1f969d
cmpl %eax, %r12d
jae 0x1b52d1
testq %r15, %r15
je 0x1b4990
movq 0x30f56a(%rip), %rax    # 0x4c3ee8
movq (%rax), %rdx
movq %r15, %rdi
leaq 0x1fae3e(%rip), %rsi    # 0x3af7c9
callq 0x1229c8
movl %r12d, %edi
movq 0x58(%rsp), %rbx
movq %rbx, %rsi
callq 0x1f9656
movq %rax, 0x100(%rsp)
movq %rax, %xmm1
punpckldq 0x19bf2b(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x19bf33(%rip), %xmm1   # 0x3508f0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x19de1f(%rip), %xmm0   # 0x3527f0
divsd 0x2c0(%rsp), %xmm0
movq 0x358(%rsp), %rdi
leaq 0x1fae00(%rip), %rsi    # 0x3af7e9
movl %r12d, %edx
movb $0x1, %al
callq 0x10906e
movl %r12d, %edi
movq %rbx, %rsi
callq 0x1f8f44
movq %rax, 0xe8(%rsp)
movl %r12d, %edi
movq %rbx, %rsi
callq 0x1f8f6c
movq %rax, 0xf0(%rsp)
movq 0x148(%rsp), %rdi
testq %rdi, %rdi
je 0x1b4a8a
movq 0xe8(%rsp), %rsi
movq %rax, %rdx
callq 0x1f896a
movq %rax, 0x158(%rsp)
movq 0x168(%rsp), %rbx
movq 0x148(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
callq 0x1f88c2
movq %rax, (%rsp)
movq %rbx, %rdi
movl $0x465, %esi            # imm = 0x465
leaq 0x1fa562(%rip), %rdx    # 0x3aefd8
movl $0x1, %ecx
leaq 0x19edec(%rip), %r8     # 0x35386e
xorl %r9d, %r9d
callq 0x320ca8
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x1b5703
movl %ebp, 0xb4(%rsp)
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
callq 0x1f896a
leaq 0x1d0(%rsp), %rdi
movq %rax, %rsi
callq 0x321f28
movq 0x168(%rsp), %rbx
movq 0x140(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
callq 0x1f88c2
movq %rax, (%rsp)
movq %rbx, %rdi
movl $0x470, %esi            # imm = 0x470
leaq 0x1fa4d9(%rip), %rbp    # 0x3aefd8
movq %rbp, %rdx
movl $0x1, %ecx
leaq 0x1c371c(%rip), %r8     # 0x37822a
xorl %r9d, %r9d
callq 0x320ca8
movq 0x150(%rsp), %rdi
testq %rdi, %rdi
je 0x1b4b90
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
callq 0x1f896a
movq 0x190(%rsp), %rdi
movq %rax, %rsi
callq 0x1c0945
movq 0x168(%rsp), %rbx
movq 0x150(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
callq 0x1f88c2
movq %rax, (%rsp)
movq %rbx, %rdi
movl $0x47c, %esi            # imm = 0x47C
movq %rbp, %rdx
movl $0x1, %ecx
leaq 0x1fa75d(%rip), %r8     # 0x3af2e5
xorl %r9d, %r9d
callq 0x320ca8
movq 0x168(%rsp), %rdi
callq 0x320bae
movq %rax, %xmm1
punpckldq 0x19bd36(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x19bd3e(%rip), %xmm1   # 0x3508f0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x19bd3a(%rip), %xmm0   # 0x350900
movq 0x358(%rsp), %rdi
leaq 0x1fac5a(%rip), %rsi    # 0x3af82f
movl %r12d, %edx
movb $0x1, %al
callq 0x10906e
movq 0xe8(%rsp), %rsi
movl %r12d, %r15d
leaq 0xc0(%rsp), %r12
movq %r12, %rdi
callq 0x1b5767
movq %rax, 0x170(%rsp)
movq 0xf0(%rsp), %rsi
movq %r12, %rdi
callq 0x1b5767
movq %rax, 0x178(%rsp)
movq 0x138(%rsp), %rbx
movl %r15d, 0x64(%rsp)
movl %r15d, %edi
movq 0x58(%rsp), %rsi
callq 0x1f962e
movq %rbx, %rdi
movq %rax, %rsi
callq 0x2083a6
movq 0x70(%rsp), %rdi
movl 0x54(%rsp), %esi
movl 0x80(%rsp), %edx
leaq 0x170(%rsp), %rcx
callq 0x31e6d4
movq %r12, %rdi
callq 0x1b578a
movq 0x150(%rsp), %rdi
testq %rdi, %rdi
je 0x1b4c9f
callq 0x1f8946
movq 0x168(%rsp), %rdi
movq $0x0, (%rsp)
movl $0x48c, %esi            # imm = 0x48C
movq %rbp, %rdx
xorl %ecx, %ecx
leaq 0x1fa64e(%rip), %r8     # 0x3af2e5
xorl %r9d, %r9d
callq 0x320ca8
movq 0x148(%rsp), %rdi
testq %rdi, %rdi
movq 0x98(%rsp), %rbx
je 0x1b4ce2
callq 0x1f8946
movq 0x168(%rsp), %rdi
movq $0x0, (%rsp)
movl $0x491, %esi            # imm = 0x491
movq %rbp, %rdx
xorl %ecx, %ecx
leaq 0x19eb94(%rip), %r8     # 0x35386e
xorl %r9d, %r9d
callq 0x320ca8
movq 0x58(%rsp), %rbp
movq %rbp, %rdi
callq 0x1f969d
decl %eax
cmpl 0x64(%rsp), %eax
jne 0x1b4d04
leaq 0xc0(%rsp), %rdi
callq 0x1b59d5
testq %rbx, %rbx
je 0x1b4d22
movq 0x30f1d8(%rip), %rax    # 0x4c3ee8
movq (%rax), %rdx
movq %rbx, %rdi
leaq 0x1fab35(%rip), %rsi    # 0x3af852
callq 0x1229c8
movq 0x90(%rsp), %rbx
testq %rbx, %rbx
je 0x1b4d92
movq 0x168(%rsp), %rdi
callq 0x320bae
cmpq %rbx, %rax
jae 0x1b4d92
movq 0x168(%rsp), %rdi
callq 0x320bae
subq %rax, %rbx
movq %rbx, 0xb8(%rsp)
movq %rbx, %xmm1
punpckldq 0x19bb7a(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x19bb82(%rip), %xmm1   # 0x3508f0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x19bb7e(%rip), %xmm0   # 0x350900
leaq 0x1faae5(%rip), %rdi    # 0x3af86e
movb $0x1, %al
callq 0x108e02
jmp 0x1b4d9e
movq $0x0, 0xb8(%rsp)
cmpl $0x2, %r13d
jb 0x1b5187
movq 0x138(%rsp), %rax
movq %rax, 0x2b0(%rsp)
movq 0x1b8(%rsp), %rax
movq %rax, 0x2a8(%rsp)
movq 0xe8(%rsp), %r15
movq 0xf0(%rsp), %r12
movl 0x64(%rsp), %ebx
movl %ebx, %edi
movq %rbp, %rsi
callq 0x1f9656
movq %rbp, %rsi
movq %rax, %rbp
movl %ebx, %edi
callq 0x1f8f18
movq %rax, 0x2a0(%rsp)
movq %r12, 0x260(%rsp)
cmpq %r12, %r15
jae 0x1b5712
movq %rbp, 0x298(%rsp)
movq %rbp, %rax
xorl %edx, %edx
divq %r13
movq %rdx, 0x268(%rsp)
movq %rax, 0x2b8(%rsp)
movq 0x290(%rsp), %rdi
leaq 0x1fa19d(%rip), %rsi    # 0x3aefd8
movl $0x1af, %edx            # imm = 0x1AF
callq 0x1092b2
movq %rax, %rbp
leaq 0x1d0(%rsp), %rbx
movq %rbx, %rdi
movq %r15, 0x270(%rsp)
movq %r15, %rsi
callq 0x321d0b
movq %rbx, %rdi
movq %rax, %r12
movq 0x268(%rsp), %rax
xorl %r15d, %r15d
movq %rbp, 0x78(%rsp)
movq 0x260(%rsp), %rcx
addq 0x2b8(%rsp), %r12
subl $0x1, %eax
cmovbl %r14d, %eax
sbbq $-0x1, %r12
cmpq 0x68(%rsp), %r15
jne 0x1b4ea5
movq %rcx, (%rbp,%r15,8)
jmp 0x1b4f4f
movq %rax, 0x268(%rsp)
movq 0x270(%rsp), %r13
testq %r15, %r15
je 0x1b4ec2
movq -0x8(%rbp,%r15,8), %r13
incq %r13
leaq 0x1(%r13), %rax
movq %rcx, %rbp
cmpq %rcx, %rax
jae 0x1b4f1c
movq 0x260(%rsp), %rbx
movq %rbx, %r14
leaq (%rbx,%r13), %rbp
shrq %rbp
movq %rbp, %rsi
callq 0x321d0b
cmpq %r12, %rax
je 0x1b4f14
ja 0x1b4efa
movq %rbp, %r13
incq %r13
movq %r14, %rbp
jmp 0x1b4f01
leaq -0x1(%rbp), %rbx
movq %rbp, %r14
leaq 0x1d0(%rsp), %rdi
leaq 0x1(%r13), %rax
cmpq %rbx, %rax
jb 0x1b4ed9
jmp 0x1b4f1c
leaq 0x1d0(%rsp), %rdi
movq 0x78(%rsp), %rax
movq %rbp, (%rax,%r15,8)
movq 0x260(%rsp), %rcx
cmpq %rcx, %rbp
movq %rax, %rbp
movq 0xa8(%rsp), %r13
movl $0x0, %r14d
movq 0x268(%rsp), %rax
ja 0x1b56fe
incq %r15
cmpq %r13, %r15
jne 0x1b4e81
movq 0x280(%rsp), %rdi
leaq 0x1fa06e(%rip), %rsi    # 0x3aefd8
movl $0x218, %edx            # imm = 0x218
callq 0x1092b2
movq %rax, %r14
xorl %r15d, %r15d
movq %rax, %r13
xorl %ebx, %ebx
xorl %r12d, %r12d
movq 0xa0(%rsp), %rax
movq (%rax,%r15,8), %rax
movq %rax, (%r14)
movq 0x70(%rsp), %rax
movq %rax, 0x8(%r14)
movq 0x2b0(%rsp), %rax
movq %rax, 0x18(%r14)
movq 0x2a8(%rsp), %rax
movq %rax, 0x20(%r14)
leaq 0x1d0(%rsp), %rdi
movq %rdi, 0x28(%r14)
movq 0x270(%rsp), %rsi
testq %r15, %r15
movq 0x350(%rsp), %rcx
je 0x1b4fdb
movq -0x8(%rbp,%r15,8), %rsi
incq %rsi
movq %rsi, 0x38(%r14)
movq (%rbp,%r15,8), %rax
movq %rax, 0x40(%r14)
movl $0x0, 0x10(%r14)
movl 0x84(%rsp), %eax
movb %al, 0x58(%r14)
movq 0xb8(%rsp), %rax
movq %rax, 0x50(%r14)
movq 0x288(%rsp), %rax
movq %rax, 0x30(%r14)
movq 0x340(%rsp), %rax
movq %rax, 0x60(%r14)
movq 0x348(%rsp), %rax
movq %rax, 0x68(%r14)
testq %rcx, %rcx
je 0x1b5036
movq (%rcx,%r15,8), %rax
jmp 0x1b5038
xorl %eax, %eax
movq %rax, 0x70(%r14)
movq $0x0, 0x78(%r14)
callq 0x321d0b
movq %rax, %rbp
movq 0x2a0(%rsp), %rax
cmpq 0x68(%rsp), %r15
jae 0x1b506f
movq 0x40(%r14), %rsi
incq %rsi
leaq 0x1d0(%rsp), %rdi
callq 0x321d0b
movq %rax, 0x48(%r14)
movq %rax, %rdx
subq %rbp, %rdx
jbe 0x1b56f9
movq 0x38(%r14), %rcx
movq 0x40(%r14), %r8
movq %rdx, 0x8(%rsp)
movq %rax, (%rsp)
movq 0x358(%rsp), %rdi
leaq 0x1fa833(%rip), %rsi    # 0x3af8d2
movl %r15d, %edx
movq %rbp, %r9
xorl %eax, %eax
callq 0x10906e
subq %rbp, %r12
addq 0x48(%r14), %r12
leaq 0xee0(%rip), %rdi       # 0x1b5f9a
movq %r14, %rsi
xorl %edx, %edx
callq 0x122488
movq %rax, 0x80(%r14)
movl $0x1, %ecx
testq %rax, %rax
je 0x1b50d8
movzbl %bl, %ecx
movl %ecx, %ebx
incq %r15
addq $0x88, %r14
cmpq %r15, 0xa8(%rsp)
movq 0x78(%rsp), %rbp
jne 0x1b4f82
testb $0x1, %bl
jne 0x1b510a
cmpq 0x298(%rsp), %r12
jne 0x1b570d
xorl %r14d, %r14d
movq 0x98(%rsp), %r15
movl 0xb4(%rsp), %ebp
movl 0x64(%rsp), %r12d
testb $0x1, %bl
jne 0x1b5133
movq 0x80(%r13,%r14), %rdi
callq 0x122527
movq 0x80(%r13,%r14), %rdi
callq 0x12268d
addq $0x88, %r14
cmpq %r14, 0x280(%rsp)
jne 0x1b5121
movq %r13, %rdi
leaq 0x1f9e7d(%rip), %r14    # 0x3aefd8
movq %r14, %rsi
movl $0x255, %edx            # imm = 0x255
callq 0x109670
movq 0x78(%rsp), %rdi
movq %r14, %rsi
movl $0x256, %edx            # imm = 0x256
callq 0x109670
movq 0xa8(%rsp), %r13
jmp 0x1b5270
movq 0xa0(%rsp), %rax
movq (%rax), %r15
movq 0x138(%rsp), %rbx
movq 0x1b8(%rsp), %r14
movq 0xe8(%rsp), %r12
movq 0xf0(%rsp), %r13
movl 0x64(%rsp), %edi
movq %rbp, %rsi
callq 0x1f8f18
movq 0x350(%rsp), %rcx
testq %rcx, %rcx
je 0x1b51d0
movq (%rcx), %rcx
jmp 0x1b51d2
xorl %ecx, %ecx
movzbl 0x84(%rsp), %edx
movl %edx, 0x40(%rsp)
movq %rcx, 0x38(%rsp)
movq 0xb8(%rsp), %rcx
movq %rcx, 0x18(%rsp)
movq %rax, 0x10(%rsp)
movq %r13, 0x8(%rsp)
movq 0x360(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x348(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x340(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x288(%rsp), %rax
movq %rax, 0x20(%rsp)
movq %r12, (%rsp)
movq %r15, %rdi
movq 0x70(%rsp), %rsi
xorl %edx, %edx
movq %rbx, %rcx
movq %r14, %r8
leaq 0x1d0(%rsp), %r9
callq 0x1b5c9c
testl %eax, %eax
setne %bl
movq 0xa8(%rsp), %r13
movq 0x98(%rsp), %r15
movl 0xb4(%rsp), %ebp
movl 0x64(%rsp), %r12d
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
movl $0x0, %r14d
je 0x1b52b5
callq 0x1f8946
movq 0x168(%rsp), %rdi
movq $0x0, (%rsp)
movl $0x4e0, %esi            # imm = 0x4E0
leaq 0x1f9d34(%rip), %rdx    # 0x3aefd8
xorl %ecx, %ecx
leaq 0x1c2f7d(%rip), %r8     # 0x37822a
xorl %r9d, %r9d
callq 0x320ca8
movzbl %bpl, %ebp
testb $0x1, %bl
movl $0x1, %eax
cmovnel %eax, %ebp
incl %r12d
testb $0x1, %bpl
je 0x1b4951
movl %ebp, %eax
movl %eax, 0x50(%rsp)
movq 0x58(%rsp), %r12
movq 0xa0(%rsp), %rdi
testq %r15, %r15
movq %rdi, %rbp
je 0x1b5308
movq 0x30ebf5(%rip), %rax    # 0x4c3ee8
movq (%rax), %rdx
leaq 0x1f9e1b(%rip), %rsi    # 0x3af118
movq %r15, %rdi
callq 0x1229c8
movq %rbp, %rdi
testb $0x1, 0x50(%rsp)
jne 0x1b54be
movq 0x168(%rsp), %rdi
movq $0x0, (%rsp)
leaq 0x1f9cae(%rip), %rdx    # 0x3aefd8
leaq 0x1fca7b(%rip), %r8     # 0x3b1dac
movl $0x5cb, %esi            # imm = 0x5CB
xorl %ecx, %ecx
movl $0x1, %r9d
callq 0x320ca8
cmpb $0x0, 0x310(%rsp)
jne 0x1b53f3
movq %rbp, %rcx
testq %rbp, %rbp
je 0x1b53f3
testq %r13, %r13
je 0x1b53b1
movq %r12, 0x58(%rsp)
movq %r14, %r12
xorl %ebx, %ebx
xorl %r14d, %r14d
movq (%rcx,%rbx,8), %rdi
callq 0x1feb9f
movq %rbp, %rcx
addq %rax, %r14
incq %rbx
cmpq %rbx, %r13
jne 0x1b536f
movq %r14, %xmm1
punpckldq 0x19b54d(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x19b555(%rip), %xmm1   # 0x3508f0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
movq %r12, %r14
movq 0x58(%rsp), %r12
jmp 0x1b53b5
xorpd %xmm0, %xmm0
movsd 0xc8(%rsp), %xmm1
unpcklps 0x19b51b(%rip), %xmm1   # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x19b523(%rip), %xmm1   # 0x3508f0
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
divsd %xmm2, %xmm0
leaq 0x1f9d40(%rip), %rsi    # 0x3af124
movq 0x358(%rsp), %rdi
movb $0x1, %al
callq 0x10906e
cmpb $0x0, 0x310(%rsp)
je 0x1b5412
leaq 0xc0(%rsp), %rdi
callq 0x1b59d5
movq %rbp, %rdi
jmp 0x1b54be
movl 0x110(%rsp), %ecx
testq %rcx, %rcx
je 0x1b5758
movq 0xc8(%rsp), %r8
movq %r8, %xmm1
movq 0x19b4a9(%rip), %xmm2   # 0x3508e0
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x19b4ad(%rip), %xmm3   # 0x3508f0
subpd %xmm3, %xmm1
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x19d395(%rip), %xmm0   # 0x3527f0
movq 0xe0(%rsp), %rax
movq 0x258(%rsp), %xmm1
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
subpd %xmm3, %xmm1
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
divsd %xmm2, %xmm0
xorl %edx, %edx
divq %rcx
leaq 0x1f9cc8(%rip), %rsi    # 0x3af158
movq 0x358(%rsp), %rdi
movq %r8, %rdx
movq %rax, %r8
movb $0x1, %al
callq 0x10906e
movq 0x88(%rsp), %rax
cmpq %rax, 0xc8(%rsp)
movq %rbp, %rdi
jne 0x1b575d
testq %rdi, %rdi
je 0x1b54ef
testq %r13, %r13
je 0x1b54de
xorl %ebx, %ebx
movq (%rdi,%rbx,8), %rdi
callq 0x1feba4
movq %rbp, %rdi
incq %rbx
cmpq %rbx, %r13
jne 0x1b54ca
leaq 0x1f9af3(%rip), %rsi    # 0x3aefd8
movl $0x5f0, %edx            # imm = 0x5F0
callq 0x109670
movl 0x50(%rsp), %ebp
testb $0x1, %bpl
je 0x1b5543
leaq 0xc0(%rsp), %rbx
movq %rbx, %rdi
callq 0x1b59d5
movq 0x98(%rbx), %rdi
leaq 0x1f9ac1(%rip), %rsi    # 0x3aefd8
movl $0x5f5, %edx            # imm = 0x5F5
callq 0x109670
movq %r14, %rdi
xorl %r14d, %r14d
movq %r14, 0x98(%rbx)
callq 0x1f8d59
movq %r14, 0xf0(%rbx)
movq 0x68(%rbx), %rdi
callq 0x114bc7
movq %r12, %rdi
callq 0x1f95d7
movq 0x168(%rsp), %rdi
leaq 0x1d0(%rsp), %rbx
movq %rbx, %rsi
callq 0x321e4a
movq 0x168(%rsp), %rdi
movq %rbx, %rsi
callq 0x321eb7
movq 0x138(%rsp), %rdi
testq %rdi, %rdi
je 0x1b55bb
callq 0x20837a
movq 0x168(%rsp), %rdi
xorl %ebx, %ebx
movq %rbx, (%rsp)
leaq 0x1f9a3e(%rip), %rdx    # 0x3aefd8
leaq 0x2360e7(%rip), %r8     # 0x3eb688
movl $0x601, %esi            # imm = 0x601
xorl %ecx, %ecx
movl $0x1, %r9d
callq 0x320ca8
movq %rbx, 0x138(%rsp)
movq 0x140(%rsp), %rdi
callq 0x1f8bb6
cmpq $0x0, 0x148(%rsp)
jne 0x1b560b
cmpq $0x0, 0x158(%rsp)
je 0x1b560b
movq 0x168(%rsp), %rdi
movq $0x0, (%rsp)
leaq 0x1f99e3(%rip), %rdx    # 0x3aefd8
leaq 0x19e272(%rip), %r8     # 0x35386e
movl $0x607, %esi            # imm = 0x607
xorl %ecx, %ecx
xorl %r9d, %r9d
callq 0x320ca8
movq 0x148(%rsp), %rdi
callq 0x1f8bb6
movq 0x1b8(%rsp), %rdi
callq 0x1ec492
movq 0x168(%rsp), %rdi
callq 0x320ba9
movq 0x168(%rsp), %rdi
movq $0x0, (%rsp)
leaq 0x1f998f(%rip), %rdx    # 0x3aefd8
leaq 0x1daf86(%rip), %r8     # 0x3905d6
movl $0x60c, %esi            # imm = 0x60C
xorl %ecx, %ecx
movl $0x1, %r9d
callq 0x320ca8
movq 0x168(%rsp), %rdi
callq 0x320c59
testq %r15, %r15
je 0x1b568e
movq 0x30e86d(%rip), %rax    # 0x4c3ee8
movq (%rax), %rsi
movq %r15, %rdi
callq 0x122c67
movq %r15, %rdi
callq 0x122d79
movzbl %bpl, %ebx
andl $0x1, %ebx
negl %ebx
movl %ebx, %eax
addq $0x2d8, %rsp            # imm = 0x2D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x168(%rsp), %rdi
callq 0x320bae
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
mulq %rcx
movq %rdx, %rdi
shrq $0x2, %rdi
callq 0x114ddf
movq %rax, 0x188(%rsp)
cmpq $0xf, 0x188(%rsp)
ja 0x1b39bb
movq $0x10, 0x188(%rsp)
jmp 0x1b39bb
callq 0x65589
callq 0x65550
callq 0x655fb
callq 0x657fc
callq 0x655c2
callq 0x65517
callq 0x65316
callq 0x6534f
callq 0x65433
callq 0x65751
callq 0x65718
callq 0x6546c
callq 0x654a5
callq 0x656df
callq 0x65388
callq 0x656a6
callq 0x6566d
callq 0x654de
callq 0x65634
callq 0x657c3
callq 0x6578a
callq 0x653c1