// File: /workspace/github_cpp_makefile_star2_O2/schneebergerlab[P]GameteBinning/asPollinator_1.0.cpp
// Function: correct_haplotype(std::map<int, POLLEN, std::less<int>, std::allocator<std::pair<int const, POLLEN>>>, std::map<int, POLLEN, std::less<int>, std::allocator<std::pair<int const, POLLEN>>>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
bool correct_haplotype(  map<int, POLLEN>                   pollens,
                         map<int, POLLEN>*                  pollens_corrected, 
                         string                             ctgid)
{
    // this is stage 1 correction: using pollen individuals to correct assembled m/paternal haplotypes -used
    /*
       for one contig:
       
       // parents
       AACTGATCTGTGTTCCAATAGCACACGGGGAGCACGGATTTGTTCGGACGTATCGAATGCA	0_m::matGT initial backbone
       GTGCATCGCACACCTTGGCGATGGTTCAAATATGTTAGCGATACTAAGTACGCTCTCGCAC	0_p::patGT initial backbone
       // pollens:
       NNNNNNNNNNNNNNNNNNNNANNNNNNNNNNNNNNTNNNNNNNNNNNNNNNNNNNNNGCCC	1_x
       NTGNNNNNNNCNNNNNNNCGANGGNNCNAATATGTTAGCGATNCTAAGTACGCTCTCGCAC	2_x
       NTGCATCNNNCNNNNNNNNNNNNNNNNNNNNNNNNTNNNNNNNNNNNNNNNNNNNNNNNCC	3_x
       GTGCATCGCACUCCTTGGCGATGGTTCANATNNGTTNNNNNNNNNNNNNNNNNNNNNNNNN	4_x
       NNNNNNNNNNNNNTCNAANNNCNNNNNNNNNNNANGNNNNNNNNNNNNNNNNNNNNNTGCA	5_x
       UUUCUUUUUUUUUCUUUUUUUUGUTTCAUAUUUGTUUUUUATACTAAGTACGCUUTCGCAC	6_x
       GUUCATCUUUCUUUUTGUUUUUUUUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUGUUUUUU	7_x
       NNNNNNNNNNCGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGNNN	8_x
       UANTGNNCTNNNNNNCNANNGNNNNNNAANNNNNCGGATTUGTNCGGACGNNTCGAAGUUU	9_x
       ANNNGATCTGUGTNNNNNTAGNACACNGNGNGCANGGATNTNNNCGNNNNNNNNNNNNNNN	10_x
       GTGCATCGCACUCCTTGGCGAUGGTTCAAATATGTTAGCGATACTAAGTACGCTCTCGCAC	11_x
       GUGCATCGCACUCCTTGGCGATGGTTCAAATATGTTAGCGATACTAAGTACGCTCTCGCUC	12_x
       GTGCATCGCACACCTTGGUUUTGGTTCUAAUUTGUTAGCGATACTAAGTACGCTCTCGCUC	13_x
       GNGCATCGCANACCTTGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNUC	14_x
       NNNNNNNNNGTGTTCCAATAGCACACNGGGAGCANGGATTTGNNNNNNNNNNNNNNNNNNN	15_x    
       
       struct POLLEN
       {
           string poSeq;   // seq at markers for pollen haplotype
           string poAll;   // over all, can be determined as 'M', 'P', 'MP', 'PM', or 'N'
           string poPat;   // string like MMMMMMppMMMMMMMpMMMMMMMM: indicating parental genotypes
           vector<unsigned long> mkrpos; // position of markers for this contig
       };
    */
    // this is to correct maternal and paternal haplotypes, or phasing
    string matGT = pollens[0].poSeq; // initial maternal backbone
    string patGT = pollens[0].poAll; // initial paternal backbone
    //
    vector<unsigned long> mkrpostmp = pollens[0].mkrpos;
    // update result
    if(matGT.size() == 1 && patGT.size() == 1)
    {
        (*pollens_corrected)          = pollens;    
        (*pollens_corrected)[0].poSeq = matGT; // 1 bp maternal backbone requiring no correction
        (*pollens_corrected)[0].poAll = patGT; // 1 bp paternal backbone requiring no correction  
        return true;    
    }
    //
    string matGT_corrected = "";
    string patGT_corrected = "";
    // 
    // initialize dimers at each pair of adjacent snps
    map<unsigned long, map<string, int> > dimers;    // <position, <2snp-dimer, count> >
    //
    for(unsigned long ii = 0; ii < matGT.size() - 1; ii ++)
    {
        // get     4 alleles from 2 snps: e.g., snp 1: (A, G) and snp 2: (A, T)
        string pos1allele1 = matGT.substr(ii+0, 1);  // A
        string pos1allele2 = patGT.substr(ii+0, 1);  // G
        string pos2allele1 = matGT.substr(ii+1, 1);  // A
        string pos2allele2 = patGT.substr(ii+1, 1);  // T
        // combine 4 alleles from 2 snps
        map<string, int> dimers_at_pos;                
        string dimertmp = "";
        // dimer 1
        dimertmp = pos1allele1 + pos2allele1;        // AA
        dimers_at_pos.insert(std::pair<string, int>(dimertmp, 0));        
        // dimer 2
        dimertmp = pos1allele1 + pos2allele2;        // AT
        dimers_at_pos.insert(std::pair<string, int>(dimertmp, 0));             
        // dimer 3
        dimertmp = pos1allele2 + pos2allele1;        // GA
        dimers_at_pos.insert(std::pair<string, int>(dimertmp, 0));             
        // dimer 4
        dimertmp = pos1allele2 + pos2allele2;        // GT
        dimers_at_pos.insert(std::pair<string, int>(dimertmp, 0));             
        // collect 4 dimers at postion ii 
        dimers.insert(std::pair<unsigned long, map<string, int> >(ii, dimers_at_pos));
    }
    //
    map<int, POLLEN>::iterator ppitr;
    map<int, POLLEN>::iterator ppitr_end;
    ppitr     = pollens.begin();
    ppitr_end = pollens.end();
    while(ppitr != ppitr_end)
    {
        POLLEN ptmp     = (*ppitr).second;
        // get current pollen sequence at markers along contigs
        string pollenGT = ptmp.poSeq;
        // check consistency in sequence length
        if (matGT.size() != patGT.size()    || 
            matGT.size() != pollenGT.size() ||
            patGT.size() != pollenGT.size() ) 
        {
            cout << "   Error: sequences of pollen and haplotype initials are with different lengths. " << endl;
            return false;
        }
        // vote each initialized dimmer according parental snps
        map<unsigned long, map<string, int> >::iterator positr; 
        for(unsigned long jj = 0; jj < pollenGT.size() - 1; jj ++)
        {
            // get a dimer along current pollen sequence
            string dimertmp = pollenGT.substr(jj, 2);
            // find  initialized dimmers according to parental un-phased snps at the current position
            positr = dimers.find(jj);
            assert(positr != dimers.end());            
            // score initialized dimmers according to parental un-phased snps at the current position
            map<string, int>::iterator dimeritr;
            dimeritr = ((*positr).second).find(dimertmp);
            if(dimeritr != ((*positr).second).end())
            {
                (*dimeritr).second += 1;
            }
        }
        // next pollen
        ppitr ++;
    }
    // get corrected haplotypes
    map<unsigned long, map<string, int> >::iterator positr;
    map<unsigned long, map<string, int> >::iterator positr_end;
    positr         = dimers.begin();
    positr_end     = dimers.end();
    string lastMat = "";
    string lastPat = "";
    while(positr != positr_end)
    {
        // marker positioning: this dimmer <= this_paired_mkr_pos + (this_paired_mkr_pos+1)
        unsigned long this_paired_mkr_pos = (*positr).first;
        //
        map<string, int> dimers_at_pos;
        dimers_at_pos = (*positr).second;
        //
        map<string, int>::iterator ditr;
        map<string, int>::iterator ditr_end;
        // find mostly voted genotype
        ditr     = dimers_at_pos.begin();
        ditr_end = dimers_at_pos.end();
        string maxDimer     = "";
        int    maxCnt       = 0;
        string left_allele  = "";
        string right_allele = "";
        while(ditr != ditr_end)
        {
            string this_dimer = (*ditr).first; 
            //           
            string this_left  = this_dimer.substr(0, 1);
            if(left_allele.find(this_left) == std::string::npos)
            {
                left_allele += this_left;
            }
            string this_right  = this_dimer.substr(1, 1);
            if(right_allele.find(this_right) == std::string::npos)
            {
                right_allele += this_right;
            }
            //            
            if( (*ditr).second > maxCnt)
            {
                maxDimer = (*ditr).first;
                maxCnt   = (*ditr).second;
            }
            ditr ++;
        }
        if(maxCnt == 0) // not voted cases: there might be a few; randomly set the first as best
        {
            maxDimer = (*(dimers_at_pos.begin() ) ).first;
            maxCnt   = (*(dimers_at_pos.begin() ) ).second;            
        }
        // find complemented genotype to the genotype with maximum vote
        string max_left  = maxDimer.substr(0, 1);        
        string max_right = maxDimer.substr(1, 1);
        string cmp_left  = ""; // complemented left  allele
        string cmp_right = ""; // complemented right allele
        for (int kk = 0; kk < 2; kk ++)
        {
            if(left_allele.substr(kk, 1).compare(max_left) != 0) 
            {
                cmp_left = left_allele.substr(kk, 1);
            }
            if(right_allele.substr(kk, 1).compare(max_right) != 0) 
            {
                cmp_right = right_allele.substr(kk, 1);
            }
        }
        string cmpDimer = cmp_left + cmp_right;
        assert( dimers_at_pos.find(cmpDimer) != dimers_at_pos.end() );
        int    cmpCnt   = dimers_at_pos[cmpDimer];
        //
        // check the other possibility: total support for both combination of alleles.
        string dimer3 = cmpDimer.substr(0, 1) + maxDimer.substr(1, 1);
        string dimer4 = maxDimer.substr(0, 1) + cmpDimer.substr(1, 1);  
        assert(dimers_at_pos.find(dimer3) != dimers_at_pos.end());
        assert(dimers_at_pos.find(dimer4) != dimers_at_pos.end());
        int    cnt3   = dimers_at_pos[dimer3];
        int    cnt4   = dimers_at_pos[dimer4];
        bool mcorrected=false;
        if(cnt3+cnt4  > cmpCnt + maxCnt)
        {
            cmpCnt   = cnt3;
            cmpDimer = dimer3;
            maxCnt   = cnt4;
            maxDimer = dimer4;
            if(cmpCnt > maxCnt)
            {
                int tmpcnt    = cmpCnt;
                cmpCnt        = maxCnt;
                maxCnt        = tmpcnt;
                //
                string tmpstr = cmpDimer;
                cmpDimer      = maxDimer;
                maxDimer      = tmpstr;
                //
                mcorrected    = true;
            }
        }        
        //        
        // out mostly voted genotype
        if(lastMat.size () == 0)
        {
            cout << "\t" << maxDimer << ":" << maxCnt << "\t"
                 <<         cmpDimer << ":" << cmpCnt << "\tother\t";
            // collect phased haplotypes                 
            matGT_corrected = maxDimer;
            patGT_corrected = cmpDimer;  
            // update
           lastMat = maxDimer;
           lastPat = cmpDimer;                             
        }else
        {
            string lastMatEnd = lastMat.substr(1, 1); // end of last dimmer for maternal haplotype
            string lastPatEnd = lastPat.substr(1, 1); // end of last dimmer for paternal haplotype
            string thisSta1   = maxDimer.substr(0, 1);// sta of this dimmer with maximum vote 
            string thisSta2   = cmpDimer.substr(0, 1);// sta of this dimmer complemented maximum vote
            //
            if(lastMatEnd.compare(thisSta1) == 0 && 
               lastPatEnd.compare(thisSta2) == 0)
            {
                cout << "\t" << maxDimer << ":" << maxCnt << "\t"
                     <<         cmpDimer << ":" << cmpCnt << "\tother\t";  
                // collect phased haplotypes                 
                matGT_corrected += maxDimer.substr(1,1);
                patGT_corrected += cmpDimer.substr(1,1);    
                // update
                lastMat = maxDimer;
                lastPat = cmpDimer;                                                        
            }else
            {
                cout << "\t" << cmpDimer << ":" << cmpCnt << "\t"
                     <<         maxDimer << ":" << maxCnt << "\tother\t";    
                // collect phased haplotypes                 
                matGT_corrected += cmpDimer.substr(1,1);
                patGT_corrected += maxDimer.substr(1,1); 
                // update
                lastMat = cmpDimer;
                lastPat = maxDimer;                                                            
            } 
                              
        } 
        // check 20191025
        map<string, int>::iterator oditr;
        map<string, int>::iterator oditr_end;    
        oditr     = dimers_at_pos.begin();
        oditr_end = dimers_at_pos.end();       
        while(oditr != oditr_end)
        {
            string this_dimer = (*oditr).first; 
            if(this_dimer.compare(maxDimer)!=0 && this_dimer.compare(cmpDimer)!=0)
            {
                cout << this_dimer << ":" << (*oditr).second << "\t";
            }
            oditr ++;
        }
        // record paired-marker positioning
        cout << ctgid << "\t" << mkrpostmp[this_paired_mkr_pos]   << "\t"
             <<                  mkrpostmp[this_paired_mkr_pos+1] << "\tmkr_fil\t";
        //               
        if(mcorrected)
        {
            cout << "\tcorrected";
        }  
        cout << endl;               
        // next position
        positr ++;
    }
    //
    cout << "   Check: initial   haplotypes: " << endl
         << "\t"  << matGT                     << endl
         << "\t"  << patGT                     << endl;
    cout << "   Check: corrected haplotypes: " << endl
         << "\t"  << matGT_corrected           << endl
         << "\t"  << patGT_corrected           << endl;     
    // update result
    (*pollens_corrected) = pollens;    
    (*pollens_corrected)[0].poSeq = matGT_corrected; // corrected maternal backbone
    (*pollens_corrected)[0].poAll = patGT_corrected; // corrected paternal backbone    
    //
    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3b8, %rsp            # imm = 0x3B8
movq %rdx, 0x1d8(%rsp)
movq %rsi, %r14
movq %rdi, %r15
leaq 0x98(%rsp), %rbx
andl $0x0, (%rbx)
movq %rbx, %rsi
callq 0xe2fa
leaq 0x170(%rsp), %rdi
movq %rax, %rsi
callq 0x3300
andl $0x0, (%rbx)
leaq 0x98(%rsp), %rsi
movq %r15, 0x40(%rsp)
movq %r15, %rdi
callq 0xe2fa
addq $0x20, %rax
leaq 0x250(%rsp), %rdi
movq %rax, %rsi
callq 0x3300
leaq 0x98(%rsp), %rsi
andl $0x0, (%rsi)
movq 0x40(%rsp), %rdi
callq 0xe2fa
addq $0x60, %rax
leaq 0x270(%rsp), %rdi
movq %rax, %rsi
callq 0xe348
cmpq $0x1, 0x178(%rsp)
jne 0x8fe3
cmpq $0x1, 0x258(%rsp)
jne 0x8fe3
movq %r14, %rdi
movq 0x40(%rsp), %rsi
callq 0xec9a
leaq 0x98(%rsp), %rsi
andl $0x0, (%rsi)
movq %r14, %rdi
callq 0xe2fa
leaq 0x170(%rsp), %rsi
movq %rax, %rdi
callq 0x3170
leaq 0x98(%rsp), %rsi
andl $0x0, (%rsi)
movq %r14, %rdi
callq 0xe2fa
addq $0x20, %rax
leaq 0x250(%rsp), %rsi
movq %rax, %rdi
callq 0x3170
movb $0x1, %bl
jmp 0xa05a
leaq 0xaedd(%rip), %rsi      # 0x13ec7
leaq 0x230(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0xe174
movq %r14, 0x1d0(%rsp)
leaq 0xaeb9(%rip), %rsi      # 0x13ec7
leaq 0x210(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0xe174
leaq 0x2f0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
xorl %ebx, %ebx
pushq $0x1
popq %r15
leaq 0x250(%rsp), %rbp
leaq 0x338(%rsp), %r14
leaq 0x98(%rsp), %r12
movq 0x178(%rsp), %rax
decq %rax
cmpq %rax, %rbx
jae 0x92de
leaq 0x110(%rsp), %rdi
leaq 0x170(%rsp), %rsi
movq %rbx, %rdx
movq %r15, %rcx
callq 0x3290
leaq 0x18(%rsp), %rdi
movq %rbp, %rsi
movq %rbx, %rdx
movq %r15, %rcx
callq 0x3290
incq %rbx
leaq 0x150(%rsp), %rdi
leaq 0x170(%rsp), %rsi
movq %rbx, %rdx
movq %r15, %rcx
callq 0x3290
leaq 0x130(%rsp), %rdi
movq %rbp, %r13
movq %rbp, %rsi
movq %rbx, %rdx
movq %r15, %rbp
movq %r15, %rcx
callq 0x3290
andl $0x0, 0x50(%rsp)
andq $0x0, 0x58(%rsp)
leaq 0x50(%rsp), %rax
movq %rax, 0x60(%rsp)
movq %rax, 0x68(%rsp)
andq $0x0, 0x70(%rsp)
movq %r14, %rdi
leaq 0xadc3(%rip), %rsi      # 0x13ec7
movq %r12, %rdx
callq 0xe174
movq %r12, %rdi
leaq 0x110(%rsp), %rsi
leaq 0x150(%rsp), %rdx
callq 0xe4ec
movq %r14, %rdi
movq %r12, %rsi
callq 0x32d0
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
movq %r14, %rsi
callq 0x3300
andl $0x0, 0xb8(%rsp)
leaq 0x48(%rsp), %rdi
movq %r12, %rsi
callq 0x112d0
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
leaq 0x110(%rsp), %rsi
leaq 0x130(%rsp), %rdx
callq 0xe4ec
movq %r14, %rdi
movq %r12, %rsi
callq 0x32d0
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
movq %r14, %rsi
callq 0x3300
andl $0x0, 0xb8(%rsp)
leaq 0x48(%rsp), %rdi
movq %r12, %rsi
callq 0x112d0
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
leaq 0x18(%rsp), %rsi
leaq 0x150(%rsp), %rdx
callq 0xe4ec
movq %r14, %rdi
movq %r12, %rsi
callq 0x32d0
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
movq %r14, %rsi
callq 0x3300
andl $0x0, 0xb8(%rsp)
leaq 0x48(%rsp), %rdi
movq %r12, %rsi
callq 0x112d0
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
leaq 0x18(%rsp), %rsi
leaq 0x130(%rsp), %rdx
callq 0xe4ec
movq %r14, %rdi
movq %r12, %rsi
callq 0x32d0
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
movq %r14, %rsi
callq 0x3300
andl $0x0, 0xb8(%rsp)
leaq 0x48(%rsp), %r15
movq %r15, %rdi
movq %r12, %rsi
callq 0x112d0
movq %r12, %rdi
callq 0x3120
decq %rbx
movq %rbx, 0x98(%rsp)
leaq 0xa0(%rsp), %rdi
movq %r15, %rsi
callq 0xf78c
leaq 0x2e8(%rsp), %rdi
movq %r12, %rsi
callq 0x11478
leaq 0xa0(%rsp), %rdi
callq 0xf728
movq %r14, %rdi
callq 0x3120
leaq 0x48(%rsp), %rdi
callq 0xf728
leaq 0x130(%rsp), %rdi
callq 0x3120
leaq 0x150(%rsp), %rdi
callq 0x3120
leaq 0x18(%rsp), %rdi
callq 0x3120
leaq 0x110(%rsp), %rdi
callq 0x3120
incq %rbx
movq %rbp, %r15
movq %r13, %rbp
jmp 0x905e
movq 0x40(%rsp), %rax
movq 0x18(%rax), %rbx
addq $0x8, %rax
movq %rax, 0x10(%rsp)
leaq 0x48(%rsp), %r15
leaq 0x110(%rsp), %r12
pushq $0x2
popq %r13
leaq 0x2e8(%rsp), %rbp
cmpq 0x10(%rsp), %rbx
sete 0xf(%rsp)
je 0x93f1
movq %rbx, %r14
leaq 0x28(%rbx), %rsi
leaq 0x98(%rsp), %rbx
movq %rbx, %rdi
callq 0xe396
movq %r15, %rdi
movq %rbx, %rsi
callq 0x3300
movq 0x178(%rsp), %rax
cmpq 0x258(%rsp), %rax
jne 0x9ffd
cmpq 0x50(%rsp), %rax
jne 0x9ffd
xorl %edx, %edx
leaq 0x18(%rsp), %rbx
movq %rdx, 0x18(%rsp)
decq %rax
cmpq %rax, %rdx
jae 0x93cc
movq %r12, %rdi
movq %r15, %rsi
movq %r13, %rcx
callq 0x3290
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x11626
movq %rax, %rbx
leaq 0x2f0(%rsp), %rax
cmpq %rax, %rbx
je 0xa095
leaq 0x28(%rbx), %rdi
movq %r12, %rsi
callq 0x1125a
addq $0x30, %rbx
cmpq %rbx, %rax
je 0x93b5
incl 0x40(%rax)
movq %r12, %rdi
callq 0x3120
movq 0x18(%rsp), %rdx
incq %rdx
movq 0x50(%rsp), %rax
jmp 0x935e
movq %r14, %rdi
callq 0x31c0
movq %rax, %rbx
movq %r15, %rdi
callq 0x3120
leaq 0x98(%rsp), %rdi
callq 0xe2b0
jmp 0x9309
movq 0x300(%rsp), %r12
leaq 0xaac7(%rip), %rsi      # 0x13ec7
leaq 0x48(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0xe174
leaq 0xaaae(%rip), %rsi      # 0x13ec7
leaq 0x110(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0xe174
leaq 0x98(%rsp), %r13
leaq 0x338(%rsp), %r14
pushq $0x1
popq %rbx
leaq 0x398(%rsp), %r15
leaq 0x2f0(%rsp), %rax
cmpq %rax, %r12
je 0x9eb3
movq 0x20(%r12), %rax
movq %rax, 0x1e8(%rsp)
andl $0x0, 0xa0(%rsp)
andq $0x0, 0xa8(%rsp)
leaq 0xa0(%rsp), %rax
movq %rax, 0xb0(%rsp)
movq %rax, 0xb8(%rsp)
andq $0x0, 0xc0(%rsp)
movq %r12, 0x1e0(%rsp)
leaq 0x28(%r12), %rsi
movq %r13, %rdi
callq 0xf9de
movq 0xb0(%rsp), %rbp
leaq 0x18(%rsp), %rdi
leaq 0xaa05(%rip), %r13      # 0x13ec7
movq %r13, %rsi
leaq 0x150(%rsp), %r12
movq %r12, %rdx
callq 0xe174
movq %r12, %rdi
movq %r13, %rsi
leaq 0x130(%rsp), %r12
movq %r12, %rdx
callq 0xe174
movq %r12, %rdi
movq %r13, %rsi
movq %r14, %rdx
callq 0xe174
movq $0x0, 0x10(%rsp)
leaq 0xa0(%rsp), %rax
cmpq %rax, %rbp
je 0x95fe
leaq 0x20(%rbp), %r12
movq %r14, %rdi
movq %r12, %rsi
callq 0x3300
movq %r14, %rsi
leaq 0x1f0(%rsp), %r13
movq %r13, %rdi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x3290
leaq 0x150(%rsp), %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0x3470
cmpq $-0x1, %rax
jne 0x9567
leaq 0x150(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x3450
leaq 0x1b0(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x130(%rsp), %rdi
movq %r13, %rsi
xorl %edx, %edx
callq 0x3470
cmpq $-0x1, %rax
jne 0x95ad
leaq 0x130(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x3450
movq 0x10(%rsp), %rax
cmpl %eax, 0x40(%rbp)
jle 0x95cc
leaq 0x18(%rsp), %rdi
movq %r12, %rsi
callq 0x3170
movl 0x40(%rbp), %eax
movq %rax, 0x10(%rsp)
movq %rbp, %rdi
callq 0x31c0
movq %rax, %rbp
leaq 0x1b0(%rsp), %rdi
callq 0x3120
leaq 0x1f0(%rsp), %rdi
callq 0x3120
movq %r14, %rdi
callq 0x3120
jmp 0x9502
cmpl $0x0, 0x10(%rsp)
jne 0x962b
movq 0xb0(%rsp), %rsi
addq $0x20, %rsi
leaq 0x18(%rsp), %rdi
callq 0x3170
movq 0xb0(%rsp), %rax
movl 0x40(%rax), %eax
movq %rax, 0x10(%rsp)
movq %r14, %rdi
leaq 0x18(%rsp), %r12
movq %r12, %rsi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x3290
leaq 0x1f0(%rsp), %rdi
movq %r12, %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x1b0(%rsp), %rdi
leaq 0xa862(%rip), %r12      # 0x13ec7
movq %r12, %rsi
leaq 0x318(%rsp), %r13
movq %r13, %rdx
callq 0xe174
movq %r13, %rdi
movq %r12, %rsi
movq %r15, %rdx
callq 0xe174
xorl %ebp, %ebp
cmpq $0x2, %rbp
je 0x975d
movq %r15, %rdi
leaq 0x150(%rsp), %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0x3290
movq %r15, %rdi
movq %r14, %rsi
callq 0x3030
movl %eax, %r12d
movq %r15, %rdi
callq 0x3120
testl %r12d, %r12d
je 0x96f1
movq %r15, %rdi
leaq 0x150(%rsp), %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x1b0(%rsp), %rdi
movq %r15, %rsi
callq 0x32d0
movq %r15, %rdi
callq 0x3120
movq %r15, %rdi
leaq 0x130(%rsp), %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0x3290
movq %r15, %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x3030
movl %eax, %r12d
movq %r15, %rdi
callq 0x3120
testl %r12d, %r12d
je 0x9755
movq %r15, %rdi
leaq 0x130(%rsp), %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x318(%rsp), %rdi
movq %r15, %rsi
callq 0x32d0
movq %r15, %rdi
callq 0x3120
incq %rbp
jmp 0x9688
movq %r15, %rdi
leaq 0x1b0(%rsp), %rsi
leaq 0x318(%rsp), %rdx
callq 0xe4ec
leaq 0x98(%rsp), %rdi
movq %r15, %rsi
callq 0x1125a
leaq 0xa0(%rsp), %rcx
cmpq %rcx, %rax
je 0xa0b4
leaq 0x98(%rsp), %rdi
movq %r15, %rsi
callq 0xe524
movl (%rax), %eax
movq %rax, 0x38(%rsp)
leaq 0x190(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x3290
leaq 0x78(%rsp), %r13
movq %r13, %rdi
leaq 0x18(%rsp), %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x2c8(%rsp), %rdi
leaq 0x190(%rsp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0xe58a
movq %r13, %rdi
callq 0x3120
movq %r12, %rdi
callq 0x3120
movq %r13, %rdi
leaq 0x18(%rsp), %rsi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x3290
leaq 0x2a8(%rsp), %r13
movq %r13, %rdi
movq %r15, %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x190(%rsp), %rdi
leaq 0x78(%rsp), %r12
movq %r12, %rsi
movq %r13, %rdx
callq 0xe58a
movq %r13, %rdi
callq 0x3120
movq %r12, %rdi
callq 0x3120
leaq 0x98(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
callq 0x1125a
leaq 0xa0(%rsp), %rcx
cmpq %rcx, %rax
je 0xa0d3
leaq 0x98(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x1125a
leaq 0xa0(%rsp), %rcx
cmpq %rcx, %rax
je 0xa0f2
leaq 0x98(%rsp), %rbp
movq %rbp, %rdi
leaq 0x2c8(%rsp), %rsi
callq 0xe524
movl (%rax), %r12d
movq %rbp, %rdi
leaq 0x190(%rsp), %rsi
callq 0xe524
movl (%rax), %ebp
leal (%r12,%rbp), %eax
movq 0x10(%rsp), %rcx
movq 0x38(%rsp), %rdx
addl %edx, %ecx
cmpl %ecx, %eax
jle 0x995d
movq %r15, %rdi
leaq 0x2c8(%rsp), %rsi
callq 0x3170
leaq 0x18(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x3170
cmpl %ebp, %r12d
jle 0x9953
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x3300
movq %r15, %rdi
leaq 0x18(%rsp), %r13
movq %r13, %rsi
callq 0x3170
leaq 0x78(%rsp), %rax
movq %r13, %rdi
movq %rax, %r13
movq %rax, %rsi
callq 0x3170
movq %r13, %rdi
callq 0x3120
movq %rbp, 0x38(%rsp)
movb $0x1, %bpl
movq %r12, 0x10(%rsp)
jmp 0x995f
movq %r12, 0x38(%rsp)
movq %rbp, 0x10(%rsp)
xorl %ebp, %ebp
cmpq $0x0, 0x50(%rsp)
je 0x9b2c
leaq 0x78(%rsp), %rdi
leaq 0x48(%rsp), %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x2a8(%rsp), %rdi
leaq 0x110(%rsp), %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x378(%rsp), %rdi
leaq 0x18(%rsp), %rsi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x3290
leaq 0x358(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x3290
leaq 0x78(%rsp), %rdi
leaq 0x378(%rsp), %rsi
callq 0x3030
testl %eax, %eax
jne 0x99fa
leaq 0x2a8(%rsp), %rdi
leaq 0x358(%rsp), %rsi
callq 0x3030
testl %eax, %eax
je 0x9dbf
movq 0x125d7(%rip), %rdi     # 0x1bfd8
leaq 0xa4be(%rip), %rsi      # 0x13ec6
callq 0x3260
movq %rax, %rdi
movq %r15, %rsi
callq 0x3240
movq %rax, %rdi
leaq 0xa121(%rip), %rsi      # 0x13b43
callq 0x3260
movq %rax, %rdi
movq 0x38(%rsp), %rsi
callq 0x33f0
movq %rax, %rdi
leaq 0xa488(%rip), %rsi      # 0x13ec6
callq 0x3260
movq %rax, %rdi
leaq 0x18(%rsp), %rsi
callq 0x3240
movq %rax, %rdi
leaq 0xa0e9(%rip), %rsi      # 0x13b43
callq 0x3260
movq %rax, %rdi
movq 0x10(%rsp), %rsi
callq 0x33f0
movq %rax, %rdi
leaq 0xa440(%rip), %rsi      # 0x13eb6
callq 0x3260
leaq 0x288(%rsp), %r12
movq %r12, %rdi
movq %r15, %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x230(%rsp), %rdi
movq %r12, %rsi
callq 0x3450
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
leaq 0x18(%rsp), %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x210(%rsp), %rdi
movq %r12, %rsi
callq 0x3450
movq %r12, %rdi
callq 0x3120
leaq 0x48(%rsp), %rdi
movq %r15, %rsi
callq 0x3170
leaq 0x18(%rsp), %rsi
leaq 0x110(%rsp), %rdi
callq 0x3170
leaq 0x358(%rsp), %rdi
callq 0x3120
leaq 0x378(%rsp), %rdi
callq 0x3120
leaq 0x2a8(%rsp), %rdi
callq 0x3120
leaq 0x78(%rsp), %rdi
callq 0x3120
jmp 0x9bee
movq 0x124a5(%rip), %rdi     # 0x1bfd8
leaq 0xa38c(%rip), %rsi      # 0x13ec6
callq 0x3260
movq %rax, %rdi
leaq 0x18(%rsp), %rsi
callq 0x3240
movq %rax, %rdi
leaq 0x9fed(%rip), %rsi      # 0x13b43
callq 0x3260
movq %rax, %rdi
movq 0x10(%rsp), %rsi
callq 0x33f0
movq %rax, %rdi
leaq 0xa354(%rip), %rsi      # 0x13ec6
callq 0x3260
movq %rax, %rdi
movq %r15, %rsi
callq 0x3240
movq %rax, %rdi
leaq 0x9fb7(%rip), %rsi      # 0x13b43
callq 0x3260
movq %rax, %rdi
movq 0x38(%rsp), %rsi
callq 0x33f0
movq %rax, %rdi
leaq 0xa30e(%rip), %rsi      # 0x13eb6
callq 0x3260
leaq 0x230(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x3170
leaq 0x210(%rsp), %rdi
movq %r15, %rsi
callq 0x3170
leaq 0x48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x3170
leaq 0x110(%rsp), %rdi
movq %r15, %rsi
callq 0x3170
movq 0xb0(%rsp), %r13
leaq 0xa0(%rsp), %rax
cmpq %rax, %r13
je 0x9c8f
leaq 0x20(%r13), %rsi
leaq 0x78(%rsp), %r12
movq %r12, %rdi
callq 0x3300
movq %r12, %rdi
leaq 0x18(%rsp), %rsi
callq 0x3030
testl %eax, %eax
je 0x9c75
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0x3030
testl %eax, %eax
je 0x9c75
movq 0x12397(%rip), %rdi     # 0x1bfd8
leaq 0x78(%rsp), %rsi
callq 0x3240
movq %rax, %rdi
leaq 0x9eee(%rip), %rsi      # 0x13b43
callq 0x3260
movl 0x40(%r13), %esi
movq %rax, %rdi
callq 0x33f0
movq %rax, %rdi
leaq 0xa256(%rip), %rsi      # 0x13ec6
callq 0x3260
movq %r13, %rdi
callq 0x31c0
movq %rax, %r13
leaq 0x78(%rsp), %rdi
callq 0x3120
jmp 0x9bf6
movq 0x12342(%rip), %rdi     # 0x1bfd8
movq 0x1d8(%rsp), %rsi
callq 0x3240
movq 0x1e8(%rsp), %r12
movq %rax, %rdi
leaq 0xa211(%rip), %rsi      # 0x13ec6
callq 0x3260
movq 0x270(%rsp), %rcx
movq (%rcx,%r12,8), %rsi
movq %rax, %rdi
callq 0x31b0
movq %rax, %rdi
leaq 0xa1ee(%rip), %rsi      # 0x13ec6
callq 0x3260
movq 0x270(%rsp), %rcx
movq 0x8(%rcx,%r12,8), %rsi
movq %rax, %rdi
callq 0x31b0
movq %rax, %rdi
leaq 0xa1c2(%rip), %rsi      # 0x13ebe
callq 0x3260
testb %bpl, %bpl
je 0x9d19
movq 0x122cb(%rip), %rdi     # 0x1bfd8
leaq 0xa1b4(%rip), %rsi      # 0x13ec8
callq 0x3260
movq 0x122b8(%rip), %rdi     # 0x1bfd8
callq 0x3140
movq 0x1e0(%rsp), %rdi
callq 0x31c0
movq %rax, %r12
leaq 0x190(%rsp), %rdi
callq 0x3120
leaq 0x2c8(%rsp), %rdi
callq 0x3120
movq %r15, %rdi
callq 0x3120
leaq 0x318(%rsp), %rdi
callq 0x3120
leaq 0x1b0(%rsp), %rdi
callq 0x3120
leaq 0x1f0(%rsp), %rdi
callq 0x3120
movq %r14, %rdi
callq 0x3120
leaq 0x130(%rsp), %rdi
callq 0x3120
leaq 0x150(%rsp), %rdi
callq 0x3120
leaq 0x18(%rsp), %rdi
callq 0x3120
leaq 0x98(%rsp), %r13
movq %r13, %rdi
callq 0xf728
jmp 0x9449
movq 0x12212(%rip), %rdi     # 0x1bfd8
leaq 0xa0f9(%rip), %rsi      # 0x13ec6
callq 0x3260
movq %rax, %rdi
leaq 0x18(%rsp), %rsi
callq 0x3240
movq %rax, %rdi
leaq 0x9d5a(%rip), %rsi      # 0x13b43
callq 0x3260
movq %rax, %rdi
movq 0x10(%rsp), %rsi
callq 0x33f0
movq %rax, %rdi
leaq 0xa0c1(%rip), %rsi      # 0x13ec6
callq 0x3260
movq %rax, %rdi
movq %r15, %rsi
callq 0x3240
movq %rax, %rdi
leaq 0x9d24(%rip), %rsi      # 0x13b43
callq 0x3260
movq %rax, %rdi
movq 0x38(%rsp), %rsi
callq 0x33f0
movq %rax, %rdi
leaq 0xa07b(%rip), %rsi      # 0x13eb6
callq 0x3260
leaq 0x288(%rsp), %r12
movq %r12, %rdi
leaq 0x18(%rsp), %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x230(%rsp), %rdi
movq %r12, %rsi
callq 0x3450
movq %r12, %rdi
callq 0x3120
movq %r12, %rdi
movq %r15, %rsi
movq %rbx, %rdx
movq %rbx, %rcx
callq 0x3290
leaq 0x210(%rsp), %rdi
movq %r12, %rsi
callq 0x3450
movq %r12, %rdi
callq 0x3120
leaq 0x48(%rsp), %rdi
leaq 0x18(%rsp), %rsi
callq 0x3170
movq %r15, %rsi
jmp 0x9ae9
movq 0x1211e(%rip), %rdi     # 0x1bfd8
leaq 0xa012(%rip), %rsi      # 0x13ed3
callq 0x3260
movq 0x1d0(%rsp), %rbx
movq %rax, %rdi
callq 0x3140
leaq 0x9fe9(%rip), %rsi      # 0x13ec6
movq %rax, %rdi
callq 0x3260
leaq 0x170(%rsp), %rsi
movq %rax, %rdi
callq 0x3240
movq %rax, %rdi
callq 0x3140
leaq 0x9fc2(%rip), %rsi      # 0x13ec6
movq %rax, %rdi
callq 0x3260
leaq 0x250(%rsp), %rsi
movq %rax, %rdi
callq 0x3240
movq %rax, %rdi
callq 0x3140
movq 0x120ad(%rip), %rdi     # 0x1bfd8
leaq 0x9fc2(%rip), %rsi      # 0x13ef4
callq 0x3260
movq %rax, %rdi
callq 0x3140
leaq 0x9f80(%rip), %rsi      # 0x13ec6
movq %rax, %rdi
callq 0x3260
leaq 0x230(%rsp), %rsi
movq %rax, %rdi
callq 0x3240
movq %rax, %rdi
callq 0x3140
leaq 0x9f59(%rip), %rsi      # 0x13ec6
movq %rax, %rdi
callq 0x3260
leaq 0x210(%rsp), %rsi
movq %rax, %rdi
callq 0x3240
movq %rax, %rdi
callq 0x3140
movq %rbx, %rdi
movq 0x40(%rsp), %rsi
callq 0xec9a
leaq 0x98(%rsp), %rsi
andl $0x0, (%rsi)
movq %rbx, %rdi
callq 0xe2fa
leaq 0x230(%rsp), %rsi
movq %rax, %rdi
callq 0x3170
leaq 0x98(%rsp), %rsi
andl $0x0, (%rsi)
movq %rbx, %rdi
callq 0xe2fa
addq $0x20, %rax
leaq 0x210(%rsp), %rsi
movq %rax, %rdi
callq 0x3170
leaq 0x110(%rsp), %rdi
callq 0x3120
leaq 0x48(%rsp), %rdi
callq 0x3120
jmp 0xa02f
movq 0x11fd4(%rip), %rdi     # 0x1bfd8
leaq 0x9d65(%rip), %rsi      # 0x13d70
callq 0x3260
movq %rax, %rdi
callq 0x3140
leaq 0x48(%rsp), %rdi
callq 0x3120
leaq 0x98(%rsp), %rdi
callq 0xe2b0
movb 0xf(%rsp), %bl
leaq 0x2e8(%rsp), %rdi
callq 0xfc6a
leaq 0x210(%rsp), %rdi
callq 0x3120
leaq 0x230(%rsp), %rdi
callq 0x3120
leaq 0x270(%rsp), %rdi
callq 0xfdbe
leaq 0x250(%rsp), %rdi
callq 0x3120
leaq 0x170(%rsp), %rdi
callq 0x3120
movl %ebx, %eax
addq $0x3b8, %rsp            # imm = 0x3B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9d26(%rip), %rdi      # 0x13dc2
leaq 0x9a28(%rip), %rsi      # 0x13acb
leaq 0x9d2f(%rip), %rcx      # 0x13dd9
movl $0x7c9, %edx            # imm = 0x7C9
callq 0x3190
leaq 0x9d63(%rip), %rdi      # 0x13e1e
leaq 0x9a09(%rip), %rsi      # 0x13acb
leaq 0x9d10(%rip), %rcx      # 0x13dd9
movl $0x819, %edx            # imm = 0x819
callq 0x3190
leaq 0x9d78(%rip), %rdi      # 0x13e52
leaq 0x99ea(%rip), %rsi      # 0x13acb
leaq 0x9cf1(%rip), %rcx      # 0x13dd9
movl $0x81f, %edx            # imm = 0x81F
callq 0x3190
leaq 0x9d8b(%rip), %rdi      # 0x13e84
leaq 0x99cb(%rip), %rsi      # 0x13acb
leaq 0x9cd2(%rip), %rcx      # 0x13dd9
movl $0x820, %edx            # imm = 0x820
callq 0x3190
movq %rax, %rbx
jmp 0xa42d
jmp 0xa27e
jmp 0xa332
jmp 0xa18b
jmp 0xa18b
movq %rax, %rbx
jmp 0xa451
jmp 0xa143
jmp 0xa143
jmp 0xa176
jmp 0xa2f8
jmp 0xa176
jmp 0xa2f8
jmp 0xa143
movq %rax, %rbx
jmp 0xa45e
jmp 0xa365
movq %rax, %rbx
jmp 0xa46b
movq %rax, %rbx
jmp 0xa478
jmp 0xa37d
jmp 0xa387
jmp 0xa2f8
jmp 0xa2f8
jmp 0xa176
movq %rax, %rbx
leaq 0x288(%rsp), %rdi
callq 0x3120
jmp 0xa2fb
movq %rax, %rbx
jmp 0xa420
jmp 0xa387
movq %rax, %rbx
jmp 0xa315
movq %rax, %rbx
jmp 0xa308
jmp 0xa365
jmp 0xa365
jmp 0xa365
jmp 0xa365
jmp 0xa365
jmp 0xa373
jmp 0xa373
movq %rax, %rbx
jmp 0xa1dd
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x3120
leaq 0x190(%rsp), %rdi
jmp 0xa3a9
movq %rax, %rbx
jmp 0xa3a1
movq %rax, %rbx
jmp 0xa20c
jmp 0xa36e
movq %rax, %rbx
leaq 0x2a8(%rsp), %rdi
callq 0x3120
leaq 0x78(%rsp), %rdi
jmp 0xa39c
jmp 0xa373
jmp 0xa382
jmp 0xa378
jmp 0xa32a
jmp 0xa37d
jmp 0xa231
movq %rax, %rbx
jmp 0xa413
movq %rax, %rbx
jmp 0xa409
movq %rax, %rbx
jmp 0xa3fc
movq %rax, %rbx
jmp 0xa353
jmp 0xa27e
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0xf728
jmp 0xa29d
jmp 0xa288
jmp 0xa288
jmp 0xa288
jmp 0xa288
jmp 0xa288
jmp 0xa28d
jmp 0xa28d
jmp 0xa288
jmp 0xa288
jmp 0xa28d
movq %rax, %rbx
jmp 0xa2aa
movq %rax, %rbx
jmp 0xa437
jmp 0xa288
movq %rax, %rbx
jmp 0xa29d
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x3120
leaq 0x338(%rsp), %rdi
callq 0x3120
leaq 0x48(%rsp), %rdi
callq 0xf728
leaq 0x130(%rsp), %rdi
callq 0x3120
leaq 0x150(%rsp), %rdi
callq 0x3120
leaq 0x18(%rsp), %rdi
callq 0x3120
leaq 0x110(%rsp), %rdi
jmp 0xa432
movq %rax, %rbx
jmp 0xa2ce
movq %rax, %rbx
jmp 0xa2d8
movq %rax, %rbx
jmp 0xa2c1
jmp 0xa365
jmp 0xa365
movq %rax, %rbx
leaq 0x358(%rsp), %rdi
callq 0x3120
leaq 0x378(%rsp), %rdi
callq 0x3120
leaq 0x2a8(%rsp), %rdi
callq 0x3120
jmp 0xa38a
jmp 0xa378
jmp 0xa36e
jmp 0xa36e
movq %rax, %rbx
jmp 0xa3c8
movq %rax, %rbx
jmp 0xa349
jmp 0xa339
movq %rax, %rbx
leaq 0x110(%rsp), %rdi
callq 0x3120
leaq 0x48(%rsp), %rdi
callq 0x3120
leaq 0x98(%rsp), %rdi
callq 0xe2b0
jmp 0xa437
movq %rax, %rbx
jmp 0xa394
jmp 0xa36e
jmp 0xa373
movq %rax, %rbx
jmp 0xa3bb
movq %rax, %rbx
jmp 0xa3ae
movq %rax, %rbx
jmp 0xa3d5
movq %rax, %rbx
jmp 0xa3ef
movq %rax, %rbx
jmp 0xa3e2
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x3120
leaq 0x190(%rsp), %rdi
callq 0x3120
leaq 0x2c8(%rsp), %rdi
callq 0x3120
leaq 0x398(%rsp), %rdi
callq 0x3120
leaq 0x318(%rsp), %rdi
callq 0x3120
leaq 0x1b0(%rsp), %rdi
callq 0x3120
leaq 0x1f0(%rsp), %rdi
callq 0x3120
leaq 0x338(%rsp), %rdi
callq 0x3120
leaq 0x130(%rsp), %rdi
callq 0x3120
leaq 0x150(%rsp), %rdi
callq 0x3120
leaq 0x18(%rsp), %rdi
callq 0x3120
leaq 0x98(%rsp), %rdi
callq 0xf728
leaq 0x110(%rsp), %rdi
callq 0x3120
leaq 0x48(%rsp), %rdi
callq 0x3120
leaq 0x2e8(%rsp), %rdi
callq 0xfc6a
leaq 0x210(%rsp), %rdi
callq 0x3120
leaq 0x230(%rsp), %rdi
callq 0x3120
leaq 0x270(%rsp), %rdi
callq 0xfdbe
leaq 0x250(%rsp), %rdi
callq 0x3120
leaq 0x170(%rsp), %rdi
callq 0x3120
movq %rbx, %rdi
callq 0x3410