// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/external/sqlite-3.33.0/sqlite3.c
// Function: multiSelect
static int multiSelect(
  Parse *pParse,        /* Parsing context */
  Select *p,            /* The right-most of SELECTs to be coded */
  SelectDest *pDest     /* What to do with query results */
){
  int rc = SQLITE_OK;   /* Success code from a subroutine */
  Select *pPrior;       /* Another SELECT immediately to our left */
  Vdbe *v;              /* Generate code to this VDBE */
  SelectDest dest;      /* Alternative data destination */
  Select *pDelete = 0;  /* Chain of simple selects to delete */
  sqlite3 *db;          /* Database connection */

  /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs.  Only
  ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
  */
  assert( p && p->pPrior );  /* Calling function guarantees this much */
  assert( (p->selFlags & SF_Recursive)==0 || p->op==TK_ALL || p->op==TK_UNION );
  assert( p->selFlags & SF_Compound );
  db = pParse->db;
  pPrior = p->pPrior;
  dest = *pDest;
  if( pPrior->pOrderBy || pPrior->pLimit ){
    sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
      pPrior->pOrderBy!=0 ? "ORDER BY" : "LIMIT", selectOpName(p->op));
    rc = 1;
    goto multi_select_end;
  }

  v = sqlite3GetVdbe(pParse);
  assert( v!=0 );  /* The VDBE already created by calling function */

  /* Create the destination temporary table if necessary
  */
  if( dest.eDest==SRT_EphemTab ){
    assert( p->pEList );
    sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iSDParm, p->pEList->nExpr);
    dest.eDest = SRT_Table;
  }

  /* Special handling for a compound-select that originates as a VALUES clause.
  */
  if( p->selFlags & SF_MultiValue ){
    rc = multiSelectValues(pParse, p, &dest);
    if( rc>=0 ) goto multi_select_end;
    rc = SQLITE_OK;
  }

  /* Make sure all SELECTs in the statement have the same number of elements
  ** in their result sets.
  */
  assert( p->pEList && pPrior->pEList );
  assert( p->pEList->nExpr==pPrior->pEList->nExpr );

#ifndef SQLITE_OMIT_CTE
  if( p->selFlags & SF_Recursive ){
    generateWithRecursiveQuery(pParse, p, &dest);
  }else
#endif

  /* Compound SELECTs that have an ORDER BY clause are handled separately.
  */
  if( p->pOrderBy ){
    return multiSelectOrderBy(pParse, p, pDest);
  }else{

#ifndef SQLITE_OMIT_EXPLAIN
    if( pPrior->pPrior==0 ){
      ExplainQueryPlan((pParse, 1, "COMPOUND QUERY"));
      ExplainQueryPlan((pParse, 1, "LEFT-MOST SUBQUERY"));
    }
#endif

    /* Generate code for the left and right SELECT statements.
    */
    switch( p->op ){
      case TK_ALL: {
        int addr = 0;
        int nLimit;
        assert( !pPrior->pLimit );
        pPrior->iLimit = p->iLimit;
        pPrior->iOffset = p->iOffset;
        pPrior->pLimit = p->pLimit;
        rc = sqlite3Select(pParse, pPrior, &dest);
        p->pLimit = 0;
        if( rc ){
          goto multi_select_end;
        }
        p->pPrior = 0;
        p->iLimit = pPrior->iLimit;
        p->iOffset = pPrior->iOffset;
        if( p->iLimit ){
          addr = sqlite3VdbeAddOp1(v, OP_IfNot, p->iLimit); VdbeCoverage(v);
          VdbeComment((v, "Jump ahead if LIMIT reached"));
          if( p->iOffset ){
            sqlite3VdbeAddOp3(v, OP_OffsetLimit,
                              p->iLimit, p->iOffset+1, p->iOffset);
          }
        }
        ExplainQueryPlan((pParse, 1, "UNION ALL"));
        rc = sqlite3Select(pParse, p, &dest);
        testcase( rc!=SQLITE_OK );
        pDelete = p->pPrior;
        p->pPrior = pPrior;
        p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
        if( pPrior->pLimit
         && sqlite3ExprIsInteger(pPrior->pLimit->pLeft, &nLimit)
         && nLimit>0 && p->nSelectRow > sqlite3LogEst((u64)nLimit)
        ){
          p->nSelectRow = sqlite3LogEst((u64)nLimit);
        }
        if( addr ){
          sqlite3VdbeJumpHere(v, addr);
        }
        break;
      }
      case TK_EXCEPT:
      case TK_UNION: {
        int unionTab;    /* Cursor number of the temp table holding result */
        u8 op = 0;       /* One of the SRT_ operations to apply to self */
        int priorOp;     /* The SRT_ operation to apply to prior selects */
        Expr *pLimit;    /* Saved values of p->nLimit  */
        int addr;
        SelectDest uniondest;

        testcase( p->op==TK_EXCEPT );
        testcase( p->op==TK_UNION );
        priorOp = SRT_Union;
        if( dest.eDest==priorOp ){
          /* We can reuse a temporary table generated by a SELECT to our
          ** right.
          */
          assert( p->pLimit==0 );      /* Not allowed on leftward elements */
          unionTab = dest.iSDParm;
        }else{
          /* We will need to create our own temporary table to hold the
          ** intermediate results.
          */
          unionTab = pParse->nTab++;
          assert( p->pOrderBy==0 );
          addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0);
          assert( p->addrOpenEphm[0] == -1 );
          p->addrOpenEphm[0] = addr;
          findRightmost(p)->selFlags |= SF_UsesEphemeral;
          assert( p->pEList );
        }

        /* Code the SELECT statements to our left
        */
        assert( !pPrior->pOrderBy );
        sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
        rc = sqlite3Select(pParse, pPrior, &uniondest);
        if( rc ){
          goto multi_select_end;
        }

        /* Code the current SELECT statement
        */
        if( p->op==TK_EXCEPT ){
          op = SRT_Except;
        }else{
          assert( p->op==TK_UNION );
          op = SRT_Union;
        }
        p->pPrior = 0;
        pLimit = p->pLimit;
        p->pLimit = 0;
        uniondest.eDest = op;
        ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
                          selectOpName(p->op)));
        rc = sqlite3Select(pParse, p, &uniondest);
        testcase( rc!=SQLITE_OK );
        assert( p->pOrderBy==0 );
        pDelete = p->pPrior;
        p->pPrior = pPrior;
        p->pOrderBy = 0;
        if( p->op==TK_UNION ){
          p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
        }
        sqlite3ExprDelete(db, p->pLimit);
        p->pLimit = pLimit;
        p->iLimit = 0;
        p->iOffset = 0;

        /* Convert the data in the temporary table into whatever form
        ** it is that we currently need.
        */
        assert( unionTab==dest.iSDParm || dest.eDest!=priorOp );
        assert( p->pEList || db->mallocFailed );
        if( dest.eDest!=priorOp && db->mallocFailed==0 ){
          int iCont, iBreak, iStart;
          iBreak = sqlite3VdbeMakeLabel(pParse);
          iCont = sqlite3VdbeMakeLabel(pParse);
          computeLimitRegisters(pParse, p, iBreak);
          sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak); VdbeCoverage(v);
          iStart = sqlite3VdbeCurrentAddr(v);
          selectInnerLoop(pParse, p, unionTab,
                          0, 0, &dest, iCont, iBreak);
          sqlite3VdbeResolveLabel(v, iCont);
          sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart); VdbeCoverage(v);
          sqlite3VdbeResolveLabel(v, iBreak);
          sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
        }
        break;
      }
      default: assert( p->op==TK_INTERSECT ); {
        int tab1, tab2;
        int iCont, iBreak, iStart;
        Expr *pLimit;
        int addr;
        SelectDest intersectdest;
        int r1;

        /* INTERSECT is different from the others since it requires
        ** two temporary tables.  Hence it has its own case.  Begin
        ** by allocating the tables we will need.
        */
        tab1 = pParse->nTab++;
        tab2 = pParse->nTab++;
        assert( p->pOrderBy==0 );

        addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0);
        assert( p->addrOpenEphm[0] == -1 );
        p->addrOpenEphm[0] = addr;
        findRightmost(p)->selFlags |= SF_UsesEphemeral;
        assert( p->pEList );

        /* Code the SELECTs to our left into temporary table "tab1".
        */
        sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
        rc = sqlite3Select(pParse, pPrior, &intersectdest);
        if( rc ){
          goto multi_select_end;
        }

        /* Code the current SELECT into temporary table "tab2"
        */
        addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0);
        assert( p->addrOpenEphm[1] == -1 );
        p->addrOpenEphm[1] = addr;
        p->pPrior = 0;
        pLimit = p->pLimit;
        p->pLimit = 0;
        intersectdest.iSDParm = tab2;
        ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
                          selectOpName(p->op)));
        rc = sqlite3Select(pParse, p, &intersectdest);
        testcase( rc!=SQLITE_OK );
        pDelete = p->pPrior;
        p->pPrior = pPrior;
        if( p->nSelectRow>pPrior->nSelectRow ){
          p->nSelectRow = pPrior->nSelectRow;
        }
        sqlite3ExprDelete(db, p->pLimit);
        p->pLimit = pLimit;

        /* Generate code to take the intersection of the two temporary
        ** tables.
        */
        if( rc ) break;
        assert( p->pEList );
        iBreak = sqlite3VdbeMakeLabel(pParse);
        iCont = sqlite3VdbeMakeLabel(pParse);
        computeLimitRegisters(pParse, p, iBreak);
        sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak); VdbeCoverage(v);
        r1 = sqlite3GetTempReg(pParse);
        iStart = sqlite3VdbeAddOp2(v, OP_RowData, tab1, r1);
        sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0);
        VdbeCoverage(v);
        sqlite3ReleaseTempReg(pParse, r1);
        selectInnerLoop(pParse, p, tab1,
                        0, 0, &dest, iCont, iBreak);
        sqlite3VdbeResolveLabel(v, iCont);
        sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart); VdbeCoverage(v);
        sqlite3VdbeResolveLabel(v, iBreak);
        sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
        sqlite3VdbeAddOp2(v, OP_Close, tab1, 0);
        break;
      }
    }

  #ifndef SQLITE_OMIT_EXPLAIN
    if( p->pNext==0 ){
      ExplainQueryPlanPop(pParse);
    }
  #endif
  }
  if( pParse->nErr ) goto multi_select_end;

  /* Compute collating sequences used by
  ** temporary tables needed to implement the compound select.
  ** Attach the KeyInfo structure to all temporary tables.
  **
  ** This section is run by the right-most SELECT statement only.
  ** SELECT statements to the left always skip this part.  The right-most
  ** SELECT might also skip this part if it has no ORDER BY clause and
  ** no temp tables are required.
  */
  if( p->selFlags & SF_UsesEphemeral ){
    int i;                        /* Loop counter */
    KeyInfo *pKeyInfo;            /* Collating sequence for the result set */
    Select *pLoop;                /* For looping through SELECT statements */
    CollSeq **apColl;             /* For looping through pKeyInfo->aColl[] */
    int nCol;                     /* Number of columns in result set */

    assert( p->pNext==0 );
    nCol = p->pEList->nExpr;
    pKeyInfo = sqlite3KeyInfoAlloc(db, nCol, 1);
    if( !pKeyInfo ){
      rc = SQLITE_NOMEM_BKPT;
      goto multi_select_end;
    }
    for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
      *apColl = multiSelectCollSeq(pParse, p, i);
      if( 0==*apColl ){
        *apColl = db->pDfltColl;
      }
    }

    for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
      for(i=0; i<2; i++){
        int addr = pLoop->addrOpenEphm[i];
        if( addr<0 ){
          /* If [0] is unused then [1] is also unused.  So we can
          ** always safely abort as soon as the first unused slot is found */
          assert( pLoop->addrOpenEphm[1]<0 );
          break;
        }
        sqlite3VdbeChangeP2(v, addr, nCol);
        sqlite3VdbeChangeP4(v, addr, (char*)sqlite3KeyInfoRef(pKeyInfo),
                            P4_KEYINFO);
        pLoop->addrOpenEphm[i] = -1;
      }
    }
    sqlite3KeyInfoUnref(pKeyInfo);
  }

multi_select_end:
  pDest->iSdst = dest.iSdst;
  pDest->nSdst = dest.nSdst;
  sqlite3SelectDelete(db, pDelete);
  return rc;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x118, %rsp            # imm = 0x118
movq %rdx, %rbx
movq %rsi, %r15
movq (%rdi), %rcx
movq 0x50(%rsi), %r12
movq 0x20(%rdx), %rax
movq %rax, 0xd0(%rsp)
movups (%rdx), %xmm0
movups 0x10(%rdx), %xmm1
movaps %xmm1, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
cmpq $0x0, 0x48(%r12)
je 0x2cc416
leaq 0x10c383(%rip), %rdx    # 0x3d8797
jmp 0x2cc425
cmpq $0x0, 0x60(%r12)
je 0x2cc47a
leaq 0x10c3c9(%rip), %rdx    # 0x3d87ee
movb (%r15), %al
addb $0x7b, %al
cmpb $0x2, %al
ja 0x2cc43e
movzbl %al, %eax
leaq 0x1ebed0(%rip), %rcx    # 0x4b8308
movq (%rcx,%rax,8), %rcx
jmp 0x2cc445
leaq 0x10bc00(%rip), %rcx    # 0x3d8045
leaq 0x10c378(%rip), %rsi    # 0x3d87c4
xorl %eax, %eax
callq 0x27b48d
movl $0x1, %r14d
movq 0xbc(%rsp), %rax
movq %rax, 0xc(%rbx)
movl %r14d, %eax
addq $0x118, %rsp            # imm = 0x118
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rcx, 0x18(%rsp)
movq %rbx, 0x20(%rsp)
movq %rdi, 0x10(%rsp)
callq 0x2bc630
movq %rax, %r13
movb 0xb0(%rsp), %sil
cmpb $0xc, %sil
jne 0x2cc4c7
movl 0xb4(%rsp), %edx
movq 0x20(%r15), %rax
movl (%rax), %ecx
movq %r13, %rdi
movl $0x64, %esi
xorl %r8d, %r8d
callq 0x2a83e1
movb $0xe, 0xb0(%rsp)
movb $0xe, %sil
movl 0x4(%r15), %eax
btl $0xa, %eax
jae 0x2cc507
movq 0x60(%r15), %rbp
xorl %ecx, %ecx
testq %rbp, %rbp
sete %dl
cmpq $0x0, 0x70(%r15)
jne 0x2cc507
movb %dl, %cl
movl $0x1, %ebx
movq %r15, %r14
movq 0x50(%r14), %rdx
testq %rdx, %rdx
je 0x2ccf0f
addl %ecx, %ebx
cmpq $0x0, 0x70(%rdx)
movq %rdx, %r14
je 0x2cc4ee
btl $0xd, %eax
jb 0x2cc5dc
movq 0x48(%r15), %rbp
testq %rbp, %rbp
je 0x2cc602
movq 0x10(%rsp), %rax
movq (%rax), %r12
movq 0x10(%rax), %r13
movl 0x44(%rax), %ecx
movq %rcx, 0x18(%rsp)
addl $-0x2, %ecx
movl %ecx, 0x40(%rsp)
movl %ecx, 0x44(%rax)
movb (%r15), %cl
movq 0x50(%r15), %rax
movq %rax, 0x8(%rsp)
movl (%rbp), %r8d
cmpb $-0x7b, %cl
movb %cl, (%rsp)
je 0x2cc560
cmpb $0x0, 0x61(%r12)
je 0x2ccfee
leal 0x1(%r8), %ebx
movslq %ebx, %rsi
shlq $0x2, %rsi
movq %r12, %rdi
movq %r8, %r14
callq 0x282a35
movq $0x0, 0x58(%rsp)
testq %rax, %rax
movq %r14, 0xe8(%rsp)
movq %rax, 0xe0(%rsp)
je 0x2cc7a0
movl %r14d, (%rax)
testl %r14d, %r14d
jle 0x2cc5bf
movl %ebx, %edi
leaq 0x1c(%rbp), %rcx
movl $0x1, %edx
movzwl (%rcx), %esi
decl %esi
movl %esi, (%rax,%rdx,4)
incq %rdx
addq $0x18, %rcx
cmpq %rdx, %rdi
jne 0x2cc5ab
movq 0x10(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x2d328c
movq %rax, 0x98(%rsp)
jmp 0x2cc7b1
cmpq $0x0, 0x70(%r15)
je 0x2cc6f6
leaq 0x10c254(%rip), %rsi    # 0x3d8842
movq 0x10(%rsp), %rbp
movq %rbp, %rdi
xorl %eax, %eax
callq 0x27b48d
jmp 0x2cd69d
cmpq $0x0, 0x50(%r12)
movq 0x10(%rsp), %rbp
movq 0x20(%rsp), %rbx
jne 0x2cc646
leaq 0x10c1d9(%rip), %rdx    # 0x3d87f4
movq %rbp, %rdi
movl %esi, %r14d
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
leaq 0x10c1cf(%rip), %rdx    # 0x3d8803
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
movl %r14d, %esi
movzbl (%r15), %eax
cmpl $0x84, %eax
je 0x2ccf8b
cmpl $0x86, %eax
je 0x2ccf8b
cmpl $0x85, %eax
jne 0x2cd153
movq 0x8(%r15), %rax
movq %rax, 0x8(%r12)
movq 0x60(%r15), %rax
movq %rax, 0x60(%r12)
leaq 0xb0(%rsp), %rdx
movq %rbp, %rdi
movq %r12, %rsi
callq 0x2af648
movq $0x0, 0x60(%r15)
testl %eax, %eax
jne 0x2cd1ba
movq $0x0, 0x50(%r15)
movq 0x8(%r12), %rdx
movq %rdx, 0x8(%r15)
testl %edx, %edx
je 0x2cd82b
movq %r13, %rdi
movl $0x14, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, 0x8(%rsp)
movl 0xc(%r15), %r8d
testl %r8d, %r8d
je 0x2cd833
movl 0x8(%r15), %edx
leal 0x1(%r8), %ecx
movq %r13, %rdi
movl $0x98, %esi
callq 0x2a83e1
jmp 0x2cd833
movq 0x20(%r15), %rax
movq 0x28(%r15), %rbx
movl (%rax), %eax
movl %eax, (%rsp)
movq 0x10(%rsp), %rbp
movq 0x10(%rbp), %r14
movq 0x50(%r15), %r12
movq %rbp, %rdi
movl $0x21, %esi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2c37ba
testl %eax, %eax
jne 0x2cd69d
movl 0x44(%rbp), %edx
decl %edx
movl %edx, 0x44(%rbp)
movw $0x140, 0x2(%r15)       # imm = 0x140
movq %rbp, %rdi
movq %r15, %rsi
movq %rdx, 0x60(%rsp)
callq 0x2cdeab
movq 0x60(%r15), %rax
movq %rax, 0x50(%rsp)
movl 0x8(%r15), %esi
movl 0xc(%r15), %eax
movl %eax, 0x58(%rsp)
xorl %eax, %eax
movq %rax, 0x60(%r15)
movq %rax, 0x8(%r15)
movslq (%rbx), %rax
testq %rax, %rax
movl $0x0, %edx
movl (%rsp), %r8d
jle 0x2cd1c6
imulq $0x70, %rax, %rcx
xorl %eax, %eax
testb $0x20, 0x45(%rbx,%rax)
jne 0x2cd1c2
addq $0x70, %rax
cmpq %rax, %rcx
jne 0x2cc785
xorl %edx, %edx
jmp 0x2cd1c6
movq $0x0, 0x98(%rsp)
movq 0x10(%rsp), %r14
movq %rbp, 0x48(%r15)
movq (%r14), %rdi
movq %rbp, %rsi
xorl %edx, %edx
callq 0x2c2deb
movq 0x8(%rsp), %rcx
movq %rax, 0x48(%rcx)
cmpb $-0x7b, (%rsp)
movq %r12, 0xa0(%rsp)
movq %r13, 0xd8(%rsp)
je 0x2cc857
movq 0x20(%r15), %rax
movl (%rax), %ebx
movl 0x38(%r14), %eax
leal (%rax,%rbx), %ecx
incl %ecx
incl %eax
movl %ecx, 0x38(%r14)
movq %r13, %rdi
movl $0x45, %esi
xorl %edx, %edx
movq %rax, 0x58(%rsp)
movl %eax, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r12, %rdi
movl %ebx, %esi
movl $0x1, %edx
callq 0x2bcb86
testq %rax, %rax
je 0x2cc857
movq %rax, %r12
testl %ebx, %ebx
jle 0x2cc85a
movq %r14, %rbp
xorl %r14d, %r14d
movq %rbp, %rdi
movq %r15, %rsi
movl %r14d, %edx
callq 0x2d3241
movq %rax, 0x20(%r12,%r14,8)
movq 0x18(%r12), %rax
movb $0x0, (%rax,%r14)
incq %r14
cmpq %r14, %rbx
jne 0x2cc830
jmp 0x2cc85a
xorl %r12d, %r12d
movq 0x18(%rsp), %rbp
decl %ebp
xorl %r13d, %r13d
movq %r13, 0x50(%r15)
movq 0x8(%rsp), %rbx
movq %r13, 0x58(%rbx)
movq 0x48(%r15), %rdx
leaq 0x10b427(%rip), %rcx    # 0x3d7ca3
movq 0x10(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x2c9618
movq $0x0, 0x48(%rsp)
cmpq %r13, 0x50(%rbx)
jne 0x2cc8b3
movq 0x8(%rsp), %rsi
movq 0x48(%rsi), %rdx
leaq 0x10b3f8(%rip), %rcx    # 0x3d7ca3
movq %r14, %rdi
callq 0x2c9618
cmpb $-0x7b, (%rsp)
setne %bl
movq %r14, %rdi
movq %r15, %rsi
movq %rbp, 0x18(%rsp)
movl %ebp, %edx
callq 0x2cdeab
movl 0x8(%r15), %eax
testl %eax, %eax
sete %cl
orb %bl, %cl
movl $0x0, %ebx
movq 0xd8(%rsp), %r13
jne 0x2cc931
movq 0x10(%rsp), %rcx
movl 0x38(%rcx), %ebx
leal 0x1(%rbx), %r14d
addl $0x2, %ebx
movl %ebx, 0x38(%rcx)
movl 0xc(%r15), %ecx
leal 0x1(%rcx), %edx
testl %ecx, %ecx
cmovel %eax, %edx
movq %r13, %rdi
movl $0x4d, %esi
movl %r14d, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl $0x4d, %esi
movq %r14, 0x48(%rsp)
movl %r14d, %edx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq 0x60(%r15), %rsi
testq %rsi, %rsi
je 0x2cc947
movq 0xa0(%rsp), %rdi
callq 0x2a6164
xorl %eax, %eax
movq %rax, 0x60(%r15)
movq 0x10(%rsp), %rcx
movl 0x38(%rcx), %edi
leal 0x1(%rdi), %ebp
leal 0x2(%rdi), %edx
leal 0x4(%rdi), %esi
movl %esi, 0x68(%rsp)
movl %esi, 0x38(%rcx)
movb $0xd, %cl
movb %cl, 0x70(%rsp)
movl %ebp, 0x74(%rsp)
movl %eax, 0x78(%rsp)
movq %rax, 0x88(%rsp)
movq %rax, 0x7c(%rsp)
movb %cl, 0xf0(%rsp)
movl %edx, 0x30(%rsp)
movl %edx, 0xf4(%rsp)
movl %eax, 0xf8(%rsp)
movq %rax, 0x108(%rsp)
movq %rax, 0xfc(%rsp)
movb (%r15), %al
addb $0x7b, %al
cmpb $0x2, %al
movq %rbx, 0x60(%rsp)
ja 0x2cc9c7
movzbl %al, %eax
leaq 0x1eb947(%rip), %rcx    # 0x4b8308
movq (%rcx,%rax,8), %rcx
jmp 0x2cc9ce
leaq 0x10b677(%rip), %rcx    # 0x3d8045
addl $0x3, %edi
movq %rdi, 0x50(%rsp)
leaq 0x10bed5(%rip), %rdx    # 0x3d88b2
movq 0x10(%rsp), %r14
movq %r14, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
movl 0x90(%r13), %r8d
incl %r8d
movq %r13, %rdi
movl $0xd, %esi
movl %ebp, %edx
xorl %ecx, %ecx
callq 0x2a83e1
movl %eax, 0x2c(%rsp)
movq 0x8(%rsp), %rbx
movq 0x48(%rsp), %rax
movl %eax, 0x8(%rbx)
leaq 0x10be99(%rip), %rdx    # 0x3d88bd
movq %r14, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
leaq 0x70(%rsp), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2af648
movq %r13, %rdi
movl $0x42, %esi
movl %ebp, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq 0x18(%r13), %rax
movb $0x0, 0x1f(%rax)
movl $0x0, 0x28(%rax)
movl 0x90(%r13), %r8d
movq (%r13), %rax
cmpb $0x0, 0x61(%rax)
movl %ebp, 0x48(%rsp)
je 0x2cca84
leaq 0x1f2406(%rip), %rax    # 0x4bee88
jmp 0x2ccaa2
leal -0x1(%r8), %eax
movl 0x2c(%rsp), %ecx
testl %ecx, %ecx
cmovnsl %ecx, %eax
cltq
leaq (%rax,%rax,2), %rax
shlq $0x3, %rax
addq 0x88(%r13), %rax
movl %r8d, 0x8(%rax)
incl %r8d
movq %r13, %rdi
movl $0xd, %esi
movl 0x30(%rsp), %ebp
movl %ebp, %edx
xorl %ecx, %ecx
callq 0x2a83e1
movl %eax, 0xac(%rsp)
movq 0x8(%r15), %rbx
movq 0x60(%rsp), %rax
movl %eax, 0x8(%r15)
xorl %eax, %eax
movl %eax, 0xc(%r15)
leaq 0xfc59a(%rip), %rdx     # 0x3c9079
movq %r14, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
leaq 0xf0(%rsp), %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x2af648
movq %rbx, 0x8(%r15)
movq %r13, %rdi
movl $0x42, %esi
movl %ebp, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq 0x18(%r13), %rax
movb $0x0, 0x1f(%rax)
movl $0x0, 0x2c(%rsp)
xorl %ecx, %ecx
movl %ecx, 0x28(%rax)
leaq 0x70(%rsp), %rdx
movq %r14, %rdi
movq %r15, %rsi
movq 0x20(%rsp), %rbx
movq %rbx, %rcx
movq 0x50(%rsp), %r8
movq 0x58(%rsp), %r14
movl %r14d, %r9d
pushq 0x18(%rsp)
pushq %r12
callq 0x2d335c
addq $0x10, %rsp
movl %eax, 0x60(%rsp)
movb (%rsp), %bpl
andb $-0x2, %bpl
cmpb $-0x7c, %bpl
jne 0x2ccb9d
leaq 0xf0(%rsp), %rdx
movq 0x10(%rsp), %rdi
movq %r15, %rsi
movq %rbx, %rcx
movl 0x68(%rsp), %r8d
movl %r14d, %r9d
pushq 0x18(%rsp)
pushq %r12
callq 0x2d335c
addq $0x10, %rsp
movl %eax, 0x2c(%rsp)
testq %r12, %r12
je 0x2ccbb5
decl (%r12)
jne 0x2ccbb5
movq 0x10(%r12), %rdi
movq %r12, %rsi
callq 0x282904
cmpb $-0x7a, %bpl
movl 0x60(%rsp), %ebx
jne 0x2ccc1c
movq 0x18(%rsp), %r12
movl %r12d, 0x58(%rsp)
movl %r12d, %r14d
cmpb $-0x79, (%rsp)
movq 0x50(%rsp), %rdx
jne 0x2ccc94
movq 0x8(%rsp), %rax
movzwl 0x2(%rax), %eax
movl %r12d, 0x58(%rsp)
movl %r12d, 0x3c(%rsp)
movl %r12d, 0x20(%rsp)
cmpw %ax, 0x2(%r15)
movl 0x48(%rsp), %r14d
jle 0x2ccce9
movw %ax, 0x2(%r15)
movl %r12d, 0x58(%rsp)
movl %r12d, 0x3c(%rsp)
movl %r12d, 0x20(%rsp)
jmp 0x2ccce9
movq %r13, %rdi
movl $0xc, %esi
movl 0x68(%rsp), %edx
movl 0x2c(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movb %bpl, 0x20(%rsp)
movl %eax, %ebp
movq %r13, %rdi
movl $0xe, %esi
movl 0x30(%rsp), %edx
movq 0x18(%rsp), %r12
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, %r14d
movq %r13, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl %ebp, 0x58(%rsp)
movl %ebp, %ecx
movb 0x20(%rsp), %bpl
xorl %r8d, %r8d
callq 0x2a83e1
movswl 0x2(%r15), %edi
movq 0x8(%rsp), %rax
movswl 0x2(%rax), %esi
callq 0x2d31ea
movw %ax, 0x2(%r15)
movq 0x50(%rsp), %rdx
movl %r14d, 0x3c(%rsp)
movq %r13, %rdi
movl $0xc, %esi
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, %ebx
movq %r13, %rdi
movl $0xe, %esi
movl 0x48(%rsp), %r14d
movl %r14d, %edx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl %ebx, 0x20(%rsp)
movl %ebx, %ecx
movl 0x60(%rsp), %ebx
xorl %r8d, %r8d
callq 0x2a83e1
movq 0x50(%rsp), %rdx
movq %r13, %rdi
movl $0xc, %esi
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, %r12d
movq %r13, %rdi
movl $0xe, %esi
movl %r14d, %edx
movl 0x58(%rsp), %ebx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl 0x40(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movb (%rsp), %al
cmpb $-0x7b, %al
jne 0x2ccd61
movl 0x90(%r13), %eax
movl %eax, (%rsp)
movl %r12d, %r14d
movq %r13, %rdi
movl $0xc, %esi
movl 0x68(%rsp), %edx
movl 0x2c(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %r12d, %ebx
movl %r14d, %r12d
jmp 0x2ccd78
cmpb $-0x79, %al
jne 0x2ccfa6
movl %r12d, %ebx
incl %ebx
movl 0x90(%r13), %eax
movl %eax, (%rsp)
movq 0x10(%rsp), %r14
movq 0x98(%rsp), %rbp
movq %r13, %rdi
movl $0xe, %esi
movl 0x30(%rsp), %edx
movl 0x20(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl 0x40(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl 0x90(%r13), %eax
movq (%r13), %rcx
cmpb $0x0, 0x61(%rcx)
je 0x2ccdcd
leaq 0x1f20bd(%rip), %rcx    # 0x4bee88
jmp 0x2ccdee
leal -0x1(%rax), %ecx
movl 0xac(%rsp), %edx
testl %edx, %edx
cmovnsl %edx, %ecx
movslq %ecx, %rcx
leaq (%rcx,%rcx,2), %rcx
shlq $0x3, %rcx
addq 0x88(%r13), %rcx
movl %eax, 0x8(%rcx)
movq %r13, %rdi
movl $0xe, %esi
movl 0x48(%rsp), %edx
movl 0x3c(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl $0xe, %esi
movl 0x30(%rsp), %edx
movl 0x20(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl 0x40(%rsp), %esi
callq 0x2bfa39
movq %r13, %rdi
movl $0x55, %esi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl %eax, %esi
movq 0xe0(%rsp), %rdx
movl $0xfffffff1, %ecx       # imm = 0xFFFFFFF1
callq 0x27b778
movl 0x7c(%rsp), %edx
movl 0xfc(%rsp), %ecx
movq %r13, %rdi
movl $0x56, %esi
movq 0xe8(%rsp), %r8
callq 0x2a83e1
movq %r13, %rdi
movl %eax, %esi
movq %rbp, %rdx
movl $0xfffffff7, %ecx       # imm = 0xFFFFFFF7
callq 0x27b778
movslq 0x90(%r13), %rax
testq %rax, %rax
jle 0x2ccea8
movq 0x88(%r13), %rcx
leaq (%rax,%rax,2), %rax
movw $0x1, -0x16(%rcx,%rax,8)
movq %r13, %rdi
movl $0x10, %esi
movl %ebx, %edx
movl %r12d, %ecx
movl (%rsp), %r8d
callq 0x2a83e1
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x2bfa39
movq 0x50(%r15), %rsi
testq %rsi, %rsi
je 0x2ccee6
movq 0xa0(%rsp), %rdi
movl $0x1, %edx
callq 0x2a62e6
movq 0x8(%rsp), %rax
movq %rax, 0x50(%r15)
movq %r15, 0x58(%rax)
movq %r14, %rdi
callq 0x2cdad7
cmpl $0x0, 0x30(%r14)
movl $0x0, %r14d
setne %r14b
jmp 0x2cc465
cmpl $0x1, %ebx
leaq 0xfd257(%rip), %rax     # 0x3ca170
leaq 0x10c4d8(%rip), %r8     # 0x3d93f8
cmoveq %rax, %r8
leaq 0x10b900(%rip), %rdx    # 0x3d882b
movq 0x10(%rsp), %rdi
xorl %esi, %esi
movl %ebx, %ecx
xorl %eax, %eax
callq 0x2c1741
movl $0x1, %r12d
leaq 0xb0(%rsp), %r15
movq 0x10(%rsp), %rdi
movq %r14, %rsi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
xorl %ecx, %ecx
xorl %r8d, %r8d
movq %r15, %r9
pushq %r12
pushq %r12
callq 0x2d04ff
addq $0x10, %rsp
testq %rbp, %rbp
jne 0x2ccf7e
movw %bx, 0x2(%r14)
movq 0x58(%r14), %r14
testq %r14, %r14
jne 0x2ccf49
movq 0x20(%rsp), %rbx
xorl %r14d, %r14d
jmp 0x2cc459
movb %sil, (%rsp)
cmpb $0x1, %sil
jne 0x2cd0ae
movl 0xb4(%rsp), %r14d
jmp 0x2cd0e5
movq %r13, %rdi
movl $0xe, %esi
movl 0x48(%rsp), %edx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, %r14d
movq %r13, %rdi
movl $0xb, %esi
xorl %edx, %edx
movl 0x40(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl 0x90(%r13), %eax
movl %eax, (%rsp)
cmpb $-0x7c, %bpl
je 0x2ccd41
jmp 0x2ccd59
movl $0x1, %r14d
movq 0x20(%r15), %rax
cmpl (%rax), %r14d
jg 0x2cc560
testl %r8d, %r8d
jle 0x2cd021
leaq 0x1c(%rbp), %rcx
xorl %eax, %eax
movzwl (%rcx), %edx
cmpl %edx, %r14d
je 0x2cd023
incl %eax
addq $0x18, %rcx
cmpl %eax, %r8d
jne 0x2cd00c
jmp 0x2cd028
xorl %eax, %eax
cmpl %r8d, %eax
jne 0x2cd09a
movq %r8, %rbx
movq $0x0, 0x70(%rsp)
movl $0x0, 0x78(%rsp)
movq %r12, %rdi
movl $0x98, %esi
leaq 0x70(%rsp), %rdx
xorl %ecx, %ecx
callq 0x2b1c27
testq %rax, %rax
je 0x2cd54f
orb $0x4, 0x5(%rax)
movl %r14d, 0x8(%rax)
movq 0x10(%rsp), %rcx
movq (%rcx), %rdi
movq %rbp, %rsi
movq %rax, %rdx
callq 0x2b1a3f
movq %rax, 0x48(%r15)
testq %rax, %rax
je 0x2cd095
movq %rax, %rbp
movq %rbx, %r8
movslq %r8d, %rax
incl %r8d
leaq (%rax,%rax,2), %rax
movw %r14w, 0x1c(%rbp,%rax,8)
jmp 0x2cd09a
xorl %ebp, %ebp
movq %rbx, %r8
incl %r14d
cmpb $0x0, 0x61(%r12)
je 0x2ccff4
jmp 0x2cc560
movl 0x34(%rbp), %r14d
leal 0x1(%r14), %eax
movl %eax, 0x34(%rbp)
movq %r13, %rdi
movl $0x64, %esi
movl %r14d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, 0x14(%r15)
movq %r15, %rcx
movq %rcx, %rax
movq 0x58(%rcx), %rcx
testq %rcx, %rcx
jne 0x2cd0d5
orb $0x20, 0x4(%rax)
leaq 0x70(%rsp), %rdx
movb $0x1, (%rdx)
movl %r14d, 0x4(%rdx)
movl $0x0, 0x8(%rdx)
xorl %eax, %eax
movq %rax, 0x18(%rdx)
movq %rax, 0xc(%rdx)
movq %rbp, %rdi
movq %r12, %rsi
callq 0x2af648
testl %eax, %eax
jne 0x2cd1ba
movq %r14, 0x30(%rsp)
movb (%r15), %al
cmpb $-0x7a, %al
sete %cl
incb %cl
xorl %edx, %edx
movq %rdx, 0x50(%r15)
movq 0x60(%r15), %rbx
movq %rdx, 0x60(%r15)
movb %cl, 0x70(%rsp)
addb $0x7b, %al
cmpb $0x2, %al
ja 0x2cd398
movzbl %al, %eax
leaq 0x1eb1be(%rip), %rcx    # 0x4b8308
movq (%rcx,%rax,8), %rcx
jmp 0x2cd39f
movl 0x34(%rbp), %r14d
leal 0x2(%r14), %eax
movl %eax, 0x34(%rbp)
movq %r13, %rdi
movl $0x64, %esi
movl %r14d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, 0x14(%r15)
movq %r15, %rcx
movq %rcx, %rax
movq 0x58(%rcx), %rcx
testq %rcx, %rcx
jne 0x2cd17a
orb $0x20, 0x4(%rax)
leaq 0x70(%rsp), %rdx
movb $0x1, (%rdx)
movl %r14d, 0x4(%rdx)
movl $0x0, 0x8(%rdx)
xorl %eax, %eax
movq %rax, 0x18(%rdx)
movq %rax, 0xc(%rdx)
movq %rbp, %rdi
movq %r12, %rsi
callq 0x2af648
testl %eax, %eax
je 0x2cd4f3
movl %eax, %r14d
jmp 0x2cc459
movl 0x48(%rbx,%rax), %edx
movq 0x48(%r15), %rbx
movl 0x34(%rbp), %edi
leal 0x1(%rdi), %eax
movl %eax, 0x34(%rbp)
cmpb $-0x7c, (%r15)
movq %r14, 0x30(%rsp)
movq %r12, 0x40(%rsp)
movq %rbx, 0x8(%rsp)
movl %esi, 0x2c(%rsp)
jne 0x2cd202
movl %eax, 0x48(%rsp)
testq %rbx, %rbx
setne %al
addb %al, %al
addb $0x6, %al
leal 0x2(%rdi), %ecx
movl %ecx, 0x34(%rbp)
jmp 0x2cd214
testq %rbx, %rbx
setne %al
addb %al, %al
orb $0x5, %al
movl $0x0, 0x48(%rsp)
movb %al, 0x70(%rsp)
movl %edi, 0x74(%rsp)
movl $0x0, 0x78(%rsp)
xorl %eax, %eax
movq %rax, 0x88(%rsp)
movq %rax, 0x7c(%rsp)
movq %rbp, %r14
movl 0x38(%rbp), %ecx
incl %ecx
movl %ecx, 0x38(%rbp)
movq 0x30(%rsp), %r12
movq %rdi, %rbp
movq %r12, %rdi
movl $0x72, %esi
movq %rdx, 0x68(%rsp)
movl %ecx, 0x3c(%rsp)
movl %r8d, %ebx
callq 0x2a83e1
cmpq $0x0, 0x8(%rsp)
movq %rbp, 0xa0(%rsp)
je 0x2cd2b5
movq %r14, %rdi
movq %r15, %rsi
callq 0x2d328c
movq %rax, %r14
movq 0x8(%rsp), %rbx
movl (%rbx), %ecx
addl $0x2, %ecx
movq %r12, %rdi
movl $0x64, %esi
movl %ebp, %edx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r12, %rdi
movl %eax, %esi
movq %r14, %rdx
movl $0xfffffff7, %ecx       # imm = 0xFFFFFFF7
callq 0x27b778
movq %rbx, 0x90(%rsp)
jmp 0x2cd2c9
movq %r12, %rdi
movl $0x64, %esi
movl %ebp, %edx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r12, %r14
movl 0x48(%rsp), %edx
testl %edx, %edx
movq 0x40(%rsp), %r12
je 0x2cd2f4
movq %r14, %rdi
movl $0x64, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, 0x14(%r15)
orb $0x20, 0x4(%r15)
xorl %eax, %eax
movq %rax, 0x48(%r15)
movq %rax, 0x58(%r12)
leaq 0x10b56d(%rip), %rdx    # 0x3d8873
movq 0x10(%rsp), %rbx
movq %rbx, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
leaq 0x70(%rsp), %rdx
movq %rbx, %rdi
movq %r12, %rsi
callq 0x2af648
movq %r15, 0x58(%r12)
testl %eax, %eax
jne 0x2cd674
movq %r14, %rdi
movl $0x25, %esi
movq 0xa0(%rsp), %rbx
movl %ebx, %edx
movq 0x60(%rsp), %rcx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, %ebp
movq %r14, %rdi
movl $0x80, %esi
movq 0x68(%rsp), %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq 0x8(%rsp), %rax
testq %rax, %rax
movl %ebp, (%rsp)
je 0x2cd55a
movl (%rax), %ecx
incl %ecx
movq %r14, %rdi
movl $0x59, %esi
movl %ebx, %edx
movl 0x3c(%rsp), %r8d
jmp 0x2cd56b
leaq 0x10aca6(%rip), %rcx    # 0x3d8045
leaq 0x10b470(%rip), %rdx    # 0x3d8816
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
leaq 0x70(%rsp), %rdx
movq %rbp, %rdi
movq %r15, %rsi
callq 0x2af648
movl %eax, %r14d
movq 0x50(%r15), %rax
movq %rax, 0x8(%rsp)
movq %r12, 0x50(%r15)
movq $0x0, 0x48(%r15)
cmpb $-0x7c, (%r15)
jne 0x2cd3f8
movswl 0x2(%r15), %edi
movswl 0x2(%r12), %esi
callq 0x2d31ea
movw %ax, 0x2(%r15)
movq 0x60(%r15), %rsi
testq %rsi, %rsi
je 0x2cd40b
movq 0x18(%rsp), %rdi
callq 0x2a6164
movq %rbx, 0x60(%r15)
movq $0x0, 0x8(%r15)
cmpb $0x1, (%rsp)
movq 0x8(%rsp), %r12
je 0x2cda1c
movq 0x18(%rsp), %rax
cmpb $0x0, 0x61(%rax)
jne 0x2cda1c
movq %r14, (%rsp)
movl 0x44(%rbp), %r14d
leal -0x1(%r14), %r12d
addl $-0x2, %r14d
movl %r14d, 0x44(%rbp)
movq %rbp, %rdi
movq %r15, %rsi
movl %r12d, %edx
callq 0x2cdeab
movq %r13, %rdi
movl $0x25, %esi
movq 0x30(%rsp), %rbx
movl %ebx, %edx
movl %r12d, %ecx
movq %r12, 0x50(%rsp)
xorl %r8d, %r8d
callq 0x2a83e1
movl 0x90(%r13), %eax
movl %eax, 0x40(%rsp)
leaq 0xb0(%rsp), %r9
movq %rbp, %rdi
movq %r15, %rsi
movl %ebx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
pushq %r12
pushq %r14
callq 0x2d04ff
addq $0x10, %rsp
movq %r13, %rdi
movl %r14d, %esi
movq (%rsp), %r14
callq 0x2bfa39
movq %r13, %rdi
movl $0x5, %esi
movl %ebx, %edx
movl 0x40(%rsp), %ecx
movq 0x8(%rsp), %r12
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movq 0x50(%rsp), %rsi
callq 0x2bfa39
movq %r13, %rdi
movl $0x74, %esi
movl %ebx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
jmp 0x2cda1c
movq %r14, 0x30(%rsp)
leal 0x1(%r14), %ebx
xorl %r14d, %r14d
movq %r13, %rdi
movl $0x64, %esi
movl %ebx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, 0x18(%r15)
movq %r14, 0x50(%r15)
movq 0x60(%r15), %rax
movq %rax, (%rsp)
movq %r14, 0x60(%r15)
movl %ebx, 0x40(%rsp)
movl %ebx, 0x74(%rsp)
movb (%r15), %al
addb $0x7b, %al
cmpb $0x2, %al
ja 0x2cd75c
movzbl %al, %eax
leaq 0x1eadc2(%rip), %rcx    # 0x4b8308
movq (%rcx,%rax,8), %rcx
jmp 0x2cd763
movl $0x7, %r14d
jmp 0x2cc465
movq %r14, %rdi
movl $0x7e, %esi
movl %ebx, %edx
movl 0x3c(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r14, %rdi
movl $0x7a, %esi
movl %ebx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r14, %r12
movq 0x10(%rsp), %r14
movl 0x44(%r14), %ebx
decl %ebx
movl %ebx, 0x44(%r14)
movl 0x58(%rsp), %edx
testl %edx, %edx
movq 0x60(%rsp), %rbp
jle 0x2cd5b8
movq %r12, %rdi
movl $0x30, %esi
movl %ebx, %ecx
movl $0x1, %r8d
callq 0x2a83e1
leaq 0xb0(%rsp), %r9
movq %r14, %rdi
movq %r15, %rsi
movq 0x68(%rsp), %rdx
xorl %ecx, %ecx
xorl %r8d, %r8d
pushq %rbp
pushq %rbx
callq 0x2d04ff
addq $0x10, %rsp
movl 0x2c(%rsp), %edx
testl %edx, %edx
je 0x2cd5f5
movq %r12, %rdi
movl $0x3b, %esi
movl %ebp, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r12, %rdi
movl %ebx, %esi
callq 0x2bfa39
testb $0x8, 0x4(%r15)
jne 0x2cd63f
movq $0x0, 0x50(%r15)
leaq 0x10b28e(%rip), %rdx    # 0x3d88a3
movq %r14, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
leaq 0x70(%rsp), %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x2af648
movq 0x40(%rsp), %rax
movq %rax, 0x50(%r15)
jmp 0x2cd650
leaq 0x10b233(%rip), %rsi    # 0x3d8879
movq %r14, %rdi
xorl %eax, %eax
callq 0x27b48d
movl (%rsp), %ecx
movq 0x30(%rsp), %rbx
movq %rbx, %rdi
movl $0xb, %esi
xorl %edx, %edx
xorl %r8d, %r8d
callq 0x2a83e1
movq %rbx, %rdi
movl %ebp, %esi
callq 0x2bfa39
movq 0x48(%r15), %rsi
testq %rsi, %rsi
movq 0x10(%rsp), %rbp
je 0x2cd68b
movq (%rbp), %rdi
callq 0x2a65a3
movq 0x8(%rsp), %rax
movq %rax, 0x48(%r15)
movq 0x50(%rsp), %rax
movq %rax, 0x60(%r15)
xorl %r12d, %r12d
xorl %r14d, %r14d
movq 0x20(%rsp), %rbx
cmpl $0x0, 0x30(%rbp)
jne 0x2cd6b5
testb $0x20, 0x4(%r15)
jne 0x2cd6e1
movq 0x18(%rsp), %rdi
movq 0xbc(%rsp), %rax
movq %rax, 0xc(%rbx)
testq %r12, %r12
je 0x2cc465
movq %r12, %rsi
movl $0x1, %edx
callq 0x2a62e6
jmp 0x2cc465
movq %r12, 0x8(%rsp)
movq 0x20(%r15), %rax
movl (%rax), %ebx
movq 0x18(%rsp), %rdi
movl %ebx, %esi
movl $0x1, %edx
callq 0x2bcb86
testq %rax, %rax
je 0x2cd747
movq %rax, %r12
movq %r14, (%rsp)
testl %ebx, %ebx
jle 0x2cda48
xorl %r14d, %r14d
movq %rbp, %rdi
movq %r15, %rsi
movl %r14d, %edx
callq 0x2d3241
movq %rax, 0x20(%r12,%r14,8)
testq %rax, %rax
jne 0x2cd73a
movq 0x18(%rsp), %rax
movq 0x10(%rax), %rax
movq %rax, 0x20(%r12,%r14,8)
incq %r14
cmpl %r14d, %ebx
jne 0x2cd714
jmp 0x2cda43
movl $0x7, %r14d
movq 0x20(%rsp), %rbx
movq 0x18(%rsp), %rdi
jmp 0x2cda39
leaq 0x10a8e2(%rip), %rcx    # 0x3d8045
leaq 0x10b0ac(%rip), %rdx    # 0x3d8816
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
leaq 0x70(%rsp), %rdx
movq %rbp, %rdi
movq %r15, %rsi
callq 0x2af648
movl %eax, %r14d
movq 0x50(%r15), %rax
movq %rax, 0x8(%rsp)
movq %r12, 0x50(%r15)
movzwl 0x2(%r12), %eax
cmpw %ax, 0x2(%r15)
jle 0x2cd7ab
movw %ax, 0x2(%r15)
movq 0x60(%r15), %rsi
testq %rsi, %rsi
je 0x2cd7be
movq 0x18(%rsp), %rdi
callq 0x2a6164
movq (%rsp), %rax
movq %rax, 0x60(%r15)
testl %r14d, %r14d
movq 0x8(%rsp), %r12
jne 0x2cda1c
movq %r14, (%rsp)
movl 0x44(%rbp), %ebx
leal -0x1(%rbx), %r12d
addl $-0x2, %ebx
movl %ebx, 0x44(%rbp)
movq %rbp, %rdi
movq %r15, %rsi
movl %r12d, %edx
callq 0x2cdeab
movq %r13, %rdi
movl $0x25, %esi
movq 0x30(%rsp), %rdx
movl %r12d, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movb 0x1f(%rbp), %al
testb %al, %al
je 0x2cd917
decb %al
movb %al, 0x1f(%rbp)
movzbl %al, %eax
movl 0xd4(%rbp,%rax,4), %r14d
jmp 0x2cd922
movl $0x0, 0x8(%rsp)
leaq 0x10a7f0(%rip), %rdx    # 0x3d802a
movq %rbp, %rdi
movl $0x1, %esi
xorl %eax, %eax
callq 0x2c1741
leaq 0xb0(%rsp), %rdx
movq %rbp, %rdi
movq %r15, %rsi
callq 0x2af648
movl %eax, %r14d
movq 0x50(%r15), %rbx
movq %r12, 0x50(%r15)
movswl 0x2(%r15), %edi
movswl 0x2(%r12), %esi
callq 0x2d31ea
movw %ax, 0x2(%r15)
movq 0x60(%r12), %rax
testq %rax, %rax
je 0x2cd8cc
movq 0x10(%rax), %rdi
movq %r14, %r12
leaq 0x70(%rsp), %r14
movq %r14, %rsi
callq 0x2c95b7
testl %eax, %eax
setne %cl
movl (%r14), %eax
movq %r12, %r14
testl %eax, %eax
setg %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0x2cd8cc
movl %eax, %edi
movzwl 0x2(%r15), %ebp
callq 0x29d44f
cmpw %ax, %bp
movq 0x10(%rsp), %rbp
jle 0x2cd8cc
movw %ax, 0x2(%r15)
movl 0x8(%rsp), %edx
testl %edx, %edx
movq %rbx, %r12
je 0x2cda1c
movl 0x90(%r13), %eax
movq (%r13), %rcx
cmpb $0x0, 0x61(%rcx)
je 0x2cd8f5
leaq 0x1f1595(%rip), %rcx    # 0x4bee88
jmp 0x2cd90f
leal -0x1(%rax), %ecx
testl %edx, %edx
cmovnsl %edx, %ecx
movslq %ecx, %rcx
leaq (%rcx,%rcx,2), %rcx
shlq $0x3, %rcx
addq 0x88(%r13), %rcx
movl %eax, 0x8(%rcx)
jmp 0x2cda1c
movl 0x38(%rbp), %r14d
incl %r14d
movl %r14d, 0x38(%rbp)
movq %r13, %rdi
movl $0x7e, %esi
movq 0x30(%rsp), %rdx
movl %r14d, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movl %eax, 0x50(%rsp)
movq %r13, %rdi
movl $0x1d, %esi
movl 0x40(%rsp), %edx
movl %ebx, %ecx
movl %r14d, %r8d
callq 0x2a83e1
movq (%r13), %rcx
cmpb $0x0, 0x61(%rcx)
jne 0x2cd978
movq 0x88(%r13), %rcx
cltq
leaq (%rax,%rax,2), %rax
movb $-0x3, 0x1(%rcx,%rax,8)
movl $0x0, 0x10(%rcx,%rax,8)
testl %r14d, %r14d
je 0x2cd995
movzbl 0x1f(%rbp), %eax
cmpq $0x7, %rax
ja 0x2cd995
leal 0x1(%rax), %ecx
movb %cl, 0x1f(%rbp)
movl %r14d, 0xd4(%rbp,%rax,4)
leaq 0xb0(%rsp), %r9
movq %rbp, %rdi
movq %r15, %rsi
movq 0x30(%rsp), %r14
movl %r14d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
pushq %r12
pushq %rbx
callq 0x2d04ff
addq $0x10, %rsp
movq %r13, %rdi
movl %ebx, %esi
callq 0x2bfa39
movq %r13, %rdi
movl $0x5, %esi
movl %r14d, %edx
movl 0x50(%rsp), %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl %r12d, %esi
callq 0x2bfa39
movq %r13, %rdi
movl $0x74, %esi
movl 0x40(%rsp), %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rdi
movl $0x74, %esi
movl %r14d, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq (%rsp), %r14
movq 0x8(%rsp), %r12
cmpq $0x0, 0x58(%r15)
movq 0x20(%rsp), %rbx
jne 0x2cd6a8
movq %rbp, %rdi
callq 0x2cdad7
jmp 0x2cd6a8
movq 0x8(%rsp), %r12
jmp 0x2cd6ba
testq %r15, %r15
je 0x2cdab1
movb $0x1, %bpl
xorl %r14d, %r14d
movslq 0x14(%r15,%r14,4), %rsi
testq %rsi, %rsi
js 0x2cdaab
movq (%r13), %rax
cmpb $0x0, 0x61(%rax)
je 0x2cda6b
leaq 0x1f141f(%rip), %rax    # 0x4bee88
jmp 0x2cda7a
leaq (%rsi,%rsi,2), %rax
shlq $0x3, %rax
addq 0x88(%r13), %rax
movl %ebx, 0x8(%rax)
incl (%r12)
movq %r13, %rdi
movq %r12, %rdx
movl $0xfffffff7, %ecx       # imm = 0xFFFFFFF7
callq 0x27b778
movl $0xffffffff, 0x14(%r15,%r14,4) # imm = 0xFFFFFFFF
movl $0x1, %r14d
testb $0x1, %bpl
movl $0x0, %ebp
jne 0x2cda4e
movq 0x50(%r15), %r15
jmp 0x2cda43
decl (%r12)
jne 0x2cdac4
movq 0x10(%r12), %rdi
movq %r12, %rsi
callq 0x282904
movq 0x20(%rsp), %rbx
movq 0x18(%rsp), %rdi
movq (%rsp), %r14
jmp 0x2cda39