// File: travisdowns[P]avx-turbo/avx-turbo.cpp
// Function: main
int main(int argc, char** argv) {

    try {
        parser.ParseCLI(argc, argv);
        if (arg_iters.Get() % 100 != 0) {
            printf("ITERS must be a multiple of 100\n");
            exit(EXIT_FAILURE);
        }
    } catch (args::Help& help) {
        printf("%s\n", parser.Help().c_str());
        exit(EXIT_SUCCESS);
    } catch (const args::ParseError& e) {
        printf("ERROR while parsing arguments: %s\n", e.what());
        printf("\nUsage:\n%s\n", parser.Help().c_str());
        exit(EXIT_FAILURE);
    }

    if (arg_list) {
        list_tests();
        exit(EXIT_SUCCESS);
    }

    verbose = arg_verbose;
    bool is_root = (geteuid() == 0);
    bool use_aperf = aperf_ghz::is_supported();
    printf("CPUID highest leaf    : [%2xh]\n", cpuid_highest_leaf());
    printf("Running as root       : [%s]\n", is_root     ? "YES" : "NO ");
    printf("MSR reads supported   : [%s]\n", use_aperf   ? "YES" : "NO ");
    printf("CPU pinning enabled   : [%s]\n", !arg_no_pin ? "YES" : "NO ");

    ISA isas_supported = get_isas();
    zeroupper_allowed = isas_supported & AVX2;
    printf("CPU supports zeroupper: [%s]\n", zeroupper_allowed         ? "YES" : "NO ");
    printf("CPU supports AVX2     : [%s]\n", isas_supported & AVX2     ? "YES" : "NO ");
    printf("CPU supports AVX-512F : [%s]\n", isas_supported & AVX512F  ? "YES" : "NO ");
    printf("CPU supports AVX-512VL: [%s]\n", isas_supported & AVX512VL ? "YES" : "NO ");
    printf("CPU supports AVX-512BW: [%s]\n", isas_supported & AVX512BW ? "YES" : "NO ");
    printf("CPU supports AVX-512CD: [%s]\n", isas_supported & AVX512CD ? "YES" : "NO ");
    printf("tsc_freq = %.1f MHz (%s)\n", RdtscClock::tsc_freq() / 1000000.0, get_tsc_cal_info(arg_force_tsc_cal));
    std::vector<int> cpus = get_cpus();
    printf("CPU brand string: %s\n", get_brand_string().c_str());
    printf("%lu available CPUs: [%s]\n", cpus.size(), join(cpus, ", ").c_str());
    if (!arg_hyperthreads) {
        cpus = filter_cpus(cpus);
        printf("%lu physical cores: [%s]\n", cpus.size(), join(cpus, ", ").c_str());
    }

    if (arg_dirty && !(isas_supported & AVX512VL)) {
        printf("ERROR: --dirty-upper only supported on AVX-512 hardware\n");
        exit(EXIT_FAILURE);
    }

    auto iters = arg_iters.Get();
    zeroupper();
    auto specs = filter_tests(isas_supported, cpus);

    size_t last_thread_count = -1u;
    std::vector<result_holder> results_list;
    for (auto& spec : specs) {
        // if we changed the number of threads, spit out the accumulated output
        if (last_thread_count != -1u && last_thread_count != spec.count()) {
            // time to print results
            report_results(results_list, use_aperf);
            results_list.clear();
        }
        last_thread_count = spec.count();

        assert(!spec.thread_funcs.empty());
        if (verbose) printf("Running test spec: %s\n", spec.to_string().c_str());

        // run
        std::deque<test_thread> threads;
        hot_barrier start{spec.count()}, stop{spec.count()};
        for (auto& test : spec.thread_funcs) {
            threads.emplace_back(threads.size(), start, stop, &test, iters, use_aperf);
        }

        results_list.emplace_back(&spec);
        for (auto& t : threads) {
            t.thread.join();
            results_list.back().results.push_back(t.res);
        }
    }

    report_results(results_list, use_aperf);

    return EXIT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3d0, %rsp            # imm = 0x3D0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl -0x8(%rbp), %esi
movq -0x10(%rbp), %rdx
leaq 0x4e6f9(%rip), %rdi     # 0x5b4d0
callq 0x12820
jmp 0xcdde
leaq 0x4f163(%rip), %rdi     # 0x5bf48
callq 0x12940
movq (%rax), %rax
movl $0x64, %ecx
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
je 0xcf05
leaq 0x33a76(%rip), %rdi     # 0x4087e
xorl %eax, %eax
callq 0x7080
jmp 0xce11
movl $0x1, %edi
callq 0x7550
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x304(%rbp)
movl $0x2, %ecx
cmpl %ecx, %eax
jne 0xce84
movq -0x18(%rbp), %rdi
callq 0x7190
movq %rax, -0x50(%rbp)
leaq 0x4e683(%rip), %rsi     # 0x5b4d0
leaq -0x70(%rbp), %rdi
callq 0x12960
jmp 0xce58
leaq -0x70(%rbp), %rdi
callq 0x71a0
movq %rax, %rsi
leaq 0x33955(%rip), %rdi     # 0x407c0
xorl %eax, %eax
callq 0x7080
jmp 0xce74
leaq -0x70(%rbp), %rdi
callq 0x7290
xorl %edi, %edi
callq 0x7550
movl -0x304(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0xdaaa
movq -0x18(%rbp), %rdi
callq 0x7190
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq %rax, %rsi
leaq 0x339e4(%rip), %rdi     # 0x4089f
xorl %eax, %eax
callq 0x7080
jmp 0xcec4
leaq 0x4e605(%rip), %rsi     # 0x5b4d0
leaq -0x48(%rbp), %rdi
callq 0x12960
jmp 0xced6
leaq -0x48(%rbp), %rdi
callq 0x71a0
movq %rax, %rsi
leaq 0x339d9(%rip), %rdi     # 0x408c2
xorl %eax, %eax
callq 0x7080
jmp 0xcef2
leaq -0x48(%rbp), %rdi
callq 0x7290
movl $0x1, %edi
callq 0x7550
jmp 0xcf65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xcf2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x7290
callq 0x7740
jmp 0xcf31
jmp 0xdaaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xcf59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x7290
callq 0x7740
jmp 0xcf60
jmp 0xdaaa
leaq 0x4eadc(%rip), %rdi     # 0x5ba48
callq 0x10ee0
testb $0x1, %al
jne 0xcf77
jmp 0xcf83
callq 0xc6b0
xorl %edi, %edi
callq 0x7550
leaq 0x4e92e(%rip), %rdi     # 0x5b8b8
callq 0x10ee0
andb $0x1, %al
movb %al, 0x4f3d1(%rip)      # 0x5c368
callq 0x7260
cmpl $0x0, %eax
sete %al
andb $0x1, %al
movb %al, -0x71(%rbp)
callq 0x12a30
andb $0x1, %al
movb %al, -0x72(%rbp)
callq 0x36560
movl %eax, %esi
leaq 0x3390f(%rip), %rdi     # 0x408ce
movb $0x0, %al
callq 0x7080
testb $0x1, -0x71(%rbp)
je 0xcfdc
leaq 0x33939(%rip), %rax     # 0x4090c
movq %rax, -0x310(%rbp)
jmp 0xcfec
leaq 0x3392d(%rip), %rax     # 0x40910
movq %rax, -0x310(%rbp)
jmp 0xcfec
movq -0x310(%rbp), %rsi
leaq 0x338f4(%rip), %rdi     # 0x408ee
movb $0x0, %al
callq 0x7080
testb $0x1, -0x72(%rbp)
je 0xd017
leaq 0x338fe(%rip), %rax     # 0x4090c
movq %rax, -0x318(%rbp)
jmp 0xd027
leaq 0x338f2(%rip), %rax     # 0x40910
movq %rax, -0x318(%rbp)
jmp 0xd027
movq -0x318(%rbp), %rsi
leaq 0x338df(%rip), %rdi     # 0x40914
movb $0x0, %al
callq 0x7080
leaq 0x4e7ad(%rip), %rdi     # 0x5b7f0
callq 0x10ee0
testb $0x1, %al
jne 0xd05c
leaq 0x338b9(%rip), %rax     # 0x4090c
movq %rax, -0x320(%rbp)
jmp 0xd06c
leaq 0x338ad(%rip), %rax     # 0x40910
movq %rax, -0x320(%rbp)
jmp 0xd06c
movq -0x320(%rbp), %rsi
leaq 0x338b8(%rip), %rdi     # 0x40932
movb $0x0, %al
callq 0x7080
callq 0xa630
movl %eax, -0x78(%rbp)
movl -0x78(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
setne %al
andb $0x1, %al
movb %al, 0x4e42b(%rip)      # 0x5b4c8
testb $0x1, 0x4e424(%rip)     # 0x5b4c8
je 0xd0b6
leaq 0x3385f(%rip), %rax     # 0x4090c
movq %rax, -0x328(%rbp)
jmp 0xd0c6
leaq 0x33853(%rip), %rax     # 0x40910
movq %rax, -0x328(%rbp)
jmp 0xd0c6
movq -0x328(%rbp), %rsi
leaq 0x3387c(%rip), %rdi     # 0x40950
movb $0x0, %al
callq 0x7080
movl -0x78(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0xd0f6
leaq 0x3381f(%rip), %rax     # 0x4090c
movq %rax, -0x330(%rbp)
jmp 0xd106
leaq 0x33813(%rip), %rax     # 0x40910
movq %rax, -0x330(%rbp)
jmp 0xd106
movq -0x330(%rbp), %rsi
leaq 0x3385a(%rip), %rdi     # 0x4096e
movb $0x0, %al
callq 0x7080
movl -0x78(%rbp), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0xd136
leaq 0x337df(%rip), %rax     # 0x4090c
movq %rax, -0x338(%rbp)
jmp 0xd146
leaq 0x337d3(%rip), %rax     # 0x40910
movq %rax, -0x338(%rbp)
jmp 0xd146
movq -0x338(%rbp), %rsi
leaq 0x33838(%rip), %rdi     # 0x4098c
movb $0x0, %al
callq 0x7080
movl -0x78(%rbp), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0xd176
leaq 0x3379f(%rip), %rax     # 0x4090c
movq %rax, -0x340(%rbp)
jmp 0xd186
leaq 0x33793(%rip), %rax     # 0x40910
movq %rax, -0x340(%rbp)
jmp 0xd186
movq -0x340(%rbp), %rsi
leaq 0x33816(%rip), %rdi     # 0x409aa
movb $0x0, %al
callq 0x7080
movl -0x78(%rbp), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0xd1b6
leaq 0x3375f(%rip), %rax     # 0x4090c
movq %rax, -0x348(%rbp)
jmp 0xd1c6
leaq 0x33753(%rip), %rax     # 0x40910
movq %rax, -0x348(%rbp)
jmp 0xd1c6
movq -0x348(%rbp), %rsi
leaq 0x337f4(%rip), %rdi     # 0x409c8
movb $0x0, %al
callq 0x7080
movl -0x78(%rbp), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0xd1f6
leaq 0x3371f(%rip), %rax     # 0x4090c
movq %rax, -0x350(%rbp)
jmp 0xd206
leaq 0x33713(%rip), %rax     # 0x40910
movq %rax, -0x350(%rbp)
jmp 0xd206
movq -0x350(%rbp), %rsi
leaq 0x337d2(%rip), %rdi     # 0x409e6
xorl %eax, %eax
callq 0x7080
callq 0x12a80
movq %rax, %xmm0
movaps 0x32de4(%rip), %xmm1    # 0x40010
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x32de8(%rip), %xmm1    # 0x40020
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x32de1(%rip), %xmm1    # 0x40030
divsd %xmm1, %xmm0
movsd %xmm0, -0x358(%rbp)
leaq 0x4e4c6(%rip), %rdi     # 0x5b728
callq 0x10ee0
movzbl %al, %edi
callq 0x370c0
movsd -0x358(%rbp), %xmm0
movq %rax, %rsi
leaq 0x33783(%rip), %rdi     # 0x40a04
movb $0x1, %al
callq 0x7080
leaq -0x90(%rbp), %rdi
callq 0xc830
leaq -0xb0(%rbp), %rdi
callq 0x36740
jmp 0xd2a2
leaq -0xb0(%rbp), %rdi
callq 0x71a0
movq %rax, %rsi
leaq 0x33766(%rip), %rdi     # 0x40a1e
xorl %eax, %eax
callq 0x7080
jmp 0xd2c1
leaq -0xb0(%rbp), %rdi
callq 0x7290
leaq -0x90(%rbp), %rdi
callq 0x10f20
movq %rax, -0x368(%rbp)
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x360(%rbp)
callq 0x77c0
movq -0x360(%rbp), %rdx
leaq 0x3374d(%rip), %rsi     # 0x40a4e
leaq -0xf0(%rbp), %rdi
callq 0x7630
jmp 0xd30f
leaq -0xd0(%rbp), %rdi
leaq -0x90(%rbp), %rsi
leaq -0xf0(%rbp), %rdx
callq 0xdac0
jmp 0xd32b
leaq -0xd0(%rbp), %rdi
callq 0x71a0
movq -0x368(%rbp), %rsi
movq %rax, %rdx
leaq 0x336ec(%rip), %rdi     # 0x40a34
xorl %eax, %eax
callq 0x7080
jmp 0xd351
leaq -0xd0(%rbp), %rdi
callq 0x7290
leaq -0xf0(%rbp), %rdi
callq 0x7290
leaq -0xf1(%rbp), %rdi
callq 0x74d0
leaq 0x4e794(%rip), %rdi     # 0x5bb10
callq 0x10ee0
testb $0x1, %al
jne 0xd586
leaq -0x128(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x11850
jmp 0xd39e
leaq -0x110(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0xca50
jmp 0xd3b3
leaq -0x90(%rbp), %rdi
movq %rdi, -0x380(%rbp)
leaq -0x110(%rbp), %rsi
movq %rsi, -0x388(%rbp)
callq 0x12b10
movq -0x388(%rbp), %rdi
callq 0x11940
leaq -0x128(%rbp), %rdi
callq 0x11940
movq -0x380(%rbp), %rdi
callq 0x10f20
movq %rax, -0x378(%rbp)
leaq -0x169(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0x77c0
movq -0x370(%rbp), %rdx
leaq 0x3362e(%rip), %rsi     # 0x40a4e
leaq -0x168(%rbp), %rdi
callq 0x7630
jmp 0xd42e
leaq -0x148(%rbp), %rdi
leaq -0x90(%rbp), %rsi
leaq -0x168(%rbp), %rdx
callq 0xdac0
jmp 0xd44a
leaq -0x148(%rbp), %rdi
callq 0x71a0
movq -0x378(%rbp), %rsi
movq %rax, %rdx
leaq 0x335ea(%rip), %rdi     # 0x40a51
xorl %eax, %eax
callq 0x7080
jmp 0xd470
leaq -0x148(%rbp), %rdi
callq 0x7290
leaq -0x168(%rbp), %rdi
callq 0x7290
leaq -0x169(%rbp), %rdi
callq 0x74d0
jmp 0xd586
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xda9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x7290
jmp 0xda9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd507
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd4fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x7290
leaq -0xf0(%rbp), %rdi
callq 0x7290
leaq -0xf1(%rbp), %rdi
callq 0x74d0
jmp 0xda9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x11940
jmp 0xda9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd575
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xd569
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x7290
leaq -0x168(%rbp), %rdi
callq 0x7290
leaq -0x169(%rbp), %rdi
callq 0x74d0
jmp 0xda9e
leaq 0x4e64b(%rip), %rdi     # 0x5bbd8
callq 0x10ee0
testb $0x1, %al
jne 0xd598
jmp 0xd5bd
movl -0x78(%rbp), %eax
andl $0x8, %eax
cmpl $0x0, %eax
jne 0xd5bd
leaq 0x334c1(%rip), %rdi     # 0x40a6b
xorl %eax, %eax
callq 0x7080
jmp 0xd5b3
movl $0x1, %edi
callq 0x7550
leaq 0x4e984(%rip), %rdi     # 0x5bf48
callq 0x12940
movq (%rax), %rax
movq %rax, -0x178(%rbp)
callq 0xa540
jmp 0xd5da
movl -0x78(%rbp), %eax
movl %eax, -0x38c(%rbp)
leaq -0x1a8(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x11850
jmp 0xd5f8
movl -0x38c(%rbp), %esi
leaq -0x190(%rbp), %rdi
leaq -0x1a8(%rbp), %rdx
callq 0xb850
jmp 0xd613
leaq -0x1a8(%rbp), %rdi
callq 0x11940
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movq %rax, -0x1b0(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x12b40
leaq -0x190(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq -0x1d0(%rbp), %rdi
callq 0x12b60
movq %rax, -0x1d8(%rbp)
movq -0x1d0(%rbp), %rdi
callq 0x12b90
movq %rax, -0x1e0(%rbp)
leaq -0x1d8(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x12bc0
testb $0x1, %al
jne 0xd687
jmp 0xda3a
leaq -0x1d8(%rbp), %rdi
callq 0x12c00
movq %rax, -0x1e8(%rbp)
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpq %rax, -0x1b0(%rbp)
je 0xd733
movq -0x1b0(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movq -0x1e8(%rbp), %rdi
callq 0x11690
movq %rax, -0x398(%rbp)
jmp 0xd6cf
movq -0x3a0(%rbp), %rax
movq -0x398(%rbp), %rcx
cmpq %rcx, %rax
je 0xd733
movzbl -0x72(%rbp), %esi
andl $0x1, %esi
leaq -0x1c8(%rbp), %rdi
callq 0xb940
jmp 0xd6f7
leaq -0x1c8(%rbp), %rdi
callq 0x12c20
jmp 0xd733
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x11940
jmp 0xda9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0xda86
movq -0x1e8(%rbp), %rdi
callq 0x11690
movq %rax, -0x3a8(%rbp)
jmp 0xd748
movq -0x3a8(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x1e8(%rbp), %rdi
addq $0x40, %rdi
callq 0x12c40
xorb $-0x1, %al
testb $0x1, %al
jne 0xd76e
jmp 0xd770
jmp 0xd78f
leaq 0x3332d(%rip), %rdi     # 0x40aa4
leaq 0x32f1c(%rip), %rsi     # 0x4069a
movl $0x355, %edx            # imm = 0x355
leaq 0x33335(%rip), %rcx     # 0x40abf
callq 0x72e0
testb $0x1, 0x4ebd2(%rip)     # 0x5c368
je 0xd7f7
movq -0x1e8(%rbp), %rsi
leaq -0x208(%rbp), %rdi
callq 0x12c80
jmp 0xd7ad
leaq -0x208(%rbp), %rdi
callq 0x71a0
movq %rax, %rsi
leaq 0x33313(%rip), %rdi     # 0x40ad6
xorl %eax, %eax
callq 0x7080
jmp 0xd7cc
leaq -0x208(%rbp), %rdi
callq 0x7290
jmp 0xd7f7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x7290
jmp 0xda86
leaq -0x258(%rbp), %rdi
callq 0x12d60
jmp 0xd805
movq -0x1e8(%rbp), %rdi
callq 0x11690
movq %rax, -0x3b0(%rbp)
jmp 0xd81a
movq -0x3b0(%rbp), %rsi
leaq -0x268(%rbp), %rdi
callq 0x12d80
jmp 0xd82f
movq -0x1e8(%rbp), %rdi
callq 0x11690
movq %rax, -0x3b8(%rbp)
jmp 0xd844
movq -0x3b8(%rbp), %rsi
leaq -0x278(%rbp), %rdi
callq 0x12d80
jmp 0xd859
movq -0x1e8(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x280(%rbp)
movq -0x280(%rbp), %rdi
callq 0x111d0
movq %rax, -0x288(%rbp)
movq -0x280(%rbp), %rdi
callq 0x11270
movq %rax, -0x290(%rbp)
leaq -0x288(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x112a0
testb $0x1, %al
jne 0xd8ad
jmp 0xd953
leaq -0x288(%rbp), %rdi
callq 0x112e0
movq %rax, -0x298(%rbp)
leaq -0x258(%rbp), %rdi
movq %rdi, -0x3c0(%rbp)
callq 0x12e60
movq -0x3c0(%rbp), %rdi
movq %rax, -0x2a0(%rbp)
movq -0x298(%rbp), %rax
movq %rax, -0x2a8(%rbp)
movq %rsp, %rax
leaq -0x72(%rbp), %rcx
movq %rcx, (%rax)
leaq -0x2a0(%rbp), %rsi
leaq -0x268(%rbp), %rdx
leaq -0x278(%rbp), %rcx
leaq -0x2a8(%rbp), %r8
leaq -0x178(%rbp), %r9
callq 0x12db0
jmp 0xd923
jmp 0xd925
leaq -0x288(%rbp), %rdi
callq 0x11300
jmp 0xd891
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x130b0
jmp 0xda86
movq -0x1e8(%rbp), %rax
movq %rax, -0x2b0(%rbp)
leaq -0x1c8(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x12e90
jmp 0xd976
leaq -0x258(%rbp), %rax
movq %rax, -0x2b8(%rbp)
movq -0x2b8(%rbp), %rsi
leaq -0x2d8(%rbp), %rdi
callq 0x12f00
movq -0x2b8(%rbp), %rsi
leaq -0x2f8(%rbp), %rdi
callq 0x12f30
leaq -0x2d8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x12f60
testb $0x1, %al
jne 0xd9c3
jmp 0xda1d
leaq -0x2d8(%rbp), %rdi
callq 0x12f90
movq %rax, -0x300(%rbp)
movq -0x300(%rbp), %rdi
addq $0x78, %rdi
callq 0x7780
jmp 0xd9e8
leaq -0x1c8(%rbp), %rdi
callq 0x12fb0
movq %rax, %rdi
addq $0x8, %rdi
movq -0x300(%rbp), %rsi
addq $0x18, %rsi
callq 0x12ff0
jmp 0xda0d
jmp 0xda0f
leaq -0x2d8(%rbp), %rdi
callq 0x13060
jmp 0xd9aa
leaq -0x258(%rbp), %rdi
callq 0x130b0
leaq -0x1d8(%rbp), %rdi
callq 0x13120
jmp 0xd66b
movzbl -0x72(%rbp), %esi
andl $0x1, %esi
leaq -0x1c8(%rbp), %rdi
callq 0xb940
jmp 0xda4f
movl $0x0, -0x4(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x13140
leaq -0x190(%rbp), %rdi
callq 0x11380
leaq -0x90(%rbp), %rdi
callq 0x11940
movl -0x4(%rbp), %eax
addq $0x3d0, %rsp            # imm = 0x3D0
popq %rbp
retq
leaq -0x1c8(%rbp), %rdi
callq 0x13140
leaq -0x190(%rbp), %rdi
callq 0x11380
leaq -0x90(%rbp), %rdi
callq 0x11940
movq -0x18(%rbp), %rdi
callq 0x77b0
movq %rax, %rdi
callq 0x12a20
nopl (%rax,%rax)