// File: /workspace/github_cpp_makefile_star2_O1/readmapping[P]alfalfa/src/main.cpp
// Function: main
int main(int argc, char* argv[]) {
    cerr << "@PG\tID:" << PROG << "\tVN:" << PROG_VERSION << endl;
    //handle command structure and general help
    if (argc < 2 || strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) {
        option::printUsage(std::cerr, basicUsage);
        exit(1);
    }
    if (strcmp(argv[1], "evaluate") == 0) {
        samCheckOptions_t opt;
        opt.initOptions();
        processCheckParameters(argc - 1, argv + 1, opt);
        cerr << "parsing options: done" << endl;
        if (opt.subcommand == ORACLE)
            checkOracle(opt);
        else if (opt.subcommand == SUMMARY)
            checkSummary(opt);
        else if (opt.subcommand == WGSIM)
            checkWgsim(opt);
    } else {
        mapOptions_t opt;
        opt.initOptions();
        processParameters(argc, argv, opt);
        //query name + read initialization
        cerr << "parsing options: done" << endl;
        sa = new sparseSA();
        if (opt.command == INDEX) {
            cerr << "loading ref sequences: ..." << endl;
            sa->loadRef(opt.ref_fasta);
            cerr << "loading ref sequences: done" << endl;
            cerr << "# ref sequence: " << opt.ref_fasta.data() << endl;
            //build index
            cerr << "building index with s = " << opt.K << " ... " << endl;
            clock_t start = clock();
            sa->init(opt.K, opt.hasSuflink, opt.hasChild, opt.hasKmer);
            sa->construct();
            cerr << "building index: done" << endl;
            if (opt.saveIndex) {
                cerr << "saving index to disk" << " ... " << endl;
                sa->save(opt.index_prefix);
                cerr << "saving index to disk: done" << endl;
            }
            clock_t end = clock();
            double cpu_time = (double) (end - start) / CLOCKS_PER_SEC;
            cerr << "time for building index structure: " << cpu_time << endl;
            cerr << "INDEX SIZE IN BYTES: " << sa->index_size_in_bytes() << endl;
            delete sa;
        } else if (opt.command == ALN) {
            //build or load index
            if (opt.indexLocation.empty() || !sa->load(opt.indexLocation)) {
                sa->loadRef(opt.ref_fasta);
                sa->init(opt.K, opt.hasSuflink, opt.hasChild, opt.hasKmer); //because S needs to be changed
                //TODO: set choice for kmer: situation yes or no
                cerr << "building index with s = " << opt.K << " ... " << endl;
                //adjust data structure to seed choice and sparseness
                clock_t start = clock();
                sa->construct();
                cerr << "building index: done" << endl;
                if (opt.saveIndex) {
                    cerr << "saving index to disk" << " ... " << endl;
                    sa->save(opt.index_prefix);
                    cerr << "saving index to disk: done" << endl;
                }
                clock_t end = clock();
                double cpu_time = (double) (end - start) / CLOCKS_PER_SEC;
                cerr << "time for building index structure: " << cpu_time << endl;
            } else {
                opt.K = sa->K;
                opt.hasChild = sa->hasChild;
                opt.hasSuflink = sa->hasSufLink;
                opt.hasKmer = sa->hasKmer;
            }
            if (opt.alnOptions.print >= 1) {
                cerr << "index has sparseness " << opt.K << endl;
                cerr << "index uses suffix links? " << (sa->hasSufLink ? "yes" : "no") << endl;
                cerr << "index uses child array? " << (sa->hasChild ? "yes" : "no") << endl;
                cerr << "INDEX SIZE IN BYTES: " << sa->index_size_in_bytes() << endl;
            }
#ifndef NDEBUG
            if (opt.alnOptions.debugFile != NULL) {
                fprintf(opt.alnOptions.debugFile, "#REF %s\n", opt.ref_fasta.c_str());
                fprintf(opt.alnOptions.debugFile, "%lu\n", sa->S.length());
                long sequenceCount = sa->descr.size();
                fprintf(opt.alnOptions.debugFile, "%ld\n", sequenceCount);
                if (sequenceCount == 1)
                    fprintf(opt.alnOptions.debugFile, "%d %s %lu %ld\n", 0, sa->descr[0].c_str(), sa->S.length(), sa->startpos[0]);
                else {
                    for (long i = 0; i < sequenceCount - 1; i++)
                        fprintf(opt.alnOptions.debugFile, "%ld %s %ld %ld\n", i, sa->descr[i].c_str(), sa->startpos[i + 1] - sa->startpos[i], sa->startpos[i]);
                    fprintf(opt.alnOptions.debugFile, "%ld %s %ld %ld\n", sequenceCount - 1, sa->descr[sequenceCount - 1].c_str(), (long) (sa->S.length() - sa->startpos[sequenceCount - 1]), sa->startpos[sequenceCount - 1]);
                }
            }
#endif
            //Print SAM Header, require refdescre, startpos and argc/argv
            outfile = fopen(opt.outputName.c_str(), "w");
            string header = createHeader(argc, argv, sa->S.length(), sa);
            fprintf(outfile, "%s", header.c_str());
            if (opt.alnOptions.print >= 1) cerr << "header printed to output" << endl;
            //FIRST: Unpaired reads
            if (!opt.unpairedQ.empty()) {
                if (opt.alnOptions.print >= 2) cerr << "#SE" << endl;
                cerr << "Mapping unpaired reads to the index using " << opt.query_threads << " threads ..." << endl;
                queryReader = new fastqInputReader(opt.unpairedQ, opt.nucleotidesOnly);
                clock_t start = clock();
                unpaired_thread(&opt);
                clock_t end = clock();
                double cpu_time = (double) (end - start) / CLOCKS_PER_SEC;
                cerr << endl;
                cerr << "mapping unpaired: done in " << cpu_time << " seconds." << endl;
                delete queryReader;
            }
            //SECOND: Paired reads
            if (!opt.pair1.empty() && !opt.pair2.empty()) {
                if (opt.alnOptions.print >= 2) cerr << "#PE" << endl;
                cerr << "Mapping paired reads to the index using " << opt.query_threads << " threads ..." << endl;
                mate1Reader = new fastqInputReader(opt.pair1, opt.nucleotidesOnly);
                mate2Reader = new fastqInputReader(opt.pair2, opt.nucleotidesOnly);
                clock_t start = clock();
                paired_thread1(&opt);
                clock_t end = clock();
                double cpu_time = (double) (end - start) / CLOCKS_PER_SEC;
                cerr << endl;
                cerr << "mapping paired: done in " << cpu_time << " seconds" << endl;
                delete mate1Reader;
                delete mate2Reader;
            } else if (!opt.pair1.empty() || !opt.pair2.empty()) {
                fprintf(stderr, "ALFALFA requires 2 separate mate pairs files \n");
                exit(1);
            }
            fclose(outfile);
#ifndef NDEBUG
            if (opt.alnOptions.debugFile != NULL) fclose(opt.alnOptions.debugFile);
#endif
            delete sa;
            cerr << "FINISHED" << endl;
        }
    }
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x1e0, %rsp            # imm = 0x1E0
movq %rsi, %rbx
movl %edi, %ebp
movq 0x4a1b5(%rip), %r14     # 0x53fe8
leaq 0x36353(%rip), %rsi     # 0x4018d
movl $0x7, %edx
movq %r14, %rdi
callq 0x7340
movq 0x4a532(%rip), %rsi     # 0x54380
movq 0x4a533(%rip), %rdx     # 0x54388
movq %r14, %rdi
callq 0x7340
movq %rax, %r14
leaq 0x36314(%rip), %rsi     # 0x4017b
movl $0x4, %edx
movq %rax, %rdi
callq 0x7340
movq 0x4a545(%rip), %rsi     # 0x543c0
movq 0x4a546(%rip), %rdx     # 0x543c8
movq %r14, %rdi
callq 0x7340
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpl $0x2, %ebp
jl 0xae0d
movq 0x8(%rbx), %r14
leaq 0x362d2(%rip), %rsi     # 0x4019a
movq %r14, %rdi
callq 0x7450
testl %eax, %eax
je 0xae0d
leaq 0x362be(%rip), %rsi     # 0x4019d
movq %r14, %rdi
callq 0x7450
testl %eax, %eax
je 0xae0d
leaq 0x362ae(%rip), %rsi     # 0x401a4
movq %r14, %rdi
callq 0x7450
leaq 0x28(%rsp), %r14
movq %r14, %rdi
testl %eax, %eax
je 0xa0fd
callq 0xbda2
movq %r14, %rdi
callq 0xd494
leaq 0x28(%rsp), %rdx
movl %ebp, %edi
movq %rbx, %rsi
callq 0xe7bb
movq 0x4a0b7(%rip), %r14     # 0x53fe8
leaq 0x36275(%rip), %rsi     # 0x401ad
movl $0x15, %edx
movq %r14, %rdi
callq 0x7340
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x4a085(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0x118, %edi            # imm = 0x118
callq 0x72e0
movq %rax, %rcx
addq $0x60, %rcx
xorpd %xmm0, %xmm0
movupd %xmm0, 0x20(%rax)
movupd %xmm0, 0x10(%rax)
movupd %xmm0, (%rax)
movq %rcx, 0x50(%rax)
xorl %ecx, %ecx
movq %rcx, 0x58(%rax)
movb $0x0, 0x60(%rax)
movupd %xmm0, 0x100(%rax)
movq %rcx, 0x110(%rax)
movupd %xmm0, 0x70(%rax)
movupd %xmm0, 0x80(%rax)
movupd %xmm0, 0x90(%rax)
movupd %xmm0, 0xa0(%rax)
movupd %xmm0, 0xb0(%rax)
movupd %xmm0, 0xc0(%rax)
movupd %xmm0, 0xd0(%rax)
movq %rcx, 0xe0(%rax)
movl $0x1, 0xf4(%rax)
movq %rax, 0x4a40b(%rip)     # 0x54408
movl 0x28(%rsp), %ecx
cmpl $0x2, %ecx
je 0xa192
testl %ecx, %ecx
jne 0xadde
movq 0x49fcf(%rip), %rbx     # 0x53fe8
leaq 0x361a3(%rip), %rsi     # 0x401c3
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49f9d(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x4a3a9(%rip), %rdi     # 0x54408
leaq 0x98(%rsp), %rsi
callq 0xff90
movq 0x49f75(%rip), %rbx     # 0x53fe8
leaq 0x36164(%rip), %rsi     # 0x401de
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49f43(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49f2f(%rip), %rbx     # 0x53fe8
leaq 0x3613a(%rip), %rsi     # 0x401fa
movl $0x10, %edx
movq %rbx, %rdi
callq 0x7340
movq 0x98(%rsp), %r14
testq %r14, %r14
je 0xaa67
movq %r14, %rdi
callq 0x7140
movq 0x49efb(%rip), %rdi     # 0x53fe8
movq %r14, %rsi
movq %rax, %rdx
callq 0x7340
jmp 0xaa7e
callq 0xba26
movq %r14, %rdi
callq 0xbbf0
addq $0x8, %rbx
decl %ebp
leaq 0x28(%rsp), %rdx
movl %ebp, %edi
movq %rbx, %rsi
callq 0x338be
movq 0x49ec2(%rip), %rbx     # 0x53fe8
leaq 0x36080(%rip), %rsi     # 0x401ad
movl $0x15, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49e90(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl 0x28(%rsp), %eax
cmpl $0x3, %eax
je 0xaa4e
cmpl $0x1, %eax
je 0xaa42
testl %eax, %eax
jne 0xaa58
leaq 0x28(%rsp), %rdi
callq 0x357d9
jmp 0xaa58
cmpq $0x0, 0xe8(%rsp)
je 0xa1ee
leaq 0xe0(%rsp), %rsi
movq %rax, %rdi
callq 0x11e84
testb %al, %al
je 0xa1ee
movq 0x4a250(%rip), %rax     # 0x54408
movl 0xe8(%rax), %ecx
movl %ecx, 0x2c(%rsp)
movb 0xf0(%rax), %cl
movb %cl, 0xd9(%rsp)
movb 0xf1(%rax), %cl
movb %cl, 0xda(%rsp)
movb 0xf8(%rax), %al
movb %al, 0xdb(%rsp)
jmp 0xa418
movq 0x4a213(%rip), %rdi     # 0x54408
leaq 0x98(%rsp), %rsi
callq 0xff90
movq 0x4a1ff(%rip), %rdi     # 0x54408
movslq 0x2c(%rsp), %rsi
movzbl 0xda(%rsp), %edx
movzbl 0xd9(%rsp), %ecx
movzbl 0xdb(%rsp), %r8d
callq 0xfe66
movq 0x49db5(%rip), %rdi     # 0x53fe8
leaq 0x35fd1(%rip), %rsi     # 0x4020b
movl $0x18, %edx
callq 0x7340
movl 0x2c(%rsp), %esi
movq 0x49d99(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %r14
leaq 0x3ab6f(%rip), %rsi     # 0x44dcd
movl $0x5, %edx
movq %rax, %rdi
callq 0x7340
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
callq 0x71b0
movq %rax, %r14
movq 0x4a167(%rip), %rdi     # 0x54408
callq 0x12ad6
movq 0x49d3b(%rip), %r15     # 0x53fe8
leaq 0x35f70(%rip), %rsi     # 0x40224
movl $0x14, %edx
movq %r15, %rdi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49d09(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpb $0x1, 0xd8(%rsp)
jne 0xa3b2
movq 0x49ce7(%rip), %rdi     # 0x53fe8
leaq 0x35f31(%rip), %rsi     # 0x40239
movl $0x14, %edx
callq 0x7340
movq 0x49ccf(%rip), %r15     # 0x53fe8
leaq 0x3aaad(%rip), %rsi     # 0x44dcd
movl $0x5, %edx
movq %r15, %rdi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49c9d(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x4a0a9(%rip), %rdi     # 0x54408
leaq 0xb8(%rsp), %rsi
callq 0x111aa
movq 0x49c75(%rip), %r15     # 0x53fe8
leaq 0x35ed4(%rip), %rsi     # 0x4024e
movl $0x1a, %edx
movq %r15, %rdi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49c43(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
callq 0x71b0
movq %rax, %r15
movq 0x49c27(%rip), %rdi     # 0x53fe8
leaq 0x35ea1(%rip), %rsi     # 0x40269
movl $0x23, %edx
callq 0x7340
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0x35c26(%rip), %xmm0    # 0x40008
movq 0x49bff(%rip), %rdi     # 0x53fe8
callq 0x7560
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpl $0x0, 0x1a0(%rsp)
jle 0xa5bf
movq 0x49bbb(%rip), %rdi     # 0x53fe8
leaq 0x35e6f(%rip), %rsi     # 0x402a3
movl $0x15, %edx
callq 0x7340
movl 0x2c(%rsp), %esi
movq 0x49b9f(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49b69(%rip), %rdi     # 0x53fe8
leaq 0x35e33(%rip), %rsi     # 0x402b9
movl $0x19, %edx
callq 0x7340
movq 0x49f71(%rip), %rax     # 0x54408
movzbl 0xf1(%rax), %edx
leaq 0x35e2e(%rip), %r12     # 0x402d3
leaq 0x35e2b(%rip), %r14     # 0x402d7
testq %rdx, %rdx
movq %r14, %rsi
cmovneq %r12, %rsi
orq $0x2, %rdx
movq 0x49b27(%rip), %r15     # 0x53fe8
movq %r15, %rdi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49b01(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49aed(%rip), %rdi     # 0x53fe8
leaq 0x35dd8(%rip), %rsi     # 0x402da
movl $0x18, %edx
callq 0x7340
movq 0x49ef5(%rip), %rax     # 0x54408
movzbl 0xf0(%rax), %edx
testq %rdx, %rdx
cmovneq %r12, %r14
orq $0x2, %rdx
movq 0x49abc(%rip), %r15     # 0x53fe8
movq %r15, %rdi
movq %r14, %rsi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49a93(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49a7f(%rip), %rdi     # 0x53fe8
leaq 0x35d1d(%rip), %rsi     # 0x4028d
movl $0x15, %edx
callq 0x7340
movq 0x49e87(%rip), %rdi     # 0x54408
callq 0xfd9e
movq 0x49a5b(%rip), %rdi     # 0x53fe8
movq %rax, %rsi
callq 0x72a0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x100(%rsp), %rdi
leaq 0x3ce57(%rip), %rsi     # 0x47425
callq 0x7360
movq %rax, 0x49e36(%rip)     # 0x54410
movq 0x49e27(%rip), %r8      # 0x54408
movq 0x58(%r8), %rcx
leaq 0x8(%rsp), %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x9ae4
movq 0x49e15(%rip), %rsi     # 0x54410
movq 0x8(%rsp), %rdi
callq 0x7330
cmpl $0x0, 0x1a0(%rsp)
jle 0xa655
movq 0x499d2(%rip), %rbx     # 0x53fe8
leaq 0x35cd6(%rip), %rsi     # 0x402f3
movl $0x18, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x499a0(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpq $0x0, 0x40(%rsp)
je 0xa81a
cmpl $0x2, 0x1a0(%rsp)
jl 0xa6b1
movq 0x49976(%rip), %rbx     # 0x53fe8
leaq 0x35c93(%rip), %rsi     # 0x4030c
movl $0x3, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49944(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49930(%rip), %rdi     # 0x53fe8
leaq 0x35c51(%rip), %rsi     # 0x40310
movl $0x2a, %edx
callq 0x7340
movl 0x30(%rsp), %esi
movq 0x49914(%rip), %rbx     # 0x53fe8
movq %rbx, %rdi
callq 0x75d0
movq %rax, %r14
leaq 0x35c55(%rip), %rsi     # 0x4033b
movl $0xc, %edx
movq %rax, %rdi
callq 0x7340
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0x60, %edi
callq 0x72e0
movq %rax, %r14
leaq 0x38(%rsp), %rsi
movzbl 0xe8(%rsi), %edx
movq %rax, %rdi
callq 0x19e50
movq %r14, 0x49cbe(%rip)     # 0x54400
callq 0x71b0
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x8c14
callq 0x71b0
movq %rax, %r15
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x4986e(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x4985a(%rip), %rdi     # 0x53fe8
leaq 0x35bb3(%rip), %rsi     # 0x40348
movl $0x1a, %edx
callq 0x7340
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0x35859(%rip), %xmm0    # 0x40008
movq 0x49832(%rip), %rdi     # 0x53fe8
callq 0x7560
movq %rax, %rbx
leaq 0x35b9e(%rip), %rsi     # 0x40363
movl $0x9, %edx
movq %rax, %rdi
callq 0x7340
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49c00(%rip), %rbx     # 0x54400
testq %rbx, %rbx
je 0xa81a
movq %rbx, %rdi
callq 0x19f74
movl $0x60, %esi
movq %rbx, %rdi
callq 0x72f0
movq 0x60(%rsp), %rax
testq %rax, %rax
je 0xad41
cmpq $0x0, 0x80(%rsp)
je 0xadfa
cmpl $0x2, 0x1a0(%rsp)
jl 0xa887
movq 0x497a0(%rip), %rbx     # 0x53fe8
leaq 0x35b1e(%rip), %rsi     # 0x4036d
movl $0x3, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x4976e(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x4975a(%rip), %rdi     # 0x53fe8
leaq 0x35adc(%rip), %rsi     # 0x40371
movl $0x28, %edx
callq 0x7340
movl 0x30(%rsp), %esi
movq 0x4973e(%rip), %rbx     # 0x53fe8
movq %rbx, %rdi
callq 0x75d0
movq %rax, %r14
leaq 0x35a7f(%rip), %rsi     # 0x4033b
movl $0xc, %edx
movq %rax, %rdi
callq 0x7340
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0x60, %edi
callq 0x72e0
movq %rax, %r14
leaq 0x58(%rsp), %rsi
movzbl 0xc8(%rsi), %edx
movq %rax, %rdi
callq 0x19e50
movq %r14, 0x49b00(%rip)     # 0x54418
movl $0x60, %edi
callq 0x72e0
movq %rax, %r14
leaq 0x78(%rsp), %rsi
movzbl 0xa8(%rsi), %edx
movq %rax, %rdi
callq 0x19e50
movq %r14, 0x49ae0(%rip)     # 0x54420
callq 0x71b0
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x92ad
callq 0x71b0
movq %rax, %r15
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49670(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x4965c(%rip), %rdi     # 0x53fe8
leaq 0x35a07(%rip), %rsi     # 0x4039a
movl $0x18, %edx
callq 0x7340
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0x3565b(%rip), %xmm0    # 0x40008
movq 0x49634(%rip), %rdi     # 0x53fe8
callq 0x7560
movq %rax, %rbx
leaq 0x356e7(%rip), %rsi     # 0x400aa
movl $0x8, %edx
movq %rax, %rdi
callq 0x7340
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49a1a(%rip), %rbx     # 0x54418
testq %rbx, %rbx
je 0xaa18
movq %rbx, %rdi
callq 0x19f74
movl $0x60, %esi
movq %rbx, %rdi
callq 0x72f0
movq 0x49a01(%rip), %rbx     # 0x54420
testq %rbx, %rbx
je 0xad50
movq %rbx, %rdi
callq 0x19f74
movl $0x60, %esi
movq %rbx, %rdi
callq 0x72f0
jmp 0xad50
leaq 0x28(%rsp), %rdi
callq 0x3bf32
jmp 0xaa58
leaq 0x28(%rsp), %rdi
callq 0x38caf
leaq 0x28(%rsp), %rdi
callq 0xbcba
jmp 0xade8
movq (%rbx), %rax
movq -0x18(%rax), %rax
leaq (%rbx,%rax), %rdi
movl 0x20(%rbx,%rax), %esi
orl $0x1, %esi
callq 0x75c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x4954c(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49538(%rip), %rdi     # 0x53fe8
leaq 0x35754(%rip), %rsi     # 0x4020b
movl $0x18, %edx
callq 0x7340
movl 0x2c(%rsp), %esi
movq 0x4951c(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %rbx
leaq 0x3a2f2(%rip), %rsi     # 0x44dcd
movl $0x5, %edx
movq %rax, %rdi
callq 0x7340
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
callq 0x71b0
movq %rax, %rbx
movq 0x498ea(%rip), %rdi     # 0x54408
movslq 0x2c(%rsp), %rsi
movzbl 0xda(%rsp), %edx
movzbl 0xd9(%rsp), %ecx
movzbl 0xdb(%rsp), %r8d
callq 0xfe66
movq 0x498c0(%rip), %rdi     # 0x54408
callq 0x12ad6
movq 0x49494(%rip), %r14     # 0x53fe8
leaq 0x356c9(%rip), %rsi     # 0x40224
movl $0x14, %edx
movq %r14, %rdi
callq 0x7340
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49462(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpb $0x1, 0xd8(%rsp)
jne 0xac59
movq 0x49440(%rip), %rdi     # 0x53fe8
leaq 0x3568a(%rip), %rsi     # 0x40239
movl $0x14, %edx
callq 0x7340
movq 0x49428(%rip), %r14     # 0x53fe8
leaq 0x3a206(%rip), %rsi     # 0x44dcd
movl $0x5, %edx
movq %r14, %rdi
callq 0x7340
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x493f6(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49802(%rip), %rdi     # 0x54408
leaq 0xb8(%rsp), %rsi
callq 0x111aa
movq 0x493ce(%rip), %r14     # 0x53fe8
leaq 0x3562d(%rip), %rsi     # 0x4024e
movl $0x1a, %edx
movq %r14, %rdi
callq 0x7340
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x4939c(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
callq 0x71b0
movq %rax, %r14
movq 0x49380(%rip), %rdi     # 0x53fe8
leaq 0x355fa(%rip), %rsi     # 0x40269
movl $0x23, %edx
callq 0x7340
subq %rbx, %r14
cvtsi2sd %r14, %xmm0
divsd 0x3537f(%rip), %xmm0    # 0x40008
movq 0x49358(%rip), %rdi     # 0x53fe8
callq 0x7560
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49322(%rip), %rdi     # 0x53fe8
leaq 0x355c0(%rip), %rsi     # 0x4028d
movl $0x15, %edx
callq 0x7340
movq 0x4972a(%rip), %rdi     # 0x54408
callq 0xfd9e
movq 0x492fe(%rip), %rdi     # 0x53fe8
movq %rax, %rsi
callq 0x72a0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x496e5(%rip), %rbx     # 0x54408
testq %rbx, %rbx
je 0xadde
movq %rbx, %rdi
callq 0xbf46
movl $0x118, %esi            # imm = 0x118
movq %rbx, %rdi
jmp 0xadd9
cmpq $0x0, 0x80(%rsp)
jne 0xae08
movq 0x496b9(%rip), %rdi     # 0x54410
callq 0x72d0
movq 0x496a5(%rip), %rbx     # 0x54408
testq %rbx, %rbx
je 0xad7d
movq %rbx, %rdi
callq 0xbf46
movl $0x118, %esi            # imm = 0x118
movq %rbx, %rdi
callq 0x72f0
movq 0x49264(%rip), %rbx     # 0x53fe8
leaq 0x35657(%rip), %rsi     # 0x403e2
movl $0x8, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49232(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xadde
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x72f0
leaq 0x28(%rsp), %rdi
callq 0xc020
xorl %eax, %eax
addq $0x1e0, %rsp            # imm = 0x1E0
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
orq 0x80(%rsp), %rax
je 0xad50
callq 0x76c0
movq 0x491d4(%rip), %rdi     # 0x53fe8
leaq 0x47445(%rip), %rsi     # 0x52260
movl $0x50, %edx
movl $0x32, %ecx
movl $0x4b, %r8d
callq 0xba01
movl $0x1, %edi
callq 0x73b0
jmp 0xae71
jmp 0xae42
jmp 0xae42
jmp 0xae71
movq %rax, %rbx
movl $0x60, %esi
movq %r14, %rdi
callq 0x72f0
jmp 0xae74
jmp 0xae91
jmp 0xae91
jmp 0xae71
jmp 0xae71
jmp 0xae91
jmp 0xae91
jmp 0xae91
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbcba
jmp 0xae9e
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xae94
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x72f0
jmp 0xae94
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xc020
movq %rbx, %rdi
callq 0x7600