// File: /workspace/github_c_makefile_star2_O0/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 $0x2e8, %rsp            # imm = 0x2E8
movl %r9d, %eax
movq %rcx, 0xb0(%rsp)
movl %edx, %r9d
movl %esi, %r10d
movq %rdi, %r11
movq 0xb0(%rsp), %rdi
movb %al, %sil
movq 0x370(%rsp), %rax
movq 0x368(%rsp), %rax
movq 0x360(%rsp), %rax
movq 0x358(%rsp), %rax
movq 0x350(%rsp), %rax
movl 0x348(%rsp), %eax
movb 0x340(%rsp), %al
movq 0x338(%rsp), %rcx
movl 0x330(%rsp), %ecx
movb 0x328(%rsp), %cl
movb 0x320(%rsp), %dl
movq %r11, 0x2d8(%rsp)
movl %r10d, 0x2d4(%rsp)
movl %r9d, 0x2d0(%rsp)
movq %rdi, 0x2c8(%rsp)
movl %r8d, 0x2c4(%rsp)
andb $0x1, %sil
movb %sil, 0x2c3(%rsp)
andb $0x1, %dl
movb %dl, 0x2c2(%rsp)
andb $0x1, %cl
movb %cl, 0x2c1(%rsp)
andb $0x1, %al
movb %al, 0x2c0(%rsp)
movq $0x0, 0x2b8(%rsp)
movq $0x0, 0x118(%rsp)
movq $0x0, 0x100(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0xa9d00
movq %rax, 0xf0(%rsp)
movq 0x2d8(%rsp), %rdi
callq 0xb10b0
movq %rax, 0xe8(%rsp)
movq $0x0, 0xe0(%rsp)
movq $0x0, 0xd8(%rsp)
movq $0x0, 0xd0(%rsp)
movl $0x0, 0xcc(%rsp)
movb $0x0, 0xcb(%rsp)
leaq 0x3f7258(%rip), %rax    # 0x63d378
movl (%rax), %eax
movl %eax, 0xc4(%rsp)
movq 0xe8(%rsp), %rax
movl 0x2c4(%rsp), %ecx
cmpq %rcx, %rax
jae 0x24614d
movl $0x0, 0x2e4(%rsp)
jmp 0x2470b9
movq 0x2d8(%rsp), %rsi
movl 0x2d4(%rsp), %edx
movb 0x2c3(%rsp), %al
movl 0x2c4(%rsp), %r8d
movq 0x370(%rsp), %r9
leaq 0x120(%rsp), %rdi
andb $0x1, %al
movzbl %al, %ecx
callq 0x2470e0
cmpl $0x0, %eax
je 0x246192
movb $0x1, 0xcb(%rsp)
testb $0x1, 0xcb(%rsp)
jne 0x246379
callq 0x2ccb30
movq %rax, 0xe0(%rsp)
callq 0x11aa90
testb $0x1, %al
jne 0x2461b8
jmp 0x2461d9
leaq 0x332021(%rip), %rdi    # 0x5781e0
callq 0x1213a0
movq %rax, 0x2b8(%rsp)
movq 0x2b8(%rsp), %rdi
callq 0x1213f0
movq 0x2d8(%rsp), %rsi
movl 0x2d4(%rsp), %ecx
movl 0x2c4(%rsp), %r8d
movl 0x330(%rsp), %r9d
movb 0x2c1(%rsp), %r11b
movq 0x368(%rsp), %r10
movq 0x2b8(%rsp), %rax
leaq 0x120(%rsp), %rdi
xorl %edx, %edx
andb $0x1, %r11b
movzbl %r11b, %r11d
movl %r11d, (%rsp)
movq %r10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x2475b0
cmpq $0x0, 0x158(%rsp)
jbe 0x246327
testb $0x1, 0x2c1(%rsp)
je 0x246327
movq 0x1b8(%rsp), %rdi
leaq 0x331f9b(%rip), %rsi    # 0x5781fc
movl $0x52d, %edx            # imm = 0x52D
callq 0xe88c0
movq $0x0, 0x1b8(%rsp)
movq 0x1f0(%rsp), %rdi
movl $0x1, %esi
callq 0x261020
movq 0x1f8(%rsp), %rdi
movl $0x1, %esi
callq 0x261020
movq 0x1c8(%rsp), %rdi
leaq 0x120(%rsp), %rsi
addq $0x110, %rsi            # imm = 0x110
callq 0x4c1070
movq 0x168(%rsp), %rdi
movq 0x1c8(%rsp), %rsi
callq 0x4ba9e0
movq 0x1c8(%rsp), %rdi
callq 0x4bea00
movq 0x218(%rsp), %rdi
callq 0x2b11b0
movq 0xe0(%rsp), %rdi
callq 0x2ccdf0
movq $0x0, 0x168(%rsp)
cmpq $0x0, 0x2b8(%rsp)
je 0x246317
movq 0x2b8(%rsp), %rdi
callq 0x121f00
movl $0x0, 0x2e4(%rsp)
jmp 0x2470b9
movl $0x0, 0x170(%rsp)
movq $0x0, 0x140(%rsp)
movl 0x2d0(%rsp), %esi
movq 0x2c8(%rsp), %rdx
movq 0x338(%rsp), %rcx
movq 0x370(%rsp), %r8
leaq 0x120(%rsp), %rdi
callq 0x2479b0
cmpl $0x0, %eax
je 0x246377
movb $0x1, 0xcb(%rsp)
jmp 0x246379
movq $0x0, 0x1e0(%rsp)
testb $0x1, 0xcb(%rsp)
jne 0x246594
movq 0x2d8(%rsp), %rsi
movl 0x2d4(%rsp), %edx
movl 0x2c4(%rsp), %ecx
movq 0x368(%rsp), %r8
movq 0x2b8(%rsp), %r9
leaq 0x120(%rsp), %rdi
callq 0x247bc0
movq 0x120(%rsp), %rax
addq 0x138(%rsp), %rax
movq %rax, 0x100(%rsp)
cmpq $0x0, 0x2b8(%rsp)
je 0x246407
movq 0x2b8(%rsp), %rdi
movq 0x3f5b40(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x331e11(%rip), %rsi    # 0x578213
callq 0x121930
movq 0x1b8(%rsp), %rdx
movq 0x1c8(%rsp), %rdi
leaq 0x230(%rsp), %rsi
movq 0x100(%rsp), %rcx
callq 0x4c0050
movq %rax, 0x108(%rsp)
leaq 0x120(%rsp), %rdi
callq 0x248020
movq 0x368(%rsp), %rax
movq %rax, 0xa8(%rsp)
movq 0x1c8(%rsp), %rdi
callq 0x4be8b0
movq 0xa8(%rsp), %rdi
movq %rax, %xmm0
movaps 0x2d24be(%rip), %xmm1   # 0x518930
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x2d24c2(%rip), %xmm1   # 0x518940
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x2d248b(%rip), %xmm1   # 0x518920
divsd %xmm1, %xmm0
leaq 0x331d8b(%rip), %rsi    # 0x57822b
movb $0x1, %al
callq 0xe7cd0
movq 0x368(%rsp), %rdi
movq 0x108(%rsp), %rdx
leaq 0x331da1(%rip), %rsi    # 0x57825f
movb $0x0, %al
callq 0xe7cd0
movq 0xe0(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x2480c0
cmpl $0x0, 0x2d0(%rsp)
je 0x2464f3
cmpq $0x0, 0x2c8(%rsp)
jbe 0x246592
movq 0xe0(%rsp), %rsi
movl 0x2d0(%rsp), %edx
movq 0x108(%rsp), %r8
movl 0x2d4(%rsp), %r9d
movq 0xf0(%rsp), %r14
movq 0xe8(%rsp), %rbx
movq 0x100(%rsp), %r11
movq 0x338(%rsp), %r10
movq 0x370(%rsp), %rax
leaq 0x120(%rsp), %rdi
leaq 0x2c8(%rsp), %rcx
movq %r14, (%rsp)
movq %rbx, 0x8(%rsp)
movq %r11, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x2481d0
movl %eax, 0xc0(%rsp)
cmpl $0x0, 0xc0(%rsp)
jge 0x246582
movb $0x1, 0xcb(%rsp)
jmp 0x246590
movl 0xc0(%rsp), %eax
movl %eax, 0x2d0(%rsp)
jmp 0x246592
jmp 0x246594
testb $0x1, 0xcb(%rsp)
jne 0x246ba2
jmp 0x2465a4
cmpl $0x0, 0x2d0(%rsp)
ja 0x2465e6
movq 0x3f59eb(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2cfa54(%rip), %rsi    # 0x516013
leaq 0x373d69(%rip), %rdx    # 0x5ba32f
leaq 0x331ca4(%rip), %rcx    # 0x578271
leaq 0x331c28(%rip), %r8     # 0x5781fc
movl $0x575, %r9d            # imm = 0x575
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2465e8
movl 0x2d0(%rsp), %edi
leaq 0x120(%rsp), %r8
addq $0x110, %r8             # imm = 0x110
movq 0xe0(%rsp), %r9
movq 0x100(%rsp), %r10
movq 0x368(%rsp), %rax
xorl %ecx, %ecx
movl $0x1, %edx
movq %rcx, %rsi
movq %r10, (%rsp)
movq $0x0, 0x8(%rsp)
movq %rax, 0x10(%rsp)
callq 0x2cd4b0
movq %rax, 0xd8(%rsp)
cmpq $0x0, 0xd8(%rsp)
jne 0x246682
movq 0x3f594f(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2cf9b8(%rip), %rsi    # 0x516013
leaq 0x347003(%rip), %rdx    # 0x58d665
leaq 0x331c08(%rip), %rcx    # 0x578271
leaq 0x331b8c(%rip), %r8     # 0x5781fc
movl $0x57f, %r9d            # imm = 0x57F
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x246684
movq 0xd8(%rsp), %rdi
movl $0x1, %esi
callq 0x2cced0
movq 0x1b8(%rsp), %rax
movq 0x158(%rsp), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
movq %rax, 0xa0(%rsp)
movq 0xd8(%rsp), %rdi
callq 0x2ce200
movq %rax, %rsi
leaq 0x120(%rsp), %rdi
callq 0x248420
movq %rax, %rcx
movq 0xa0(%rsp), %rax
cmpq %rcx, %rax
je 0x24671b
movq 0x3f58b6(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2cf91f(%rip), %rsi    # 0x516013
leaq 0x331ba4(%rip), %rdx    # 0x57829f
leaq 0x331b6f(%rip), %rcx    # 0x578271
leaq 0x331af3(%rip), %r8     # 0x5781fc
movl $0x584, %r9d            # imm = 0x584
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x24671d
movq 0xe0(%rsp), %rdi
callq 0x2ccdf0
movq $0x0, 0xe0(%rsp)
movq 0x1c8(%rsp), %rdi
leaq 0x120(%rsp), %rsi
addq $0x110, %rsi            # imm = 0x110
callq 0x4c0ff0
cmpq $0x0, 0x1e0(%rsp)
je 0x246795
movq 0x3f583c(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2cf8a5(%rip), %rsi    # 0x516013
leaq 0x331b9f(%rip), %rdx    # 0x578314
leaq 0x331af5(%rip), %rcx    # 0x578271
leaq 0x331a79(%rip), %r8     # 0x5781fc
movl $0x588, %r9d            # imm = 0x588
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x246797
movq 0xd8(%rsp), %rsi
leaq 0x120(%rsp), %rdi
callq 0x2484d0
movq 0xd8(%rsp), %rdi
callq 0x2ce390
movq %rax, 0xf8(%rsp)
movq 0xf8(%rsp), %rdi
movq 0xf0(%rsp), %rsi
movl 0x180(%rsp), %edx
movq 0x368(%rsp), %rcx
callq 0x2eeba0
movq %rax, 0x198(%rsp)
movq 0xf8(%rsp), %rdi
movq 0xf0(%rsp), %rsi
movl 0x180(%rsp), %edx
callq 0x2eece0
movq %rax, 0x118(%rsp)
movq 0x1c8(%rsp), %rdi
movq 0x118(%rsp), %rax
movl $0x591, %esi            # imm = 0x591
leaq 0x3319cf(%rip), %rdx    # 0x5781fc
movl $0x1, %r9d
leaq 0x370d7c(%rip), %r8     # 0x5b75b6
movl %r9d, %ecx
movq %rax, (%rsp)
callq 0x4bea60
leaq 0x1fb3(%rip), %rax      # 0x248800
movq %rax, 0x200(%rsp)
movl 0xc4(%rsp), %eax
movl %eax, %edi
shlq $0x3, %rdi
leaq 0x331993(%rip), %rsi    # 0x5781fc
movl $0x593, %edx            # imm = 0x593
callq 0xe80f0
movq %rax, 0xd0(%rsp)
movl $0x0, 0x110(%rsp)
movl 0x110(%rsp), %eax
cmpl 0xc4(%rsp), %eax
jae 0x2468e9
movq 0x108(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movl 0x2d4(%rsp), %eax
subq %rax, %rsi
xorl %r8d, %r8d
movl $0x1, %ecx
movl %r8d, %edx
callq 0x2da6d0
movq %rax, %rdx
movq 0xd0(%rsp), %rax
movl 0x110(%rsp), %ecx
movq %rdx, (%rax,%rcx,8)
movl 0x110(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x110(%rsp)
jmp 0x246886
movq 0x1c8(%rsp), %rax
movq %rax, 0x90(%rsp)
movl 0xc4(%rsp), %eax
movq %rax, 0x98(%rsp)
movq 0x108(%rsp), %rsi
movq 0xe8(%rsp), %rdx
movl 0x2d4(%rsp), %eax
subq %rax, %rdx
movl $0x1, %edi
callq 0x2da5b0
movq 0x90(%rsp), %rdi
movq %rax, %rcx
movq 0x98(%rsp), %rax
imulq %rcx, %rax
movl $0x59c, %esi            # imm = 0x59C
leaq 0x3318ad(%rip), %rdx    # 0x5781fc
movl $0x1, %r9d
leaq 0x33478a(%rip), %r8     # 0x57b0e6
movl %r9d, %ecx
movq %rax, (%rsp)
callq 0x4bea60
movq 0x2c8(%rsp), %rsi
movq 0xd8(%rsp), %rdx
movq 0x338(%rsp), %rcx
leaq 0x120(%rsp), %rdi
callq 0x248920
testb $0x1, 0x2c2(%rsp)
jne 0x246a0b
movq 0x1e8(%rsp), %rdi
callq 0x100820
movq %rax, 0x190(%rsp)
movq 0x1c8(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0x190(%rsp), %rdi
callq 0x1008d0
movq 0x88(%rsp), %rdi
movl $0x5a5, %esi            # imm = 0x5A5
leaq 0x33181f(%rip), %rdx    # 0x5781fc
movl $0x1, %r9d
leaq 0x331940(%rip), %r8     # 0x57832a
movl %r9d, %ecx
movq %rax, (%rsp)
callq 0x4bea60
movq 0x190(%rsp), %rdi
callq 0x101900
movq %rax, 0x208(%rsp)
movq $0x0, 0x140(%rsp)
movl $0x0, 0x170(%rsp)
movl $0x0, 0x114(%rsp)
xorl %eax, %eax
testb $0x1, 0xcb(%rsp)
movb %al, 0x87(%rsp)
jne 0x246a83
xorl %eax, %eax
testb $0x1, 0x2c2(%rsp)
movb %al, 0x87(%rsp)
jne 0x246a83
movl 0x114(%rsp), %eax
movl %eax, 0x80(%rsp)
movq 0xd8(%rsp), %rdi
callq 0x2ce430
movl %eax, %ecx
movl 0x80(%rsp), %eax
cmpl %ecx, %eax
setb %al
movb %al, 0x87(%rsp)
movb 0x87(%rsp), %al
testb $0x1, %al
jne 0x246a93
jmp 0x246ba0
movq 0x2d8(%rsp), %rsi
movl 0x2d4(%rsp), %ecx
movl 0x2c4(%rsp), %r8d
movq 0xd8(%rsp), %r9
movl 0x114(%rsp), %eax
movq 0x2c8(%rsp), %rdx
movq %rdx, 0x68(%rsp)
movl 0xc4(%rsp), %edx
movl %edx, 0x74(%rsp)
movq 0x100(%rsp), %r13
movb 0x2c3(%rsp), %bpl
movq 0xd0(%rsp), %r12
movq 0x350(%rsp), %r15
movq 0x358(%rsp), %r14
movq 0x360(%rsp), %rbx
movq 0x368(%rsp), %r11
movq 0x2b8(%rsp), %r10
movq 0x370(%rsp), %rdx
movq %rdx, 0x78(%rsp)
leaq 0x120(%rsp), %rdi
xorl %edx, %edx
andb $0x1, %bpl
movl %eax, (%rsp)
movq 0x68(%rsp), %rax
movq %rax, 0x8(%rsp)
movl 0x74(%rsp), %eax
movl %eax, 0x10(%rsp)
movq 0x78(%rsp), %rax
movq %r13, 0x18(%rsp)
movzbl %bpl, %ebp
movl %ebp, 0x20(%rsp)
movq %r12, 0x28(%rsp)
movq %r15, 0x30(%rsp)
movq %r14, 0x38(%rsp)
movq %rbx, 0x40(%rsp)
movq %r11, 0x48(%rsp)
movq %r10, 0x50(%rsp)
movq %rax, 0x58(%rsp)
callq 0x248a40
cmpl $0x0, %eax
je 0x246b88
movb $0x1, 0xcb(%rsp)
jmp 0x246b8a
movl 0x114(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x114(%rsp)
jmp 0x246a2d
jmp 0x246ba2
cmpq $0x0, 0x2b8(%rsp)
je 0x246bcb
movq 0x2b8(%rsp), %rdi
movq 0x3f537c(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x331776(%rip), %rsi    # 0x57833c
callq 0x121930
testb $0x1, 0xcb(%rsp)
jne 0x246c07
movq 0x1c8(%rsp), %rdi
movl $0x5cb, %esi            # imm = 0x5CB
leaq 0x331613(%rip), %rdx    # 0x5781fc
xorl %ecx, %ecx
leaq 0x3344f4(%rip), %r8     # 0x57b0e6
movl $0x1, %r9d
xorl %eax, %eax
movq $0x0, (%rsp)
callq 0x4bea60
testb $0x1, 0xcb(%rsp)
jne 0x246cf5
testb $0x1, 0x2c2(%rsp)
jne 0x246cf5
cmpq $0x0, 0xd0(%rsp)
je 0x246cf5
movq $0x0, 0xb8(%rsp)
movl $0x0, 0x110(%rsp)
movl 0x110(%rsp), %eax
cmpl 0xc4(%rsp), %eax
jae 0x246c94
movq 0xd0(%rsp), %rax
movl 0x110(%rsp), %ecx
movq (%rax,%rcx,8), %rdi
callq 0x2daa50
addq 0xb8(%rsp), %rax
movq %rax, 0xb8(%rsp)
movl 0x110(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x110(%rsp)
jmp 0x246c49
movq 0x368(%rsp), %rdi
movq 0xb8(%rsp), %xmm0
movaps 0x2d1c84(%rip), %xmm3   # 0x518930
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0x2d1c88(%rip), %xmm2   # 0x518940
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq 0x128(%rsp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
leaq 0x33165a(%rip), %rsi    # 0x578348
movb $0x1, %al
callq 0xe7cd0
testb $0x1, 0xcb(%rsp)
jne 0x246e4f
testb $0x1, 0x2c2(%rsp)
jne 0x246e40
jmp 0x246d13
cmpl $0x0, 0x170(%rsp)
ja 0x246d55
movq 0x3f527c(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2cf2e5(%rip), %rsi    # 0x516013
leaq 0x331634(%rip), %rdx    # 0x578369
leaq 0x331535(%rip), %rcx    # 0x578271
leaq 0x3314b9(%rip), %r8     # 0x5781fc
movl $0x5dd, %r9d            # imm = 0x5DD
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x246d57
movq 0x368(%rsp), %rdi
movq 0x128(%rsp), %rax
movq %rax, 0x60(%rsp)
movq %rax, %xmm0
movaps 0x2d1bb8(%rip), %xmm3   # 0x518930
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0x2d1bbc(%rip), %xmm2   # 0x518940
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x2d3a9d(%rip), %xmm1   # 0x51a838
mulsd %xmm1, %xmm0
movq 0xf0(%rsp), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movl 0x170(%rsp), %ecx
movq 0x140(%rsp), %rax
movl 0x170(%rsp), %edx
movl %edx, %esi
xorl %edx, %edx
divq %rsi
movq 0x60(%rsp), %rdx
movq %rax, %r8
leaq 0x331591(%rip), %rsi    # 0x57837c
movb $0x1, %al
callq 0xe7cd0
movq 0x128(%rsp), %rax
cmpq 0x100(%rsp), %rax
je 0x246e3c
movq 0x3f5195(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2cf1fe(%rip), %rsi    # 0x516013
leaq 0x3315aa(%rip), %rdx    # 0x5783c6
leaq 0x33144e(%rip), %rcx    # 0x578271
leaq 0x3313d2(%rip), %r8     # 0x5781fc
movl $0x5e4, %r9d            # imm = 0x5E4
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x246e3e
jmp 0x246e4d
leaq 0x120(%rsp), %rdi
callq 0x249610
jmp 0x246e4f
cmpq $0x0, 0xd0(%rsp)
je 0x246eb9
movl $0x0, 0x110(%rsp)
movl 0x110(%rsp), %eax
cmpl 0xc4(%rsp), %eax
jae 0x246ea0
movq 0xd0(%rsp), %rax
movl 0x110(%rsp), %ecx
movq (%rax,%rcx,8), %rdi
callq 0x2daa60
movl 0x110(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x110(%rsp)
jmp 0x246e65
movq 0xd0(%rsp), %rdi
leaq 0x33134d(%rip), %rsi    # 0x5781fc
movl $0x5f0, %edx            # imm = 0x5F0
callq 0xe88c0
testb $0x1, 0xcb(%rsp)
je 0x246f1b
leaq 0x120(%rsp), %rdi
callq 0x249610
movq 0x1b8(%rsp), %rdi
leaq 0x33131d(%rip), %rsi    # 0x5781fc
movl $0x5f5, %edx            # imm = 0x5F5
callq 0xe88c0
movq $0x0, 0x1b8(%rsp)
movq 0xe0(%rsp), %rdi
callq 0x2ccdf0
movq $0x0, 0x210(%rsp)
movq 0x188(%rsp), %rdi
callq 0x1008f0
movq 0xd8(%rsp), %rdi
callq 0x2ce1c0
movq 0x1c8(%rsp), %rdi
leaq 0x120(%rsp), %rsi
addq $0x110, %rsi            # imm = 0x110
callq 0x4c1070
movq 0x1c8(%rsp), %rdi
leaq 0x120(%rsp), %rsi
addq $0x110, %rsi            # imm = 0x110
callq 0x4c1100
cmpq $0x0, 0x198(%rsp)
je 0x246fb6
movq 0x198(%rsp), %rdi
callq 0x2eed40
movq 0x1c8(%rsp), %rdi
movl $0x601, %esi            # imm = 0x601
leaq 0x331270(%rip), %rdx    # 0x5781fc
xorl %ecx, %ecx
leaq 0x370621(%rip), %r8     # 0x5b75b6
movl $0x1, %r9d
xorl %eax, %eax
movq $0x0, (%rsp)
callq 0x4bea60
movq $0x0, 0x198(%rsp)
movq 0x1a0(%rsp), %rdi
callq 0x2cca80
cmpq $0x0, 0x1a8(%rsp)
jne 0x247009
cmpq $0x0, 0x1b8(%rsp)
je 0x247009
movq 0x1c8(%rsp), %rdi
movl $0x607, %esi            # imm = 0x607
leaq 0x33120f(%rip), %rdx    # 0x5781fc
xorl %r9d, %r9d
leaq 0x2d48af(%rip), %r8     # 0x51b8a6
xorl %eax, %eax
movl %r9d, %ecx
movq $0x0, (%rsp)
callq 0x4bea60
movq 0x1a8(%rsp), %rdi
callq 0x2cca80
movq 0x218(%rsp), %rdi
callq 0x2b11b0
movq 0x1c8(%rsp), %rdi
callq 0x4be8a0
movq 0x1c8(%rsp), %rdi
movl $0x60c, %esi            # imm = 0x60C
leaq 0x3311b8(%rip), %rdx    # 0x5781fc
xorl %ecx, %ecx
leaq 0x312929(%rip), %r8     # 0x559976
movl $0x1, %r9d
xorl %eax, %eax
movq $0x0, (%rsp)
callq 0x4bea60
movq 0x1c8(%rsp), %rdi
callq 0x4bea00
cmpq $0x0, 0x2b8(%rsp)
je 0x24709e
movq 0x2b8(%rsp), %rdi
movq 0x3f4eaf(%rip), %rax    # 0x63bf38
movq (%rax), %rsi
callq 0x121d70
movq 0x2b8(%rsp), %rdi
callq 0x121f00
movb 0xcb(%rsp), %dl
xorl %eax, %eax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, 0x2e4(%rsp)
movl 0x2e4(%rsp), %eax
addq $0x2e8, %rsp            # imm = 0x2E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)