// File: /workspace/github_cpp_makefile_star2_O2/millanek[P]evo/evo_FstAgainstAll.cpp
// Function: FstGlobalMain(int, char**)
int FstGlobalMain(int argc, char** argv) {
    parseFstGlobaloptions(argc, argv);
    string line; // for reading the input files
    
    // Load up the annotation file
    Annotation wgAnnotation; std::ifstream* annotFile;
    if (!opt::annotFile.empty()) {
        annotFile = new std::ifstream(opt::annotFile.c_str());
        Annotation Annot(annotFile, false); // Does not use transcripts annotated as 5' or 3' partial
        wgAnnotation = Annot;
    }
    
    std::istream* vcfFile = createReader(opt::vcfFile.c_str());
    std::ifstream* setsFile = new std::ifstream(opt::setsFile.c_str());
    
    std::map<string, std::vector<string>> popToIDsMap;
    std::map<string, string> IDsToPopMap;
    std::map<string, std::vector<size_t>> popToPosMap;
    std::map<size_t, string> posToPopMap;
    
    // Get the sample sets
    while (getline(*setsFile, line)) {
        // std::cerr << line << std::endl;
        std::vector<string> ID_Pop = split(line, '\t');
        popToIDsMap[ID_Pop[1]].push_back(ID_Pop[0]);
        IDsToPopMap[ID_Pop[0]] = ID_Pop[1];
        //std::cerr << ID_Species[1] << "\t" << ID_Species[0] << std::endl;
    }
    // Get a vector of set names (usually populations/species)
    std::vector<string> populations; std::vector<string> populationsToUse;
    for(std::map<string,std::vector<string>>::iterator it = popToIDsMap.begin(); it != popToIDsMap.end(); ++it) {
        populations.push_back(it->first);
        if (it->first != "Outgroup" && it->first != "xxx") {
            populationsToUse.push_back(it->first);
        }
        // std::cerr << it->first << std::endl;
    } std::cerr << "There are " << populations.size() << " populations " << std::endl;
    
    std::ofstream* outFile = new std::ofstream(opt::runName + "_FstGlobal_" + numToString(opt::windowSize) + "_" + numToString(opt::windowStep) + ".txt");
    *outFile << "chr\tpos1\tpos2\tFstGlobal"; for (int i = 0; i < populationsToUse.size(); i++) { *outFile << "\t" << populationsToUse[i];}
    *outFile << std::endl;
    std::ofstream* outFileFixedWindow = new std::ofstream(opt::runName + "_FstGlobal_FW" + numToString(opt::fixedWindowSize) + ".txt");
    *outFileFixedWindow << "chr\tpos1\tpos2\tnSNPs"; for (int i = 0; i < populationsToUse.size(); i++) { *outFile << "\t" << populationsToUse[i];}
    *outFileFixedWindow << std::endl;
    
    std::ofstream* outFileGenes; if (!opt::annotFile.empty()) {
        outFileGenes = new std::ofstream(opt::runName + "_FstGlobalGenes_" + opt::runName + "_" + numToString(opt::windowSize) + "_" + numToString(opt::windowStep) + ".txt");
        // *outFileGenes << "gene\t" << "numSNPsExons\t" << "numSNPsWithIntrons\t" << "numSNPsWith3kbUpstr\t" << threePops[0] << "_exons\t" << threePops[1] << "_exons\t" << threePops[2] << "_exons\t" << threePops[0] << "_wIntrons\t" << threePops[1] << "_wIntrons\t" << threePops[2] << "_wIntrons\t" << threePops[0] << "_w3kbUpstr\t" << threePops[1] << "_w3kbUpstr\t" << threePops[2] << "_w3kbUpstr" << std::endl;
        *outFileGenes << "gene\t" << "numSNPsExons\tnumSNPsIntrons\tnumSNPs3kbPromoter";
        for (int i = 0; i < populationsToUse.size(); i++) {
            *outFileGenes << "\t" << populationsToUse[i] << "_exons";
            *outFileGenes << "\t" << populationsToUse[i] << "_wIntrons";
            *outFileGenes << "\t" << populationsToUse[i] << "_promoter";
        } *outFileGenes << std::endl;
    }
    
    // And need to prepare the vectors to hold the Fst values and the coordinates:
    std::deque<double> initFst(opt::windowSize,0.0); // deque to initialise per-site PBS values
    std::vector<std::deque<double>> FstNumDeques(populationsToUse.size()+1,initFst); // Fst numerators for each population, and one for the global Fst
    std::vector<std::deque<double>> FstDenomDeques(populationsToUse.size()+1,initFst); // Fst denominators for each population, and one for the global Fst
    std::deque<string> coordDeque(opt::windowSize,"0");
    // Fixed window size vectors:

    std::vector<std::vector<double>> FstFixedWindowNums(populationsToUse.size());
    std::vector<std::vector<double>> FstFixedWindowDenoms(populationsToUse.size());
    int currentWindowStart = 0; int currentWindowEnd = currentWindowStart + opt::fixedWindowSize;
    
    // if (!opt::annotFile.empty()) {
    std::vector<std::vector<double>> initFstVectors(3);
    std::vector<std::vector<std::vector<double>>> FstGeneNumVectors(populationsToUse.size(),initFstVectors); // For the nine PBS columns in the _PBSGenes_ files
    std::vector<std::vector<std::vector<double>>> FstGeneDenumVectors(populationsToUse.size(),initFstVectors); // For the nine PBS columns in the _PBSGenes_ files
    std::string currentGene = ""; std::string previousGene = "";
    //}
    //std::deque<std::vector<double>> regionPBSnums; regionPBSnums.assign(opt::windowSize,init);
    //std::deque<std::vector<double>> regionPBSdenoms; regionPBSdenoms.assign(opt::windowSize,init);
    //std::vector<double> allPs(populations.size(),0.0);
    int totalVariantNumber = 0; int usedVariantNumber = 0; double coordDouble = 0;
    //std::vector<int> usedVars(PBStrios.size(),0); // Will count the number of used variants for each trio
    std::vector<string> sampleNames; std::vector<std::string> fields;
    int reportProgressEvery = 10000; string chr; string coord;
    std::clock_t start; std::clock_t startGettingCounts; std::clock_t startCalculation;
    double durationOverall; double durationGettingCounts; double durationCalculation;
    
    while (getline(*vcfFile, line)) {
        line.erase(std::remove(line.begin(), line.end(), '\r'), line.end()); // Deal with any left over \r from files prepared on Windows
        if (line[0] == '#' && line[1] == '#')
            continue;
        else if (line[0] == '#' && line[1] == 'C') {
            fields = split(line, '\t');
            std::vector<std::string> sampleNames(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
            // print_vector_stream(sampleNames, std::cerr);
            for (std::vector<std::string>::size_type i = 0; i != sampleNames.size(); i++) {
                posToPopMap[i] = IDsToPopMap[sampleNames[i]];
            }
            // Iterate over all the keys in the map to find the samples in the VCF:
            // Give an error if no sample is found for a species:
            for(std::map<string, std::vector<string>>::iterator it = popToIDsMap.begin(); it != popToIDsMap.end(); ++it) {
                string sp =  it->first;
                //std::cerr << "sp " << sp << std::endl;
                std::vector<string> IDs = it->second;
                std::vector<size_t> spPos = locateSet(sampleNames, IDs);
                if (spPos.empty()) {
                    std::cerr << "Did not find any samples in the VCF for \"" << sp << "\"" << std::endl;
                    assert(!spPos.empty());
                }
                popToPosMap[sp] = spPos;
            }
            start = std::clock();
            //  std::cerr << " " << std::endl;
            //  std::cerr << "Outgroup at pos: "; print_vector_stream(speciesToPosMap["Outgroup"], std::cerr);
            //  std::cerr << "telvit at pos: "; print_vector_stream(speciesToPosMap["telvit"], std::cerr);
        } else {
            totalVariantNumber++;
            if (totalVariantNumber % reportProgressEvery == 0) {
                durationOverall = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
                std::cerr << "Processed " << totalVariantNumber << " variants in " << durationOverall << "secs" << std::endl;
                std::cerr << "GettingCounts " << durationGettingCounts << " calculation " << durationCalculation << "secs" << std::endl;
            }
            fields = split(line, '\t'); chr = fields[0]; coord = fields[1]; coordDouble = stringToDouble(coord);
            std::vector<std::string> genotypes(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
            //std::vector<std::string> info = split(fields[7], ';');
            // Only consider biallelic SNPs
            string refAllele = fields[3]; string altAllele = fields[4];
            if (refAllele.length() > 1 || altAllele.length() > 1 || altAllele == "*") {
                refAllele.clear(); refAllele.shrink_to_fit(); altAllele.clear(); altAllele.shrink_to_fit();
                genotypes.clear(); genotypes.shrink_to_fit(); continue;
            }
            usedVariantNumber++;
            startGettingCounts = std::clock();
            GeneralSetCountsWithComplements* c = new GeneralSetCountsWithComplements(popToPosMap, (int)genotypes.size());
            c->getSetVariantCountsSimple(genotypes, posToPopMap);
            c->getComplementCounts(populationsToUse);
            genotypes.clear(); genotypes.shrink_to_fit();
            durationGettingCounts = ( std::clock() - startGettingCounts ) / (double) CLOCKS_PER_SEC;
            
            // if this site is not variable in the populations of interest then just move to the next one
            if (c->setAAFs.at(populationsToUse[0]) == 0 && c->setAAFsComplement.at(populationsToUse[0]) == 0) {
                delete c; continue;
            }
            if (c->setAAFs.at(populationsToUse[0]) == 1 && c->setAAFsComplement.at(populationsToUse[0]) == 1) {
                delete c; continue;
            }
            // std::cerr << "Here:" << totalVariantNumber << std::endl;
            
            startCalculation = std::clock();
            
            
            // for (std::vector<std::string>::size_type i = 0; i != populations.size(); i++) {
            //     allPs[i] = c->setAAFs.at(populations[i]);
            // }
            // durationFirstLoop = ( std::clock() - startCalculation ) / (double) CLOCKS_PER_SEC;
            
            // find if we are in a gene:
            std::vector<string> SNPgeneDetails = wgAnnotation.getSNPgeneDetails(chr, atoi(coord.c_str()));
            if (SNPgeneDetails[0] != "") {
                currentGene = SNPgeneDetails[0];
                if (previousGene == "") previousGene = currentGene;
            }
            
            // Check if we are still in the same physical window...
            if (coordDouble > currentWindowEnd || coordDouble < currentWindowStart) {
                int wSNP1 = (int)FstFixedWindowNums[0].size();
                *outFileFixedWindow << chr << "\t" << currentWindowStart << "\t" << currentWindowEnd << "\t" << wSNP1;
                for (int i = 0; i != populationsToUse.size(); i++) {
                    double FstFW = 0; if (wSNP1 > 0) { FstFW = vector_average(FstFixedWindowNums[i])/vector_average(FstFixedWindowDenoms[i]); }
                    *outFileFixedWindow << "\t" << FstFW;
                    FstFixedWindowNums[i].clear(); FstFixedWindowDenoms[i].clear();
                } *outFileFixedWindow << std::endl;
                if (coordDouble > currentWindowEnd) {
                    currentWindowStart = currentWindowStart + opt::fixedWindowSize; currentWindowEnd = currentWindowEnd + opt::fixedWindowSize;
                } else if (coordDouble < currentWindowStart) {
                    currentWindowStart = 0; currentWindowEnd = 0 + opt::fixedWindowSize;
                }
            }
            
            coordDeque.push_back(coord); coordDeque.pop_front();
            if ((usedVariantNumber > opt::windowSize || opt::windowSize == opt::windowStep) && (usedVariantNumber % opt::windowStep == 0)) {
                *outFile << chr << "\t" << coordDeque[0] << "\t" << coord << "\t" << "N";
            }
            
            // Now calculate the Fst stats:
            double p1; double p2; int n1; int n2; double Fst;
            for (int i = 0; i != populationsToUse.size(); i++) {
                p1 = c->setAAFs.at(populationsToUse[i]); //assert(p_S1 == pS1test);
                p2 = c->setAAFsComplement.at(populationsToUse[i]);
                n1 = c->setAlleleCounts.at(populationsToUse[i]);
                n2 = c->setAlleleCountsComplement.at(populationsToUse[i]);
                // std::cerr << p1 << "\t" << p2 << "\t" << n1 << "\t" << n2 << std::endl;
                
                // Maximum missing data in the population is 20%, otherwise Fst is set to 0
                double FstNum; double FstDenom;
                if (n1 >= c->setSizes[i]*0.8) {
                    FstNum = calculateFstNumerator(p1, p2, n1, n2);
                    FstNumDeques[i].push_back(FstNum); FstNumDeques[i].pop_front();
                    FstDenom = calculateFstDenominator(p1, p2);
                    FstDenomDeques[i].push_back(FstDenom); FstDenomDeques[i].pop_front();
                } else {
                    FstNum = 0; FstNumDeques[i].push_back(FstNum); FstNumDeques[i].pop_front();
                    FstDenom = 0; FstDenomDeques[i].push_back(FstDenom); FstDenomDeques[i].pop_front();
                }
                    
               /* if (calculateFstNumerator(p1, p2, n1, n2)/calculateFstDenominator(p1, p2) > 1) {
                    std::cerr << chr << "\t" << coord << "\t" << p1 << "\t" << p2 << "\t" << n1 << "\t" << n2 << std::endl;
                } */
                
                if (!opt::annotFile.empty()) { if (SNPgeneDetails[0] != "") {
                    if (SNPgeneDetails[1] == "exon") {
                        FstGeneNumVectors[i][0].push_back(FstNum); FstGeneDenumVectors[i][0].push_back(FstDenom);
                    } else if (SNPgeneDetails[1] == "intron") {
                        FstGeneNumVectors[i][1].push_back(FstNum); FstGeneDenumVectors[i][1].push_back(FstDenom);
                    } else if (SNPgeneDetails[1] == "promoter") {
                        FstGeneNumVectors[i][2].push_back(FstNum); FstGeneDenumVectors[i][2].push_back(FstDenom);
                    }
                }}
                if ((usedVariantNumber > opt::windowSize || opt::windowSize == opt::windowStep) && (usedVariantNumber % opt::windowStep == 0)) {
                    // std::cerr << PBSresults[i][0][0] << std::endl;
                    Fst = vector_average(FstNumDeques[i])/vector_average(FstDenomDeques[i]); if (Fst < 0 || vector_average(FstDenomDeques[i]) == 0) { Fst = 0; }
                    *outFile << "\t" << Fst;
                }
                // }
            }
            if (!opt::annotFile.empty()) { if (previousGene != "" && currentGene != previousGene) {
                int nExonSNPs = (int)FstGeneNumVectors[0][0].size(); int nIntronSNPs = (int)FstGeneNumVectors[0][1].size(); int nPromoterSNPs = (int)FstGeneNumVectors[0][2].size();
                *outFileGenes << previousGene << "\t" << nExonSNPs << "\t" << nIntronSNPs << "\t" << nPromoterSNPs;
                double FstExons; double FstIntrons; double FstPromoters;
                for (int i = 0; i < populationsToUse.size(); i++) {
                    if (nExonSNPs > 0) { FstExons = vector_average(FstGeneNumVectors[i][0])/vector_average(FstGeneDenumVectors[i][0]); } else { FstExons = 0; }
                    if (nIntronSNPs > 0) { FstIntrons = vector_average(FstGeneNumVectors[i][1])/vector_average(FstGeneDenumVectors[i][1]); } else { FstIntrons = 0; }
                    if (nPromoterSNPs > 0) { FstPromoters = vector_average(FstGeneNumVectors[i][2])/vector_average(FstGeneDenumVectors[i][2]); } else { FstPromoters = 0; }
                    if (FstExons < 0) FstExons = 0; if (FstIntrons < 0) FstIntrons = 0; if (FstPromoters < 0) FstPromoters = 0;
                    *outFileGenes << "\t" << FstExons << "\t" << FstIntrons << "\t" << FstPromoters;
                    FstGeneNumVectors[i][0].clear(); FstGeneNumVectors[i][1].clear(); FstGeneNumVectors[i][2].clear();
                    FstGeneDenumVectors[i][0].clear(); FstGeneDenumVectors[i][1].clear(); FstGeneDenumVectors[i][2].clear();
                } *outFileGenes << std::endl;
                previousGene = currentGene;
            }}
            if ((usedVariantNumber > opt::windowSize || opt::windowSize == opt::windowStep) && (usedVariantNumber % opt::windowStep == 0)) {
                *outFile << std::endl;
            }
            durationCalculation = ( std::clock() - startCalculation ) / (double) CLOCKS_PER_SEC;
            delete c;
        }
    }
    
    return 0;
    
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x758, %rsp            # imm = 0x758
callq 0x8218d
leaq 0x5b0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x5e0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x610(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x640(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x218(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
xorl %eax, %eax
cmpq %rax, 0x5efd9(%rip)     # 0xdeee8
je 0x7ff6c
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r14
movq 0x5efbb(%rip), %rsi     # 0xdeee0
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8890
leaq 0x490(%rsp), %rsi
movq %r14, (%rsi)
leaq 0x388(%rsp), %rdi
xorl %edx, %edx
callq 0x32000
leaq 0x5a8(%rsp), %rdi
leaq 0x388(%rsp), %rsi
callq 0x70d3a
leaq 0x388(%rsp), %rdi
callq 0x32212
movq 0x5ef0d(%rip), %rsi     # 0xdee80
leaq 0x388(%rsp), %rdi
leaq 0x240(%rsp), %rdx
callq 0x21904
leaq 0x388(%rsp), %rdi
pushq $0x8
popq %rsi
callq 0x42587
movq %rax, 0x2b0(%rsp)
leaq 0x388(%rsp), %rdi
callq 0x8978
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r14
movq 0x5eedf(%rip), %rsi     # 0xdeea0
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8890
leaq 0x360(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x500(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x4d0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x4a0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x208(%rsp), %rbx
leaq 0x388(%rsp), %r15
leaq 0x358(%rsp), %r12
leaq 0x4f8(%rsp), %r13
movq %r14, %rdi
movq %rbx, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x800d7
movq %r15, %rdi
movq %rbx, %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq 0x388(%rsp), %rsi
addq $0x20, %rsi
movq %r12, %rdi
callq 0x3abd8
movq 0x388(%rsp), %rsi
movq %rax, %rdi
callq 0x2b0a4
movq 0x388(%rsp), %rbp
movq %r13, %rdi
movq %rbp, %rsi
callq 0x3210e
addq $0x20, %rbp
movq %rax, %rdi
movq %rbp, %rsi
callq 0x82a0
movq %r15, %rdi
callq 0x28a08
jmp 0x80060
xorpd %xmm0, %xmm0
leaq 0x2d0(%rsp), %rbx
movapd %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x20(%rsp), %r14
andq $0x0, 0x10(%r14)
movapd %xmm0, (%r14)
movq 0x370(%rsp), %r13
leaq 0x1f070(%rip), %r15     # 0x9f17a
leaq 0x203bf(%rip), %r12     # 0xa04d0
leaq 0x360(%rsp), %rax
cmpq %rax, %r13
je 0x80163
leaq 0x20(%r13), %rbp
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x2b0a4
movq %rbp, %rdi
movq %r15, %rsi
callq 0x2ea9b
testb %al, %al
je 0x80156
movq %rbp, %rdi
movq %r12, %rsi
callq 0x2ea9b
testb %al, %al
je 0x80156
movq %r14, %rdi
movq %rbp, %rsi
callq 0x2b0a4
movq %r13, %rdi
callq 0x8340
movq %rax, %r13
jmp 0x80111
movq 0x5ce7e(%rip), %rdi     # 0xdcfe8
leaq 0x32050(%rip), %rsi     # 0xb21c1
callq 0x8480
movq 0x2d8(%rsp), %rsi
subq 0x2d0(%rsp), %rsi
sarq $0x5, %rsi
movq %rax, %rdi
callq 0x8320
leaq 0x2033b(%rip), %rsi     # 0xa04d4
movq %rax, %rdi
callq 0x8480
movq %rax, %rdi
callq 0x8230
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x58(%rsp)
leaq 0x5ed41(%rip), %rsi     # 0xdef00
leaq 0x2fa05(%rip), %rdx     # 0xafbcb
leaq 0x140(%rsp), %rdi
callq 0x28806
movl 0x5d42b(%rip), %esi     # 0xdd604
leaq 0x188(%rsp), %rdi
callq 0x28ad3
leaq 0xa0(%rsp), %rdi
leaq 0x140(%rsp), %rsi
leaq 0x188(%rsp), %rdx
callq 0x28a48
leaq 0x235b2(%rip), %rdx     # 0xa37bc
leaq 0x70(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x28a29
movl 0x5d3e6(%rip), %esi     # 0xdd608
leaq 0x120(%rsp), %rdi
callq 0x28ad3
leaq 0x240(%rsp), %rdi
leaq 0x70(%rsp), %rsi
leaq 0x120(%rsp), %rdx
callq 0x28a48
leaq 0x2cbd5(%rip), %rdx     # 0xace25
leaq 0x388(%rsp), %rdi
leaq 0x240(%rsp), %rsi
callq 0x28a29
leaq 0x388(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0x58(%rsp), %rbx
movq %rbx, %rdi
callq 0x8900
leaq 0x388(%rsp), %rdi
callq 0x8978
leaq 0x240(%rsp), %rdi
callq 0x8978
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0x70(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0x188(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0x2f8fb(%rip), %rsi     # 0xafbd7
movq %rbx, %rdi
callq 0x8480
xorl %r14d, %r14d
leaq 0x19b30(%rip), %rbx     # 0x99e1e
xorl %r15d, %r15d
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x5, %rax
cmpq %r15, %rax
jbe 0x8032a
movq 0x58(%rsp), %rdi
movq %rbx, %rsi
callq 0x8480
movq 0x20(%rsp), %rsi
addq %r14, %rsi
movq %rax, %rdi
callq 0x8430
incq %r15
addq $0x20, %r14
jmp 0x802f1
movq 0x58(%rsp), %rdi
callq 0x8230
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x90(%rsp)
leaq 0x5ebb3(%rip), %rsi     # 0xdef00
leaq 0x2f89b(%rip), %rdx     # 0xafbef
leaq 0x70(%rsp), %rdi
callq 0x28806
movl 0x5d2a8(%rip), %esi     # 0xdd60c
leaq 0xa0(%rsp), %rdi
callq 0x28ad3
leaq 0x240(%rsp), %rdi
leaq 0x70(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
callq 0x28a48
leaq 0x2ca93(%rip), %rdx     # 0xace25
leaq 0x388(%rsp), %rdi
leaq 0x240(%rsp), %rsi
callq 0x28a29
leaq 0x388(%rsp), %rsi
pushq $0x10
popq %rdx
movq 0x90(%rsp), %rbx
movq %rbx, %rdi
callq 0x8900
leaq 0x388(%rsp), %rdi
callq 0x8978
leaq 0x240(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0x70(%rsp), %rdi
callq 0x8978
leaq 0x2f803(%rip), %rsi     # 0xafbfd
movq %rbx, %rdi
callq 0x8480
xorl %r14d, %r14d
leaq 0x19a12(%rip), %rbx     # 0x99e1e
xorl %r15d, %r15d
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x5, %rax
cmpq %r15, %rax
jbe 0x80448
movq 0x58(%rsp), %rdi
movq %rbx, %rsi
callq 0x8480
movq 0x20(%rsp), %rsi
addq %r14, %rsi
movq %rax, %rdi
callq 0x8430
incq %r15
addq $0x20, %r14
jmp 0x8040f
movq 0x90(%rsp), %rdi
callq 0x8230
cmpq $0x0, 0x5ea8b(%rip)     # 0xdeee8
je 0x806be
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %rbx
leaq 0x5ea89(%rip), %rsi     # 0xdef00
leaq 0x2f793(%rip), %rdx     # 0xafc11
leaq 0x120(%rsp), %rdi
callq 0x28806
leaq 0x5ea6e(%rip), %rdx     # 0xdef00
leaq 0x188(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x287e7
leaq 0x2330e(%rip), %rdx     # 0xa37bc
leaq 0x140(%rsp), %rdi
leaq 0x188(%rsp), %rsi
callq 0x28a29
movl 0x5d13b(%rip), %esi     # 0xdd604
leaq 0xe8(%rsp), %rdi
callq 0x28ad3
leaq 0xa0(%rsp), %rdi
leaq 0x140(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x28a48
leaq 0x232c2(%rip), %rdx     # 0xa37bc
leaq 0x70(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x28a29
movl 0x5d0f6(%rip), %esi     # 0xdd608
leaq 0x1e8(%rsp), %rdi
callq 0x28ad3
leaq 0x240(%rsp), %rdi
leaq 0x70(%rsp), %rsi
leaq 0x1e8(%rsp), %rdx
callq 0x28a48
leaq 0x2c8e5(%rip), %rdx     # 0xace25
leaq 0x388(%rsp), %rdi
leaq 0x240(%rsp), %rsi
callq 0x28a29
leaq 0x388(%rsp), %rsi
pushq $0x10
popq %rdx
movq %rbx, %rdi
callq 0x8900
leaq 0x388(%rsp), %rdi
callq 0x8978
leaq 0x240(%rsp), %rdi
callq 0x8978
leaq 0x1e8(%rsp), %rdi
callq 0x8978
leaq 0x70(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0x188(%rsp), %rdi
callq 0x8978
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0x2ee9c(%rip), %rsi     # 0xaf47d
movq %rbx, %rdi
callq 0x8480
leaq 0x2f632(%rip), %rsi     # 0xafc22
movq %rax, %rdi
callq 0x8480
xorl %r14d, %r14d
leaq 0x1981c(%rip), %r15     # 0x99e1e
leaq 0x2f64f(%rip), %r13     # 0xafc58
leaq 0x2eec1(%rip), %rbp     # 0xaf4d1
xorl %r12d, %r12d
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x5, %rax
cmpq %r12, %rax
jbe 0x806ac
movq %rbx, %rdi
movq %r15, %rsi
callq 0x8480
movq 0x20(%rsp), %rsi
addq %r14, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x2f602(%rip), %rsi     # 0xafc51
callq 0x8480
movq %rbx, %rdi
movq %r15, %rsi
callq 0x8480
movq 0x20(%rsp), %rsi
addq %r14, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %r13, %rsi
callq 0x8480
movq %rbx, %rdi
movq %r15, %rsi
callq 0x8480
movq 0x20(%rsp), %rsi
addq %r14, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
movq %rbp, %rsi
callq 0x8480
incq %r12
addq $0x20, %r14
jmp 0x80613
movq %rbx, 0x178(%rsp)
movq %rbx, %rdi
callq 0x8230
jmp 0x806be
movslq 0x5cf3f(%rip), %rsi     # 0xdd604
leaq 0x240(%rsp), %rdx
andq $0x0, (%rdx)
leaq 0x388(%rsp), %rdi
leaq 0x70(%rsp), %rcx
callq 0x7e966
movq 0x28(%rsp), %rsi
subq 0x20(%rsp), %rsi
sarq $0x5, %rsi
incq %rsi
leaq 0x1e8(%rsp), %rdi
leaq 0x388(%rsp), %rdx
leaq 0x240(%rsp), %rcx
callq 0x7e9c2
movq 0x28(%rsp), %rsi
subq 0x20(%rsp), %rsi
sarq $0x5, %rsi
incq %rsi
leaq 0x228(%rsp), %rdi
leaq 0x388(%rsp), %rdx
leaq 0x240(%rsp), %rcx
callq 0x7e9c2
movslq 0x5cebe(%rip), %rbx     # 0xdd604
leaq 0x16ed8(%rip), %rsi     # 0x97625
leaq 0x70(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x21904
leaq 0x240(%rsp), %rdi
leaq 0x70(%rsp), %rdx
leaq 0x140(%rsp), %rcx
movq %rbx, %rsi
callq 0x82476
leaq 0x70(%rsp), %rdi
callq 0x8978
movq 0x28(%rsp), %rsi
subq 0x20(%rsp), %rsi
sarq $0x5, %rsi
leaq 0x2b8(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0x79832
movq 0x28(%rsp), %rsi
subq 0x20(%rsp), %rsi
sarq $0x5, %rsi
leaq 0x308(%rsp), %rdi
leaq 0x70(%rsp), %rdx
callq 0x79832
movl 0x5ce40(%rip), %ebx     # 0xdd60c
leaq 0x2f0(%rsp), %rdi
pushq $0x3
popq %rsi
leaq 0x70(%rsp), %rdx
callq 0x79832
movq 0x28(%rsp), %rsi
subq 0x20(%rsp), %rsi
sarq $0x5, %rsi
leaq 0x1b0(%rsp), %rdi
leaq 0x2f0(%rsp), %rdx
leaq 0x70(%rsp), %rcx
callq 0x79c18
movq 0x28(%rsp), %rsi
subq 0x20(%rsp), %rsi
sarq $0x5, %rsi
leaq 0x1c8(%rsp), %rdi
leaq 0x2f0(%rsp), %rdx
leaq 0x70(%rsp), %rcx
callq 0x79c18
leaq 0x195e7(%rip), %rsi     # 0x99e1f
leaq 0x70(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x21904
movl %ebx, 0x6c(%rsp)
leaq 0x195ca(%rip), %rsi     # 0x99e1f
leaq 0xa0(%rsp), %rdi
leaq 0x140(%rsp), %rdx
callq 0x21904
andq $0x0, 0x330(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x320(%rsp)
leaq 0x160(%rsp), %r14
movapd %xmm0, (%r14)
andq $0x0, 0x10(%r14)
leaq 0x150(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0x198(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movq $0x0, 0x60(%rsp)
movb %cl, (%rax)
leaq 0x208(%rsp), %rbx
leaq 0x120(%rsp), %r13
xorl %r15d, %r15d
movl $0x0, 0x54(%rsp)
movq 0x2b0(%rsp), %rdi
movq %rbx, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x81b0b
movq 0x208(%rsp), %rdi
movq 0x210(%rsp), %rsi
addq %rdi, %rsi
movb $0xd, 0x120(%rsp)
movq %r13, %rdx
callq 0x61a56
movq 0x208(%rsp), %rdx
addq 0x210(%rsp), %rdx
movq %rbx, %rdi
movq %rax, %rsi
callq 0x80f0
movq 0x208(%rsp), %rax
cmpb $0x23, (%rax)
jne 0x80a13
movzbl 0x1(%rax), %eax
cmpl $0x23, %eax
je 0x808de
cmpl $0x43, %eax
jne 0x80a13
movq %r13, %rdi
movq %rbx, %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq %r14, %rdi
movq %r13, %rsi
callq 0x2f6c0
movq %r13, %rdi
callq 0x28a08
movq 0x160(%rsp), %rsi
movl $0x120, %eax            # imm = 0x120
addq %rax, %rsi
movq 0x168(%rsp), %rdx
leaq 0xe8(%rsp), %rdi
movq %r13, %rcx
callq 0x613fe
xorl %eax, %eax
movq %rax, 0x120(%rsp)
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rcx
subq %rsi, %rcx
sarq $0x5, %rcx
cmpq %rcx, %rax
je 0x80c7b
shlq $0x5, %rax
addq %rax, %rsi
leaq 0x4f8(%rsp), %rdi
callq 0x3210e
movq %rax, %rbp
leaq 0x498(%rsp), %rdi
movq %r13, %rsi
callq 0x4a546
movq %rax, %rdi
movq %rbp, %rsi
callq 0x82a0
movq 0x120(%rsp), %rax
incq %rax
jmp 0x809ac
incl %r15d
movl %r15d, %eax
cltd
movl $0x2710, %ecx           # imm = 0x2710
idivl %ecx
testl %edx, %edx
jne 0x80af3
callq 0x8310
subq 0x2a0(%rsp), %rax
cvtsi2sd %rax, %xmm0
divsd 0x1c945(%rip), %xmm0    # 0x9d388
movsd %xmm0, 0x8(%rsp)
movq 0x5c598(%rip), %rdi     # 0xdcfe8
leaq 0x1fc4f(%rip), %rsi     # 0xa06a6
callq 0x8480
movq %rax, %rdi
movl %r15d, %esi
callq 0x8840
movq %rax, %rdi
leaq 0x22b3d(%rip), %rsi     # 0xa35ae
callq 0x8480
movq %rax, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x25b68(%rip), %rsi     # 0xa65f6
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0x5c546(%rip), %rdi     # 0xdcfe8
leaq 0x2cbf6(%rip), %rsi     # 0xad69f
callq 0x8480
movq %rax, %rdi
movsd 0x298(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x2cbe5(%rip), %rsi     # 0xad6ae
callq 0x8480
movq %rax, %rdi
movsd 0x10(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x25b10(%rip), %rsi     # 0xa65f6
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq %r13, %rdi
movq %rbx, %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq %r14, %rdi
movq %r13, %rsi
callq 0x2f6c0
movq %r13, %rdi
callq 0x28a08
movq 0x160(%rsp), %rsi
leaq 0x140(%rsp), %rdi
callq 0x82a0
movq 0x160(%rsp), %rsi
addq $0x20, %rsi
leaq 0x188(%rsp), %rdi
callq 0x82a0
leaq 0x528(%rsp), %rdi
leaq 0x188(%rsp), %rsi
callq 0x8600
leaq 0x528(%rsp), %rbx
movq %rbx, %rdi
callq 0x402aa
movsd %xmm0, 0x40(%rsp)
movq %rbx, %rdi
callq 0x8978
movq 0x160(%rsp), %rsi
movl $0x120, %eax            # imm = 0x120
addq %rax, %rsi
movq 0x168(%rsp), %rdx
leaq 0x108(%rsp), %rdi
movq %r13, %rcx
callq 0x613fe
movq 0x160(%rsp), %rsi
addq $0x60, %rsi
movq %r13, %rdi
callq 0x8600
movq 0x160(%rsp), %rsi
subq $-0x80, %rsi
leaq 0xe8(%rsp), %rdi
callq 0x8600
cmpq $0x1, 0x128(%rsp)
ja 0x80bfc
cmpq $0x1, 0xf0(%rsp)
ja 0x80bfc
leaq 0xe8(%rsp), %rdi
leaq 0x30db7(%rip), %rsi     # 0xb19a6
callq 0x2193f
testb %al, %al
je 0x80d9a
andq $0x0, 0x128(%rsp)
movq 0x120(%rsp), %rax
xorl %ebx, %ebx
movb %bl, (%rax)
movq %r13, %rdi
callq 0x8930
andq $0x0, 0xf0(%rsp)
movq 0xe8(%rsp), %rax
movb %bl, (%rax)
leaq 0xe8(%rsp), %rbp
movq %rbp, %rdi
callq 0x8930
leaq 0x108(%rsp), %r12
movq %r12, %rdi
callq 0x32680
movq %r12, %rdi
callq 0x61b78
movq %rbp, %rdi
callq 0x8978
movq %r13, %rdi
callq 0x8978
movq %r12, %rdi
callq 0x28a08
testb %bl, %bl
leaq 0x208(%rsp), %rbx
jmp 0x808de
movq 0x370(%rsp), %rbp
leaq 0x360(%rsp), %rax
cmpq %rax, %rbp
je 0x80d7b
leaq 0x20(%rbp), %rsi
movq %r13, %rdi
callq 0x8600
leaq 0x40(%rbp), %rsi
leaq 0x108(%rsp), %r12
movq %r12, %rdi
callq 0x297dc
leaq 0xc0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
movq %r12, %rdx
callq 0x427bd
movq 0xc0(%rsp), %rax
cmpq 0xc8(%rsp), %rax
jne 0x80d29
movq 0x5c303(%rip), %rdi     # 0xdcfe8
leaq 0x1f94f(%rip), %rsi     # 0xa063b
callq 0x8480
movq %rax, %rdi
movq %r13, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1e629(%rip), %rsi     # 0x9f32f
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0xc0(%rsp), %rax
cmpq 0xc8(%rsp), %rax
je 0x81c44
leaq 0x4c8(%rsp), %rdi
movq %r13, %rsi
callq 0x4a596
movq %rax, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x4a5fc
leaq 0xc0(%rsp), %rdi
callq 0x2f68c
leaq 0x108(%rsp), %rdi
callq 0x28a08
movq %r13, %rdi
callq 0x8978
movq %rbp, %rdi
callq 0x8340
movq %rax, %rbp
jmp 0x80c83
callq 0x8310
movq %rax, 0x2a0(%rsp)
leaq 0xe8(%rsp), %rdi
callq 0x28a08
jmp 0x808de
callq 0x8310
movq %rax, %rbp
movl $0x2d0, %edi            # imm = 0x2D0
callq 0x8490
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rbx
movq 0x110(%rsp), %rdx
subq 0x108(%rsp), %rdx
shrq $0x5, %rdx
movq %rbx, %rdi
leaq 0x4c8(%rsp), %rsi
callq 0x824d2
movq %rbx, %rdi
leaq 0x108(%rsp), %rsi
leaq 0x498(%rsp), %rdx
callq 0x3ff64
movq %rbx, %rdi
leaq 0x20(%rsp), %rsi
callq 0x4000a
movq %rbx, 0xd8(%rsp)
leaq 0x108(%rsp), %rbx
movq %rbx, %rdi
callq 0x32680
movq %rbx, %rdi
movq 0xd8(%rsp), %rbx
callq 0x61b78
callq 0x8310
subq %rbp, %rax
cvtsi2sd %rax, %xmm0
divsd 0x1c54c(%rip), %xmm0    # 0x9d388
movsd %xmm0, 0x298(%rsp)
movq 0x48(%rsp), %rax
leaq 0xe0(%rax), %rdi
movq 0x20(%rsp), %rsi
movq %rdi, 0xe0(%rsp)
callq 0x43f2a
movq 0x60(%rsp), %rcx
incl %ecx
movl %ecx, 0x1c(%rsp)
movsd (%rax), %xmm0
ucomisd 0x1531e(%rip), %xmm0    # 0x96198
jne 0x80ea4
jp 0x80ea4
movq 0x48(%rsp), %rax
leaq 0x240(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x43f2a
movsd (%rax), %xmm0
ucomisd 0x152f8(%rip), %xmm0    # 0x96198
jne 0x80ea4
jnp 0x80eec
movq 0x20(%rsp), %rsi
movq 0xe0(%rsp), %rdi
callq 0x43f2a
movsd (%rax), %xmm0
ucomisd 0x1672e(%rip), %xmm0    # 0x975f0
jne 0x80f21
jp 0x80f21
movq 0x48(%rsp), %rax
leaq 0x240(%rax), %rdi
movq 0x20(%rsp), %rsi
callq 0x43f2a
movsd (%rax), %xmm0
ucomisd 0x16708(%rip), %xmm0    # 0x975f0
jne 0x80f21
jp 0x80f21
movq %rbx, %rdi
callq 0x82620
movl $0x2d0, %esi            # imm = 0x2D0
movq %rbx, %rdi
callq 0x84a0
xorl %ebx, %ebx
movl 0x1c(%rsp), %eax
movq %rax, 0x60(%rsp)
leaq 0xe8(%rsp), %rbp
leaq 0x108(%rsp), %r12
jmp 0x80c54
callq 0x8310
movq %rax, 0x290(%rsp)
movq 0x188(%rsp), %rdi
callq 0x86f0
leaq 0xc0(%rsp), %rdi
leaq 0x5a8(%rsp), %rsi
leaq 0x140(%rsp), %rdx
movl %eax, %ecx
callq 0x46bec
movq 0xc0(%rsp), %rdi
leaq 0x18eb6(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
movl 0x6c(%rsp), %ebx
je 0x80fb2
movq 0xc0(%rsp), %rsi
leaq 0x70(%rsp), %rdi
callq 0x82a0
leaq 0xa0(%rsp), %rdi
leaq 0x18e88(%rip), %rsi     # 0x99e1f
callq 0x2193f
testb %al, %al
je 0x80fb2
leaq 0xa0(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x82a0
cvtsi2sd %ebx, %xmm1
movsd 0x40(%rsp), %xmm0
movsd %xmm1, 0x10(%rsp)
ucomisd %xmm1, %xmm0
cvtsi2sdl 0x54(%rsp), %xmm1
movl %r15d, 0x1ac(%rsp)
ja 0x80fe0
ucomisd %xmm0, %xmm1
jbe 0x811a3
movsd %xmm1, 0x180(%rsp)
movq 0x2b8(%rsp), %rax
movq 0x8(%rax), %rbp
subq (%rax), %rbp
movq 0x90(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x18e07(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl 0x54(%rsp), %esi
callq 0x8840
movq %rax, %rdi
leaq 0x18dec(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl %ebx, %esi
callq 0x8840
movq %rax, %rdi
leaq 0x18dd3(%rip), %rsi     # 0x99e1e
callq 0x8480
shrq $0x3, %rbp
movq %rax, %rdi
movl %ebp, %esi
callq 0x8840
xorl %ebx, %ebx
xorl %r14d, %r14d
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x5, %rax
cmpq %rax, %r14
je 0x81159
testl %ebp, %ebp
jle 0x810f1
movq 0x2b8(%rsp), %rsi
addq %rbx, %rsi
leaq 0x478(%rsp), %rdi
callq 0x2f816
leaq 0x478(%rsp), %r12
movq %r12, %rdi
callq 0x2f7e9
movsd %xmm0, 0x8(%rsp)
movq 0x308(%rsp), %rsi
addq %rbx, %rsi
leaq 0x590(%rsp), %r15
movq %r15, %rdi
callq 0x2f816
movq %r15, %rdi
callq 0x2f7e9
movsd 0x8(%rsp), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movq %r15, %rdi
callq 0x2b43c
movq %r12, %rdi
callq 0x2b43c
jmp 0x810fb
xorpd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x90(%rsp), %rdi
leaq 0x18d14(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x8750
movq 0x2b8(%rsp), %rax
movq (%rax,%rbx), %rcx
cmpq %rcx, 0x8(%rax,%rbx)
je 0x81135
movq %rcx, 0x8(%rax,%rbx)
movq 0x308(%rsp), %rax
movq (%rax,%rbx), %rcx
cmpq %rcx, 0x8(%rax,%rbx)
je 0x8114d
movq %rcx, 0x8(%rax,%rbx)
incq %r14
addq $0x18, %rbx
jmp 0x81063
movq 0x90(%rsp), %rdi
callq 0x8230
movl 0x6c(%rsp), %ebx
movsd 0x40(%rsp), %xmm0
ucomisd 0x10(%rsp), %xmm0
movsd 0x180(%rsp), %xmm1
jbe 0x8118f
movl 0x5c485(%rip), %eax     # 0xdd60c
addl %eax, 0x54(%rsp)
addl %eax, %ebx
jmp 0x811a3
ucomisd %xmm0, %xmm1
jbe 0x811a3
movl $0x0, 0x54(%rsp)
movl 0x5c469(%rip), %ebx     # 0xdd60c
leaq 0x240(%rsp), %rdi
leaq 0x188(%rsp), %rsi
callq 0x82652
leaq 0x240(%rsp), %rdi
callq 0x8267c
movl 0x5c439(%rip), %eax     # 0xdd604
cmpl %eax, 0x60(%rsp)
setge %dl
movl 0x5c430(%rip), %ecx     # 0xdd608
cmpl %ecx, %eax
sete %al
orb %dl, %al
cmpb $0x1, %al
jne 0x8126d
movl 0x1c(%rsp), %eax
cltd
idivl %ecx
testl %edx, %edx
jne 0x8126d
movq 0x58(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x18c10(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rbp
leaq 0x250(%rsp), %rdi
xorl %esi, %esi
callq 0x82dee
movq %rbp, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x18be4(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x188(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x18bc5(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x2bbb7(%rip), %rsi     # 0xace1f
callq 0x8480
movl %ebx, 0x6c(%rsp)
movq 0x48(%rsp), %rax
leaq 0x240(%rax), %rcx
movq %rcx, 0x180(%rsp)
leaq 0x68(%rax), %rcx
movq %rcx, 0x2a8(%rsp)
addq $0x2a0, %rax            # imm = 0x2A0
movq %rax, 0x48(%rsp)
movq $0x0, 0x10(%rsp)
xorl %r14d, %r14d
xorl %r15d, %r15d
xorl %r12d, %r12d
movq 0xd8(%rsp), %rbx
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rax
subq %rsi, %rax
sarq $0x5, %rax
cmpq %rax, %r12
je 0x816b2
addq %r14, %rsi
movq 0xe0(%rsp), %rdi
callq 0x43f2a
movsd (%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x20(%rsp), %rsi
addq %r14, %rsi
movq 0x180(%rsp), %rdi
callq 0x43f2a
movsd (%rax), %xmm0
movsd %xmm0, 0x40(%rsp)
movq 0x20(%rsp), %rsi
addq %r14, %rsi
movq 0x2a8(%rsp), %rdi
callq 0x43738
movl (%rax), %ebp
movq 0x20(%rsp), %rsi
addq %r14, %rsi
movq 0x48(%rsp), %rdi
callq 0x43738
cvtsi2sd %ebp, %xmm0
movq 0xc8(%rbx), %rcx
movsd (%rcx,%r12,8), %xmm1
unpcklps 0x10ef6(%rip), %xmm1    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x10efe(%rip), %xmm1    # 0x92250
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
mulsd 0x22072(%rip), %xmm2    # 0xa33d8
ucomisd %xmm2, %xmm0
jae 0x813a3
andq $0x0, 0x98(%rsp)
movq 0x1e8(%rsp), %rdi
addq %r15, %rdi
leaq 0x98(%rsp), %rsi
callq 0x7edca
movq 0x1e8(%rsp), %rdi
addq %r15, %rdi
callq 0x7edf0
xorpd %xmm0, %xmm0
jmp 0x81415
movl (%rax), %esi
movsd 0x8(%rsp), %xmm0
movsd 0x40(%rsp), %xmm1
movl %ebp, %edi
callq 0x70f23
movsd %xmm0, 0x98(%rsp)
movq 0x1e8(%rsp), %rdi
addq %r15, %rdi
leaq 0x98(%rsp), %rsi
callq 0x7edca
movq 0x1e8(%rsp), %rdi
addq %r15, %rdi
callq 0x7edf0
movsd 0x161ff(%rip), %xmm1    # 0x975f0
movapd %xmm1, %xmm0
movsd 0x40(%rsp), %xmm3
subsd %xmm3, %xmm0
movsd 0x8(%rsp), %xmm2
subsd %xmm2, %xmm1
mulsd %xmm3, %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x1e0(%rsp)
movq 0x228(%rsp), %rdi
addq %r15, %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x7edca
movq 0x228(%rsp), %rdi
addq %r15, %rdi
callq 0x7edf0
cmpq $0x0, 0x5da9a(%rip)     # 0xdeee8
je 0x81575
movq 0xc0(%rsp), %rdi
leaq 0x189bc(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x81575
movq 0xc0(%rsp), %rdi
addq $0x20, %rdi
leaq 0x1eba9(%rip), %rsi     # 0xa002c
callq 0x2193f
testb %al, %al
je 0x814c0
movq 0x1b0(%rsp), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx), %rdi
leaq 0x98(%rsp), %rsi
callq 0x5a406
movq 0x1c8(%rsp), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx), %rdi
jmp 0x81568
movq 0xc0(%rsp), %rdi
addq $0x20, %rdi
leaq 0x17588(%rip), %rsi     # 0x98a5b
callq 0x2193f
testb %al, %al
je 0x81515
movq 0x1b0(%rsp), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx), %rdi
addq $0x18, %rdi
leaq 0x98(%rsp), %rsi
callq 0x5a406
movq 0x1c8(%rsp), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx), %rdi
addq $0x18, %rdi
jmp 0x81568
movq 0xc0(%rsp), %rdi
addq $0x20, %rdi
leaq 0x2dfaa(%rip), %rsi     # 0xaf4d2
callq 0x2193f
testb %al, %al
je 0x81575
movq 0x1b0(%rsp), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx), %rdi
addq $0x30, %rdi
leaq 0x98(%rsp), %rsi
callq 0x5a406
movq 0x1c8(%rsp), %rax
movq 0x10(%rsp), %rcx
movq (%rax,%rcx), %rdi
addq $0x30, %rdi
leaq 0x1e0(%rsp), %rsi
callq 0x5a406
movl 0x5c089(%rip), %eax     # 0xdd604
cmpl %eax, 0x60(%rsp)
setge %dl
movl 0x5c080(%rip), %ecx     # 0xdd608
cmpl %ecx, %eax
sete %al
orb %dl, %al
cmpb $0x1, %al
jne 0x8169c
movl 0x1c(%rsp), %eax
cltd
idivl %ecx
testl %edx, %edx
jne 0x8169c
movq 0x1e8(%rsp), %rsi
addq %r15, %rsi
leaq 0x668(%rsp), %rdi
callq 0x7ee96
leaq 0x668(%rsp), %rbp
movq %rbp, %rdi
callq 0x7ee0e
movsd %xmm0, 0x8(%rsp)
movq 0x228(%rsp), %rsi
addq %r15, %rsi
leaq 0x708(%rsp), %rbx
movq %rbx, %rdi
callq 0x7ee96
movq %rbx, %rdi
callq 0x7ee0e
movsd 0x8(%rsp), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movq %rbx, %rdi
callq 0x7f15c
movq %rbp, %rdi
callq 0x7f15c
xorpd %xmm0, %xmm0
ucomisd 0x8(%rsp), %xmm0
ja 0x8166b
movq 0x228(%rsp), %rsi
addq %r15, %rsi
leaq 0x6b8(%rsp), %rdi
callq 0x7ee96
leaq 0x6b8(%rsp), %rbx
movq %rbx, %rdi
callq 0x7ee0e
movsd %xmm0, 0x40(%rsp)
movq %rbx, %rdi
callq 0x7f15c
movsd 0x40(%rsp), %xmm0
ucomisd 0x14b31(%rip), %xmm0    # 0x96198
jne 0x81675
jp 0x81675
xorpd %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x58(%rsp), %rdi
leaq 0x1879d(%rip), %rsi     # 0x99e1e
callq 0x8480
movq 0xd8(%rsp), %rbx
movq %rax, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x8750
incq %r12
addq $0x50, %r15
addq $0x20, %r14
addq $0x18, 0x10(%rsp)
jmp 0x812b6
cmpq $0x0, 0x5d82e(%rip)     # 0xdeee8
leaq 0x340(%rsp), %rbp
je 0x81a5e
leaq 0xa0(%rsp), %rdi
leaq 0x18748(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x81a5e
leaq 0x70(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x311fd
testb %al, %al
je 0x81a5e
movq 0x1b0(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rbx
movq 0x20(%rax), %r14
subq (%rax), %rbx
subq 0x18(%rax), %r14
movq 0x38(%rax), %r15
subq 0x30(%rax), %r15
movq 0x178(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x186df(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rbx, %rsi
shrq $0x3, %rsi
movq %rax, %rdi
movq %rsi, 0x48(%rsp)
callq 0x8840
movq %rax, %rdi
leaq 0x186bc(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %r14, %rsi
shrq $0x3, %rsi
movq %rax, %rdi
movq %rsi, 0xe0(%rsp)
callq 0x8840
movq %rax, %rdi
leaq 0x18696(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %r15, %rsi
shrq $0x3, %rsi
movq %rax, %rdi
movq %rsi, %r15
callq 0x8840
xorl %ebx, %ebx
xorl %r14d, %r14d
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x5, %rax
cmpq %r14, %rax
jbe 0x81a3f
xorpd %xmm0, %xmm0
movsd %xmm0, 0x40(%rsp)
movsd %xmm0, 0x8(%rsp)
cmpl $0x0, 0x48(%rsp)
jle 0x81838
movq 0x1b0(%rsp), %rax
movq (%rax,%rbx), %rsi
movq %rbp, %rdi
callq 0x2f816
movq %rbp, %rdi
callq 0x2f7e9
movsd %xmm0, 0x8(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax,%rbx), %rsi
leaq 0x578(%rsp), %r12
movq %r12, %rdi
callq 0x2f816
movq %r12, %rdi
callq 0x2f7e9
movsd 0x8(%rsp), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, 0x8(%rsp)
movq %r12, %rdi
callq 0x2b43c
movq %rbp, %rdi
callq 0x2b43c
cmpl $0x0, 0xe0(%rsp)
jle 0x818c9
movq 0x1b0(%rsp), %rax
movq (%rax,%rbx), %rsi
addq $0x18, %rsi
leaq 0x460(%rsp), %rdi
callq 0x2f816
leaq 0x460(%rsp), %r12
movq %r12, %rdi
callq 0x2f7e9
movsd %xmm0, 0x40(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax,%rbx), %rsi
addq $0x18, %rsi
leaq 0x560(%rsp), %rbp
movq %rbp, %rdi
callq 0x2f816
movq %rbp, %rdi
callq 0x2f7e9
movsd 0x40(%rsp), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, 0x40(%rsp)
movq %rbp, %rdi
callq 0x2b43c
movq %r12, %rdi
callq 0x2b43c
leaq 0x340(%rsp), %rbp
testl %r15d, %r15d
jle 0x81957
movq 0x1b0(%rsp), %rax
movq (%rax,%rbx), %rsi
addq $0x30, %rsi
leaq 0x448(%rsp), %rdi
callq 0x2f816
leaq 0x448(%rsp), %r12
movq %r12, %rdi
callq 0x2f7e9
movsd %xmm0, 0x10(%rsp)
movq 0x1c8(%rsp), %rax
movq (%rax,%rbx), %rsi
addq $0x30, %rsi
leaq 0x548(%rsp), %rbp
movq %rbp, %rdi
callq 0x2f816
movq %rbp, %rdi
callq 0x2f7e9
movsd 0x10(%rsp), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, 0x10(%rsp)
movq %rbp, %rdi
callq 0x2b43c
movq %r12, %rdi
callq 0x2b43c
leaq 0x340(%rsp), %rbp
jmp 0x81961
xorpd %xmm0, %xmm0
movsd %xmm0, 0x10(%rsp)
movq 0x178(%rsp), %rdi
leaq 0x184ae(%rip), %rsi     # 0x99e1e
callq 0x8480
xorpd %xmm0, %xmm0
maxsd 0x8(%rsp), %xmm0
movq %rax, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1848d(%rip), %rsi     # 0x99e1e
callq 0x8480
xorpd %xmm0, %xmm0
maxsd 0x40(%rsp), %xmm0
movq %rax, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1846c(%rip), %rsi     # 0x99e1e
callq 0x8480
xorpd %xmm0, %xmm0
maxsd 0x10(%rsp), %xmm0
movq %rax, %rdi
callq 0x8750
movq 0x1b0(%rsp), %rax
movq (%rax,%rbx), %rax
movq (%rax), %rcx
cmpq %rcx, 0x8(%rax)
je 0x819e2
movq %rcx, 0x8(%rax)
movq 0x18(%rax), %rcx
cmpq %rcx, 0x20(%rax)
je 0x819f0
movq %rcx, 0x20(%rax)
movq 0x30(%rax), %rcx
cmpq %rcx, 0x38(%rax)
je 0x819fe
movq %rcx, 0x38(%rax)
movq 0x1c8(%rsp), %rax
movq (%rax,%rbx), %rax
movq (%rax), %rcx
cmpq %rcx, 0x8(%rax)
je 0x81a17
movq %rcx, 0x8(%rax)
movq 0x18(%rax), %rcx
cmpq %rcx, 0x20(%rax)
je 0x81a25
movq %rcx, 0x20(%rax)
movq 0x30(%rax), %rcx
cmpq %rcx, 0x38(%rax)
je 0x81a33
movq %rcx, 0x38(%rax)
incq %r14
addq $0x18, %rbx
jmp 0x817a4
movq 0x178(%rsp), %rdi
callq 0x8230
leaq 0xa0(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x82a0
movl 0x5bba0(%rip), %eax     # 0xdd604
cmpl %eax, 0x60(%rsp)
setge %dl
movl 0x5bb97(%rip), %ecx     # 0xdd608
cmpl %ecx, %eax
sete %al
orb %dl, %al
cmpb $0x1, %al
jne 0x81a91
movl 0x1c(%rsp), %eax
cltd
idivl %ecx
testl %edx, %edx
jne 0x81a91
movq 0x58(%rsp), %rdi
callq 0x8230
callq 0x8310
subq 0x290(%rsp), %rax
cvtsi2sd %rax, %xmm0
divsd 0x1b8dd(%rip), %xmm0    # 0x9d388
movsd %xmm0, 0x10(%rsp)
movq 0xd8(%rsp), %rbx
movq %rbx, %rdi
callq 0x82620
movl $0x2d0, %esi            # imm = 0x2D0
movq %rbx, %rdi
callq 0x84a0
leaq 0xc0(%rsp), %rdi
callq 0x28a08
movb $0x1, %bl
movl 0x1c(%rsp), %eax
movq %rax, 0x60(%rsp)
leaq 0x160(%rsp), %r14
leaq 0xe8(%rsp), %rbp
leaq 0x108(%rsp), %r12
movl 0x1ac(%rsp), %r15d
jmp 0x80c54
leaq 0x188(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0x160(%rsp), %rdi
callq 0x28a08
leaq 0x320(%rsp), %rdi
callq 0x28a08
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0x70(%rsp), %rdi
callq 0x8978
leaq 0x1c8(%rsp), %rdi
callq 0x79884
leaq 0x1b0(%rsp), %rdi
callq 0x79884
leaq 0x2f0(%rsp), %rdi
callq 0x37c74
leaq 0x308(%rsp), %rdi
callq 0x37c74
leaq 0x2b8(%rsp), %rdi
callq 0x37c74
leaq 0x240(%rsp), %rdi
callq 0x826a6
leaq 0x228(%rsp), %rdi
callq 0x7ef5a
leaq 0x1e8(%rsp), %rdi
callq 0x7ef5a
leaq 0x388(%rsp), %rdi
callq 0x7f15c
leaq 0x20(%rsp), %rdi
callq 0x28a08
leaq 0x2d0(%rsp), %rdi
callq 0x28a08
leaq 0x498(%rsp), %rdi
callq 0x4a9bc
leaq 0x4c8(%rsp), %rdi
callq 0x4aa20
leaq 0x4f8(%rsp), %rdi
callq 0x33008
leaq 0x358(%rsp), %rdi
callq 0x32f44
leaq 0x5a8(%rsp), %rdi
callq 0x32212
leaq 0x208(%rsp), %rdi
callq 0x8978
xorl %eax, %eax
addq $0x758, %rsp            # imm = 0x758
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1ea1a(%rip), %rdi     # 0xa0665
leaq 0x2e010(%rip), %rsi     # 0xafc62
leaq 0x2e01f(%rip), %rcx     # 0xafc78
movl $0xa5, %edx
callq 0x82f0
jmp 0x81fb0
jmp 0x81fb0
jmp 0x81f94
jmp 0x81fb0
movq %rbx, %rdi
movq %rax, %rbx
movl $0x2d0, %esi            # imm = 0x2D0
callq 0x84a0
jmp 0x81fc0
movq %rax, %rbx
leaq 0x448(%rsp), %rdi
jmp 0x81f62
movq %rax, %rbx
leaq 0x460(%rsp), %rdi
jmp 0x81f62
movq %rax, %rbx
leaq 0x340(%rsp), %rdi
jmp 0x81f62
jmp 0x81fb0
movq %rbx, %r14
movq %rax, %rbx
leaq 0x388(%rsp), %rdi
callq 0x8978
jmp 0x81cdc
movq %rbx, %r14
movq %rax, %rbx
leaq 0x240(%rsp), %rdi
callq 0x8978
jmp 0x81cf1
movq %rbx, %r14
movq %rax, %rbx
leaq 0x1e8(%rsp), %rdi
callq 0x8978
jmp 0x81d06
movq %rbx, %r14
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x8978
jmp 0x81d18
movq %rbx, %r14
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0x188(%rsp), %rdi
callq 0x8978
leaq 0x120(%rsp), %rdi
callq 0x8978
movl $0x200, %esi            # imm = 0x200
movq %r14, %rdi
jmp 0x81ef8
movq %rbx, %r14
movq %rax, %rbx
jmp 0x81d25
movq %rbx, %r14
movq %rax, %rbx
jmp 0x81d32
movq %rbx, %r14
movq %rax, %rbx
jmp 0x81d3f
movq %rbx, %r14
movq %rax, %rbx
jmp 0x81d4c
movq %rbx, %r14
movq %rax, %rbx
jmp 0x81d59
movq %rax, %rbx
leaq 0x388(%rsp), %rdi
callq 0x32212
jmp 0x8216b
jmp 0x81f3d
jmp 0x81f11
jmp 0x81f3d
jmp 0x81fb0
jmp 0x81ff6
jmp 0x81ff6
movq %rax, %rbx
jmp 0x8208f
movq %rax, %rbx
jmp 0x82099
movq %rax, %rbx
jmp 0x820a6
movq %rax, %rbx
jmp 0x820b3
movq %rax, %rbx
jmp 0x820c0
movq %rax, %rbx
jmp 0x820cd
movq %rax, %rbx
jmp 0x820da
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x8978
jmp 0x820e7
movq %rax, %rbx
jmp 0x820e7
movq %rax, %rbx
jmp 0x820f4
movq %rax, %rbx
jmp 0x82101
jmp 0x8211d
movq %rax, %rbx
leaq 0x388(%rsp), %rdi
callq 0x8978
jmp 0x81e3d
movq %rax, %rbx
leaq 0x240(%rsp), %rdi
callq 0x8978
jmp 0x81e4f
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x8978
jmp 0x81e61
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x8978
jmp 0x81e70
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x90(%rsp), %rdi
jmp 0x81ef8
movq %rax, %rbx
leaq 0x388(%rsp), %rdi
callq 0x8978
jmp 0x81e94
movq %rax, %rbx
leaq 0x240(%rsp), %rdi
callq 0x8978
jmp 0x81ea6
movq %rax, %rbx
leaq 0x120(%rsp), %rdi
callq 0x8978
jmp 0x81eb8
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x8978
jmp 0x81ec7
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0x188(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
movl $0x200, %esi            # imm = 0x200
movq 0x58(%rsp), %rdi
callq 0x84a0
jmp 0x82120
movq %rax, %rbx
jmp 0x81ed4
movq %rax, %rbx
jmp 0x81ee1
movq %rax, %rbx
jmp 0x81eee
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r14, %rdi
callq 0x84a0
jmp 0x8216b
jmp 0x81f3d
movq %rax, %rbx
leaq 0x388(%rsp), %rdi
callq 0x8978
jmp 0x8216b
movq %rax, %rbx
jmp 0x8216b
movq %rax, %rbx
leaq 0x668(%rsp), %rdi
callq 0x7f15c
jmp 0x81fb3
movq %rax, %rbx
leaq 0x478(%rsp), %rdi
callq 0x2b43c
jmp 0x81fb3
jmp 0x81ff6
movq %rax, %rbx
leaq 0x528(%rsp), %rdi
callq 0x8978
jmp 0x8204e
movq %rax, %rbx
jmp 0x81fcd
jmp 0x81ff6
movq %rax, %rbx
jmp 0x81fda
jmp 0x8211d
movq %rax, %rbx
jmp 0x81fc0
jmp 0x8211d
jmp 0x8211d
jmp 0x8211d
jmp 0x81fb0
jmp 0x81fb0
jmp 0x81ff6
jmp 0x81fb0
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x28a08
leaq 0xe8(%rsp), %rdi
callq 0x8978
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0x108(%rsp), %rdi
jmp 0x82049
jmp 0x82012
movq %rax, %rbx
jmp 0x82034
movq %rax, %rbx
jmp 0x82027
jmp 0x81ff6
jmp 0x81ff6
jmp 0x81ffb
movq %rax, %rbx
jmp 0x8204e
movq %rax, %rbx
jmp 0x82137
jmp 0x8211d
jmp 0x8211d
jmp 0x8211d
movq %rax, %rbx
jmp 0x82041
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x2f68c
leaq 0x108(%rsp), %rdi
callq 0x28a08
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0xe8(%rsp), %rdi
callq 0x28a08
leaq 0x188(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0x160(%rsp), %rdi
callq 0x28a08
leaq 0x320(%rsp), %rdi
callq 0x28a08
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0x70(%rsp), %rdi
callq 0x8978
leaq 0x1c8(%rsp), %rdi
callq 0x79884
leaq 0x1b0(%rsp), %rdi
callq 0x79884
leaq 0x2f0(%rsp), %rdi
callq 0x37c74
leaq 0x308(%rsp), %rdi
callq 0x37c74
leaq 0x2b8(%rsp), %rdi
callq 0x37c74
leaq 0x240(%rsp), %rdi
callq 0x826a6
leaq 0x228(%rsp), %rdi
callq 0x7ef5a
leaq 0x1e8(%rsp), %rdi
callq 0x7ef5a
leaq 0x388(%rsp), %rdi
callq 0x7f15c
jmp 0x82120
movq %rax, %rbx
leaq 0x388(%rsp), %rdi
jmp 0x82132
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x28a08
leaq 0x2d0(%rsp), %rdi
callq 0x28a08
leaq 0x498(%rsp), %rdi
callq 0x4a9bc
leaq 0x4c8(%rsp), %rdi
callq 0x4aa20
leaq 0x4f8(%rsp), %rdi
callq 0x33008
leaq 0x358(%rsp), %rdi
callq 0x32f44
leaq 0x5a8(%rsp), %rdi
callq 0x32212
leaq 0x208(%rsp), %rdi
callq 0x8978
movq %rbx, %rdi
callq 0x8870