// File: /workspace/github_cpp_makefile_star2_O3/conp-solutions[P]cnfmiter/AtLeastTwoSolutions.cc
// Function: main
int main(int argc, char **argv)
{
    int opt;
    int tseitin = 0;
    int maxsat = 0;
    std::cerr << "c AtLeastTwoSolutions generates a CNF formula " << std::endl
              << "c which is satisfiable if the given input formula has at least 2 models" << std::endl
              << "c" << std::endl
              << "c OPTIONS" << std::endl
              << "c -t x ... only force differences among the variables 1 to x" << std::endl
              << "c -W   ... encode a MaxSat formula that tries to get two solutions with largest hamming distance" << std::endl
              << "c -w   ... same as -w, but use the pre 2020 MaxSat format" << std::endl
              << std::endl;

    // Retrieve the options:
    while ((opt = getopt(argc, argv, "t:wW")) != -1) { // for each option...
        switch (opt) {
        case 't':
            tseitin = atoi(optarg);
            std::cerr << "c set tseitin variable to " << tseitin << std::endl;
            break;
        case 'w':
            maxsat = 1;
            std::cerr << "c enable maxsat pre-2021 mode" << std::endl;
            break;
        case 'W':
            maxsat = 2;
            std::cerr << "c enable maxsat post-2020 mode" << std::endl;
            break;
        case '?': // unknown option...
            std::cerr << "c unknown option: '" << char(optopt) << "'!" << std::endl;
            exit(1);
            break;
        }
    }

    if (optind + 1 != argc) {
        std::cerr << "not enough parameters, abort!" << std::endl;
        return 1;
    }

    std::string fn1 = (argv[optind + 0]);
    gzFile in1 = gzopen(fn1.c_str(), "rb");

    if (!in1) {
        std::cerr << "failed to open first file, abort!" << std::endl;
        return 1;
    }
    if (tseitin < 0) {
        std::cerr << "tseitin variable negative, abort" << std::endl;
        return 1;
    }

    Formula f1;

    parse_DIMACS(in1, f1);
    gzclose(in1);

    std::cerr << "c Parsed formula with " << f1.nVars() << " vars and " << f1.clauses.size() << std::endl;

    Formula result;
    int input_vars = f1.nVars();
    int var_offset = input_vars;
    int output_vars = 2 * input_vars;
    while (output_vars > result.nVars()) result.newVar();
    std::vector<Lit> rewritten_clause;

    /* add formula 2 times, once with a full variable offset */
    /* duplicate this, to check whether a formuala has more models */
    for (const auto &clause : f1.clauses) {
        result.addClause_(clause);
        rewritten_clause.clear();
        for (int i = 0; i < clause.size(); ++i) {
            Lit l = clause[i];
            Var v = var(l);
            rewritten_clause.push_back(mkLit(v + var_offset, sign(l)));
        }
        result.addClause_(rewritten_clause);
    }

    /* encode variable differences for given number of variables */
    /* this grows quadratic in the number of models that should be checked for */
    Var max_v = tseitin == 0 ? input_vars : tseitin;
    int next_var = output_vars;
    std::vector<Lit> one_unequal_clause;
    std::cerr << "c encode variable equivalences for first " << max_v << " variables" << std::endl;
    for (Var v = 0; v < max_v; ++v) {
        Lit a = mkLit(v);
        Lit A = mkLit(v + var_offset);
        Lit next_lit = mkLit(next_var++);
        while (var(next_lit) >= result.nVars()) result.newVar();
        /* a <-> (a+offset) <-> next_lit */
        generate_equivalence(result, a, A, next_lit);
        one_unequal_clause.push_back(~next_lit);
    }

    /* enforce that at least one assignment has to be different */
    result.addClause_(one_unequal_clause);

    std::stringstream s;
    if (maxsat == 0) {
        s << "encode formula to check whether there are more than 1 solution for " << fn1;
        if (tseitin != 0) s << " with tseitin base variable " << tseitin;
        /* one of the common literal pair should have unequal truth values has to be */
        print_formula(result, s.str());
    } else {
        s << "encode formula to find two solutions with the highest hamming distance for a given formula, at least 1, for " << fn1;
        if (tseitin != 0) s << " with tseitin base variable " << tseitin;
        /* there is a cost setting variables to equal truth values, hence, pay cost for each unit */
        print_maxsat_formula(result, one_unequal_clause, s.str(), maxsat == 1);
    }


    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x100128, %rsp         # imm = 0x100128
movq %rsi, %rbx
movl %edi, %r15d
movq 0x313c(%rip), %r13      # 0x5ff0
leaq 0x11cd(%rip), %rsi      # 0x4088
movl $0x2e, %edx
movq %r13, %rdi
callq 0x2190
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x11bd(%rip), %rsi      # 0x40b7
movl $0x47, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x11c7(%rip), %rsi      # 0x40ff
movl $0x1, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x118b(%rip), %rsi      # 0x4101
movl $0x9, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x1157(%rip), %rsi      # 0x410b
movl $0x3c, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x1156(%rip), %rsi      # 0x4148
movl $0x60, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x1179(%rip), %rsi      # 0x41a9
movl $0x39, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r12
movl $0x0, -0x3c(%rbp)
leaq 0x116e(%rip), %r14      # 0x41e3
movl $0x0, -0x2c(%rbp)
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl %r15d, %edi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x2050
cmpl $0x73, %eax
jg 0x30cf
cmpl $-0x1, %eax
je 0x315c
cmpl $0x57, %eax
je 0x3139
cmpl $0x3f, %eax
jne 0x30a4
jmp 0x38d9
cmpl $0x77, %eax
je 0x3116
cmpl $0x74, %eax
jne 0x30a4
movq 0x2ec8(%rip), %rax      # 0x5fa8
movq (%rax), %rdi
callq 0x2200
movl %eax, %r12d
movl $0x1a, %edx
movq %r13, %rdi
leaq 0x10ee(%rip), %rsi      # 0x41e8
callq 0x2190
movq %r13, %rdi
movl %r12d, -0x2c(%rbp)
movl %r12d, %esi
callq 0x2260
movq %rax, %r12
jmp 0x307c
movl $0x1d, %edx
movq %r13, %rdi
leaq 0x10de(%rip), %rsi      # 0x4203
callq 0x2190
movl $0x1, -0x3c(%rbp)
movq %r13, %r12
jmp 0x307c
movl $0x1e, %edx
movq %r13, %rdi
leaq 0x10d9(%rip), %rsi      # 0x4221
callq 0x2190
movl $0x2, -0x3c(%rbp)
movq %r13, %r12
jmp 0x307c
movq 0x2e6d(%rip), %rax      # 0x5fd0
movslq (%rax), %rax
leal 0x1(%rax), %ecx
cmpl %r15d, %ecx
jne 0x336c
movq (%rbx,%rax,8), %rsi
leaq -0xe8(%rbp), %rbx
leaq -0x100150(%rbp), %rdx
movq %rbx, %rdi
callq 0x2090
movq (%rbx), %rdi
leaq 0x10df(%rip), %rsi      # 0x4275
callq 0x21e0
testq %rax, %rax
je 0x37b8
cmpl $0x0, -0x2c(%rbp)
js 0x37c6
leaq -0xb8(%rbp), %rcx
movl $0x0, -0x8(%rcx)
xorps %xmm0, %xmm0
movups %xmm0, (%rcx)
xorl %ebx, %ebx
movq %rbx, 0x10(%rcx)
leaq -0x100148(%rbp), %rsi
movq %rax, -0x8(%rsi)
movq %rbx, 0x100000(%rsi)
movq %rax, -0xc8(%rbp)
movq %rax, %rdi
movl $0x100000, %edx         # imm = 0x100000
callq 0x2290
leaq -0x100150(%rbp), %r12
movl %eax, 0x10000c(%r12)
leaq -0x60(%rbp), %r13
xorps %xmm0, %xmm0
movaps %xmm0, (%r13)
movq $0x0, 0x10(%r13)
leaq 0x11e2(%rip), %r14      # 0x43fa
movl $0x0, -0x68(%rbp)
movl $0x0, -0x38(%rbp)
movq %r12, %rdi
callq 0x3a40
movl -0x148(%rbp), %ecx
cmpl -0x144(%rbp), %ecx
jge 0x33b8
movslq %ecx, %rax
movzbl -0x100148(%rbp,%rax), %eax
cmpl $0x70, %eax
je 0x3282
cmpl $0x63, %eax
jne 0x32eb
movslq %ecx, %rax
movb -0x100148(%rbp,%rax), %r15b
movq %r12, %rdi
callq 0x3e7e
cmpb $0xa, %r15b
je 0x3226
movl -0x148(%rbp), %ecx
cmpl -0x144(%rbp), %ecx
jl 0x3259
jmp 0x3226
movl $0x1, %r15d
xorl %ecx, %ecx
movslq -0x148(%rbp), %rsi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
cmpl -0x144(%rbp), %esi
jge 0x32a6
movzbl -0x100148(%rbp,%rsi), %edx
movsbl %al, %eax
cmpl %eax, %edx
jne 0x32c7
movq %r12, %rdi
callq 0x3e7e
movb (%r15,%r14), %al
testb %al, %al
sete %cl
incq %r15
cmpq $0x6, %r15
jne 0x328a
testb $0x1, %cl
je 0x391f
movq %r12, %rdi
callq 0x3a8c
movl %eax, -0x38(%rbp)
movq %r12, %rdi
callq 0x3a8c
movl %eax, -0x68(%rbp)
jmp 0x3226
movq -0x60(%rbp), %rax
cmpq %rax, -0x58(%rbp)
je 0x32f9
movq %rax, -0x58(%rbp)
movq %r12, %rdi
callq 0x3a8c
testl %eax, %eax
je 0x3356
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
cmpl -0xc0(%rbp), %ecx
jle 0x331a
movl %ecx, -0xc0(%rbp)
xorl %edx, %edx
testl %eax, %eax
setle %dl
leal (%rdx,%rcx,2), %eax
addl $-0x2, %eax
movl %eax, -0x80(%rbp)
movq -0x58(%rbp), %rsi
cmpq -0x50(%rbp), %rsi
je 0x3340
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x58(%rbp)
jmp 0x334c
movq %r13, %rdi
leaq -0x80(%rbp), %rdx
callq 0x3ec6
movq %r12, %rdi
callq 0x3a8c
jmp 0x3301
incl %ebx
leaq -0xb8(%rbp), %rdi
movq %r13, %rsi
callq 0x3bd8
jmp 0x3226
movq 0x2c7d(%rip), %rbx      # 0x5ff0
leaq 0xedd(%rip), %rsi       # 0x4257
movl $0x1d, %edx
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x1, %ebx
jmp 0x3826
movl -0x38(%rbp), %eax
cmpl -0xc0(%rbp), %eax
jne 0x38c5
cmpl -0x68(%rbp), %ebx
jne 0x38cf
movq -0x60(%rbp), %rdi
testq %rdi, %rdi
je 0x33de
callq 0x2150
movq -0xc8(%rbp), %rdi
callq 0x2250
movq 0x2bff(%rip), %rdi      # 0x5ff0
leaq 0xec3(%rip), %rsi       # 0x42bb
movl $0x16, %edx
callq 0x2190
movl -0xc0(%rbp), %esi
movq 0x2be1(%rip), %rdi      # 0x5ff0
callq 0x2260
movq %rax, %rbx
leaq 0xeb4(%rip), %rsi       # 0x42d2
movl $0xa, %edx
movq %rax, %rdi
callq 0x2190
movq -0xb0(%rbp), %rax
subq -0xb8(%rbp), %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rsi # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rsi
movq %rbx, %rdi
callq 0x20f0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x0, -0x60(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, -0x58(%rbp)
movq $0x0, -0x48(%rbp)
movl -0xc0(%rbp), %eax
leal (%rax,%rax), %r15d
movq %rax, -0x38(%rbp)
testl %eax, %eax
jle 0x34b5
cmpl $0x2, %r15d
movl $0x1, %eax
cmovgel %r15d, %eax
movl %eax, -0x60(%rbp)
movaps %xmm0, -0x80(%rbp)
movq $0x0, -0x70(%rbp)
movq -0xb8(%rbp), %rbx
movq -0xb0(%rbp), %rax
movq %rax, -0x68(%rbp)
cmpq %rax, %rbx
je 0x3567
leaq -0x80(%rbp), %r14
leaq -0x100150(%rbp), %r13
leaq -0x58(%rbp), %rdi
movq %rbx, %rsi
callq 0x3bd8
movq -0x80(%rbp), %rax
cmpq %rax, -0x78(%rbp)
je 0x3501
movq %rax, -0x78(%rbp)
movq (%rbx), %rax
cmpq %rax, 0x8(%rbx)
je 0x3551
xorl %r12d, %r12d
movl (%rax,%r12,4), %ecx
addl %r15d, %ecx
movl %ecx, -0x100150(%rbp)
movq -0x78(%rbp), %rsi
cmpq -0x70(%rbp), %rsi
je 0x3530
movl %ecx, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x78(%rbp)
jmp 0x353e
movq %r14, %rdi
movq %r13, %rdx
callq 0x3ec6
movq (%rbx), %rax
incq %r12
movq 0x8(%rbx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %r12, %rcx
ja 0x350d
leaq -0x58(%rbp), %rdi
movq %r14, %rsi
callq 0x3bd8
addq $0x18, %rbx
cmpq -0x68(%rbp), %rbx
jne 0x34e7
movl -0x2c(%rbp), %ebx
testl %ebx, %ebx
cmovel -0x38(%rbp), %ebx
xorps %xmm0, %xmm0
movaps %xmm0, -0xa0(%rbp)
movq $0x0, -0x90(%rbp)
movq 0x2a64(%rip), %rdi      # 0x5ff0
leaq 0xd4a(%rip), %rsi       # 0x42dd
movl $0x29, %edx
callq 0x2190
movq 0x2a4c(%rip), %rdi      # 0x5ff0
movl %ebx, %esi
callq 0x2260
movq %rax, %r14
leaq 0xd52(%rip), %rsi       # 0x4307
movl $0xa, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
testl %ebx, %ebx
jle 0x3679
movq -0x38(%rbp), %rax
shll $0x2, %eax
movq %rax, -0x38(%rbp)
xorl %r14d, %r14d
movl %r15d, %r13d
movl %r13d, %eax
leal 0x1(%rax), %r13d
cmpl -0x60(%rbp), %eax
jl 0x3612
movl %r13d, -0x60(%rbp)
leal (%r15,%r14), %edx
leaq -0x60(%rbp), %rdi
movl %r14d, %esi
movq -0x38(%rbp), %r12
movl %r12d, %ecx
callq 0x247c
leal 0x1(%r12), %eax
movl %eax, -0x100150(%rbp)
movq -0x98(%rbp), %rsi
cmpq -0x90(%rbp), %rsi
je 0x3653
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x98(%rbp)
jmp 0x3666
leaq -0xa0(%rbp), %rdi
leaq -0x100150(%rbp), %rdx
callq 0x3ec6
movq -0x38(%rbp), %rax
addl $0x2, %eax
movq %rax, -0x38(%rbp)
addl $0x2, %r14d
decl %ebx
jne 0x3602
leaq -0xa0(%rbp), %rsi
leaq -0x58(%rbp), %rdi
callq 0x3bd8
leaq -0x100150(%rbp), %rdi
callq 0x2110
leaq -0x100140(%rbp), %rbx
cmpl $0x0, -0x3c(%rbp)
je 0x383a
leaq 0xcc6(%rip), %rsi       # 0x4373
movl $0x6c, %edx
movq %rbx, %rdi
callq 0x2190
movq -0xe8(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq %rbx, %rdi
callq 0x2190
cmpl $0x0, -0x2c(%rbp)
je 0x36f5
leaq 0xc79(%rip), %rsi       # 0x4356
movl $0x1c, %edx
movq %rbx, %rdi
callq 0x2190
movq %rbx, %rdi
movl -0x2c(%rbp), %esi
callq 0x2260
leaq -0x100(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3b58
leaq -0x100138(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x2210
xorl %ecx, %ecx
cmpl $0x1, -0x3c(%rbp)
sete %cl
leaq -0x60(%rbp), %rdi
leaq -0x100(%rbp), %rsi
leaq -0x120(%rbp), %rdx
callq 0x2885
leaq -0x110(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3750
callq 0x2150
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x3761
callq 0x2150
movq 0x2830(%rip), %rsi      # 0x5f98
leaq -0x100150(%rbp), %rdi
callq 0x2120
leaq -0x1000d0(%rbp), %rdi
callq 0x2070
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x3791
callq 0x2150
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x379f
callq 0x2150
leaq -0x58(%rbp), %rdi
callq 0x3e0c
leaq -0xb8(%rbp), %rdi
callq 0x3e0c
xorl %ebx, %ebx
jmp 0x3811
movl $0x21, %edx
leaq 0xab4(%rip), %rsi       # 0x4278
jmp 0x37d2
movl $0x20, %edx
leaq 0xac8(%rip), %rsi       # 0x429a
movq 0x2817(%rip), %rbx      # 0x5ff0
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq 0x27f1(%rip), %rdi      # 0x5ff0
callq 0x2030
movl $0x1, %ebx
movq %rax, %rdi
callq 0x2100
leaq -0xd8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3826
callq 0x2150
movl %ebx, %eax
addq $0x100128, %rsp         # imm = 0x100128
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xad1(%rip), %rsi       # 0x4312
movl $0x43, %edx
movq %rbx, %rdi
callq 0x2190
movq -0xe8(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq %rbx, %rdi
callq 0x2190
cmpl $0x0, -0x2c(%rbp)
je 0x3889
leaq 0xae5(%rip), %rsi       # 0x4356
movl $0x1c, %edx
movq %rbx, %rdi
callq 0x2190
movq %rbx, %rdi
movl -0x2c(%rbp), %esi
callq 0x2260
leaq -0x100138(%rbp), %rsi
leaq -0x140(%rbp), %rdi
callq 0x2210
leaq -0x60(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x25e9
leaq -0x130(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x375c
jmp 0x3761
callq 0x22c0
jmp 0x33c7
callq 0x22e2
jmp 0x33d0
movq 0x2710(%rip), %rdi      # 0x5ff0
leaq 0x959(%rip), %rsi       # 0x4240
callq 0x2170
movq 0x26c5(%rip), %rcx      # 0x5fb8
movsbl (%rcx), %esi
movq %rax, %rdi
callq 0x21a0
leaq 0x94f(%rip), %rsi       # 0x4254
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20b0
movl $0x1, %edi
callq 0x21b0
movslq -0x148(%rbp), %rax
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
cmpl -0x144(%rbp), %eax
jge 0x393b
movzbl -0x100148(%rbp,%rax), %esi
leaq 0xabe(%rip), %rdi       # 0x4400
xorl %eax, %eax
callq 0x2040
movl $0x3, %edi
callq 0x21b0
movq %rax, %rbx
leaq -0x130(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x3991
jmp 0x399d
movq %rax, %rbx
leaq -0x110(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3985
callq 0x2150
jmp 0x3985
movq %rax, %rbx
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x399d
callq 0x2150
jmp 0x399d
jmp 0x39cc
movq %rax, %rbx
movq 0x25f4(%rip), %rsi      # 0x5f98
leaq -0x100150(%rbp), %rdi
callq 0x2120
leaq -0x1000d0(%rbp), %rdi
callq 0x2070
jmp 0x39cf
jmp 0x39cc
jmp 0x39cc
movq %rax, %rbx
jmp 0x3a23
movq %rax, %rbx
jmp 0x3a17
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x39e9
callq 0x2150
jmp 0x39e9
jmp 0x39e6
jmp 0x3a06
movq %rax, %rbx
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x39f7
callq 0x2150
leaq -0x58(%rbp), %rdi
callq 0x3e0c
jmp 0x3a17
jmp 0x3a06
jmp 0x3a06
movq %rax, %rbx
movq -0x60(%rbp), %rdi
testq %rdi, %rdi
je 0x3a17
callq 0x2150
leaq -0xb8(%rbp), %rdi
callq 0x3e0c
leaq -0xd8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3a38
callq 0x2150
movq %rbx, %rdi
callq 0x2270