// File: /workspace/github_cpp_makefile_star2_O3/schneebergerlab[P]GameteBinning/asPollinator_1.0.cpp
// Function: get_break_pos(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, unsigned long*, double*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::map<unsigned long, ALLELE, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, ALLELE>>>)
string get_break_pos(string           poPat, 
                     string          pmflag,
                     int           pollenid,
                     unsigned long*   leftp, 
                     double*          score,
                     string                     contigname,
                     map<unsigned long, ALLELE> contigmarker)
{
    // used after 20191101
    // poPat: is the pollen PM pattern sequence
    // leftp : would be the i-th   marker position along the contig
    // rightp: would be the i+1-th marker position along the contig
    // score : would be score for the reported co
    // minimum number of markers hard-coded: at least 3
    //
    string pmstring = "";
    string poPatbk  = poPat;
    poPatbk.erase(std::remove(poPatbk.begin(), poPatbk.end(), 'u'), poPatbk.end()); // remove non-effective marekers with value: 'u'
    if(poPatbk.size()==0) 
    {
        pmstring = "UU";                // not sure on co
        *leftp   = 0;
        *score   = 0;
        cout << "   Check2rm: " << poPat << " ---- determined as "  << pmstring << " for pollen " << pollenid << "_x\t0_" << pmflag 
             << " (no effective markers) "                          << endl; 
        return pmstring;
    }
    if(poPatbk.size()==1)
    {
        if(poPatbk.compare("M")==0)
        {
            pmstring = "MM";
        }else
        if(poPatbk.compare("P")==0)
        {
            pmstring = "PP";
        }else ;
        *leftp   = 0; // no co
        *score   = 0; // no co     
        cout << "   Check2rm: " << poPat  << " ---- determined as "  << pmstring << " for pollen " << pollenid << "_x\t0_" << pmflag 
             << " ( 1 effective marker) "                            << endl; 
        return pmstring;  
    }
    //
    *score        = 0.0;
    size_t c1Lef  = 0;   // Left  P cnt for highest score
    size_t c2Lef  = 0;   // Left  M cnt for highest score
    size_t c1Rig  = 0;   // right P cnt for highest score
    size_t c2Rig  = 0;   // right M cnt for highest score
    for(size_t mi = 1; mi <= poPat.size()-1; mi ++) // later control on number of markers, and no need checking all pos.
    {
        string strLef = poPat.substr(0, mi); // val @ pos of 0,...,mi-1
        string strRig = poPat.substr(mi);    // val @ pos of mi,mi+1,...
        // current break point: note: 'u' excluded from consideration
        size_t c1Leftmp  = std::count(strLef.begin(), strLef.end(), 'P'); // Left  P
        size_t c2Leftmp  = std::count(strLef.begin(), strLef.end(), 'M'); // Left  M
        size_t c1Rigtmp  = std::count(strRig.begin(), strRig.end(), 'P'); // Right P
        size_t c2Rigtmp  = std::count(strRig.begin(), strRig.end(), 'M'); // Right M
        //
        double af1Leftmp = (double)c1Leftmp*1.0/(c1Leftmp+c2Leftmp);
        double af2Leftmp = (double)c2Leftmp*1.0/(c1Leftmp+c2Leftmp);        
        double af1Rigtmp = (double)c1Rigtmp*1.0/(c1Rigtmp+c2Rigtmp);
        double af2Rigtmp = (double)c2Rigtmp*1.0/(c1Rigtmp+c2Rigtmp);
        //
        double score1 = af1Leftmp * af2Rigtmp; // left as P right as M
        double score2 = af2Leftmp * af1Rigtmp; // left as M right as P
        double scotmp = score1>score2?score1:score2;   
        if(scotmp >= *score)
        {
            *score  = scotmp;
            *leftp  = mi;  // (*leftp)-th marker is the left break marker, (*leftp+1) is the right break marker; 1-based positioning
            if(score1>score2)
            { 
                pmstring  = "PM";
            }else
            {
                pmstring  = "MP";
            }  
            //
            c1Lef  = c1Leftmp;
            c2Lef  = c2Leftmp;
            c1Rig  = c1Rigtmp;
            c2Rig  = c2Rigtmp;                     
        }
    }
    // 
    string checkfrom = "";
    // control on marker number: MuMMMMuuuuuuPuPPPu
    if(*score > 0 && poPatbk.size()<10)
    {
        // from cluster "M"; 
        if(pmflag.compare("M")    == 0)
        {
            // found "P" on left end;            
            if(pmstring.compare("PM") == 0)
            { 
               // at least 1 effective "P"; at least 1/3 "P"; first position was "P"
               if((poPatbk.substr(0, 1)).compare("P") == 0 && 
                  c1Lef > 0 && c1Lef >= poPatbk.size()/3.0)
                {
                    checkfrom = "1";
                }else
                {
                    pmstring  = "MM";
                    *leftp    = 0; // no co    
                    //*score  = 0; // no co   
                    checkfrom = "2";
                }
            }
            // found "P" on right end
            if(pmstring.compare("MP") == 0)
            {
               // at least 1 effective "P"; at least 1/3 "P"; last position was "P"                
                if((poPatbk.substr(poPatbk.size()-1, 1)).compare("P") == 0 && 
                   c1Rig > 0 && c1Rig >= poPatbk.size()/3.0)
                {
                    checkfrom = "3";
                }else
                {
                    pmstring = "MM";
                    *leftp   = 0; // no co
                    //*score  = 0; // no co 
                    checkfrom = "4";
                }
            }
        }
        // from cluster "P" 
        if(pmflag.compare("P")    == 0)
        {
            // but found "M" on left end
            if(pmstring.compare("MP") == 0 )
            {            
               // at least 1 effective "M"; at least 1/3 "M"; first position was "M"
                if((poPatbk.substr(0, 1)).compare("M") == 0 && 
                   c2Lef > 0 && c2Lef >= poPatbk.size()/3.0)
                {
                    checkfrom = "5";
                }else
                {
                    pmstring = "PP";
                    *leftp   = 0; // no co
                    //*score  = 0; // no co    
                    checkfrom = "6";
                }
            }
            // but found "M" on right end
            if(pmstring.compare("PM") == 0)
            {            
               // at least 1 effective "M"; at least 1/3 "M"; last position was "M"
                if((poPatbk.substr(poPatbk.size()-1, 1)).compare("M") == 0 &&     
                   c2Rig > 0 && c2Rig >= poPatbk.size()/3.0)
                {
                    checkfrom = "7";
                }else
                {
                    pmstring = "PP";
                    *leftp   = 0; // no co
                    //*score  = 0; // no co 
                    checkfrom = "8";
                }
            }
        }                
        //
    }else
    if(*score>=minCOscore && poPatbk.size()>10)
    {
        // from cluster "M" 
        if(pmflag.compare("M")    == 0)
        {        
            // but found "P" on left end 
            if(pmstring.compare("PM") == 0)
            {            
                // and at least 5 effective "P" and first position was "P"
                if((poPatbk.substr(0, 1)).compare("P") == 0 && c1Lef >= 5 )
                {
                    checkfrom = "9";
                }else
                {
                    pmstring = "MM";
                    *leftp   = 0;  // no co
                    //*score  = 0; // no co
                    checkfrom = "10";
                }
            }
            // but found "P" on right end
            if(pmstring.compare("MP") == 0)
            {
                // and at least 5 effective "P" and last position was "P"
                if((poPatbk.substr(poPatbk.size()-1, 1)).compare("P") == 0 && c1Rig >= 5 )
                {
                    checkfrom = "11";
                }else
                {
                    pmstring = "MM";
                    *leftp   = 0;  // no co
                    //*score  = 0; // no co 
                    checkfrom = "12";
                }
            }
        }
        // from cluster "P"
        if(pmflag.compare("P")    == 0)
        {        
            // but found "M" on left end 
            if(pmstring.compare("MP") == 0)
            {            
                // and at least 5 effective "M" and first position was "M"
                if((poPatbk.substr(0, 1)).compare("M") == 0 && c2Lef >= 5)
                {
                    checkfrom = "13";
                }else
                {
                    pmstring = "PP";
                    *leftp   = 0; // no co
                    //*score  = 0; // no co
                    checkfrom = "14";
                }
            }
            // from cluster "P" but found "M" on left end and effective last  position was "M"
            if(pmstring.compare("PM") == 0)
            {            
                if((poPatbk.substr(poPatbk.size()-1, 1)).compare("M") == 0 && c2Rig >= 5)
                {
                    ;
                }else
                {
                    pmstring = "PP";
                    *leftp   = 0; // no co
                    //*score  = 0; // no co
                    checkfrom = "15";
                }
            }
        }       
    }else
    {
        if(pmflag.compare("M") == 0)
        {
            pmstring     = "MM";
            checkfrom = "16";
        }else
        if(pmflag.compare("P") == 0)
        {
            pmstring     = "PP";
            checkfrom = "17";
        }
        *leftp   = 0; // no co
        //*score = 0; // no co  
    }
    //
    cout << "   Check2rm: " << poPat  << " ---- determined as "  << pmstring << " for pollen " << pollenid << "_x\t0_" << pmflag 
         << " (CO after "   << *leftp << "th marker: score "     << *score   << " - case "     << checkfrom << " ) "; // *** 
    // output co interval
    if(*leftp != 0)
    {
        int leftindex  = *leftp-1;
        while(leftindex>0)
        {
            if(poPat.substr(leftindex, 1).compare("u") == 0)
            {
                leftindex --;
            }else
            {
                break;
            }
        }
        int rightindex = *leftp;
        while(rightindex<poPat.size()-1)
        {
            if(poPat.substr(rightindex, 1).compare("u") == 0)
            {
                rightindex ++;
            }else
            {
                break;
            }
        }
        // output CO real positions of markers: increase to 1-based positioning <= leftindex+1; real position in poPat
        unsigned long leftmarker  = recover_real_marker_pos(leftindex+1,  contigmarker);
        unsigned long rightmarker = recover_real_marker_pos(rightindex+1, contigmarker);
        cout << " (CO interval " 
             << contigname 
             << " "
             << leftindex+1  << "th.mkr=" << leftmarker 
             << "-"
             << rightindex+1 << "th.mkr=" << rightmarker
             << ", size="
             << rightmarker - leftmarker + 1 << ")"
             << endl;
    }else
    {
        cout <<  endl; // to end ***
    }
    return pmstring;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x158, %rsp            # imm = 0x158
movq %r9, 0x38(%rsp)
movq %r8, 0x10(%rsp)
movl %ecx, %ebp
movq %rdx, %r15
movq %rsi, %r14
leaq 0x10(%rdi), %rbx
movq %rbx, (%rdi)
leaq 0x9a48(%rip), %rdx      # 0x19ec9
movq %rdi, 0x8(%rsp)
movq %rdx, %rsi
callq 0x16550
leaq 0x78(%rsp), %rax
movq %rax, -0x10(%rax)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
leaq 0x68(%rsp), %rdi
callq 0x164ba
movq 0x68(%rsp), %rdi
movq 0x70(%rsp), %rsi
addq %rdi, %rsi
leaq 0x48(%rsp), %rdx
movb $0x75, (%rdx)
callq 0x17795
movq %rax, %rcx
subq 0x68(%rsp), %rcx
movq %rcx, 0x70(%rsp)
movb $0x0, (%rax)
movq 0x70(%rsp), %rax
cmpq $0x1, %rax
je 0x105e9
testq %rax, %rax
jne 0x10627
movq 0x8(%rsp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x95b8(%rip), %rcx      # 0x19ab5
movl $0x2, %r8d
xorl %esi, %esi
callq 0x33a0
xorl %eax, %eax
movq 0x10(%rsp), %rcx
movq %rax, (%rcx)
movq 0x38(%rsp), %rcx
movq %rax, (%rcx)
movq 0x10ab5(%rip), %rdi     # 0x20fd8
leaq 0x961e(%rip), %rsi      # 0x19b48
movl $0xd, %edx
callq 0x32f0
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq 0x10a96(%rip), %rdi     # 0x20fd8
callq 0x32f0
movq %rax, %r14
leaq 0x9605(%rip), %rsi      # 0x19b56
movl $0x14, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x8(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %r14, %rdi
callq 0x32f0
movq %rax, %r14
leaq 0x9621(%rip), %rsi      # 0x19b9d
movl $0xc, %edx
movq %rax, %rdi
callq 0x32f0
movq %r14, %rdi
movl %ebp, %esi
callq 0x3430
movq %rax, %r14
leaq 0x960d(%rip), %rsi      # 0x19baa
movl $0x5, %edx
movq %rax, %rdi
callq 0x32f0
movq (%r15), %rsi
movq 0x8(%r15), %rdx
movq %r14, %rdi
callq 0x32f0
movq %rax, %r14
leaq 0x95ed(%rip), %rsi      # 0x19bb0
movl $0x18, %edx
movq %rax, %rdi
callq 0x32f0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3260
jmp 0x10bfb
leaq 0x95ab(%rip), %rsi      # 0x19b9b
leaq 0x68(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
je 0x10b04
leaq 0x9579(%rip), %rsi      # 0x19b82
leaq 0x68(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10b21
leaq 0x95aa(%rip), %rcx      # 0x19bcc
jmp 0x10b0b
movl %ebp, 0xcc(%rsp)
movq %r15, 0x40(%rsp)
movq %rbx, 0x88(%rsp)
movq 0x38(%rsp), %rax
movq $0x0, (%rax)
cmpq $0x1, 0x8(%r14)
movq %r14, 0xc0(%rsp)
jne 0x10682
movq $0x0, 0xb0(%rsp)
movq $0x0, 0x90(%rsp)
movq $0x0, 0xa0(%rsp)
xorl %r15d, %r15d
jmp 0x108f5
movl $0x1, %ebp
xorl %r15d, %r15d
movq $0x0, 0xa0(%rsp)
movq $0x0, 0x90(%rsp)
movq $0x0, 0xb0(%rsp)
leaq 0x48(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x32b0
leaq 0x18(%rsp), %rdi
movq %r14, %rsi
movq %rbp, %rdx
movq $-0x1, %rcx
callq 0x32b0
movq 0x50(%rsp), %rax
testq %rax, %rax
je 0x1071c
movq 0x48(%rsp), %rcx
xorl %edx, %edx
xorl %r12d, %r12d
xorl %esi, %esi
cmpb $0x50, (%rcx,%rdx)
sete %sil
addq %rsi, %r12
incq %rdx
cmpq %rdx, %rax
jne 0x106eb
xorl %edx, %edx
xorl %r13d, %r13d
xorl %esi, %esi
cmpb $0x4d, (%rcx,%rdx)
sete %sil
addq %rsi, %r13
incq %rdx
cmpq %rdx, %rax
jne 0x10705
jmp 0x10722
xorl %r12d, %r12d
xorl %r13d, %r13d
movq 0x20(%rsp), %rax
testq %rax, %rax
je 0x10766
movq 0x18(%rsp), %rcx
xorl %edx, %edx
xorl %ebx, %ebx
xorl %esi, %esi
cmpb $0x50, (%rcx,%rdx)
sete %sil
addq %rsi, %rbx
incq %rdx
cmpq %rdx, %rax
jne 0x10735
xorl %edx, %edx
xorl %r14d, %r14d
xorl %esi, %esi
cmpb $0x4d, (%rcx,%rdx)
sete %sil
addq %rsi, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x1074f
jmp 0x1076b
xorl %ebx, %ebx
xorl %r14d, %r14d
movq %r14, %xmm0
movq %r12, %xmm1
movdqa %xmm1, %xmm2
punpcklqdq %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0]
movdqa %xmm2, %xmm0
movq %r13, %xmm3
shufps $0xe4, %xmm2, %xmm3     # xmm3 = xmm3[0,1],xmm2[2,3]
movdqa 0x88ae(%rip), %xmm5     # 0x19040
pand %xmm5, %xmm2
movdqa 0x88b2(%rip), %xmm6     # 0x19050
por %xmm6, %xmm2
psrlq $0x20, %xmm0
movdqa 0x88b1(%rip), %xmm7     # 0x19060
por %xmm7, %xmm0
movapd 0x88b4(%rip), %xmm8     # 0x19070
subpd %xmm8, %xmm0
addpd %xmm2, %xmm0
movq %r13, %xmm2
movq %rbx, %xmm4
punpcklqdq %xmm4, %xmm1    # xmm1 = xmm1[0],xmm4[0]
paddq %xmm3, %xmm1
punpcklqdq %xmm4, %xmm2    # xmm2 = xmm2[0],xmm4[0]
movdqa %xmm2, %xmm3
pand %xmm5, %xmm3
por %xmm6, %xmm3
psrlq $0x20, %xmm2
por %xmm7, %xmm2
subpd %xmm8, %xmm2
addpd %xmm3, %xmm2
movdqa %xmm1, %xmm3
pand %xmm5, %xmm3
por %xmm6, %xmm3
psrlq $0x20, %xmm1
por %xmm7, %xmm1
subpd %xmm8, %xmm1
addpd %xmm3, %xmm1
divpd %xmm1, %xmm2
divpd %xmm1, %xmm0
movapd %xmm0, %xmm1
unpcklpd %xmm2, %xmm1            # xmm1 = xmm1[0],xmm2[0]
unpckhpd %xmm2, %xmm0            # xmm0 = xmm0[1],xmm2[1]
mulpd %xmm1, %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
movapd %xmm0, %xmm2
maxsd %xmm1, %xmm2
movq 0x38(%rsp), %rax
ucomisd (%rax), %xmm2
jb 0x108a2
ucomisd %xmm1, %xmm0
movq 0x38(%rsp), %rax
movsd %xmm2, (%rax)
movq 0x10(%rsp), %rax
movq %rbp, (%rax)
movq 0x8(%rsp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x937b(%rip), %rcx      # 0x19bea
leaq 0x9371(%rip), %rax      # 0x19be7
cmovaq %rax, %rcx
movl $0x2, %r8d
xorl %esi, %esi
callq 0x33a0
movq %r14, 0xb0(%rsp)
movq %rbx, 0x90(%rsp)
movq %r13, 0xa0(%rsp)
movq %r12, %r15
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x108be
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
movq 0xc0(%rsp), %r14
je 0x108e2
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x3290
incq %rbp
movq 0x8(%r14), %rax
decq %rax
cmpq %rax, %rbp
jbe 0x106ae
leaq 0x58(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x95c4(%rip), %rdx      # 0x19ec9
leaq 0x48(%rsp), %rdi
movq %rdx, %rsi
callq 0x16550
movl 0xcc(%rsp), %ebp
movq 0x38(%rsp), %rax
movsd (%rax), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
seta %cl
movq 0x70(%rsp), %rax
cmpq $0xa, %rax
setb %dl
andb %cl, %dl
cmpb $0x1, %dl
jne 0x10a4e
leaq 0x9250(%rip), %rsi      # 0x19b9b
movq 0x40(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10e26
leaq 0x9283(%rip), %rsi      # 0x19be7
movq 0x8(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10ce6
leaq 0x18(%rsp), %rdi
leaq 0x68(%rsp), %rsi
movl $0x1, %ecx
xorl %edx, %edx
callq 0x32b0
leaq 0x91ef(%rip), %rsi      # 0x19b82
leaq 0x18(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10c9d
testq %r15, %r15
je 0x10c9d
movq %r15, %xmm0
movq 0x8655(%rip), %xmm1     # 0x19010
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x8659(%rip), %xmm2     # 0x19020
subpd %xmm2, %xmm0
movq 0x70(%rsp), %xmm3
punpckldq %xmm1, %xmm3    # xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
subpd %xmm2, %xmm3
movapd %xmm3, %xmm2
unpckhpd %xmm3, %xmm2            # xmm2 = xmm2[1],xmm3[1]
addsd %xmm3, %xmm2
divsd 0x86bb(%rip), %xmm2     # 0x190b0
addsd %xmm0, %xmm1
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10a38
movq 0x28(%rsp), %rsi
incq %rsi
movapd %xmm1, 0xd0(%rsp)
movapd %xmm2, 0xe0(%rsp)
callq 0x3290
movapd 0xe0(%rsp), %xmm2
movapd 0xd0(%rsp), %xmm1
ucomisd %xmm2, %xmm1
jb 0x10cb8
leaq 0x91ac(%rip), %rsi      # 0x19bf5
jmp 0x10cdc
ucomisd 0x1080a(%rip), %xmm0    # 0x21260
setae %cl
cmpq $0xb, %rax
setae %bl
andb %cl, %bl
leaq 0x9132(%rip), %rsi      # 0x19b9b
movq 0x40(%rsp), %rdi
callq 0x30b0
cmpb $0x1, %bl
jne 0x10c13
testl %eax, %eax
jne 0x1118a
leaq 0x915c(%rip), %rsi      # 0x19be7
movq 0x8(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x110da
leaq 0x18(%rsp), %rdi
leaq 0x68(%rsp), %rsi
movl $0x1, %ecx
xorl %edx, %edx
callq 0x32b0
leaq 0x90c8(%rip), %rsi      # 0x19b82
leaq 0x18(%rsp), %r12
movq %r12, %rdi
callq 0x30b0
testl %eax, %eax
sete %al
cmpq $0x5, %r15
setae %bl
andb %al, %bl
movq (%r12), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x10af0
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
testb %bl, %bl
je 0x110ac
leaq 0x90f0(%rip), %rsi      # 0x19bef
jmp 0x110d0
leaq 0x90be(%rip), %rcx      # 0x19bc9
movq 0x8(%rsp), %rdi
movq 0x8(%rdi), %rdx
movl $0x2, %r8d
xorl %esi, %esi
callq 0x33a0
xorl %eax, %eax
movq 0x10(%rsp), %rcx
movq %rax, (%rcx)
movq 0x38(%rsp), %rcx
movq %rax, (%rcx)
movq 0x1049e(%rip), %rdi     # 0x20fd8
leaq 0x9007(%rip), %rsi      # 0x19b48
movl $0xd, %edx
callq 0x32f0
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq 0x1047f(%rip), %rdi     # 0x20fd8
callq 0x32f0
movq %rax, %r14
leaq 0x8fee(%rip), %rsi      # 0x19b56
movl $0x14, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x8(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %r14, %rdi
callq 0x32f0
movq %rax, %r14
leaq 0x900a(%rip), %rsi      # 0x19b9d
movl $0xc, %edx
movq %rax, %rdi
callq 0x32f0
movq %r14, %rdi
movl %ebp, %esi
callq 0x3430
movq %rax, %r14
leaq 0x8ff6(%rip), %rsi      # 0x19baa
movl $0x5, %edx
movq %rax, %rdi
callq 0x32f0
movq (%r15), %rsi
movq 0x8(%r15), %rdx
movq %r14, %rdi
callq 0x32f0
movq %rax, %r14
leaq 0x8ff5(%rip), %rsi      # 0x19bcf
movl $0x17, %edx
movq %rax, %rdi
callq 0x32f0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3260
movsbl %al, %esi
movq %r14, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31b0
jmp 0x1173e
testl %eax, %eax
je 0x10c52
leaq 0x8f64(%rip), %rsi      # 0x19b82
movq 0x40(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10c8c
movq 0x8(%rsp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x8f90(%rip), %rcx      # 0x19bcc
movl $0x2, %r8d
xorl %esi, %esi
callq 0x33a0
leaq 0x8fb6(%rip), %rcx      # 0x19c06
jmp 0x10c76
movq 0x8(%rsp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x8f67(%rip), %rcx      # 0x19bc9
movl $0x2, %r8d
xorl %esi, %esi
callq 0x33a0
leaq 0x8f8d(%rip), %rcx      # 0x19c03
leaq 0x48(%rsp), %rdi
movq 0x8(%rdi), %rdx
movl $0x2, %r8d
xorl %esi, %esi
callq 0x33a0
movq 0x10(%rsp), %rax
movq $0x0, (%rax)
jmp 0x112f5
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10cb8
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
leaq 0x8f0a(%rip), %rsi      # 0x19bc9
movq 0x8(%rsp), %rdi
callq 0x3330
movq 0x10(%rsp), %rax
movq $0x0, (%rax)
leaq 0x8f1c(%rip), %rsi      # 0x19bf8
leaq 0x48(%rsp), %rdi
callq 0x3330
leaq 0x8efd(%rip), %rsi      # 0x19bea
movq 0x8(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10e26
leaq 0x68(%rsp), %rsi
movq 0x8(%rsi), %rdx
decq %rdx
leaq 0x18(%rsp), %rdi
movl $0x1, %ecx
callq 0x32b0
leaq 0x8e61(%rip), %rsi      # 0x19b82
leaq 0x18(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10ddd
cmpq $0x0, 0x90(%rsp)
je 0x10ddd
movsd 0x90(%rsp), %xmm0
movsd 0x82bd(%rip), %xmm1     # 0x19010
unpcklps %xmm1, %xmm0            # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x82c2(%rip), %xmm2     # 0x19020
subpd %xmm2, %xmm0
movsd 0x70(%rsp), %xmm3
unpcklps %xmm1, %xmm3            # xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
subpd %xmm2, %xmm3
movapd %xmm3, %xmm2
unpckhpd %xmm3, %xmm2            # xmm2 = xmm2[1],xmm3[1]
addsd %xmm3, %xmm2
divsd 0x8325(%rip), %xmm2     # 0x190b0
addsd %xmm0, %xmm1
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10dce
movq 0x28(%rsp), %rsi
incq %rsi
movapd %xmm1, 0x90(%rsp)
movapd %xmm2, 0xd0(%rsp)
callq 0x3290
movapd 0xd0(%rsp), %xmm2
movapd 0x90(%rsp), %xmm1
ucomisd %xmm2, %xmm1
jb 0x10df8
leaq 0x83c8(%rip), %rsi      # 0x191a3
jmp 0x10e1c
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10df8
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
leaq 0x8dca(%rip), %rsi      # 0x19bc9
movq 0x8(%rsp), %rdi
callq 0x3330
movq 0x10(%rsp), %rax
movq $0x0, (%rax)
leaq 0x8de2(%rip), %rsi      # 0x19bfe
leaq 0x48(%rsp), %rdi
callq 0x3330
leaq 0x8d55(%rip), %rsi      # 0x19b82
movq 0x40(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x112f5
leaq 0x8da4(%rip), %rsi      # 0x19bea
movq 0x8(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10f7a
leaq 0x18(%rsp), %rdi
leaq 0x68(%rsp), %rsi
movl $0x1, %ecx
xorl %edx, %edx
callq 0x32b0
leaq 0x8d26(%rip), %rsi      # 0x19b9b
leaq 0x18(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x10f31
cmpq $0x0, 0xa0(%rsp)
je 0x10f31
movsd 0xa0(%rsp), %xmm0
movsd 0x8169(%rip), %xmm1     # 0x19010
unpcklps %xmm1, %xmm0            # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x816e(%rip), %xmm2     # 0x19020
subpd %xmm2, %xmm0
movsd 0x70(%rsp), %xmm3
unpcklps %xmm1, %xmm3            # xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
subpd %xmm2, %xmm3
movapd %xmm3, %xmm2
unpckhpd %xmm3, %xmm2            # xmm2 = xmm2[1],xmm3[1]
addsd %xmm3, %xmm2
divsd 0x81d1(%rip), %xmm2     # 0x190b0
addsd %xmm0, %xmm1
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10f22
movq 0x28(%rsp), %rsi
incq %rsi
movapd %xmm1, 0xa0(%rsp)
movapd %xmm2, 0x90(%rsp)
callq 0x3290
movapd 0x90(%rsp), %xmm2
movapd 0xa0(%rsp), %xmm1
ucomisd %xmm2, %xmm1
jb 0x10f4c
leaq 0x8cd2(%rip), %rsi      # 0x19c01
jmp 0x10f70
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x10f4c
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
leaq 0x8c79(%rip), %rsi      # 0x19bcc
movq 0x8(%rsp), %rdi
callq 0x3330
movq 0x10(%rsp), %rax
movq $0x0, (%rax)
leaq 0x8c94(%rip), %rsi      # 0x19c04
leaq 0x48(%rsp), %rdi
callq 0x3330
leaq 0x8c66(%rip), %rsi      # 0x19be7
movq 0x8(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x112f5
leaq 0x68(%rsp), %rsi
movq 0x8(%rsi), %rdx
decq %rdx
leaq 0x18(%rsp), %rdi
movl $0x1, %ecx
callq 0x32b0
leaq 0x8be6(%rip), %rsi      # 0x19b9b
leaq 0x18(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x11074
cmpq $0x0, 0xb0(%rsp)
je 0x11074
movsd 0xb0(%rsp), %xmm0
movsd 0x8029(%rip), %xmm1     # 0x19010
unpcklps %xmm1, %xmm0            # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x802e(%rip), %xmm2     # 0x19020
subpd %xmm2, %xmm0
movsd 0x70(%rsp), %xmm3
unpcklps %xmm1, %xmm3            # xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
subpd %xmm2, %xmm3
movapd %xmm3, %xmm2
unpckhpd %xmm3, %xmm2            # xmm2 = xmm2[1],xmm3[1]
addsd %xmm3, %xmm2
divsd 0x8091(%rip), %xmm2     # 0x190b0
addsd %xmm0, %xmm1
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11062
movq 0x28(%rsp), %rsi
incq %rsi
movapd %xmm1, 0xb0(%rsp)
movapd %xmm2, 0xa0(%rsp)
callq 0x3290
movapd 0xa0(%rsp), %xmm2
movapd 0xb0(%rsp), %xmm1
ucomisd %xmm2, %xmm1
jb 0x1108f
leaq 0x8b98(%rip), %rsi      # 0x19c07
jmp 0x112eb
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1108f
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
leaq 0x8b36(%rip), %rsi      # 0x19bcc
movq 0x8(%rsp), %rdi
callq 0x3330
leaq 0x8b46(%rip), %rsi      # 0x19bed
jmp 0x112df
leaq 0x8b16(%rip), %rsi      # 0x19bc9
movq 0x8(%rsp), %rdi
callq 0x3330
movq 0x10(%rsp), %rax
movq $0x0, (%rax)
leaq 0x8b21(%rip), %rsi      # 0x19bf1
leaq 0x48(%rsp), %rdi
callq 0x3330
leaq 0x8b09(%rip), %rsi      # 0x19bea
movq 0x8(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x1118a
leaq 0x68(%rsp), %rsi
movq 0x8(%rsi), %rdx
decq %rdx
leaq 0x18(%rsp), %rdi
movl $0x1, %ecx
callq 0x32b0
leaq 0x8a6d(%rip), %rsi      # 0x19b82
leaq 0x18(%rsp), %r15
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
sete %al
cmpq $0x5, 0x90(%rsp)
setae %bl
andb %al, %bl
movq (%r15), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x1114f
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
testb %bl, %bl
je 0x1115c
leaq 0x8a9a(%rip), %rsi      # 0x19bf4
jmp 0x11180
leaq 0x8a66(%rip), %rsi      # 0x19bc9
movq 0x8(%rsp), %rdi
callq 0x3330
movq 0x10(%rsp), %rax
movq $0x0, (%rax)
leaq 0x8a77(%rip), %rsi      # 0x19bf7
leaq 0x48(%rsp), %rdi
callq 0x3330
leaq 0x89f1(%rip), %rsi      # 0x19b82
movq 0x40(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x112f5
leaq 0x8a40(%rip), %rsi      # 0x19bea
movq 0x8(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x1124e
leaq 0x18(%rsp), %rdi
leaq 0x68(%rsp), %rsi
movl $0x1, %ecx
xorl %edx, %edx
callq 0x32b0
leaq 0x89c2(%rip), %rsi      # 0x19b9b
leaq 0x18(%rsp), %r15
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
sete %al
cmpq $0x5, 0xa0(%rsp)
setae %bl
andb %al, %bl
movq (%r15), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x11213
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
testb %bl, %bl
je 0x11220
leaq 0x89dc(%rip), %rsi      # 0x19bfa
jmp 0x11244
leaq 0x89a5(%rip), %rsi      # 0x19bcc
movq 0x8(%rsp), %rdi
callq 0x3330
movq 0x10(%rsp), %rax
movq $0x0, (%rax)
leaq 0x89b9(%rip), %rsi      # 0x19bfd
leaq 0x48(%rsp), %rdi
callq 0x3330
leaq 0x8992(%rip), %rsi      # 0x19be7
movq 0x8(%rsp), %rdi
callq 0x30b0
testl %eax, %eax
jne 0x112f5
leaq 0x68(%rsp), %rsi
movq 0x8(%rsi), %rdx
decq %rdx
leaq 0x18(%rsp), %rdi
movl $0x1, %ecx
callq 0x32b0
leaq 0x8912(%rip), %rsi      # 0x19b9b
leaq 0x18(%rsp), %r15
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
sete %al
cmpq $0x5, 0xb0(%rsp)
setae %bl
andb %al, %bl
movq (%r15), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x112c3
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
testb %bl, %bl
jne 0x112f5
leaq 0x88fe(%rip), %rsi      # 0x19bcc
movq 0x8(%rsp), %rdi
callq 0x3330
leaq 0x8921(%rip), %rsi      # 0x19c00
movq 0x10(%rsp), %rax
movq $0x0, (%rax)
leaq 0x48(%rsp), %rdi
callq 0x3330
movq 0xfcdc(%rip), %rdi      # 0x20fd8
leaq 0x8845(%rip), %rsi      # 0x19b48
movl $0xd, %edx
callq 0x32f0
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq 0xfcbd(%rip), %r12      # 0x20fd8
movq %r12, %rdi
callq 0x32f0
movq %rax, %r15
leaq 0x8829(%rip), %rsi      # 0x19b56
movl $0x14, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x8(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %r15, %rdi
callq 0x32f0
movq %rax, %r15
leaq 0x8845(%rip), %rsi      # 0x19b9d
movl $0xc, %edx
movq %rax, %rdi
callq 0x32f0
movq %r15, %rdi
movl %ebp, %esi
callq 0x3430
movq %rax, %r15
leaq 0x8831(%rip), %rsi      # 0x19baa
movl $0x5, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x40(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %r15, %rdi
callq 0x32f0
movq %rax, %r15
leaq 0x8865(%rip), %rsi      # 0x19c09
movl $0xb, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x10(%rsp), %rax
movq (%rax), %rsi
movq %r15, %rdi
callq 0x31a0
movq %rax, %r15
leaq 0x884a(%rip), %rsi      # 0x19c15
movl $0x11, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x38(%rsp), %rax
movsd (%rax), %xmm0
movq %r15, %rdi
callq 0x33e0
movq %rax, %r15
leaq 0x8834(%rip), %rsi      # 0x19c27
movl $0x8, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x48(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq %r15, %rdi
callq 0x32f0
leaq 0x8817(%rip), %rsi      # 0x19c30
movl $0x3, %edx
movq %rax, %rdi
callq 0x32f0
movq 0x10(%rsp), %rax
movq (%rax), %r15
testq %r15, %r15
je 0x114bd
movl %r15d, %ebx
leal -0x1(%r15), %eax
movl %eax, %r14d
sarl $0x1f, %r14d
andl %eax, %r14d
incl %r14d
incl %r15d
decq %rbx
leaq 0x18(%rsp), %r13
leaq 0x8656(%rip), %rbp      # 0x19ab3
leal -0x2(%r15), %eax
testl %eax, %eax
jle 0x114ee
movl %ebx, %edx
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
movl $0x1, %ecx
movq %r13, %rdi
movq 0xc0(%rsp), %rsi
callq 0x32b0
movq %r13, %rdi
movq %rbp, %rsi
callq 0x30b0
movl %eax, %r12d
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x114b0
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
decl %r15d
decq %rbx
testl %r12d, %r12d
je 0x1145d
jmp 0x114f1
movq (%r12), %rax
addq -0x18(%rax), %r12
movq %r12, %rdi
movl $0xa, %esi
callq 0x3260
movsbl %al, %esi
movq 0xfafc(%rip), %rdi      # 0x20fd8
callq 0x3030
movq %rax, %rdi
callq 0x31b0
jmp 0x11722
movl %r14d, %r15d
movq 0x10(%rsp), %rax
movq (%rax), %r13
movslq %r13d, %rax
movq 0xc0(%rsp), %r14
movq 0x8(%r14), %rcx
decq %rcx
cmpq %rax, %rcx
jbe 0x1156e
leaq 0x18(%rsp), %rbp
leaq 0x8597(%rip), %r12      # 0x19ab3
movq %rax, %r13
movl $0x1, %ecx
movq %rbp, %rdi
movq %r14, %rsi
movq %r13, %rdx
callq 0x32b0
movq %rbp, %rdi
movq %r12, %rsi
callq 0x30b0
movl %eax, %ebx
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x1155b
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
testl %ebx, %ebx
jne 0x1156e
incq %r13
movq 0x8(%r14), %rax
decq %rax
cmpq %r13, %rax
ja 0x1151f
leaq 0x128(%rsp), %rdi
movq 0x198(%rsp), %rsi
callq 0x14e86
leaq 0x130(%rsp), %rbx
movq 0x10(%rbx), %rax
movl $0x1, %ebp
cmpl %ebp, %r15d
jne 0x1159d
movq 0x20(%rax), %r14
movq %rax, %rdi
callq 0x31c0
incl %ebp
cmpq %rbx, %rax
jne 0x11594
leaq 0x128(%rsp), %rdi
callq 0x156b2
leaq 0xf8(%rsp), %rdi
movq 0x198(%rsp), %rsi
callq 0x14e86
leal 0x1(%r13), %ebp
leaq 0x100(%rsp), %rbx
movq 0x10(%rbx), %rax
subl $0x1, %r13d
jae 0x115e8
movq 0x20(%rax), %r12
movq %rax, %rdi
callq 0x31c0
cmpq %rbx, %rax
jne 0x115de
leaq 0xf8(%rsp), %rdi
callq 0x156b2
movq 0xf9cf(%rip), %rdi      # 0x20fd8
leaq 0x8624(%rip), %rsi      # 0x19c34
movl $0xe, %edx
callq 0x32f0
movq 0x190(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq 0xf9a8(%rip), %rdi      # 0x20fd8
callq 0x32f0
movq %rax, %r13
leaq 0x85f3(%rip), %rsi      # 0x19c32
movl $0x1, %edx
movq %rax, %rdi
callq 0x32f0
movq %r13, %rdi
movl %r15d, %esi
callq 0x3430
movq %rax, %r15
leaq 0x85e2(%rip), %rsi      # 0x19c43
movl $0x7, %edx
movq %rax, %rdi
callq 0x32f0
movq %r15, %rdi
movq %r14, %rsi
callq 0x31a0
movq %rax, %r15
leaq 0x85c8(%rip), %rsi      # 0x19c4b
movl $0x1, %edx
movq %rax, %rdi
callq 0x32f0
movq %r15, %rdi
movl %ebp, %esi
callq 0x3430
movq %rax, %r15
leaq 0x859f(%rip), %rsi      # 0x19c43
movl $0x7, %edx
movq %rax, %rdi
callq 0x32f0
movq %r15, %rdi
movq %r12, %rsi
callq 0x31a0
movq %rax, %r15
leaq 0x8587(%rip), %rsi      # 0x19c4d
movl $0x7, %edx
movq %rax, %rdi
callq 0x32f0
subq %r14, %r12
incq %r12
movq %r15, %rdi
movq %r12, %rsi
callq 0x31a0
movq %rax, %r14
leaq 0x896f(%rip), %rsi      # 0x1a05d
movl $0x1, %edx
movq %rax, %rdi
callq 0x32f0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x3260
movsbl %al, %esi
movq %r14, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31b0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x1173e
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x3290
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x1175a
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x3290
movq 0x8(%rsp), %rax
addq $0x158, %rsp            # imm = 0x158
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x117bf
jmp 0x117bf
jmp 0x117bf
jmp 0x117bf
jmp 0x117bf
jmp 0x117bf
jmp 0x117bf
jmp 0x117bf
jmp 0x117bf
jmp 0x117e8
jmp 0x117e0
movq %rbx, 0x88(%rsp)
movq %rax, %r14
jmp 0x11807
jmp 0x117bf
movq %rax, %r14
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x117c2
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x3290
jmp 0x117c2
jmp 0x117bf
jmp 0x117bf
jmp 0x117e8
jmp 0x117bf
movq %rax, %r14
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x117eb
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x3290
jmp 0x117eb
movq %rbx, 0x88(%rsp)
movq %rax, %r14
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x11807
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x3290
movq 0x8(%rsp), %rax
movq (%rax), %rdi
cmpq 0x88(%rsp), %rdi
je 0x1182c
movq 0x88(%rsp), %rax
movq (%rax), %rsi
incq %rsi
callq 0x3290
movq %r14, %rdi
callq 0x3460