// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/match/sfx-shortreadsort.c
// Function: shortread_gt_inlinedarr_qsort_r
static void QSORTNAME(gt_inlinedarr_qsort_r) (
                                   GtUword insertionsortthreshold,
                                   bool handlenotswapped,
                                   GtUword len,
                                   QSORTNAME(Datatype) data,
                                   GtUword depth,
                                   GtUword subbucketleft)
{
  GtUword pa, pb, pc, pd, pl, pm, pn, aidx, bidx, s,
                smallermaxlcp, greatermaxlcp;
  GtShortreadsort tmp;
  int r;
  bool swapped;
  GtStackIntervalarrtobesorted intervalstack;
  Intervalarrtobesorted current;

  GT_STACK_INIT(&intervalstack,32UL);
  current.startindex = 0;
  current.len = len;
  GT_STACK_PUSH(&intervalstack,current);
  if (insertionsortthreshold <= 2UL)
  {
    insertionsortthreshold = 6UL;
  }
  while (!GT_STACK_ISEMPTY(&intervalstack))
  {
    swapped = false;
    current = GT_STACK_POP(&intervalstack);
    if (current.len <= insertionsortthreshold)
    {
      for (pm = current.startindex + 1;
           pm < current.startindex + current.len; pm++)
      {
        for (pl = pm; pl > current.startindex; pl--)
        {
          r = QSORTNAME(qsortcmparr) (pl - 1, pl, data);
          if (data->mediumsizelcpvalues != NULL)
          {
            if (pl < pm && r > 0)
            {
              data->mediumsizelcpvalues[pl+1] = data->mediumsizelcpvalues[pl];
            }
            gt_assert(depth + data->tmplcplen <= UINT16_MAX);
            data->mediumsizelcpvalues[pl]
              = (uint16_t) (depth + data->tmplcplen);
          } else
          {
            if (data->sssplcpvalues != NULL)
            {
              if (pl < pm && r > 0)
              {
                gt_lcptab_update(data->sssplcpvalues,subbucketleft,pl+1,
                                 gt_lcptab_getvalue(data->sssplcpvalues,
                                                       subbucketleft,pl));
              }
              gt_lcptab_update(data->sssplcpvalues,subbucketleft,pl,
                               depth + data->tmplcplen);
            }
          }
          if (r <= 0)
          {
            break;
          }
          GT_QSORT_ARR_SWAP (arr, pl, pl - 1);
        }
      }
      continue;
    }
    pm = current.startindex + GT_DIV2 (current.len);
    if (current.len > 7UL)
    {
      pl = current.startindex;
      pn = current.startindex + current.len - 1;
      if (current.len > 40UL)
      {
        s = GT_DIV8 (current.len);
        pl = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pl, pl + s,
                                                     pl + GT_MULT2 (s), data);
        gt_assert(pm >= s);
        pm = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pm - s, pm,
                                                     pm + s, data);
        gt_assert(pn >= GT_MULT2(s));
        pn = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pn - GT_MULT2 (s),
                                                     pn - s, pn, data);
      }
      pm = QSORTNAME(gt_inlined_qsort_arr_r_med3) (pl, pm, pn, data);
    }
    GT_QSORT_ARR_SWAP (arr, current.startindex, pm);
    pa = pb = current.startindex + 1;
    pc = pd = current.startindex + current.len - 1;
    smallermaxlcp = greatermaxlcp = 0;
    while (1)
    {
      while (pb <= pc)
      {
        r = QSORTNAME(qsortcmparr) (pb, current.startindex, data);
        if (r > 0)
        {
          GT_UPDATE_MAX(greatermaxlcp,data->tmplcplen);
          break;
        }
        if (r == 0)
        {
          swapped = true;
          GT_QSORT_ARR_SWAP (arr, pa, pb);
          pa++;
        } else
        {
          GT_UPDATE_MAX(smallermaxlcp,data->tmplcplen);
        }
        pb++;
      }
      while (pb <= pc)
      {
        r = QSORTNAME(qsortcmparr) (pc, current.startindex, data);
        if (r < 0)
        {
          GT_UPDATE_MAX(smallermaxlcp,data->tmplcplen);
          break;
        }
        if (r == 0)
        {
          swapped = true;
          GT_QSORT_ARR_SWAP (arr, pc, pd);
          gt_assert(pd > 0);
          pd--;
        } else
        {
          GT_UPDATE_MAX(greatermaxlcp,data->tmplcplen);
        }
        gt_assert(pc > 0);
        pc--;
      }
      if (pb > pc)
      {
        break;
      }
      GT_QSORT_ARR_SWAP (arr, pb, pc);
      swapped = true;
      pb++;
      gt_assert(pc > 0);
      pc--;
    }
    /* The following switch is not explained in the above mentioned
       paper and therefore we ignore it. */
    if (handlenotswapped && !swapped)
    {                                  /* Switch to insertion sort */
      gt_assert(current.len <= 40UL);
      for (pm = current.startindex + 1;
           pm < current.startindex + current.len; pm++)
      {
        for (pl = pm; pl > current.startindex; pl--)
        {
          r = QSORTNAME(qsortcmparr) (pl - 1, pl, data);
          if (r <= 0)
          {
            break;
          }
          GT_QSORT_ARR_SWAP (arr, pl, pl - 1);
        }
      }
      continue;
    }
    pn = current.startindex + current.len;
    gt_assert(pa >= current.startindex && pb >= pa);
    s = GT_MIN ((GtUword) (pa - current.startindex),
             (GtUword) (pb - pa));
    gt_assert(pb >= s);
    GT_QSORT_ARR_VECSWAP (arr, current.startindex, pb - s, s);
    gt_assert(pd >= pc && pn > pd);
    s = GT_MIN ((GtUword) (pd - pc), (GtUword) (pn - pd - 1));
    gt_assert(pn > s);
    GT_QSORT_ARR_VECSWAP (arr, pb, pn - s, s);
    gt_assert(pb >= pa);
    if ((s = (GtUword) (pb - pa)) > 0)
    {
      if (data->mediumsizelcpvalues != NULL)
      {
        gt_assert(depth + smallermaxlcp <= UINT16_MAX);
        data->mediumsizelcpvalues[current.startindex + s]
          = (uint16_t) (depth + smallermaxlcp);
      } else
      {
        if (data->sssplcpvalues != NULL)
        {
          /*
            left part has suffix with lcp up to length smallermaxlcp w.r.t.
            to the pivot. This lcp belongs to a suffix on the left
            which is at a minimum distance to the pivot and thus to an
            element in the final part of the left side.
          */
          gt_lcptab_update(data->sssplcpvalues,
                           subbucketleft,current.startindex + s,
                           depth + smallermaxlcp);
        }
      }
      if (s > 1UL)
      {
        current.len = s;
        GT_STACK_PUSH(&intervalstack,current);
      }
    }
    gt_assert(pd >= pc);
    if ((s = (GtUword) (pd - pc)) > 0)
    {
      if (data->mediumsizelcpvalues != NULL)
      {
        gt_assert (depth + greatermaxlcp <= UINT16_MAX);
        data->mediumsizelcpvalues[pn - s] = (uint16_t) (depth + greatermaxlcp);
      } else
      {
        if (data->sssplcpvalues != NULL)
        {
          /*
            right part has suffix with lcp up to length largermaxlcp w.r.t.
            to the pivot. This lcp belongs to a suffix on the right
            which is at a minimum distance to the pivot and thus to an
            element in the first part of the right side.
          */
          gt_assert(pn >= s);
          gt_lcptab_update(data->sssplcpvalues,subbucketleft,pn - s,
                           depth + greatermaxlcp);
        }
      }
      if (s > 1UL)
      {
        gt_assert(pn >= s);
        current.startindex = pn - s;
        current.len = s;
        GT_STACK_PUSH(&intervalstack,current);
      }
    }
  }
  GT_STACK_DELETE(&intervalstack);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x298, %rsp            # imm = 0x298
movq %rcx, 0x28(%rsp)
movq %rdx, 0x40(%rsp)
movq %rsi, %r15
movl $0x20, %eax
leaq 0x88(%rsp), %rsi
movq %rax, -0x10(%rsi)
movq %rax, -0x8(%rsi)
movq %rax, -0x28(%rsi)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rsi)
movq %rsi, 0x200(%rsi)
xorl %eax, %eax
movq %rax, 0x208(%rsi)
movq -0x18(%rsi), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, -0x18(%rsi)
shlq $0x4, %rcx
movq %rax, 0x88(%rsp,%rcx)
movq %rdi, 0x90(%rsp,%rcx)
movq -0x18(%rsi), %rax
cmpq %rax, -0x20(%rsi)
jae 0x1fef35
movq %rax, 0x68(%rsp)
movq 0x70(%rsp), %rax
testq %rax, %rax
je 0x1ffa95
movq 0x28(%rsp), %rcx
leaq (,%rcx,4), %rcx
movq %rcx, 0x50(%rsp)
movq 0x288(%rsp), %rcx
decq %rax
movq %rax, 0x70(%rsp)
shlq $0x4, %rax
movq (%rcx,%rax), %rdi
movq 0x8(%rcx,%rax), %r14
cmpq $0x6, %r14
movq %rdi, 0x18(%rsp)
ja 0x1ff1ad
addq %rdi, %r14
leaq 0x1(%rdi), %rbx
cmpq %r14, %rbx
jae 0x1ffa87
movq %rdi, %rbp
shlq $0x4, %rbp
movq %r14, 0x20(%rsp)
cmpq %rdi, %rbx
jbe 0x1ff18e
movq %rbp, %r14
movq %rbx, %r13
leaq -0x1(%r13), %r12
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x1fff13
movq 0x10(%r15), %rcx
testq %rcx, %rcx
je 0x1ff04b
cmpq %rbx, %r13
setb %dl
testl %eax, %eax
setg %sil
andb %dl, %sil
cmpb $0x1, %sil
jne 0x1fefeb
movzwl (%rcx,%r13,2), %edx
movw %dx, 0x4(%rcx,%r12,2)
movq 0x38(%r15), %rdx
addq 0x40(%rsp), %rdx
cmpq $0x10000, %rdx          # imm = 0x10000
jae 0x1ffadd
movw %dx, (%rcx,%r13,2)
testl %eax, %eax
jle 0x1ff18e
movq (%r15), %rax
movups 0x10(%rax,%r14), %xmm0
movaps %xmm0, 0x30(%rsp)
movups (%rax,%r14), %xmm0
movups %xmm0, 0x10(%rax,%r14)
movq (%r15), %rax
movaps 0x30(%rsp), %xmm0
movups %xmm0, (%rax,%r14)
addq $-0x10, %r14
movq %r12, %r13
cmpq 0x18(%rsp), %r12
ja 0x1fefac
jmp 0x1ff18e
movq 0x8(%r15), %rdx
testq %rdx, %rdx
je 0x1ff006
cmpq %rbx, %r13
setb %cl
testl %eax, %eax
setg %sil
andb %cl, %sil
cmpb $0x1, %sil
jne 0x1ff111
movq 0x8(%rdx), %rsi
testq %rsi, %rsi
je 0x1ffaf6
movq 0x10(%rdx), %r9
movq 0x20(%rdx), %r8
movq 0x28(%rsp), %rcx
leaq (%rcx,%r13), %r10
leaq (%r10,%r8), %rcx
cmpq %r9, %rcx
jae 0x1ffaf6
movq (%rdx), %rdi
testq %rdi, %rdi
je 0x1ff0bb
movabsq $-0x8000000000000000, %r11 # imm = 0x8000000000000000
shrq %cl, %r11
shrq $0x6, %rcx
testq %r11, (%rdi,%rcx,8)
je 0x1ffb00
leaq (%r8,%r10), %rcx
incq %rcx
cmpq %r9, %rcx
jae 0x1ffafb
leaq (%rsi,%r8,4), %r8
addq 0x50(%rsp), %r8
movl (%r8,%r13,4), %r8d
testq %rdi, %rdi
je 0x1ff0f2
movabsq $-0x8000000000000000, %r9 # imm = 0x8000000000000000
shrq %cl, %r9
shrq $0x6, %rcx
orq %r9, (%rdi,%rcx,8)
movq 0x20(%rdx), %rcx
leaq (%rsi,%rcx,4), %rcx
addq 0x50(%rsp), %rcx
movl %r8d, 0x8(%rcx,%r12,4)
cmpl $0xff, %r8d
jb 0x1ff111
incq 0x18(%rdx)
movq 0x8(%rdx), %rsi
testq %rsi, %rsi
je 0x1ffae7
movq 0x28(%rsp), %rcx
addq %r13, %rcx
addq 0x20(%rdx), %rcx
cmpq 0x10(%rdx), %rcx
jae 0x1ffae7
movq 0x38(%r15), %rdi
addq 0x40(%rsp), %rdi
movq (%rdx), %r8
testq %r8, %r8
je 0x1ff15a
movabsq $-0x8000000000000000, %r9 # imm = 0x8000000000000000
shrq %cl, %r9
shrq $0x6, %rcx
orq %r9, (%r8,%rcx,8)
movq %rdi, %rcx
shrq $0x20, %rcx
jne 0x1ffaf1
movq 0x20(%rdx), %rcx
leaq (%rsi,%rcx,4), %rcx
addq 0x50(%rsp), %rcx
movl %edi, (%rcx,%r13,4)
cmpq $0xff, %rdi
jb 0x1ff006
incq 0x18(%rdx)
jmp 0x1ff006
incq %rbx
addq $0x10, %rbp
movq 0x20(%rsp), %r14
cmpq %r14, %rbx
movq 0x18(%rsp), %rdi
jne 0x1fef9d
jmp 0x1ffa87
movq %r14, %r13
shrq %r13
addq %rdi, %r13
cmpq $0x7, %r14
je 0x1ff3c4
leaq (%r14,%rdi), %rbp
decq %rbp
cmpq $0x29, %r14
jb 0x1ff230
movq %rbp, 0x48(%rsp)
movq %r14, %rbx
shrq $0x3, %rbx
leaq (%rbx,%rdi), %rbp
leaq (%rdi,%rbx,2), %rax
movq %rax, 0x10(%rsp)
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
movl %eax, %r12d
movq %rbp, 0x8(%rsp)
movq %rbp, %rdi
movq 0x10(%rsp), %rbp
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %r12d, %r12d
js 0x1ff238
testl %eax, %eax
jg 0x1ff25a
movq 0x18(%rsp), %r12
movq %r12, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
cmovsq %r12, %rbp
jmp 0x1ff255
movq %rdi, %rbx
jmp 0x1ff368
testl %eax, %eax
js 0x1ff25a
movq 0x18(%rsp), %r12
movq %r12, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
cmovnsq %r12, %rbp
movq %rbp, 0x8(%rsp)
movq %r13, %r12
subq %rbx, %r12
movq 0x48(%rsp), %rbp
jb 0x1ffb28
movq %rbx, 0x10(%rsp)
addq %r13, %rbx
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x1fff13
movl %eax, 0x20(%rsp)
movq %r13, %rdi
movq %rbx, 0x58(%rsp)
movq %rbx, %rsi
movq %r15, %rdx
callq 0x1fff13
cmpl $0x0, 0x20(%rsp)
js 0x1ff2be
testl %eax, %eax
jg 0x1ff2de
movq %r12, %rdi
movq 0x58(%rsp), %r13
movq %r13, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
cmovsq %r12, %r13
jmp 0x1ff2de
testl %eax, %eax
js 0x1ff2de
movq %r12, %rdi
movq 0x58(%rsp), %rbx
movq %rbx, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
cmovsq %rbx, %r12
movq %r12, %r13
movq 0x10(%rsp), %rcx
leaq (%rcx,%rcx), %rax
movq %rbp, %r12
subq %rax, %r12
jb 0x1ffb23
movq %rbp, %rbx
subq %rcx, %rbx
movq %r12, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x1fff13
movl %eax, 0x10(%rsp)
movq %rbx, 0x20(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
cmpl $0x0, 0x10(%rsp)
js 0x1ff344
testl %eax, %eax
movq 0x8(%rsp), %rbx
jg 0x1ff363
movq %r12, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
cmovsq %r12, %rbp
jmp 0x1ff368
testl %eax, %eax
movq 0x8(%rsp), %rbx
js 0x1ff363
movq %r12, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
cmovnsq %r12, %rbp
jmp 0x1ff368
movq 0x20(%rsp), %rbp
movq %rbx, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x1fff13
movl %eax, %r12d
movq %r13, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %r12d, %r12d
js 0x1ff3a9
testl %eax, %eax
jg 0x1ff3c4
movq %rbx, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
cmovsq %rbx, %rbp
movq %rbp, %r13
jmp 0x1ff3c4
testl %eax, %eax
js 0x1ff3c4
movq %rbx, %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
cmovsq %rbp, %rbx
movq %rbx, %r13
movq 0x18(%rsp), %rdx
cmpq %r13, %rdx
je 0x1ff3fb
movq (%r15), %rax
movq %rdx, %rcx
shlq $0x4, %rcx
movups (%rax,%rcx), %xmm0
movaps %xmm0, 0x30(%rsp)
shlq $0x4, %r13
movups (%rax,%r13), %xmm0
movups %xmm0, (%rax,%rcx)
movq (%r15), %rax
movaps 0x30(%rsp), %xmm0
movups %xmm0, (%rax,%r13)
leaq 0x1(%rdx), %r12
leaq (%r14,%rdx), %rsi
decq %rsi
addq %rdx, %r14
movq %r14, 0x20(%rsp)
movq $0x0, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movq %rsi, %rbp
movq %r12, %rdi
movq %rdx, %r13
movq %rdi, 0x48(%rsp)
movq %rsi, %r14
cmpq %rbp, %r12
ja 0x1ff4c8
movq %r12, %rbx
shlq $0x4, %rbx
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
jg 0x1ff4b3
je 0x1ff46c
movq 0x38(%r15), %rax
movq 0x8(%rsp), %rcx
cmpq %rax, %rcx
cmovbeq %rax, %rcx
movq %rcx, 0x8(%rsp)
jmp 0x1ff4a5
movq 0x48(%rsp), %rdx
cmpq %rdx, %r12
je 0x1ff49d
movq (%r15), %rax
movq %rdx, %rcx
shlq $0x4, %rcx
movups (%rax,%rcx), %xmm0
movaps %xmm0, 0x30(%rsp)
movups (%rax,%rbx), %xmm0
movups %xmm0, (%rax,%rcx)
movq (%r15), %rax
movaps 0x30(%rsp), %xmm0
movups %xmm0, (%rax,%rbx)
incq %rdx
movq %rdx, 0x48(%rsp)
incq %r12
addq $0x10, %rbx
cmpq %rbp, %r12
jbe 0x1ff441
jmp 0x1ff4c8
movq 0x38(%r15), %rax
movq 0x10(%rsp), %rcx
cmpq %rax, %rcx
cmovbeq %rax, %rcx
movq %rcx, 0x10(%rsp)
cmpq %rbp, %r12
seta %bl
ja 0x1ff58a
movq %rbp, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x1fff13
testl %eax, %eax
js 0x1ff570
movq %rbp, %r13
shlq $0x4, %r13
testl %eax, %eax
je 0x1ff50c
movq 0x38(%r15), %rax
movq 0x10(%rsp), %rcx
cmpq %rax, %rcx
cmovbeq %rax, %rcx
movq %rcx, 0x10(%rsp)
jmp 0x1ff546
cmpq %r14, %rbp
je 0x1ff53a
movq (%r15), %rax
movups (%rax,%r13), %xmm0
movaps %xmm0, 0x30(%rsp)
movq %r14, %rcx
shlq $0x4, %rcx
movups (%rax,%rcx), %xmm0
movups %xmm0, (%rax,%r13)
movq (%r15), %rax
movaps 0x30(%rsp), %xmm0
movups %xmm0, (%rax,%rcx)
testq %r14, %r14
je 0x1ffae2
decq %r14
subq $0x1, %rbp
jb 0x1ffad8
cmpq %rbp, %r12
seta %bl
ja 0x1ff585
movq %rbp, %rdi
movq 0x18(%rsp), %rsi
movq %r15, %rdx
callq 0x1fff13
addq $-0x10, %r13
testl %eax, %eax
jns 0x1ff4f1
movq 0x38(%r15), %rax
movq 0x8(%rsp), %rcx
cmpq %rax, %rcx
cmovbeq %rax, %rcx
movq %rcx, 0x8(%rsp)
movq 0x18(%rsp), %r13
testb %bl, %bl
jne 0x1ff5dd
cmpq %rbp, %r12
movq %r14, %rsi
movq 0x48(%rsp), %rdi
je 0x1ff5c9
movq (%r15), %rax
movq %r12, %rcx
shlq $0x4, %rcx
movups (%rax,%rcx), %xmm0
movaps %xmm0, 0x30(%rsp)
movq %rbp, %rdx
shlq $0x4, %rdx
movups (%rax,%rdx), %xmm0
movups %xmm0, (%rax,%rcx)
movq (%r15), %rax
movaps 0x30(%rsp), %xmm0
movups %xmm0, (%rax,%rdx)
testq %rbp, %rbp
je 0x1ffaec
incq %r12
decq %rbp
jmp 0x1ff429
movq 0x48(%rsp), %rdi
movq %rdi, %rax
subq %r13, %rax
jb 0x1ffb05
movq %r12, %rbx
subq %rdi, %rbx
jb 0x1ffb05
cmpq %rbx, %rax
cmovaeq %rbx, %rax
cmpq %rax, %r12
jb 0x1ffb0f
movq %r14, %r9
testq %rax, %rax
je 0x1ff657
movq %r12, %rcx
shlq $0x4, %rcx
movq %rax, %rdx
shlq $0x4, %rdx
subq %rdx, %rcx
movq %r13, %rdx
shlq $0x4, %rdx
movq (%r15), %rsi
movups (%rsi,%rdx), %xmm0
movaps %xmm0, 0x30(%rsp)
movups (%rsi,%rcx), %xmm0
movups %xmm0, (%rsi,%rdx)
movq (%r15), %rsi
movaps 0x30(%rsp), %xmm0
movups %xmm0, (%rsi,%rcx)
addq $0x10, %rcx
addq $0x10, %rdx
decq %rax
jne 0x1ff62a
movq %r9, %r11
subq %rbp, %r11
movq 0x20(%rsp), %rcx
jb 0x1ffb14
cmpq %r9, %rcx
jbe 0x1ffb14
movq %r9, %rax
notq %rax
addq %rcx, %rax
cmpq %rax, %r11
cmovbq %r11, %rax
subq %rax, %rcx
jbe 0x1ffb0a
testq %rax, %rax
je 0x1ff6c7
shlq $0x4, %rcx
movq %r12, %rdx
shlq $0x4, %rdx
movq (%r15), %rsi
movups (%rsi,%rdx), %xmm0
movaps %xmm0, 0x30(%rsp)
movups (%rsi,%rcx), %xmm0
movups %xmm0, (%rsi,%rdx)
movq (%r15), %rsi
movaps 0x30(%rsp), %xmm0
movups %xmm0, (%rsi,%rcx)
addq $0x10, %rcx
addq $0x10, %rdx
decq %rax
jne 0x1ff69a
cmpq %rdi, %r12
je 0x1ff89f
movq 0x10(%r15), %rax
testq %rax, %rax
je 0x1ff72f
movq 0x8(%rsp), %rcx
addq 0x40(%rsp), %rcx
cmpq $0x10000, %rcx          # imm = 0x10000
jae 0x1ffb19
leaq (%rax,%r13,2), %rax
movw %cx, (%rax,%rbx,2)
cmpq $0x1, %rbx
je 0x1ff89f
movq 0x60(%rsp), %rsi
cmpq %rsi, 0x70(%rsp)
jne 0x1ff86b
cmpq 0x78(%rsp), %rsi
movq %r11, 0x18(%rsp)
je 0x1ff7be
movq 0x288(%rsp), %rdi
jmp 0x1ff7c0
movq 0x8(%r15), %rax
testq %rax, %rax
movq 0x8(%rsp), %r10
je 0x1ff6f8
movq 0x8(%rax), %rdx
testq %rdx, %rdx
je 0x1ffb32
leaq (%rbx,%r13), %rsi
movq 0x28(%rsp), %rcx
addq %rsi, %rcx
addq 0x20(%rax), %rcx
cmpq 0x10(%rax), %rcx
jae 0x1ffb32
movq (%rax), %rdi
testq %rdi, %rdi
je 0x1ff781
movabsq $-0x8000000000000000, %r8 # imm = 0x8000000000000000
shrq %cl, %r8
shrq $0x6, %rcx
orq %r8, (%rdi,%rcx,8)
addq 0x40(%rsp), %r10
movq %r10, %rcx
shrq $0x20, %rcx
jne 0x1ffb3c
movq 0x20(%rax), %rcx
leaq (%rdx,%rcx,4), %rcx
movq 0x28(%rsp), %rdx
leaq (%rcx,%rdx,4), %rcx
movl %r10d, (%rcx,%rsi,4)
cmpq $0xff, %r10
jb 0x1ff6f8
incq 0x18(%rax)
jmp 0x1ff6f8
xorl %edi, %edi
movq %rbx, 0x8(%rsp)
addq 0x80(%rsp), %rsi
shlq $0x4, %rsi
leaq 0x1c3e30(%rip), %rdx    # 0x3c3608
movl $0x20c, %ecx            # imm = 0x20C
callq 0x1094e6
movq %rax, 0x288(%rsp)
movq 0x78(%rsp), %rdx
cmpq %rdx, 0x60(%rsp)
jne 0x1ff80a
shlq $0x4, %rdx
movq %rax, %rdi
leaq 0x88(%rsp), %rsi
callq 0x17660
cmpq $0x0, 0x290(%rsp)
je 0x1ff851
cmpq $0x0, 0x80(%rsp)
je 0x1ff851
xorl %ebx, %ebx
xorl %r12d, %r12d
movq 0x60(%rsp), %rdi
shlq $0x4, %rdi
addq 0x288(%rsp), %rdi
addq %rbx, %rdi
callq *0x290(%rsp)
incq %r12
addq $0x10, %rbx
cmpq 0x80(%rsp), %r12
jb 0x1ff825
movq 0x80(%rsp), %rax
addq %rax, 0x60(%rsp)
movq %r14, %r9
movq 0x18(%rsp), %r11
movq 0x8(%rsp), %rbx
movq 0x288(%rsp), %rax
movq 0x70(%rsp), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x70(%rsp)
shlq $0x4, %rcx
movq %r13, (%rax,%rcx)
movq %rbx, 0x8(%rax,%rcx)
movq 0x70(%rsp), %rax
cmpq %rax, 0x68(%rsp)
jae 0x1ff89f
movq %rax, 0x68(%rsp)
cmpq %rbp, %r9
movq 0x20(%rsp), %r9
je 0x1ffa87
movq 0x10(%r15), %rax
testq %rax, %rax
je 0x1ff915
movq 0x10(%rsp), %rdx
addq 0x40(%rsp), %rdx
cmpq $0x10000, %rdx          # imm = 0x10000
jae 0x1ffb1e
movq %r9, %rcx
subq %r11, %rcx
movw %dx, (%rax,%rcx,2)
cmpq $0x1, %r11
je 0x1ffa87
subq %r11, %r9
jb 0x1ffb2d
movq 0x60(%rsp), %rsi
cmpq %rsi, 0x70(%rsp)
jne 0x1ffa53
cmpq 0x78(%rsp), %rsi
je 0x1ff9ac
movq %r11, %r13
movq 0x288(%rsp), %rdi
jmp 0x1ff9b1
movq 0x8(%r15), %rax
testq %rax, %rax
movq 0x10(%rsp), %r10
je 0x1ff8d7
movq %r9, %rdx
subq %r11, %rdx
jb 0x1ffb46
movq 0x8(%rax), %rsi
testq %rsi, %rsi
je 0x1ffb37
movq 0x28(%rsp), %rcx
addq %rdx, %rcx
addq 0x20(%rax), %rcx
cmpq 0x10(%rax), %rcx
jae 0x1ffb37
movq (%rax), %rdi
testq %rdi, %rdi
je 0x1ff96f
movabsq $-0x8000000000000000, %r8 # imm = 0x8000000000000000
shrq %cl, %r8
shrq $0x6, %rcx
orq %r8, (%rdi,%rcx,8)
addq 0x40(%rsp), %r10
movq %r10, %rcx
shrq $0x20, %rcx
jne 0x1ffb41
movq 0x20(%rax), %rcx
leaq (%rsi,%rcx,4), %rcx
movq 0x28(%rsp), %rsi
leaq (%rcx,%rsi,4), %rcx
movl %r10d, (%rcx,%rdx,4)
cmpq $0xff, %r10
jb 0x1ff8d7
incq 0x18(%rax)
jmp 0x1ff8d7
movq %r11, %r13
xorl %edi, %edi
movq %r9, %r12
addq 0x80(%rsp), %rsi
shlq $0x4, %rsi
leaq 0x1c3c41(%rip), %rdx    # 0x3c3608
movl $0x22a, %ecx            # imm = 0x22A
callq 0x1094e6
movq %rax, 0x288(%rsp)
movq 0x78(%rsp), %rdx
cmpq %rdx, 0x60(%rsp)
jne 0x1ff9f9
shlq $0x4, %rdx
movq %rax, %rdi
leaq 0x88(%rsp), %rsi
callq 0x17660
cmpq $0x0, 0x290(%rsp)
je 0x1ffa40
cmpq $0x0, 0x80(%rsp)
je 0x1ffa40
xorl %ebx, %ebx
xorl %r14d, %r14d
movq 0x60(%rsp), %rdi
shlq $0x4, %rdi
addq 0x288(%rsp), %rdi
addq %rbx, %rdi
callq *0x290(%rsp)
incq %r14
addq $0x10, %rbx
cmpq 0x80(%rsp), %r14
jb 0x1ffa14
movq 0x80(%rsp), %rax
addq %rax, 0x60(%rsp)
movq %r12, %r9
movq %r13, %r11
movq 0x288(%rsp), %rax
movq 0x70(%rsp), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x70(%rsp)
shlq $0x4, %rcx
movq %r9, (%rax,%rcx)
movq %r11, 0x8(%rax,%rcx)
movq 0x70(%rsp), %rax
cmpq %rax, 0x68(%rsp)
jae 0x1ffa87
movq %rax, 0x68(%rsp)
movq 0x70(%rsp), %rax
testq %rax, %rax
jne 0x1fef55
movq 0x60(%rsp), %rax
cmpq 0x78(%rsp), %rax
jbe 0x1ffac6
movq 0x288(%rsp), %rdi
leaq 0x1c3b58(%rip), %rsi    # 0x3c3608
movl $0x22e, %edx            # imm = 0x22E
callq 0x109670
movq $0x0, 0x288(%rsp)
addq $0x298, %rsp            # imm = 0x298
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x7d694
callq 0x7d9e3
callq 0x7d6cd
callq 0x7dac1
callq 0x7d706
callq 0x7da8a
callq 0x7daf8
callq 0x7da53
callq 0x7da1c
callq 0x7d9aa
callq 0x7d778
callq 0x7d971
callq 0x7d73f
callq 0x7d7b1
callq 0x7d858
callq 0x7d622
callq 0x7d65b
callq 0x7d938
callq 0x7d821
callq 0x7d8c8
callq 0x7d7ea
callq 0x7d891
callq 0x7d8ff