// File: ahupowerdns[P]mcounter/./ext/doctest.h
// Function: doctest::Context::run()
int Context::run() {
    using namespace detail;

    // save the old context state in case such was setup - for using asserts out of a testing context
    auto old_cs = g_cs;
    // this is the current contest
    g_cs               = p;
    is_running_in_test = true;

    g_no_colors = p->no_colors;
    p->resetRunData();

    std::fstream fstr;
    if(p->cout == nullptr) {
        if(p->quiet) {
            p->cout = &discardOut;
        } else if(p->out.size()) {
            // to a file if specified
            fstr.open(p->out.c_str(), std::fstream::out);
            p->cout = &fstr;
        } else {
            // stdout by default
            p->cout = &std::cout;
        }
    }

    FatalConditionHandler::allocateAltStackMem();

    auto cleanup_and_return = [&]() {
        FatalConditionHandler::freeAltStackMem();

        if(fstr.is_open())
            fstr.close();

        // restore context
        g_cs               = old_cs;
        is_running_in_test = false;

        // we have to free the reporters which were allocated when the run started
        for(auto& curr : p->reporters_currently_used)
            delete curr;
        p->reporters_currently_used.clear();

        if(p->numTestCasesFailed && !p->no_exitcode)
            return EXIT_FAILURE;
        return EXIT_SUCCESS;
    };

    // setup default reporter if none is given through the command line
    if(p->filters[8].empty())
        p->filters[8].push_back("console");

    // check to see if any of the registered reporters has been selected
    for(auto& curr : getReporters()) {
        if(matchesAny(curr.first.second.c_str(), p->filters[8], false, p->case_sensitive))
            p->reporters_currently_used.push_back(curr.second(*g_cs));
    }

    // TODO: check if there is nothing in reporters_currently_used

    // prepend all listeners
    for(auto& curr : getListeners())
        p->reporters_currently_used.insert(p->reporters_currently_used.begin(), curr.second(*g_cs));

#ifdef DOCTEST_PLATFORM_WINDOWS
    if(isDebuggerActive() && p->no_debug_output == false)
        p->reporters_currently_used.push_back(new DebugOutputWindowReporter(*g_cs));
#endif // DOCTEST_PLATFORM_WINDOWS

    // handle version, help and no_run
    if(p->no_run || p->version || p->help || p->list_reporters) {
        DOCTEST_ITERATE_THROUGH_REPORTERS(report_query, QueryData());

        return cleanup_and_return();
    }

    std::vector<const TestCase*> testArray;
    for(auto& curr : getRegisteredTests())
        testArray.push_back(&curr);
    p->numTestCases = testArray.size();

    // sort the collected records
    if(!testArray.empty()) {
        if(p->order_by.compare("file", true) == 0) {
            std::sort(testArray.begin(), testArray.end(), fileOrderComparator);
        } else if(p->order_by.compare("suite", true) == 0) {
            std::sort(testArray.begin(), testArray.end(), suiteOrderComparator);
        } else if(p->order_by.compare("name", true) == 0) {
            std::sort(testArray.begin(), testArray.end(), nameOrderComparator);
        } else if(p->order_by.compare("rand", true) == 0) {
            std::srand(p->rand_seed);

            // random_shuffle implementation
            const auto first = &testArray[0];
            for(size_t i = testArray.size() - 1; i > 0; --i) {
                int idxToSwap = std::rand() % (i + 1); // NOLINT

                const auto temp = first[i];

                first[i]         = first[idxToSwap];
                first[idxToSwap] = temp;
            }
        } else if(p->order_by.compare("none", true) == 0) {
            // means no sorting - beneficial for death tests which call into the executable
            // with a specific test case in mind - we don't want to slow down the startup times
        }
    }

    std::set<String> testSuitesPassingFilt;

    bool                             query_mode = p->count || p->list_test_cases || p->list_test_suites;
    std::vector<const TestCaseData*> queryResults;

    if(!query_mode)
        DOCTEST_ITERATE_THROUGH_REPORTERS(test_run_start, DOCTEST_EMPTY);

    // invoke the registered functions if they match the filter criteria (or just count them)
    for(auto& curr : testArray) {
        const auto& tc = *curr;

        bool skip_me = false;
        if(tc.m_skip && !p->no_skip)
            skip_me = true;

        if(!matchesAny(tc.m_file.c_str(), p->filters[0], true, p->case_sensitive))
            skip_me = true;
        if(matchesAny(tc.m_file.c_str(), p->filters[1], false, p->case_sensitive))
            skip_me = true;
        if(!matchesAny(tc.m_test_suite, p->filters[2], true, p->case_sensitive))
            skip_me = true;
        if(matchesAny(tc.m_test_suite, p->filters[3], false, p->case_sensitive))
            skip_me = true;
        if(!matchesAny(tc.m_name, p->filters[4], true, p->case_sensitive))
            skip_me = true;
        if(matchesAny(tc.m_name, p->filters[5], false, p->case_sensitive))
            skip_me = true;

        if(!skip_me)
            p->numTestCasesPassingFilters++;

        // skip the test if it is not in the execution range
        if((p->last < p->numTestCasesPassingFilters && p->first <= p->last) ||
           (p->first > p->numTestCasesPassingFilters))
            skip_me = true;

        if(skip_me) {
            if(!query_mode)
                DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_skipped, tc);
            continue;
        }

        // do not execute the test if we are to only count the number of filter passing tests
        if(p->count)
            continue;

        // print the name of the test and don't execute it
        if(p->list_test_cases) {
            queryResults.push_back(&tc);
            continue;
        }

        // print the name of the test suite if not done already and don't execute it
        if(p->list_test_suites) {
            if((testSuitesPassingFilt.count(tc.m_test_suite) == 0) && tc.m_test_suite[0] != '\0') {
                queryResults.push_back(&tc);
                testSuitesPassingFilt.insert(tc.m_test_suite);
                p->numTestSuitesPassingFilters++;
            }
            continue;
        }

        // execute the test if it passes all the filtering
        {
            p->currentTest = &tc;

            p->failure_flags = TestCaseFailureReason::None;
            p->seconds       = 0;

            // reset atomic counters
            p->numAssertsFailedCurrentTest_atomic = 0;
            p->numAssertsCurrentTest_atomic       = 0;

            p->subcasesPassed.clear();

            DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_start, tc);

            p->timer.start();
            
            bool run_test = true;

            do {
                // reset some of the fields for subcases (except for the set of fully passed ones)
                p->should_reenter          = false;
                p->subcasesCurrentMaxLevel = 0;
                p->subcasesStack.clear();

                p->shouldLogCurrentException = true;

                // reset stuff for logging with INFO()
                p->stringifiedContexts.clear();

#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
                try {
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
// MSVC 2015 diagnoses fatalConditionHandler as unused (because reset() is a static method)
DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4101) // unreferenced local variable
                    FatalConditionHandler fatalConditionHandler; // Handle signals
                    // execute the test
                    tc.m_test();
                    fatalConditionHandler.reset();
DOCTEST_MSVC_SUPPRESS_WARNING_POP
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
                } catch(const TestFailureException&) {
                    p->failure_flags |= TestCaseFailureReason::AssertFailure;
                } catch(...) {
                    DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_exception,
                                                      {translateActiveException(), false});
                    p->failure_flags |= TestCaseFailureReason::Exception;
                }
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS

                // exit this loop if enough assertions have failed - even if there are more subcases
                if(p->abort_after > 0 &&
                   p->numAssertsFailed + p->numAssertsFailedCurrentTest_atomic >= p->abort_after) {
                    run_test = false;
                    p->failure_flags |= TestCaseFailureReason::TooManyFailedAsserts;
                }
                
                if(p->should_reenter && run_test)
                    DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_reenter, tc);
                if(!p->should_reenter)
                    run_test = false;
            } while(run_test);

            p->finalizeTestCaseData();

            DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_end, *g_cs);

            p->currentTest = nullptr;

            // stop executing tests if enough assertions have failed
            if(p->abort_after > 0 && p->numAssertsFailed >= p->abort_after)
                break;
        }
    }

    if(!query_mode) {
        DOCTEST_ITERATE_THROUGH_REPORTERS(test_run_end, *g_cs);
    } else {
        QueryData qdata;
        qdata.run_stats = g_cs;
        qdata.data      = queryResults.data();
        qdata.num_data  = unsigned(queryResults.size());
        DOCTEST_ITERATE_THROUGH_REPORTERS(report_query, qdata);
    }

    return cleanup_and_return();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x720, %rsp            # imm = 0x720
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x5c8(%rbp)
movq 0x42927(%rip), %rcx     # 0x51548
movq %rcx, -0x18(%rbp)
movq (%rax), %rcx
movq %rcx, 0x42919(%rip)     # 0x51548
movb $0x1, 0x4290f(%rip)     # 0x51545
movq (%rax), %rcx
movb 0x77(%rcx), %dl
movq %fs:0x0, %rcx
leaq -0x38(%rcx), %rcx
andb $0x1, %dl
movb %dl, (%rcx)
movq (%rax), %rdi
callq 0x219c0
leaq -0x228(%rbp), %rdi
callq 0x6580
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
cmpq $0x0, (%rax)
jne 0xed6f
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x71(%rax)
je 0xeca2
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
leaq 0x4292e(%rip), %rcx     # 0x515c8
movq %rcx, (%rax)
jmp 0xed6d
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x28, %rdi
callq 0x7cb0
movl %eax, -0x5cc(%rbp)
jmp 0xecbd
movl -0x5cc(%rbp), %eax
cmpl $0x0, %eax
je 0xed57
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x28, %rdi
callq 0x20dc0
movq %rax, -0x5d8(%rbp)
jmp 0xece8
movq -0x5d8(%rbp), %rsi
leaq -0x228(%rbp), %rdi
movl $0x10, %edx
callq 0x63c0
jmp 0xed02
xorl %eax, %eax
leaq -0x228(%rbp), %rcx
cmpq $0x0, %rcx
movq %rax, -0x5e0(%rbp)
je 0xed2a
leaq -0x228(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x5e0(%rbp)
movq -0x5c8(%rbp), %rax
movq -0x5e0(%rbp), %rcx
movq (%rax), %rax
movq %rcx, (%rax)
jmp 0xed6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x104cb
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movq 0x42260(%rip), %rcx     # 0x50fc8
movq %rcx, (%rax)
jmp 0xed6d
jmp 0xed6f
callq 0x104f0
jmp 0xed76
movq -0x5c8(%rbp), %rax
leaq -0x228(%rbp), %rcx
movq %rcx, -0x250(%rbp)
leaq -0x18(%rbp), %rcx
movq %rcx, -0x248(%rbp)
movq %rax, -0x240(%rbp)
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
movl $0x8, %esi
callq 0x20e00
movq %rax, %rdi
callq 0x21a20
testb $0x1, %al
jne 0xedbf
jmp 0xee3c
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
movl $0x8, %esi
callq 0x20e00
movq %rax, -0x5e8(%rbp)
leaq 0x298bc(%rip), %rsi     # 0x386a4
leaq -0x268(%rbp), %rdi
callq 0x7960
jmp 0xedf6
movq -0x5e8(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x21520
jmp 0xee0b
leaq -0x268(%rbp), %rdi
callq 0x7900
jmp 0xee3c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x7900
jmp 0x104cb
callq 0x10510
movq %rax, -0x5f0(%rbp)
jmp 0xee4a
movq -0x5f0(%rbp), %rax
movq %rax, -0x270(%rbp)
movq -0x270(%rbp), %rdi
callq 0x21a60
movq %rax, -0x278(%rbp)
movq -0x270(%rbp), %rdi
callq 0x21a90
movq %rax, -0x280(%rbp)
leaq -0x278(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x21ac0
testb $0x1, %al
jne 0xee9a
jmp 0xef83
leaq -0x278(%rbp), %rdi
callq 0x21af0
movq %rax, -0x288(%rbp)
movq -0x288(%rbp), %rdi
addq $0x8, %rdi
callq 0x20cd0
movq %rax, -0x5f8(%rbp)
jmp 0xeec6
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
movl $0x8, %esi
callq 0x20e00
movq -0x5f8(%rbp), %rdi
movq %rax, %rsi
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movzbl 0x6d(%rax), %ecx
andl $0x1, %ecx
xorl %edx, %edx
callq 0x9f70
movb %al, -0x5f9(%rbp)
jmp 0xef0b
movb -0x5f9(%rbp), %al
testb $0x1, %al
jne 0xef17
jmp 0xef70
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x610(%rbp)
movq -0x288(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x42608(%rip), %rdi     # 0x51548
callq *%rax
movq %rax, -0x608(%rbp)
jmp 0xef4b
movq -0x610(%rbp), %rdi
movq -0x608(%rbp), %rax
movq %rax, -0x290(%rbp)
leaq -0x290(%rbp), %rsi
callq 0x21b10
jmp 0xef6e
jmp 0xef70
jmp 0xef72
leaq -0x278(%rbp), %rdi
callq 0x21b40
jmp 0xee7e
callq 0x10570
movq %rax, -0x618(%rbp)
jmp 0xef91
movq -0x618(%rbp), %rax
movq %rax, -0x298(%rbp)
movq -0x298(%rbp), %rdi
callq 0x21a60
movq %rax, -0x2a0(%rbp)
movq -0x298(%rbp), %rdi
callq 0x21a90
movq %rax, -0x2a8(%rbp)
leaq -0x2a0(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x21ac0
testb $0x1, %al
jne 0xefe1
jmp 0xf09b
leaq -0x2a0(%rbp), %rdi
callq 0x21af0
movq %rax, %rcx
movq -0x5c8(%rbp), %rax
movq %rcx, -0x2b0(%rbp)
movq (%rax), %rdi
addq $0x10d0, %rdi           # imm = 0x10D0
movq %rdi, -0x628(%rbp)
callq 0x20f20
movq %rax, -0x2c0(%rbp)
leaq -0x2b8(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
callq 0x21bb0
movq -0x2b0(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x42508(%rip), %rdi     # 0x51548
callq *%rax
movq %rax, -0x620(%rbp)
jmp 0xf04b
movq -0x628(%rbp), %rdi
movq -0x620(%rbp), %rax
movq %rax, -0x2c8(%rbp)
movq -0x2b8(%rbp), %rsi
leaq -0x2c8(%rbp), %rdx
callq 0x21b70
movq %rax, -0x630(%rbp)
jmp 0xf07c
movq -0x630(%rbp), %rax
movq %rax, -0x2d0(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x21b40
jmp 0xefc5
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x74(%rax)
jne 0xf0e8
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x82(%rax)
jne 0xf0e8
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x81(%rax)
jne 0xf0e8
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x86(%rax)
je 0xf1de
movq 0x42459(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x2d8(%rbp)
movq -0x2d8(%rbp), %rdi
callq 0x20f20
movq %rax, -0x2e0(%rbp)
movq -0x2d8(%rbp), %rdi
callq 0x20f50
movq %rax, -0x2e8(%rbp)
leaq -0x2e0(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0xf13b
jmp 0xf1b2
leaq -0x2e0(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x2f0(%rbp)
movq -0x2f0(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x640(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x310(%rbp)
movq $0x0, -0x300(%rbp)
leaq -0x310(%rbp), %rdi
movq %rdi, -0x638(%rbp)
callq 0x21bf0
movq -0x640(%rbp), %rdi
movq -0x638(%rbp), %rsi
movq (%rdi), %rax
movq (%rax), %rax
callq *%rax
jmp 0xf19f
jmp 0xf1a1
leaq -0x2e0(%rbp), %rdi
callq 0x20fe0
jmp 0xf122
leaq -0x250(%rbp), %rdi
callq 0x105d0
movl %eax, -0x644(%rbp)
jmp 0xf1c6
movl -0x644(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x314(%rbp)
jmp 0x104b3
leaq -0x330(%rbp), %rdi
callq 0x21c20
callq 0xa6f0
movq %rax, -0x338(%rbp)
movq -0x338(%rbp), %rdi
callq 0x21c40
movq %rax, -0x340(%rbp)
movq -0x338(%rbp), %rdi
callq 0x21c70
movq %rax, -0x348(%rbp)
leaq -0x340(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0x21ca0
testb $0x1, %al
jne 0xf235
jmp 0xf292
leaq -0x340(%rbp), %rdi
callq 0x21cd0
movq %rax, -0x350(%rbp)
movq -0x350(%rbp), %rax
movq %rax, -0x358(%rbp)
leaq -0x330(%rbp), %rdi
leaq -0x358(%rbp), %rsi
callq 0x21cf0
jmp 0xf26b
jmp 0xf26d
leaq -0x340(%rbp), %rdi
callq 0x21d20
jmp 0xf21c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x104a5
leaq -0x330(%rbp), %rdi
callq 0x21d50
movq %rax, %rcx
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movl %ecx, 0x88(%rax)
leaq -0x330(%rbp), %rdi
callq 0x21d70
testb $0x1, %al
jne 0xf595
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x40, %rdi
leaq 0x294cf(%rip), %rsi     # 0x387a9
movl $0x1, %edx
callq 0x7ea0
movl %eax, -0x648(%rbp)
jmp 0xf2ec
movl -0x648(%rbp), %eax
cmpl $0x0, %eax
jne 0xf345
leaq -0x330(%rbp), %rdi
movq %rdi, -0x650(%rbp)
callq 0x21e00
movq -0x650(%rbp), %rdi
movq %rax, -0x360(%rbp)
callq 0x21e30
movq %rax, -0x368(%rbp)
movq -0x360(%rbp), %rdi
movq -0x368(%rbp), %rsi
leaq 0x13b7(%rip), %rdx      # 0x106f0
callq 0x21db0
jmp 0xf340
jmp 0xf593
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x40, %rdi
leaq 0x29c25(%rip), %rsi     # 0x38f7f
movl $0x1, %edx
callq 0x7ea0
movl %eax, -0x654(%rbp)
jmp 0xf36c
movl -0x654(%rbp), %eax
cmpl $0x0, %eax
jne 0xf3c5
leaq -0x330(%rbp), %rdi
movq %rdi, -0x660(%rbp)
callq 0x21e00
movq -0x660(%rbp), %rdi
movq %rax, -0x370(%rbp)
callq 0x21e30
movq %rax, -0x378(%rbp)
movq -0x370(%rbp), %rdi
movq -0x378(%rbp), %rsi
leaq 0x13b7(%rip), %rdx      # 0x10770
callq 0x21db0
jmp 0xf3c0
jmp 0xf591
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x40, %rdi
leaq 0x29baf(%rip), %rsi     # 0x38f89
movl $0x1, %edx
callq 0x7ea0
movl %eax, -0x664(%rbp)
jmp 0xf3ec
movl -0x664(%rbp), %eax
cmpl $0x0, %eax
jne 0xf445
leaq -0x330(%rbp), %rdi
movq %rdi, -0x670(%rbp)
callq 0x21e00
movq -0x670(%rbp), %rdi
movq %rax, -0x380(%rbp)
callq 0x21e30
movq %rax, -0x388(%rbp)
movq -0x380(%rbp), %rdi
movq -0x388(%rbp), %rsi
leaq 0x1397(%rip), %rdx      # 0x107d0
callq 0x21db0
jmp 0xf440
jmp 0xf58f
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x40, %rdi
leaq 0x297d2(%rip), %rsi     # 0x38c2c
movl $0x1, %edx
callq 0x7ea0
movl %eax, -0x674(%rbp)
jmp 0xf46c
movl -0x674(%rbp), %eax
cmpl $0x0, %eax
jne 0xf557
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movl 0x58(%rax), %edi
callq 0x6420
leaq -0x330(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x21e60
movq %rax, -0x390(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x21d50
subq $0x1, %rax
movq %rax, -0x398(%rbp)
cmpq $0x0, -0x398(%rbp)
jbe 0xf555
callq 0x6120
cltq
movq -0x398(%rbp), %rcx
addq $0x1, %rcx
xorl %edx, %edx
divq %rcx
movl %edx, %eax
movl %eax, -0x39c(%rbp)
movq -0x390(%rbp), %rax
movq -0x398(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x3a8(%rbp)
movq -0x390(%rbp), %rax
movslq -0x39c(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x390(%rbp), %rax
movq -0x398(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x3a8(%rbp), %rdx
movq -0x390(%rbp), %rax
movslq -0x39c(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x398(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x398(%rbp)
jmp 0xf4bb
jmp 0xf58d
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x40, %rdi
leaq 0x296c5(%rip), %rsi     # 0x38c31
movl $0x1, %edx
callq 0x7ea0
movl %eax, -0x678(%rbp)
jmp 0xf57e
movl -0x678(%rbp), %eax
cmpl $0x0, %eax
jne 0xf58b
jmp 0xf58b
jmp 0xf58d
jmp 0xf58f
jmp 0xf591
jmp 0xf593
jmp 0xf595
leaq -0x3d8(%rbp), %rdi
callq 0x21e80
movq -0x5c8(%rbp), %rax
movq (%rax), %rcx
movb $0x1, %al
testb $0x1, 0x83(%rcx)
movb %al, -0x679(%rbp)
jne 0xf5ed
movq -0x5c8(%rbp), %rax
movq (%rax), %rcx
movb $0x1, %al
testb $0x1, 0x84(%rcx)
movb %al, -0x679(%rbp)
jne 0xf5ed
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movb 0x85(%rax), %al
movb %al, -0x679(%rbp)
movb -0x679(%rbp), %al
andb $0x1, %al
movb %al, -0x3d9(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x21ea0
testb $0x1, -0x3d9(%rbp)
jne 0xf6b8
movq 0x41f2d(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x400(%rbp)
movq -0x400(%rbp), %rdi
callq 0x20f20
movq %rax, -0x408(%rbp)
movq -0x400(%rbp), %rdi
callq 0x20f50
movq %rax, -0x410(%rbp)
leaq -0x408(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0xf667
jmp 0xf6b6
leaq -0x408(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x418(%rbp)
movq -0x418(%rbp), %rax
movq (%rax), %rdi
movq (%rdi), %rax
movq 0x8(%rax), %rax
callq *%rax
jmp 0xf68f
jmp 0xf691
leaq -0x408(%rbp), %rdi
callq 0x20fe0
jmp 0xf64e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x1048d
jmp 0xf6b8
leaq -0x330(%rbp), %rax
movq %rax, -0x420(%rbp)
movq -0x420(%rbp), %rdi
callq 0x21e00
movq %rax, -0x428(%rbp)
movq -0x420(%rbp), %rdi
callq 0x21e30
movq %rax, -0x430(%rbp)
leaq -0x428(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x21ec0
testb $0x1, %al
jne 0xf708
jmp 0x10292
leaq -0x428(%rbp), %rdi
callq 0x21f00
movq %rax, -0x438(%rbp)
movq -0x438(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x440(%rbp)
movb $0x0, -0x441(%rbp)
movq -0x440(%rbp), %rax
testb $0x1, 0x38(%rax)
je 0xf757
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x7a(%rax)
jne 0xf757
movb $0x1, -0x441(%rbp)
movq -0x440(%rbp), %rdi
callq 0x20cd0
movq %rax, -0x688(%rbp)
jmp 0xf76c
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
xorl %eax, %eax
movl %eax, %esi
callq 0x20e00
movq -0x688(%rbp), %rdi
movq %rax, %rsi
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movzbl 0x6d(%rax), %ecx
andl $0x1, %ecx
movl $0x1, %edx
callq 0x9f70
movb %al, -0x689(%rbp)
jmp 0xf7b3
movb -0x689(%rbp), %al
testb $0x1, %al
jne 0xf7c6
jmp 0xf7bf
movb $0x1, -0x441(%rbp)
movq -0x440(%rbp), %rdi
callq 0x20cd0
movq %rax, -0x698(%rbp)
jmp 0xf7db
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
movl $0x1, %esi
callq 0x20e00
movq -0x698(%rbp), %rdi
movq %rax, %rsi
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movzbl 0x6d(%rax), %ecx
andl $0x1, %ecx
xorl %edx, %edx
callq 0x9f70
movb %al, -0x699(%rbp)
jmp 0xf820
movb -0x699(%rbp), %al
testb $0x1, %al
jne 0xf82c
jmp 0xf833
movb $0x1, -0x441(%rbp)
movq -0x5c8(%rbp), %rax
movq -0x440(%rbp), %rcx
movq 0x28(%rcx), %rcx
movq %rcx, -0x6a8(%rbp)
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
movl $0x2, %esi
callq 0x20e00
movq -0x6a8(%rbp), %rdi
movq %rax, %rsi
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movzbl 0x6d(%rax), %ecx
andl $0x1, %ecx
movl $0x1, %edx
callq 0x9f70
movb %al, -0x69a(%rbp)
jmp 0xf88d
movb -0x69a(%rbp), %al
testb $0x1, %al
jne 0xf8a0
jmp 0xf899
movb $0x1, -0x441(%rbp)
movq -0x5c8(%rbp), %rax
movq -0x440(%rbp), %rcx
movq 0x28(%rcx), %rcx
movq %rcx, -0x6b8(%rbp)
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
movl $0x3, %esi
callq 0x20e00
movq -0x6b8(%rbp), %rdi
movq %rax, %rsi
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movzbl 0x6d(%rax), %ecx
andl $0x1, %ecx
xorl %edx, %edx
callq 0x9f70
movb %al, -0x6a9(%rbp)
jmp 0xf8f7
movb -0x6a9(%rbp), %al
testb $0x1, %al
jne 0xf903
jmp 0xf90a
movb $0x1, -0x441(%rbp)
movq -0x5c8(%rbp), %rax
movq -0x440(%rbp), %rcx
movq 0x20(%rcx), %rcx
movq %rcx, -0x6c8(%rbp)
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
movl $0x4, %esi
callq 0x20e00
movq -0x6c8(%rbp), %rdi
movq %rax, %rsi
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movzbl 0x6d(%rax), %ecx
andl $0x1, %ecx
movl $0x1, %edx
callq 0x9f70
movb %al, -0x6b9(%rbp)
jmp 0xf964
movb -0x6b9(%rbp), %al
testb $0x1, %al
jne 0xf977
jmp 0xf970
movb $0x1, -0x441(%rbp)
movq -0x5c8(%rbp), %rax
movq -0x440(%rbp), %rcx
movq 0x20(%rcx), %rcx
movq %rcx, -0x6d8(%rbp)
movq (%rax), %rdi
addq $0x10b8, %rdi           # imm = 0x10B8
movl $0x5, %esi
callq 0x20e00
movq -0x6d8(%rbp), %rdi
movq %rax, %rsi
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movzbl 0x6d(%rax), %ecx
andl $0x1, %ecx
xorl %edx, %edx
callq 0x9f70
movb %al, -0x6c9(%rbp)
jmp 0xf9ce
movb -0x6c9(%rbp), %al
testb $0x1, %al
jne 0xf9da
jmp 0xf9e1
movb $0x1, -0x441(%rbp)
testb $0x1, -0x441(%rbp)
jne 0xfa03
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movl 0x8c(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8c(%rax)
movq -0x5c8(%rbp), %rcx
movq (%rcx), %rax
movl 0x60(%rax), %eax
movq (%rcx), %rcx
cmpl 0x8c(%rcx), %eax
jae 0xfa30
movq -0x5c8(%rbp), %rcx
movq (%rcx), %rax
movl 0x5c(%rax), %eax
movq (%rcx), %rcx
cmpl 0x60(%rcx), %eax
jbe 0xfa48
movq -0x5c8(%rbp), %rcx
movq (%rcx), %rax
movl 0x5c(%rax), %eax
movq (%rcx), %rcx
cmpl 0x8c(%rcx), %eax
jbe 0xfa4f
movb $0x1, -0x441(%rbp)
testb $0x1, -0x441(%rbp)
je 0xfb02
testb $0x1, -0x3d9(%rbp)
jne 0xfafd
movq 0x41ad8(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x450(%rbp)
movq -0x450(%rbp), %rdi
callq 0x20f20
movq %rax, -0x458(%rbp)
movq -0x450(%rbp), %rdi
callq 0x20f50
movq %rax, -0x460(%rbp)
leaq -0x458(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0xfabc
jmp 0xfafb
leaq -0x458(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x468(%rbp)
movq -0x468(%rbp), %rax
movq (%rax), %rdi
movq -0x440(%rbp), %rsi
movq (%rdi), %rax
movq 0x58(%rax), %rax
callq *%rax
jmp 0xfaeb
jmp 0xfaed
leaq -0x458(%rbp), %rdi
callq 0x20fe0
jmp 0xfaa3
jmp 0xfafd
jmp 0x10281
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x83(%rax)
je 0xfb1a
jmp 0x10281
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x84(%rax)
je 0xfb55
movq -0x440(%rbp), %rax
movq %rax, -0x470(%rbp)
leaq -0x3f8(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x21f20
jmp 0xfb50
jmp 0x10281
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x85(%rax)
je 0xfce1
movq -0x440(%rbp), %rax
movq 0x28(%rax), %rsi
leaq -0x488(%rbp), %rdi
callq 0x7960
jmp 0xfb85
leaq -0x3d8(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x21f50
movq %rax, -0x6e0(%rbp)
jmp 0xfba1
movq -0x6e0(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, %rcx
movb %al, -0x6e1(%rbp)
jne 0xfbd0
movq -0x440(%rbp), %rax
movq 0x28(%rax), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
setne %al
movb %al, -0x6e1(%rbp)
movb -0x6e1(%rbp), %al
movb %al, -0x6e2(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x7900
movb -0x6e2(%rbp), %al
testb $0x1, %al
jne 0xfbf7
jmp 0xfcdc
movq -0x440(%rbp), %rax
movq %rax, -0x490(%rbp)
leaq -0x3f8(%rbp), %rdi
leaq -0x490(%rbp), %rsi
callq 0x21f20
jmp 0xfc1a
movq -0x440(%rbp), %rax
movq 0x28(%rax), %rsi
leaq -0x4a8(%rbp), %rdi
callq 0x7960
jmp 0xfc33
leaq -0x3d8(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x21fb0
movb %dl, -0x6f1(%rbp)
movq %rax, -0x6f0(%rbp)
jmp 0xfc55
movb -0x6f1(%rbp), %al
movq -0x6f0(%rbp), %rcx
movq %rcx, -0x4b8(%rbp)
movb %al, -0x4b0(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x7900
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movl 0x90(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x90(%rax)
jmp 0xfcdc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x7900
jmp 0x1048d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x7900
jmp 0x1048d
jmp 0x10281
movq -0x5c8(%rbp), %rax
movq -0x440(%rbp), %rdx
movq (%rax), %rcx
movq %rdx, 0x20(%rcx)
movq (%rax), %rcx
movl $0x0, 0xb0(%rcx)
movq (%rax), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, 0xa8(%rcx)
movq (%rax), %rdi
addq $0x8b8, %rdi            # imm = 0x8B8
xorl %esi, %esi
callq 0x22000
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0xb8, %rdi
xorl %esi, %esi
callq 0x22000
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x1128, %rdi           # imm = 0x1128
callq 0x22030
movq 0x417f1(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x4c0(%rbp)
movq -0x4c0(%rbp), %rdi
callq 0x20f20
movq %rax, -0x4c8(%rbp)
movq -0x4c0(%rbp), %rdi
callq 0x20f50
movq %rax, -0x4d0(%rbp)
leaq -0x4c8(%rbp), %rdi
leaq -0x4d0(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0xfda3
jmp 0xfde2
leaq -0x4c8(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x4d8(%rbp)
movq -0x4d8(%rbp), %rax
movq (%rax), %rdi
movq -0x440(%rbp), %rsi
movq (%rdi), %rax
movq 0x18(%rax), %rax
callq *%rax
jmp 0xfdd2
jmp 0xfdd4
leaq -0x4c8(%rbp), %rdi
callq 0x20fe0
jmp 0xfd8a
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x10f0, %rdi           # imm = 0x10F0
callq 0x22050
jmp 0xfdfa
movb $0x1, -0x4d9(%rbp)
movq -0x5c8(%rbp), %rax
movq (%rax), %rcx
movb $0x0, 0x115c(%rcx)
movq (%rax), %rcx
movl $0x0, 0x1158(%rcx)
movq (%rax), %rdi
addq $0x1110, %rdi           # imm = 0x1110
callq 0x22080
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x115d, %rdi           # imm = 0x115D
movl $0x1, %esi
callq 0x20d60
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
addq $0x10f8, %rdi           # imm = 0x10F8
callq 0x21870
leaq -0x4da(%rbp), %rdi
callq 0x10830
jmp 0xfe6d
movq -0x440(%rbp), %rax
movq 0x50(%rax), %rax
callq *%rax
jmp 0xfe7c
callq 0x10910
jmp 0xfe83
leaq -0x4da(%rbp), %rdi
callq 0x10990
jmp 0xff0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0xfec3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x4da(%rbp), %rdi
callq 0x10990
movl -0x234(%rbp), %eax
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0xff89
movq -0x230(%rbp), %rdi
callq 0x6180
movq %rax, %rcx
movq -0x5c8(%rbp), %rax
movq %rcx, -0x528(%rbp)
movq (%rax), %rax
movl 0xb0(%rax), %ecx
orl $0x1, %ecx
movl %ecx, 0xb0(%rax)
callq 0x6760
jmp 0xff0c
jmp 0xff0e
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
cmpl $0x0, 0x64(%rax)
jle 0x100bf
movq -0x5c8(%rbp), %rax
movq (%rax), %rcx
movl 0x9c(%rcx), %ecx
movl %ecx, -0x6f8(%rbp)
movq (%rax), %rdi
addq $0x8b8, %rdi            # imm = 0x8B8
callq 0x20d40
movq -0x5c8(%rbp), %rcx
movl %eax, %edx
movl -0x6f8(%rbp), %eax
addl %edx, %eax
movq (%rcx), %rcx
cmpl 0x64(%rcx), %eax
jl 0x100bf
movq -0x5c8(%rbp), %rax
movb $0x0, -0x4d9(%rbp)
movq (%rax), %rax
movl 0xb0(%rax), %ecx
orl $0x8, %ecx
movl %ecx, 0xb0(%rax)
jmp 0x100bf
movq -0x230(%rbp), %rdi
callq 0x6180
movq 0x415ac(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x4e8(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0x20f20
movq %rax, -0x4f0(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0x20f50
movq %rax, -0x4f8(%rbp)
leaq -0x4f0(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0xffeb
jmp 0x1008e
leaq -0x4f0(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x500(%rbp)
movq -0x500(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x700(%rbp)
leaq -0x520(%rbp), %rdi
callq 0xb0d0
jmp 0x1001d
movq -0x700(%rbp), %rdi
movb $0x0, -0x508(%rbp)
movq (%rdi), %rax
movq 0x30(%rax), %rax
leaq -0x520(%rbp), %rsi
callq *%rax
jmp 0x1003d
leaq -0x520(%rbp), %rdi
callq 0x210f0
leaq -0x4f0(%rbp), %rdi
callq 0x20fe0
jmp 0xffcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
jmp 0x100b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x230(%rbp)
movl %eax, -0x234(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x210f0
jmp 0x100b3
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
movl 0xb0(%rax), %ecx
orl $0x2, %ecx
movl %ecx, 0xb0(%rax)
callq 0x6760
jmp 0x100ae
jmp 0xff0e
callq 0x6760
jmp 0x100ba
jmp 0x1048d
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x115c(%rax)
je 0x10177
testb $0x1, -0x4d9(%rbp)
je 0x10177
movq 0x4145e(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x530(%rbp)
movq -0x530(%rbp), %rdi
callq 0x20f20
movq %rax, -0x538(%rbp)
movq -0x530(%rbp), %rdi
callq 0x20f50
movq %rax, -0x540(%rbp)
leaq -0x538(%rbp), %rdi
leaq -0x540(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0x10136
jmp 0x10175
leaq -0x538(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x548(%rbp)
movq -0x548(%rbp), %rax
movq (%rax), %rdi
movq -0x440(%rbp), %rsi
movq (%rdi), %rax
movq 0x20(%rax), %rax
callq *%rax
jmp 0x10165
jmp 0x10167
leaq -0x538(%rbp), %rdi
callq 0x20fe0
jmp 0x1011d
jmp 0x10177
movq -0x5c8(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x115c(%rax)
jne 0x10191
movb $0x0, -0x4d9(%rbp)
jmp 0x10193
testb $0x1, -0x4d9(%rbp)
jne 0xfe01
movq -0x5c8(%rbp), %rax
movq (%rax), %rdi
callq 0x220a0
jmp 0x101b1
movq 0x41390(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x550(%rbp)
movq -0x550(%rbp), %rdi
callq 0x20f20
movq %rax, -0x558(%rbp)
movq -0x550(%rbp), %rdi
callq 0x20f50
movq %rax, -0x560(%rbp)
leaq -0x558(%rbp), %rdi
leaq -0x560(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0x10204
jmp 0x1024a
leaq -0x558(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x568(%rbp)
movq -0x568(%rbp), %rax
movq (%rax), %rdi
movq 0x41320(%rip), %rsi     # 0x51548
addq $0xa0, %rsi
movq (%rdi), %rax
movq 0x28(%rax), %rax
callq *%rax
jmp 0x1023a
jmp 0x1023c
leaq -0x558(%rbp), %rdi
callq 0x20fe0
jmp 0x101eb
movq -0x5c8(%rbp), %rax
movq (%rax), %rcx
movq $0x0, 0x20(%rcx)
movq (%rax), %rax
cmpl $0x0, 0x64(%rax)
jle 0x1027f
movq -0x5c8(%rbp), %rcx
movq (%rcx), %rax
movl 0x9c(%rax), %eax
movq (%rcx), %rcx
cmpl 0x64(%rcx), %eax
jl 0x1027f
jmp 0x10292
jmp 0x10281
leaq -0x428(%rbp), %rdi
callq 0x22360
jmp 0xf6ec
testb $0x1, -0x3d9(%rbp)
jne 0x1033d
movq 0x412a2(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x570(%rbp)
movq -0x570(%rbp), %rdi
callq 0x20f20
movq %rax, -0x578(%rbp)
movq -0x570(%rbp), %rdi
callq 0x20f50
movq %rax, -0x580(%rbp)
leaq -0x578(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0x102f2
jmp 0x10338
leaq -0x578(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x588(%rbp)
movq -0x588(%rbp), %rax
movq (%rax), %rdi
movq 0x41232(%rip), %rsi     # 0x51548
addq $0x88, %rsi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
jmp 0x10328
jmp 0x1032a
leaq -0x578(%rbp), %rdi
callq 0x20fe0
jmp 0x102d9
jmp 0x10440
leaq -0x5a0(%rbp), %rdi
callq 0x21bf0
movq 0x411f8(%rip), %rcx     # 0x51548
movq %rcx, -0x710(%rbp)
xorl %eax, %eax
cmpq $0x0, %rcx
movq %rax, -0x708(%rbp)
je 0x1037a
movq -0x710(%rbp), %rax
addq $0x88, %rax
movq %rax, -0x708(%rbp)
movq -0x708(%rbp), %rax
movq %rax, -0x5a0(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x22380
movq %rax, -0x598(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x223a0
movl %eax, -0x590(%rbp)
movq 0x41194(%rip), %rax     # 0x51548
addq $0x10d0, %rax           # imm = 0x10D0
movq %rax, -0x5a8(%rbp)
movq -0x5a8(%rbp), %rdi
callq 0x20f20
movq %rax, -0x5b0(%rbp)
movq -0x5a8(%rbp), %rdi
callq 0x20f50
movq %rax, -0x5b8(%rbp)
leaq -0x5b0(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0x20f80
testb $0x1, %al
jne 0x10400
jmp 0x1043e
leaq -0x5b0(%rbp), %rdi
callq 0x20fc0
movq %rax, -0x5c0(%rbp)
movq -0x5c0(%rbp), %rax
movq (%rax), %rdi
movq (%rdi), %rax
movq (%rax), %rax
leaq -0x5a0(%rbp), %rsi
callq *%rax
jmp 0x1042e
jmp 0x10430
leaq -0x5b0(%rbp), %rdi
callq 0x20fe0
jmp 0x103e7
jmp 0x10440
leaq -0x250(%rbp), %rdi
callq 0x105d0
movl %eax, -0x714(%rbp)
jmp 0x10454
movl -0x714(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x314(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x223c0
leaq -0x3d8(%rbp), %rdi
callq 0x22420
leaq -0x330(%rbp), %rdi
callq 0x22440
jmp 0x104b3
leaq -0x3f8(%rbp), %rdi
callq 0x223c0
leaq -0x3d8(%rbp), %rdi
callq 0x22420
leaq -0x330(%rbp), %rdi
callq 0x22440
jmp 0x104cb
leaq -0x228(%rbp), %rdi
callq 0x60d0
movl -0x4(%rbp), %eax
addq $0x720, %rsp            # imm = 0x720
popq %rbp
retq
leaq -0x228(%rbp), %rdi
callq 0x60d0
movq -0x230(%rbp), %rdi
callq 0x6800
movq %rax, %rdi
callq 0x20cc0
nopl (%rax,%rax)