// File: millanek[P]evo/evo_protein_SegregatingSites.cpp
// Function: ProteinSs(int, char**)
int ProteinSs(int argc, char** argv) {
    parseProteinSsOptions(argc, argv);
    std::vector<string> allAligmentFiles; string AAFileName;
    std::vector<string> allNewLabels;
    
    
    std::cerr << "Outputting segregating sites" << std::endl;
    
    if (opt::alignmentFile != "") {
        allAligmentFiles.push_back(opt::alignmentFile);
        // look at suffix
        size_t suffixPos = opt::alignmentFile.find_last_of('.');
        if (suffixPos !=  std::string::npos) {
            if (opt::alignmentFile.substr(suffixPos) == ".fa" || opt::alignmentFile.substr(suffixPos) == ".fasta")
                std::cerr << "for the gene: " << stripExtension(opt::alignmentFile) << std::endl;
            else
                std::cerr << "for the gene: " << opt::alignmentFile << std::endl;
        } else {
            std::cerr << "for the gene: " << opt::alignmentFile << std::endl;
        }
    } else {
        std::ifstream* alignmentList = new std::ifstream(opt::alignmentListFile.c_str());
        std::cerr << "for the genes in: " << opt::alignmentListFile << std::endl;
        std::string line;
        while (getline(*alignmentList, line)) {
            allAligmentFiles.push_back(line);
        }
    }
    if (opt::newLabelFile != "") {
        std::cerr << "using labels from: " << opt::newLabelFile << std::endl;
        std::ifstream* newLabels = new std::ifstream(opt::newLabelFile.c_str());
        std::string line;
        while (getline(*newLabels, line)) {
            allNewLabels.push_back(line);
        }
    }
    
    // Loop over the mutiple alignment files:
    for (std::vector<std::string>::size_type i = 0; i != allAligmentFiles.size(); i++) {
        std::ifstream* alignment = new std::ifstream(allAligmentFiles[i].c_str());
        std::vector<string> allSeqs; std::vector<string> allSeqsAA;
        std::vector<int> ssPos;
        // Load the DNA alignment
        std::string line; int lineNum = 1;
        while (getline(*alignment, line)) {
            if (lineNum % 2 == 1) assert(line[0] == '>');
            lineNum++;
            if (line[0] == '>' && opt::newLabelFile != "") continue;
            if (line[0] == '>' && opt::newLabelFile == "") { allNewLabels.push_back(line); continue; }
            allSeqs.push_back(line);
        } alignment->close();
        
        // std::cerr << "loaded seqs for: " << allAligmentFiles[i] << std::endl;
        //std::cerr << "allSeqs.size(): " << allSeqs.size() << std::endl;
        // Translate to Amino Acid sequences:
        std::string::size_type geneLength = allSeqs[0].length();
        int numSamples = (int)allSeqs.size();
        std::vector<string> altCodons; altCodons.resize(numSamples);
        allSeqsAA.resize(numSamples);
        std::vector<string> uniqueHpt; std::vector<string> uniqueNames;
        std::vector<string> otherSamples;
        if (numSamples > 0) {
            for (std::vector<std::string>::size_type j = 0; j != numSamples; j++) {
                allSeqsAA[j].reserve(geneLength);
            }
            for (string::size_type k = 0; k != geneLength; k++) {
                // Find if it's a segregating site:
                bool segregating = false;
                for (std::vector<std::string>::size_type j = 0; j != numSamples - 1; j++) {
                    for (std::vector<std::string>::size_type l = j + 1; l != numSamples; l++) {
                        if (allSeqs[j][k] != allSeqs[l][k]) {
                            segregating = true; break;
                        }
                    }
                    if (segregating) break;
                }
                if (segregating) {
                    ssPos.push_back((int)k+1);
                    for (std::vector<std::string>::size_type j = 0; j != numSamples; j++) {
                        allSeqsAA[j] += allSeqs[j][k];
                    }
                }
            }
            
            // Only print unique haplotypes (and keep a list of other samples with the same):
            // otherSamples.resize(numSamples);
            for (std::vector<std::string>::size_type j = 0; j != numSamples; j++) {
                bool unique = true;
                for (std::vector<std::string>::size_type l = 0; l != uniqueHpt.size(); l++) {
                    if (allSeqsAA[j] == uniqueHpt[l]) {
                        unique = false;
                        if (otherSamples[l] != "") otherSamples[l] += ',';
                        otherSamples[l] += allNewLabels[j].substr(1);
                    }
                }
                if (unique) {
                    uniqueHpt.push_back(allSeqsAA[j]);
                    uniqueNames.push_back(allNewLabels[j]);
                    otherSamples.push_back("");
                }
            }
            
            string ancSeq = allSeqsAA[0];  // For now we don't know the ancestral states at the segregating sites
                                            // so just arbitrarily taking the first one as the reference
            for (string::size_type k = 0; k != ancSeq.length(); k++) {
                for (std::vector<std::string>::size_type j = 1; j != numSamples; j++) {
                    if (allSeqsAA[j][k] == ancSeq[k]) {
                        allSeqsAA[j][k] = '.';
                    }
                }
                for (std::vector<std::string>::size_type j = 1; j != uniqueHpt.size(); j++) {
                    if (uniqueHpt[j][k] == ancSeq[k]) {
                        uniqueHpt[j][k] = '.';
                    }
                }
            }
        } else{
            std::cerr << allAligmentFiles[i] << "has no alignment.." << std::endl;
        }
        //std::cerr << "processed seqs for: " << allAligmentFiles[i] << std::endl;
        //std::cerr << "going to output: " << allAligmentFiles[i] << std::endl;
        size_t suffixPos = allAligmentFiles[i].find_last_of('.');
        if (suffixPos != std::string::npos) {
            if (allAligmentFiles[i].substr(suffixPos) == ".fa" || allAligmentFiles[i].substr(suffixPos) == ".fasta")
                AAFileName = opt::outFolder + stripExtension(allAligmentFiles[i]) + "_ssPos.txt";
            else
                AAFileName = opt::outFolder + allAligmentFiles[i] + "_ssPos.txt";
        } else {
            AAFileName = opt::outFolder + allAligmentFiles[i] + "_ssPos.txt";
        }
        //std::cerr << "into: " << AAFileName << std::endl;
        std::ofstream* AAalignment = new std::ofstream(AAFileName.c_str());
        *AAalignment << "Amino Acid positions:" << "\t"; print_vector(ssPos, *AAalignment,' ');
        /*
        for (std::vector<std::string>::size_type j = 0; j != numSamples; j++) {
            if (allNewLabels[j].length() < 16)
                *AAalignment << allNewLabels[j] << "\t\t" << allSeqsAA[j] << std::endl;
            else
                *AAalignment << allNewLabels[j] << "\t" << allSeqsAA[j] << std::endl;
        } AAalignment->close(); */
        for (std::vector<std::string>::size_type j = 0; j != uniqueHpt.size(); j++) {
            if (uniqueNames[j].length() < 16)
                *AAalignment << uniqueNames[j] << "\t\t" << uniqueHpt[j] << "\t" << otherSamples [j] << std::endl;
            else
                *AAalignment << uniqueNames[j] << "\t" << uniqueHpt[j] << "\t" << otherSamples [j] << std::endl;
        } AAalignment->close();
        
        
        
    }
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x660, %rsp            # imm = 0x660
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x5f580
leaq -0x28(%rbp), %rdi
callq 0x48da0
leaq -0x48(%rbp), %rdi
callq 0xa820
leaq -0x60(%rbp), %rdi
callq 0x48da0
movq 0x13b300(%rip), %rdi    # 0x198ff0
leaq 0xd8149(%rip), %rsi     # 0x135e40
callq 0xa5c0
movq %rax, -0x450(%rbp)
jmp 0x5dd05
movq -0x450(%rbp), %rdi
movq 0x13b275(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5dd1a
leaq 0x13c42f(%rip), %rdi    # 0x19a150
leaq 0xd81b7(%rip), %rsi     # 0x135edf
callq 0x50eb0
movb %al, -0x451(%rbp)
jmp 0x5dd35
movb -0x451(%rbp), %al
testb $0x1, %al
jne 0x5dd44
jmp 0x5dfec
leaq 0x13c405(%rip), %rsi    # 0x19a150
leaq -0x28(%rbp), %rdi
callq 0x48dc0
jmp 0x5dd56
leaq 0x13c3f3(%rip), %rdi    # 0x19a150
movl $0x2e, %esi
movq $-0x1, %rdx
callq 0xabf0
movq %rax, -0x78(%rbp)
cmpq $-0x1, -0x78(%rbp)
je 0x5df98
movq -0x78(%rbp), %rdx
movb $0x0, -0xb9(%rbp)
leaq 0x13c3c1(%rip), %rsi    # 0x19a150
leaq -0x98(%rbp), %rdi
movq $-0x1, %rcx
callq 0xa5f0
jmp 0x5dda4
leaq 0xe7a1f(%rip), %rsi     # 0x1457ca
leaq -0x98(%rbp), %rdi
callq 0x2d770
movb %al, -0x452(%rbp)
jmp 0x5ddbf
movb -0x452(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x453(%rbp)
jne 0x5de24
jmp 0x5ddd4
movq -0x78(%rbp), %rdx
leaq 0x13c371(%rip), %rsi    # 0x19a150
leaq -0xb8(%rbp), %rdi
movq $-0x1, %rcx
callq 0xa5f0
jmp 0x5ddf4
movb $0x1, -0xb9(%rbp)
leaq 0xd8f57(%rip), %rsi     # 0x136d59
leaq -0xb8(%rbp), %rdi
callq 0x2d770
movb %al, -0x454(%rbp)
jmp 0x5de16
movb -0x454(%rbp), %al
movb %al, -0x453(%rbp)
jmp 0x5de24
movb -0x453(%rbp), %al
movb %al, -0x455(%rbp)
testb $0x1, -0xb9(%rbp)
jne 0x5de3b
jmp 0x5de47
leaq -0xb8(%rbp), %rdi
callq 0xac88
leaq -0x98(%rbp), %rdi
callq 0xac88
movb -0x455(%rbp), %al
testb $0x1, %al
jne 0x5de62
jmp 0x5df47
movq 0x13b187(%rip), %rdi    # 0x198ff0
leaq 0xd7fed(%rip), %rsi     # 0x135e5d
callq 0xa5c0
movq %rax, -0x460(%rbp)
jmp 0x5de7e
leaq 0x13c2cb(%rip), %rsi    # 0x19a150
leaq -0xe0(%rbp), %rdi
callq 0x7be70
jmp 0x5de93
movq -0x460(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0xa520
movq %rax, -0x468(%rbp)
jmp 0x5deaf
movq -0x468(%rbp), %rdi
movq 0x13b0cb(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5dec4
leaq -0xe0(%rbp), %rdi
callq 0xac88
jmp 0x5df96
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x5f54e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x5df19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
testb $0x1, -0xb9(%rbp)
jne 0x5df0b
jmp 0x5df17
leaq -0xb8(%rbp), %rdi
callq 0xac88
jmp 0x5df19
leaq -0x98(%rbp), %rdi
callq 0xac88
jmp 0x5f54e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0xac88
jmp 0x5f54e
movq 0x13b0a2(%rip), %rdi    # 0x198ff0
leaq 0xd7f08(%rip), %rsi     # 0x135e5d
callq 0xa5c0
movq %rax, -0x470(%rbp)
jmp 0x5df63
movq -0x470(%rbp), %rdi
leaq 0x13c1df(%rip), %rsi    # 0x19a150
callq 0xa520
movq %rax, -0x478(%rbp)
jmp 0x5df7f
movq -0x478(%rbp), %rdi
movq 0x13affb(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5df94
jmp 0x5df96
jmp 0x5dfe7
movq 0x13b051(%rip), %rdi    # 0x198ff0
leaq 0xd7eb7(%rip), %rsi     # 0x135e5d
callq 0xa5c0
movq %rax, -0x480(%rbp)
jmp 0x5dfb4
movq -0x480(%rbp), %rdi
leaq 0x13c18e(%rip), %rsi    # 0x19a150
callq 0xa520
movq %rax, -0x488(%rbp)
jmp 0x5dfd0
movq -0x488(%rbp), %rdi
movq 0x13afaa(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5dfe5
jmp 0x5dfe7
jmp 0x5e12d
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0x490(%rbp)
jmp 0x5dfff
leaq 0x13c16a(%rip), %rdi    # 0x19a170
callq 0xa220
movq -0x490(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0xab90
jmp 0x5e021
movq -0x490(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq 0x13afba(%rip), %rdi    # 0x198ff0
leaq 0xd471b(%rip), %rsi     # 0x132758
callq 0xa5c0
movq %rax, -0x498(%rbp)
jmp 0x5e04b
movq -0x498(%rbp), %rdi
leaq 0x13c117(%rip), %rsi    # 0x19a170
callq 0xa520
movq %rax, -0x4a0(%rbp)
jmp 0x5e067
movq -0x4a0(%rbp), %rdi
movq 0x13af13(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5e07c
leaq -0x108(%rbp), %rdi
callq 0xa820
movq -0xe8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0xa0d0
movq %rax, -0x4a8(%rbp)
jmp 0x5e0a4
movq -0x4a8(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0x4a9(%rbp)
jmp 0x5e0c2
movb -0x4a9(%rbp), %al
testb $0x1, %al
jne 0x5e0ce
jmp 0x5e121
leaq -0x28(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x48dc0
jmp 0x5e0e0
jmp 0x5e088
movq -0x490(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x5f54e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xac88
jmp 0x5f54e
leaq -0x108(%rbp), %rdi
callq 0xac88
leaq 0x13c05c(%rip), %rdi    # 0x19a190
leaq 0xd7da4(%rip), %rsi     # 0x135edf
callq 0x50eb0
movb %al, -0x4aa(%rbp)
jmp 0x5e148
movb -0x4aa(%rbp), %al
testb $0x1, %al
jne 0x5e157
jmp 0x5e298
movq 0x13ae92(%rip), %rdi    # 0x198ff0
leaq 0xd6dc9(%rip), %rsi     # 0x134f2e
callq 0xa5c0
movq %rax, -0x4b8(%rbp)
jmp 0x5e173
movq -0x4b8(%rbp), %rdi
leaq 0x13c00f(%rip), %rsi    # 0x19a190
callq 0xa520
movq %rax, -0x4c0(%rbp)
jmp 0x5e18f
movq -0x4c0(%rbp), %rdi
movq 0x13adeb(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5e1a4
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0x4c8(%rbp)
jmp 0x5e1b7
leaq 0x13bfd2(%rip), %rdi    # 0x19a190
callq 0xa220
movq -0x4c8(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0xab90
jmp 0x5e1d9
movq -0x4c8(%rbp), %rax
movq %rax, -0x110(%rbp)
leaq -0x130(%rbp), %rdi
callq 0xa820
movq -0x110(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0xa0d0
movq %rax, -0x4d0(%rbp)
jmp 0x5e20f
movq -0x4d0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0x4d1(%rbp)
jmp 0x5e22d
movb -0x4d1(%rbp), %al
testb $0x1, %al
jne 0x5e239
jmp 0x5e28c
leaq -0x60(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x48dc0
jmp 0x5e24b
jmp 0x5e1f3
movq -0x4c8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x5f54e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x130(%rbp), %rdi
callq 0xac88
jmp 0x5f54e
leaq -0x130(%rbp), %rdi
callq 0xac88
movq $0x0, -0x138(%rbp)
movq -0x138(%rbp), %rax
movq %rax, -0x4e0(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x4e0(%rbp), %rax
cmpq %rcx, %rax
je 0x5f528
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0x4e8(%rbp)
jmp 0x5e2e0
movq -0x138(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
callq 0xa220
movq -0x4e8(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0xab90
jmp 0x5e30e
movq -0x4e8(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x48da0
leaq -0x170(%rbp), %rdi
callq 0x48da0
leaq -0x188(%rbp), %rdi
callq 0x46270
leaq -0x1a8(%rbp), %rdi
callq 0xa820
movl $0x1, -0x1ac(%rbp)
movq -0x140(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xa0d0
movq %rax, -0x4f0(%rbp)
jmp 0x5e372
movq -0x4f0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0x4f1(%rbp)
jmp 0x5e390
movb -0x4f1(%rbp), %al
testb $0x1, %al
jne 0x5e39f
jmp 0x5e512
movl -0x1ac(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x1, %edx
jne 0x5e430
xorl %eax, %eax
movl %eax, %esi
leaq -0x1a8(%rbp), %rdi
callq 0xac60
movq %rax, -0x500(%rbp)
jmp 0x5e3cb
movq -0x500(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
jne 0x5e3dc
jmp 0x5e42e
leaq 0xd4388(%rip), %rdi     # 0x13276b
leaq 0xd7a82(%rip), %rsi     # 0x135e6c
movl $0x5e, %edx
leaq 0xd7a97(%rip), %rcx     # 0x135e8d
callq 0xa390
movq -0x4e8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x5f54e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x5f4f6
jmp 0x5e430
movl -0x1ac(%rbp), %eax
incl %eax
movl %eax, -0x1ac(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x1a8(%rbp), %rdi
callq 0xac60
movq %rax, -0x508(%rbp)
jmp 0x5e457
movq -0x508(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
jne 0x5e492
leaq 0x13bd23(%rip), %rdi    # 0x19a190
leaq 0xd7a6b(%rip), %rsi     # 0x135edf
callq 0x50eb0
movb %al, -0x509(%rbp)
jmp 0x5e481
movb -0x509(%rbp), %al
testb $0x1, %al
jne 0x5e48d
jmp 0x5e492
jmp 0x5e356
xorl %eax, %eax
movl %eax, %esi
leaq -0x1a8(%rbp), %rdi
callq 0xac60
movq %rax, -0x518(%rbp)
jmp 0x5e4ab
movq -0x518(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
jne 0x5e4f8
leaq 0x13bccf(%rip), %rdi    # 0x19a190
leaq 0xd7a17(%rip), %rsi     # 0x135edf
callq 0x2d770
movb %al, -0x519(%rbp)
jmp 0x5e4d5
movb -0x519(%rbp), %al
testb $0x1, %al
jne 0x5e4e1
jmp 0x5e4f8
leaq -0x60(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x48dc0
jmp 0x5e4f3
jmp 0x5e356
leaq -0x158(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0x48dc0
jmp 0x5e50d
jmp 0x5e356
movq -0x140(%rbp), %rdi
callq 0xa110
jmp 0x5e520
xorl %eax, %eax
movl %eax, %esi
leaq -0x158(%rbp), %rdi
movq %rdi, -0x530(%rbp)
callq 0x3d940
movq %rax, %rdi
callq 0xa930
movq -0x530(%rbp), %rdi
movq %rax, -0x1b8(%rbp)
callq 0x3ffd0
movl %eax, -0x1bc(%rbp)
leaq -0x1d8(%rbp), %rdi
movq %rdi, -0x528(%rbp)
callq 0x48da0
movq -0x528(%rbp), %rdi
movslq -0x1bc(%rbp), %rsi
callq 0x5f8f0
jmp 0x5e580
movslq -0x1bc(%rbp), %rsi
leaq -0x170(%rbp), %rdi
callq 0x5f8f0
jmp 0x5e595
leaq -0x1f0(%rbp), %rdi
callq 0x48da0
leaq -0x208(%rbp), %rdi
callq 0x48da0
leaq -0x220(%rbp), %rdi
callq 0x48da0
cmpl $0x0, -0x1bc(%rbp)
jle 0x5ed5d
movq $0x0, -0x228(%rbp)
movq -0x228(%rbp), %rax
movslq -0x1bc(%rbp), %rcx
cmpq %rcx, %rax
je 0x5e640
movq -0x228(%rbp), %rsi
leaq -0x170(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movq -0x1b8(%rbp), %rsi
callq 0xa980
jmp 0x5e608
jmp 0x5e60a
movq -0x228(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x228(%rbp)
jmp 0x5e5d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x5f4ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x5f4c6
movq $0x0, -0x230(%rbp)
movq -0x230(%rbp), %rax
cmpq -0x1b8(%rbp), %rax
je 0x5e856
movb $0x0, -0x231(%rbp)
movq $0x0, -0x240(%rbp)
movq -0x240(%rbp), %rax
movl -0x1bc(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
cmpq %rcx, %rax
je 0x5e776
movq -0x240(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x248(%rbp)
movq -0x248(%rbp), %rax
movslq -0x1bc(%rbp), %rcx
cmpq %rcx, %rax
je 0x5e752
movq -0x240(%rbp), %rsi
leaq -0x158(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movq -0x230(%rbp), %rsi
callq 0xac60
movq %rax, -0x538(%rbp)
jmp 0x5e6e1
movq -0x538(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x544(%rbp)
movq -0x248(%rbp), %rsi
leaq -0x158(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movq -0x230(%rbp), %rsi
callq 0xac60
movq %rax, -0x540(%rbp)
jmp 0x5e71c
movl -0x544(%rbp), %eax
movq -0x540(%rbp), %rcx
movsbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x5e739
movb $0x1, -0x231(%rbp)
jmp 0x5e752
jmp 0x5e73b
movq -0x248(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x248(%rbp)
jmp 0x5e69f
testb $0x1, -0x231(%rbp)
je 0x5e75d
jmp 0x5e776
jmp 0x5e75f
movq -0x240(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x240(%rbp)
jmp 0x5e671
testb $0x1, -0x231(%rbp)
je 0x5e83d
movl -0x230(%rbp), %eax
incl %eax
movl %eax, -0x24c(%rbp)
leaq -0x188(%rbp), %rdi
leaq -0x24c(%rbp), %rsi
callq 0x4ce80
jmp 0x5e7a6
movq $0x0, -0x258(%rbp)
movq -0x258(%rbp), %rax
movslq -0x1bc(%rbp), %rcx
cmpq %rcx, %rax
je 0x5e83b
movq -0x258(%rbp), %rsi
leaq -0x158(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movq -0x230(%rbp), %rsi
callq 0xac60
movq %rax, -0x550(%rbp)
jmp 0x5e7ef
movq -0x550(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x554(%rbp)
movq -0x258(%rbp), %rsi
leaq -0x170(%rbp), %rdi
callq 0x3d940
movl -0x554(%rbp), %esi
movq %rax, %rdi
callq 0xa380
jmp 0x5e822
jmp 0x5e824
movq -0x258(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x258(%rbp)
jmp 0x5e7b1
jmp 0x5e83d
jmp 0x5e83f
movq -0x230(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x230(%rbp)
jmp 0x5e64b
movq $0x0, -0x260(%rbp)
movq -0x260(%rbp), %rax
movslq -0x1bc(%rbp), %rcx
cmpq %rcx, %rax
je 0x5eaf2
movb $0x1, -0x261(%rbp)
movq $0x0, -0x270(%rbp)
movq -0x270(%rbp), %rax
movq %rax, -0x560(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x560(%rbp), %rax
cmpq %rcx, %rax
je 0x5e9f2
movq -0x260(%rbp), %rsi
leaq -0x170(%rbp), %rdi
callq 0x3d940
movq %rax, -0x568(%rbp)
movq -0x270(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x3d940
movq -0x568(%rbp), %rdi
movq %rax, %rsi
callq 0x39210
testb $0x1, %al
jne 0x5e8fc
jmp 0x5e9d9
movb $0x0, -0x261(%rbp)
movq -0x270(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
leaq 0xd75bf(%rip), %rsi     # 0x135edf
callq 0x50eb0
movb %al, -0x569(%rbp)
jmp 0x5e92d
movb -0x569(%rbp), %al
testb $0x1, %al
jne 0x5e939
jmp 0x5e95d
movq -0x270(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movl $0x2c, %esi
callq 0xa380
jmp 0x5e95b
jmp 0x5e95d
movq -0x260(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0x290(%rbp), %rdi
movl $0x1, %edx
movq $-0x1, %rcx
callq 0xa5f0
jmp 0x5e98a
movq -0x270(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
leaq -0x290(%rbp), %rsi
callq 0xa760
jmp 0x5e9ae
leaq -0x290(%rbp), %rdi
callq 0xac88
jmp 0x5e9d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x290(%rbp), %rdi
callq 0xac88
jmp 0x5f4c6
jmp 0x5e9db
movq -0x270(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x270(%rbp)
jmp 0x5e88a
testb $0x1, -0x261(%rbp)
je 0x5ead9
movq -0x260(%rbp), %rsi
leaq -0x170(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x48dc0
jmp 0x5ea23
movq -0x260(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0x208(%rbp), %rdi
callq 0x48dc0
jmp 0x5ea44
leaq -0x2b1(%rbp), %rdi
movq %rdi, -0x578(%rbp)
callq 0xab60
movq -0x578(%rbp), %rdx
leaq 0xd747a(%rip), %rsi     # 0x135edf
leaq -0x2b0(%rbp), %rdi
callq 0x2d6c0
jmp 0x5ea73
leaq -0x220(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x5f980
jmp 0x5ea88
leaq -0x2b0(%rbp), %rdi
callq 0xac88
leaq -0x2b1(%rbp), %rdi
callq 0xa640
jmp 0x5ead9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x5eac8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0xac88
leaq -0x2b1(%rbp), %rdi
callq 0xa640
jmp 0x5f4c6
jmp 0x5eadb
movq -0x260(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x260(%rbp)
jmp 0x5e861
xorl %eax, %eax
movl %eax, %esi
leaq -0x170(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0x2d8(%rbp), %rdi
callq 0xa250
jmp 0x5eb13
movq $0x0, -0x2e0(%rbp)
movq -0x2e0(%rbp), %rax
movq %rax, -0x580(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0xa930
movq %rax, %rcx
movq -0x580(%rbp), %rax
cmpq %rcx, %rax
je 0x5ed4f
movq $0x1, -0x2e8(%rbp)
movq -0x2e8(%rbp), %rax
movslq -0x1bc(%rbp), %rcx
cmpq %rcx, %rax
je 0x5ec45
movq -0x2e8(%rbp), %rsi
leaq -0x170(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movq -0x2e0(%rbp), %rsi
callq 0xac60
movq %rax, -0x588(%rbp)
jmp 0x5eb98
movq -0x588(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x594(%rbp)
movq -0x2e0(%rbp), %rsi
leaq -0x2d8(%rbp), %rdi
callq 0xac60
movq %rax, -0x590(%rbp)
jmp 0x5ebc4
movl -0x594(%rbp), %eax
movq -0x590(%rbp), %rcx
movsbl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x5ec2c
movq -0x2e8(%rbp), %rsi
leaq -0x170(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movq -0x2e0(%rbp), %rsi
callq 0xac60
movq %rax, -0x5a0(%rbp)
jmp 0x5ec03
movq -0x5a0(%rbp), %rax
movb $0x2e, (%rax)
jmp 0x5ec2c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0xac88
jmp 0x5f4c6
jmp 0x5ec2e
movq -0x2e8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x2e8(%rbp)
jmp 0x5eb56
movq $0x1, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rax
movq %rax, -0x5a8(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x5a8(%rbp), %rax
cmpq %rcx, %rax
je 0x5ed36
movq -0x2f0(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movq -0x2e0(%rbp), %rsi
callq 0xac60
movq %rax, -0x5b0(%rbp)
jmp 0x5eca8
movq -0x5b0(%rbp), %rax
movsbl (%rax), %eax
movl %eax, -0x5bc(%rbp)
movq -0x2e0(%rbp), %rsi
leaq -0x2d8(%rbp), %rdi
callq 0xac60
movq %rax, -0x5b8(%rbp)
jmp 0x5ecd4
movl -0x5bc(%rbp), %eax
movq -0x5b8(%rbp), %rcx
movsbl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x5ed1d
movq -0x2f0(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movq -0x2e0(%rbp), %rsi
callq 0xac60
movq %rax, -0x5c8(%rbp)
jmp 0x5ed13
movq -0x5c8(%rbp), %rax
movb $0x2e, (%rax)
jmp 0x5ed1f
movq -0x2f0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x2f0(%rbp)
jmp 0x5ec50
jmp 0x5ed38
movq -0x2e0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x2e0(%rbp)
jmp 0x5eb1e
leaq -0x2d8(%rbp), %rdi
callq 0xac88
jmp 0x5edb8
movq -0x138(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
movq 0x13a279(%rip), %rdi    # 0x198ff0
callq 0xa520
movq %rax, -0x5d0(%rbp)
jmp 0x5ed85
movq -0x5d0(%rbp), %rdi
leaq 0xd7116(%rip), %rsi     # 0x135ea9
callq 0xa5c0
movq %rax, -0x5d8(%rbp)
jmp 0x5eda1
movq -0x5d8(%rbp), %rdi
movq 0x13a1d9(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5edb6
jmp 0x5edb8
movq -0x138(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
movl $0x2e, %esi
movq $-0x1, %rdx
callq 0xabf0
movq %rax, -0x2f8(%rbp)
cmpq $-0x1, -0x2f8(%rbp)
je 0x5f091
movq -0x138(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
movq -0x2f8(%rbp), %rdx
movb $0x0, -0x339(%rbp)
leaq -0x318(%rbp), %rdi
movq $-0x1, %rcx
callq 0xa5f0
jmp 0x5ee27
leaq 0xe699c(%rip), %rsi     # 0x1457ca
leaq -0x318(%rbp), %rdi
callq 0x2d770
movb %al, -0x5d9(%rbp)
jmp 0x5ee42
movb -0x5d9(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x5da(%rbp)
jne 0x5eeb6
jmp 0x5ee57
movq -0x138(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
movq -0x2f8(%rbp), %rdx
leaq -0x338(%rbp), %rdi
movq $-0x1, %rcx
callq 0xa5f0
jmp 0x5ee86
movb $0x1, -0x339(%rbp)
leaq 0xd7ec5(%rip), %rsi     # 0x136d59
leaq -0x338(%rbp), %rdi
callq 0x2d770
movb %al, -0x5db(%rbp)
jmp 0x5eea8
movb -0x5db(%rbp), %al
movb %al, -0x5da(%rbp)
jmp 0x5eeb6
movb -0x5da(%rbp), %al
movb %al, -0x5dc(%rbp)
testb $0x1, -0x339(%rbp)
jne 0x5eecd
jmp 0x5eed9
leaq -0x338(%rbp), %rdi
callq 0xac88
leaq -0x318(%rbp), %rdi
callq 0xac88
movb -0x5dc(%rbp), %al
testb $0x1, %al
jne 0x5eef4
jmp 0x5f001
movq -0x138(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0x3a0(%rbp), %rdi
callq 0x7be70
jmp 0x5ef15
leaq 0x13b294(%rip), %rsi    # 0x19a1b0
leaq -0x380(%rbp), %rdi
leaq -0x3a0(%rbp), %rdx
callq 0x3e140
jmp 0x5ef31
leaq 0xd6f84(%rip), %rdx     # 0x135ebc
leaq -0x360(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x3e020
jmp 0x5ef4d
leaq -0x48(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0xa710
leaq -0x360(%rbp), %rdi
callq 0xac88
leaq -0x380(%rbp), %rdi
callq 0xac88
leaq -0x3a0(%rbp), %rdi
callq 0xac88
jmp 0x5f08c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x5efb9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
testb $0x1, -0x339(%rbp)
jne 0x5efab
jmp 0x5efb7
leaq -0x338(%rbp), %rdi
callq 0xac88
jmp 0x5efb9
leaq -0x318(%rbp), %rdi
callq 0xac88
jmp 0x5f4c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
jmp 0x5eff0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x380(%rbp), %rdi
callq 0xac88
leaq -0x3a0(%rbp), %rdi
callq 0xac88
jmp 0x5f4c6
movq -0x138(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x3d940
movq %rax, %rdx
leaq 0x13b195(%rip), %rsi    # 0x19a1b0
leaq -0x3e0(%rbp), %rdi
callq 0x3e290
jmp 0x5f029
leaq 0xd6e8c(%rip), %rdx     # 0x135ebc
leaq -0x3c0(%rbp), %rdi
leaq -0x3e0(%rbp), %rsi
callq 0x3e020
jmp 0x5f045
leaq -0x48(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
callq 0xa710
leaq -0x3c0(%rbp), %rdi
callq 0xac88
leaq -0x3e0(%rbp), %rdi
callq 0xac88
jmp 0x5f08c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x3e0(%rbp), %rdi
callq 0xac88
jmp 0x5f4c6
jmp 0x5f11c
movq -0x138(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x3d940
movq %rax, %rdx
leaq 0x13b105(%rip), %rsi    # 0x19a1b0
leaq -0x420(%rbp), %rdi
callq 0x3e290
jmp 0x5f0b9
leaq 0xd6dfc(%rip), %rdx     # 0x135ebc
leaq -0x400(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x3e020
jmp 0x5f0d5
leaq -0x48(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0xa710
leaq -0x400(%rbp), %rdi
callq 0xac88
leaq -0x420(%rbp), %rdi
callq 0xac88
jmp 0x5f11c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x420(%rbp), %rdi
callq 0xac88
jmp 0x5f4c6
movl $0x200, %edi            # imm = 0x200
callq 0xa5d0
movq %rax, -0x5e8(%rbp)
jmp 0x5f12f
leaq -0x48(%rbp), %rdi
callq 0xa220
movq -0x5e8(%rbp), %rdi
movq %rax, %rsi
movl $0x10, %edx
callq 0xa650
jmp 0x5f14e
movq -0x5e8(%rbp), %rax
movq %rax, -0x428(%rbp)
movq -0x428(%rbp), %rdi
leaq 0xd6d5d(%rip), %rsi     # 0x135ec7
callq 0xa5c0
movq %rax, -0x5f0(%rbp)
jmp 0x5f178
movq -0x5f0(%rbp), %rdi
leaq 0xd6d58(%rip), %rsi     # 0x135ede
callq 0xa5c0
jmp 0x5f18d
leaq -0x440(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x4cf20
jmp 0x5f1a2
movq -0x428(%rbp), %rsi
leaq -0x440(%rbp), %rdi
movl $0x20, %edx
movl $0x1, %ecx
callq 0x5f9b0
jmp 0x5f1c1
leaq -0x440(%rbp), %rdi
callq 0x48290
movq $0x0, -0x448(%rbp)
movq -0x448(%rbp), %rax
movq %rax, -0x5f8(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x5f8(%rbp), %rax
cmpq %rcx, %rax
je 0x5f441
movq -0x448(%rbp), %rsi
leaq -0x208(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
callq 0xa930
cmpq $0x10, %rax
jae 0x5f34a
movq -0x428(%rbp), %rax
movq %rax, -0x608(%rbp)
movq -0x448(%rbp), %rsi
leaq -0x208(%rbp), %rdi
callq 0x3d940
movq -0x608(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0x600(%rbp)
jmp 0x5f263
movq -0x600(%rbp), %rdi
leaq 0xd6c6c(%rip), %rsi     # 0x135edd
callq 0xa5c0
movq %rax, -0x610(%rbp)
jmp 0x5f27f
movq -0x448(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x3d940
movq -0x610(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0x618(%rbp)
jmp 0x5f2aa
movq -0x618(%rbp), %rdi
leaq 0xd6c26(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x620(%rbp)
jmp 0x5f2c6
movq -0x448(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x3d940
movq -0x620(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0x628(%rbp)
jmp 0x5f2f1
movq -0x628(%rbp), %rdi
movq 0x139c89(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5f306
jmp 0x5f428
movq -0x5e8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
movl $0x200, %esi            # imm = 0x200
callq 0xa5e0
jmp 0x5f4c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x68(%rbp)
movl %eax, -0x6c(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x48290
jmp 0x5f4c6
movq -0x428(%rbp), %rax
movq %rax, -0x638(%rbp)
movq -0x448(%rbp), %rsi
leaq -0x208(%rbp), %rdi
callq 0x3d940
movq -0x638(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0x630(%rbp)
jmp 0x5f383
movq -0x630(%rbp), %rdi
leaq 0xd6b4d(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x640(%rbp)
jmp 0x5f39f
movq -0x448(%rbp), %rsi
leaq -0x1f0(%rbp), %rdi
callq 0x3d940
movq -0x640(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0x648(%rbp)
jmp 0x5f3ca
movq -0x648(%rbp), %rdi
leaq 0xd6b06(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x650(%rbp)
jmp 0x5f3e6
movq -0x448(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x3d940
movq -0x650(%rbp), %rdi
movq %rax, %rsi
callq 0xa520
movq %rax, -0x658(%rbp)
jmp 0x5f411
movq -0x658(%rbp), %rdi
movq 0x139b69(%rip), %rsi    # 0x198f88
callq 0xa610
jmp 0x5f426
jmp 0x5f428
jmp 0x5f42a
movq -0x448(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x448(%rbp)
jmp 0x5f1d8
movq -0x428(%rbp), %rdi
callq 0xa840
jmp 0x5f44f
leaq -0x220(%rbp), %rdi
callq 0x3dfa0
leaq -0x208(%rbp), %rdi
callq 0x3dfa0
leaq -0x1f0(%rbp), %rdi
callq 0x3dfa0
leaq -0x1d8(%rbp), %rdi
callq 0x3dfa0
leaq -0x1a8(%rbp), %rdi
callq 0xac88
leaq -0x188(%rbp), %rdi
callq 0x48290
leaq -0x170(%rbp), %rdi
callq 0x3dfa0
leaq -0x158(%rbp), %rdi
callq 0x3dfa0
movq -0x138(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x138(%rbp)
jmp 0x5e2a3
leaq -0x220(%rbp), %rdi
callq 0x3dfa0
leaq -0x208(%rbp), %rdi
callq 0x3dfa0
leaq -0x1f0(%rbp), %rdi
callq 0x3dfa0
leaq -0x1d8(%rbp), %rdi
callq 0x3dfa0
leaq -0x1a8(%rbp), %rdi
callq 0xac88
leaq -0x188(%rbp), %rdi
callq 0x48290
leaq -0x170(%rbp), %rdi
callq 0x3dfa0
leaq -0x158(%rbp), %rdi
callq 0x3dfa0
jmp 0x5f54e
leaq -0x60(%rbp), %rdi
callq 0x3dfa0
leaq -0x48(%rbp), %rdi
callq 0xac88
leaq -0x28(%rbp), %rdi
callq 0x3dfa0
xorl %eax, %eax
addq $0x660, %rsp            # imm = 0x660
popq %rbp
retq
leaq -0x60(%rbp), %rdi
callq 0x3dfa0
leaq -0x48(%rbp), %rdi
callq 0xac88
leaq -0x28(%rbp), %rdi
callq 0x3dfa0
movq -0x68(%rbp), %rdi
callq 0xab50
nopw %cs:(%rax,%rax)