// File: eniac[P]Mantis/src/compile/compile_c.cpp
// Function: generateDialogueEnd(std::vector<AstNode*, std::allocator<AstNode*>>, std::__cxx11::basic_ostringstream<char, std::char_traits<char>, std::allocator<char>>&, int, int)
void generateDialogueEnd(std::vector<AstNode*> nodeArray, ostringstream& oss_reaction_update, int ing_iso_opt, int egr_iso_opt) {

    // __vv points to shallow copy under isolation, now update version bit commit together with other mbls)
    oss_reaction_update << "\n  __mantis__mod_vars_ing;\n";
    oss_reaction_update << "\n  __mantis__mod_vars_egr;\n";

    // Flip __vv to point to shallow copy
    if(((unsigned int)ing_iso_opt) & 0b10) {
        oss_reaction_update << "\n  __mantis__flip_vv_ing;\n\n";
    }
    if(((unsigned int)egr_iso_opt) & 0b10) {
        oss_reaction_update << "\n  __mantis__flip_vv_egr;\n\n";
    }

    // Under isolation, call mirror macros to mirror shallow copies for mbl table operations
    // Get the reaction string and find all user macros
    P4RReactionNode * react_node = findReaction(nodeArray);
    string p4r_reaction_user_str = "";
    if (react_node != 0) {
        p4r_reaction_user_str = react_node->body_->toString();
    }

    // No need to check isolation opt and ing/egr, just mirror user-specified operations in prepare
    for (auto node : nodeArray) {
        // For each mbl table
        if(typeContains(node, "P4RMalleableTableNode")) {
            TableNode* table = dynamic_cast<P4RMalleableTableNode*>(node)->table_;
            string table_name = *(table->name_->word_);

            TableActionStmtsNode* actions = table->actions_;

            // Mbl tables are always with With matches (at least match on __vv)
            // For each action
            for (TableActionStmtNode* tas : *actions->list_) {
                string action_name = *tas->name_->word_;

                string str_prepare_macro_func;
                string str_mirror_macro_func;

                std::smatch result;

                // Construct match regrex for add
                str_prepare_macro_func = table_name + "_add_" + action_name;
                std::regex e_add (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"

                // Stop after first match
                while (std::regex_search (p4r_reaction_user_str, result, e_add)) {
                    
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    // Call corresponding mirror macros
                    oss_reaction_update << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";

                    // Search remaining string of p4r_reaction_user_str
                    p4r_reaction_user_str = result.suffix().str();
                }
                // Mod
                str_prepare_macro_func = table_name + "_mod_" + action_name;
                std::regex e_mod (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"
                while (std::regex_search (p4r_reaction_user_str, result, e_mod)) {
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    oss_reaction_update << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";
                    p4r_reaction_user_str = result.suffix().str();
                }
                // Del
                str_prepare_macro_func = table_name + "_del_" + action_name;
                std::regex e_del (str_prepare_macro_func+"\\s*\\("+"([^\\)]*)"+"\\)");   // matches words beginning by "sub"
                while (std::regex_search (p4r_reaction_user_str, result, e_del)) {
                    str_prepare_macro_func = result[0];
                    str_mirror_macro_func = "__mantis__mirror_" + str_prepare_macro_func;
                    oss_reaction_update << "\n  "
                                        << str_mirror_macro_func
                                        << ";\n\n";
                    p4r_reaction_user_str = result.suffix().str();
                }
            }   
        }
    }

    // Point __vv back to working copy for next dialogue
    if(((unsigned int)ing_iso_opt) & 0b10) {
        oss_reaction_update << "\n  __mantis__flip_vv_ing;\n\n";
    }
    if(((unsigned int)egr_iso_opt) & 0b10) {
        oss_reaction_update << "\n  __mantis__flip_vv_egr;\n\n";
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x610, %rsp            # imm = 0x610
movq %rdi, -0x4e8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl %ecx, -0x18(%rbp)
movq -0x10(%rbp), %rdi
leaq 0x59932(%rip), %rsi     # 0x13badd
callq 0xaa540
movq -0x10(%rbp), %rdi
leaq 0x5999a(%rip), %rsi     # 0x13bb55
callq 0xaa540
movl -0x14(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0xe21db
movq -0x10(%rbp), %rdi
leaq 0x5966a(%rip), %rsi     # 0x13b840
callq 0xaa540
movl -0x18(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0xe21f6
movq -0x10(%rbp), %rdi
leaq 0x5966b(%rip), %rsi     # 0x13b85c
callq 0xaa540
movq -0x4e8(%rbp), %rsi
leaq -0x38(%rbp), %rdi
movq %rdi, -0x4f8(%rbp)
callq 0xb2bc0
movq -0x4f8(%rbp), %rdi
callq 0x12d980
movq %rax, -0x4f0(%rbp)
jmp 0xe2222
leaq -0x38(%rbp), %rdi
callq 0xb22f0
movq -0x4f0(%rbp), %rax
movq %rax, -0x20(%rbp)
leaq -0x69(%rbp), %rdi
movq %rdi, -0x500(%rbp)
callq 0xaaa70
movq -0x500(%rbp), %rdx
leaq 0x5994f(%rip), %rsi     # 0x13bba3
leaq -0x68(%rbp), %rdi
callq 0xaa7d0
jmp 0xe225f
leaq -0x69(%rbp), %rdi
callq 0xaa5f0
cmpq $0x0, -0x20(%rbp)
je 0xe22eb
movq -0x20(%rbp), %rax
movq 0x50(%rax), %rsi
movq (%rsi), %rax
movq (%rax), %rax
leaq -0x90(%rbp), %rdi
callq *%rax
jmp 0xe2288
leaq -0x68(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0xaa6d0
leaq -0x90(%rbp), %rdi
callq 0xaabe8
jmp 0xe22eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x38(%rbp), %rdi
callq 0xb22f0
jmp 0xe2ecb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x69(%rbp), %rdi
callq 0xaa5f0
jmp 0xe2ecb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2ec2
movq -0x4e8(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rdi
callq 0xb2ae0
movq %rax, -0xa0(%rbp)
movq -0x98(%rbp), %rdi
callq 0xb2b10
movq %rax, -0xa8(%rbp)
leaq -0xa0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0xb2b40
testb $0x1, %al
jne 0xe233b
jmp 0xe2e72
leaq -0xa0(%rbp), %rdi
callq 0xb2b80
movq (%rax), %rax
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rdi
leaq 0x59b4e(%rip), %rsi     # 0x13bead
callq 0x12c730
movb %al, -0x501(%rbp)
jmp 0xe236c
movb -0x501(%rbp), %al
testb $0x1, %al
jne 0xe237b
jmp 0xe2e5f
movq -0xb0(%rbp), %rax
movq %rax, -0x510(%rbp)
cmpq $0x0, %rax
je 0xe23b6
movq -0x510(%rbp), %rdi
leaq 0x90243(%rip), %rsi     # 0x1725e0
leaq 0x90fdc(%rip), %rdx     # 0x173380
xorl %eax, %eax
movl %eax, %ecx
callq 0xaa660
movq %rax, -0x518(%rbp)
jmp 0xe23c1
xorl %eax, %eax
movq %rax, -0x518(%rbp)
jmp 0xe23c1
movq -0x518(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rsi
leaq -0xd8(%rbp), %rdi
callq 0xaa290
jmp 0xe23f0
movq -0xb8(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rdi
callq 0xb4ca0
movq %rax, -0xf0(%rbp)
movq -0xe8(%rbp), %rdi
callq 0xb4b30
movq %rax, -0xf8(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0xc0190
testb $0x1, %al
jne 0xe2456
jmp 0xe2e43
leaq -0xf0(%rbp), %rdi
callq 0xc01d0
movq (%rax), %rax
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rsi
leaq -0x120(%rbp), %rdi
callq 0xaa290
jmp 0xe2489
leaq -0x140(%rbp), %rdi
callq 0xaa7f0
leaq -0x160(%rbp), %rdi
callq 0xaa7f0
leaq -0x180(%rbp), %rdi
callq 0xe35d0
jmp 0xe24af
leaq 0x59870(%rip), %rdx     # 0x13bd26
leaq -0x1c0(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0xcb380
jmp 0xe24cb
leaq -0x1a0(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
leaq -0x120(%rbp), %rdx
callq 0xcb330
jmp 0xe24e7
leaq -0x140(%rbp), %rdi
movq %rdi, -0x520(%rbp)
leaq -0x1a0(%rbp), %rsi
movq %rsi, -0x528(%rbp)
callq 0xaa6d0
movq -0x528(%rbp), %rdi
callq 0xaabe8
leaq -0x1c0(%rbp), %rdi
callq 0xaabe8
movq -0x520(%rbp), %rsi
leaq 0x59df7(%rip), %rdx     # 0x13c325
leaq -0x240(%rbp), %rdi
callq 0xcb380
jmp 0xe253c
leaq 0x59de8(%rip), %rdx     # 0x13c32b
leaq -0x220(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0xccc30
jmp 0xe2558
leaq 0x59dd5(%rip), %rdx     # 0x13c334
leaq -0x200(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0xccc30
jmp 0xe2574
leaq -0x1e0(%rbp), %rdi
leaq -0x200(%rbp), %rsi
movl $0x10, %edx
callq 0xe32d0
jmp 0xe258e
leaq -0x200(%rbp), %rdi
callq 0xaabe8
leaq -0x220(%rbp), %rdi
callq 0xaabe8
leaq -0x240(%rbp), %rdi
callq 0xaabe8
leaq -0x68(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x1e0(%rbp), %rdx
xorl %ecx, %ecx
callq 0xe3610
movb %al, -0x529(%rbp)
jmp 0xe25d3
movb -0x529(%rbp), %al
testb $0x1, %al
jne 0xe25e2
jmp 0xe27c6
xorl %eax, %eax
movl %eax, %esi
leaq -0x180(%rbp), %rdi
callq 0xe3670
movq %rax, -0x538(%rbp)
jmp 0xe25fb
movq -0x538(%rbp), %rsi
leaq -0x260(%rbp), %rdi
callq 0xe36e0
jmp 0xe2610
leaq -0x140(%rbp), %rdi
movq %rdi, -0x540(%rbp)
leaq -0x260(%rbp), %rsi
movq %rsi, -0x548(%rbp)
callq 0xaa6d0
movq -0x548(%rbp), %rdi
callq 0xaabe8
movq -0x540(%rbp), %rdx
leaq 0x59904(%rip), %rsi     # 0x13bf4f
leaq -0x280(%rbp), %rdi
callq 0xe3710
jmp 0xe2659
leaq -0x160(%rbp), %rdi
leaq -0x280(%rbp), %rsi
movq %rsi, -0x558(%rbp)
callq 0xaa6d0
movq -0x558(%rbp), %rdi
callq 0xaabe8
movq -0x10(%rbp), %rdi
leaq 0x59cad(%rip), %rsi     # 0x13c337
callq 0xaa540
movq %rax, -0x550(%rbp)
jmp 0xe2698
movq -0x550(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0x560(%rbp)
jmp 0xe26b4
movq -0x560(%rbp), %rdi
leaq 0x58dda(%rip), %rsi     # 0x13b49c
callq 0xaa540
jmp 0xe26c9
leaq -0x180(%rbp), %rdi
callq 0xe3820
movq %rax, -0x568(%rbp)
jmp 0xe26de
movq -0x568(%rbp), %rsi
leaq -0x2a0(%rbp), %rdi
callq 0xe3870
jmp 0xe26f3
leaq -0x68(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0xaa6d0
leaq -0x2a0(%rbp), %rdi
callq 0xaabe8
jmp 0xe25b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2e51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2e1d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2e11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0xaabe8
jmp 0xe2e11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe27a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2798
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x200(%rbp), %rdi
callq 0xaabe8
leaq -0x220(%rbp), %rdi
callq 0xaabe8
leaq -0x240(%rbp), %rdi
callq 0xaabe8
jmp 0xe2e11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2e05
leaq 0x59641(%rip), %rdx     # 0x13be0e
leaq -0x2e0(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0xcb380
jmp 0xe27e2
leaq -0x2c0(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
leaq -0x120(%rbp), %rdx
callq 0xcb330
jmp 0xe27fe
leaq -0x140(%rbp), %rdi
movq %rdi, -0x570(%rbp)
leaq -0x2c0(%rbp), %rsi
movq %rsi, -0x578(%rbp)
callq 0xaa6d0
movq -0x578(%rbp), %rdi
callq 0xaabe8
leaq -0x2e0(%rbp), %rdi
callq 0xaabe8
movq -0x570(%rbp), %rsi
leaq 0x59ae0(%rip), %rdx     # 0x13c325
leaq -0x360(%rbp), %rdi
callq 0xcb380
jmp 0xe2853
leaq 0x59ad1(%rip), %rdx     # 0x13c32b
leaq -0x340(%rbp), %rdi
leaq -0x360(%rbp), %rsi
callq 0xccc30
jmp 0xe286f
leaq 0x59abe(%rip), %rdx     # 0x13c334
leaq -0x320(%rbp), %rdi
leaq -0x340(%rbp), %rsi
callq 0xccc30
jmp 0xe288b
leaq -0x300(%rbp), %rdi
leaq -0x320(%rbp), %rsi
movl $0x10, %edx
callq 0xe32d0
jmp 0xe28a5
leaq -0x320(%rbp), %rdi
callq 0xaabe8
leaq -0x340(%rbp), %rdi
callq 0xaabe8
leaq -0x360(%rbp), %rdi
callq 0xaabe8
leaq -0x68(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x300(%rbp), %rdx
xorl %ecx, %ecx
callq 0xe3610
movb %al, -0x579(%rbp)
jmp 0xe28ea
movb -0x579(%rbp), %al
testb $0x1, %al
jne 0xe28f9
jmp 0xe2aaa
xorl %eax, %eax
movl %eax, %esi
leaq -0x180(%rbp), %rdi
callq 0xe3670
movq %rax, -0x588(%rbp)
jmp 0xe2912
movq -0x588(%rbp), %rsi
leaq -0x380(%rbp), %rdi
callq 0xe36e0
jmp 0xe2927
leaq -0x140(%rbp), %rdi
movq %rdi, -0x590(%rbp)
leaq -0x380(%rbp), %rsi
movq %rsi, -0x598(%rbp)
callq 0xaa6d0
movq -0x598(%rbp), %rdi
callq 0xaabe8
movq -0x590(%rbp), %rdx
leaq 0x595ed(%rip), %rsi     # 0x13bf4f
leaq -0x3a0(%rbp), %rdi
callq 0xe3710
jmp 0xe2970
leaq -0x160(%rbp), %rdi
leaq -0x3a0(%rbp), %rsi
movq %rsi, -0x5a8(%rbp)
callq 0xaa6d0
movq -0x5a8(%rbp), %rdi
callq 0xaabe8
movq -0x10(%rbp), %rdi
leaq 0x59996(%rip), %rsi     # 0x13c337
callq 0xaa540
movq %rax, -0x5a0(%rbp)
jmp 0xe29af
movq -0x5a0(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0x5b0(%rbp)
jmp 0xe29cb
movq -0x5b0(%rbp), %rdi
leaq 0x58ac3(%rip), %rsi     # 0x13b49c
callq 0xaa540
jmp 0xe29e0
leaq -0x180(%rbp), %rdi
callq 0xe3820
movq %rax, -0x5b8(%rbp)
jmp 0xe29f5
movq -0x5b8(%rbp), %rsi
leaq -0x3c0(%rbp), %rdi
callq 0xe3870
jmp 0xe2a0a
leaq -0x68(%rbp), %rdi
leaq -0x3c0(%rbp), %rsi
callq 0xaa6d0
leaq -0x3c0(%rbp), %rdi
callq 0xaabe8
jmp 0xe28c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0xaabe8
jmp 0xe2e05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2a88
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2a7c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x320(%rbp), %rdi
callq 0xaabe8
leaq -0x340(%rbp), %rdi
callq 0xaabe8
leaq -0x360(%rbp), %rdi
callq 0xaabe8
jmp 0xe2e05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2df9
leaq 0x592e4(%rip), %rdx     # 0x13bd95
leaq -0x400(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0xcb380
jmp 0xe2ac6
leaq -0x3e0(%rbp), %rdi
leaq -0x400(%rbp), %rsi
leaq -0x120(%rbp), %rdx
callq 0xcb330
jmp 0xe2ae2
leaq -0x140(%rbp), %rdi
movq %rdi, -0x5c0(%rbp)
leaq -0x3e0(%rbp), %rsi
movq %rsi, -0x5c8(%rbp)
callq 0xaa6d0
movq -0x5c8(%rbp), %rdi
callq 0xaabe8
leaq -0x400(%rbp), %rdi
callq 0xaabe8
movq -0x5c0(%rbp), %rsi
leaq 0x597fc(%rip), %rdx     # 0x13c325
leaq -0x480(%rbp), %rdi
callq 0xcb380
jmp 0xe2b37
leaq 0x597ed(%rip), %rdx     # 0x13c32b
leaq -0x460(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0xccc30
jmp 0xe2b53
leaq 0x597da(%rip), %rdx     # 0x13c334
leaq -0x440(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0xccc30
jmp 0xe2b6f
leaq -0x420(%rbp), %rdi
leaq -0x440(%rbp), %rsi
movl $0x10, %edx
callq 0xe32d0
jmp 0xe2b89
leaq -0x440(%rbp), %rdi
callq 0xaabe8
leaq -0x460(%rbp), %rdi
callq 0xaabe8
leaq -0x480(%rbp), %rdi
callq 0xaabe8
leaq -0x68(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x420(%rbp), %rdx
xorl %ecx, %ecx
callq 0xe3610
movb %al, -0x5c9(%rbp)
jmp 0xe2bce
movb -0x5c9(%rbp), %al
testb $0x1, %al
jne 0xe2bdd
jmp 0xe2d94
xorl %eax, %eax
movl %eax, %esi
leaq -0x180(%rbp), %rdi
callq 0xe3670
movq %rax, -0x5d8(%rbp)
jmp 0xe2bf6
movq -0x5d8(%rbp), %rsi
leaq -0x4a0(%rbp), %rdi
callq 0xe36e0
jmp 0xe2c0b
leaq -0x140(%rbp), %rdi
movq %rdi, -0x5e0(%rbp)
leaq -0x4a0(%rbp), %rsi
movq %rsi, -0x5e8(%rbp)
callq 0xaa6d0
movq -0x5e8(%rbp), %rdi
callq 0xaabe8
movq -0x5e0(%rbp), %rdx
leaq 0x59309(%rip), %rsi     # 0x13bf4f
leaq -0x4c0(%rbp), %rdi
callq 0xe3710
jmp 0xe2c54
leaq -0x160(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
movq %rsi, -0x5f8(%rbp)
callq 0xaa6d0
movq -0x5f8(%rbp), %rdi
callq 0xaabe8
movq -0x10(%rbp), %rdi
leaq 0x596b2(%rip), %rsi     # 0x13c337
callq 0xaa540
movq %rax, -0x5f0(%rbp)
jmp 0xe2c93
movq -0x5f0(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0xaa4c0
movq %rax, -0x600(%rbp)
jmp 0xe2caf
movq -0x600(%rbp), %rdi
leaq 0x587df(%rip), %rsi     # 0x13b49c
callq 0xaa540
jmp 0xe2cc4
leaq -0x180(%rbp), %rdi
callq 0xe3820
movq %rax, -0x608(%rbp)
jmp 0xe2cd9
movq -0x608(%rbp), %rsi
leaq -0x4e0(%rbp), %rdi
callq 0xe3870
jmp 0xe2cee
leaq -0x68(%rbp), %rdi
leaq -0x4e0(%rbp), %rsi
callq 0xaa6d0
leaq -0x4e0(%rbp), %rdi
callq 0xaabe8
jmp 0xe2bad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x400(%rbp), %rdi
callq 0xaabe8
jmp 0xe2df9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2d6c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0xe2d60
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x440(%rbp), %rdi
callq 0xaabe8
leaq -0x460(%rbp), %rdi
callq 0xaabe8
leaq -0x480(%rbp), %rdi
callq 0xaabe8
jmp 0xe2df9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x420(%rbp), %rdi
callq 0xe3460
jmp 0xe2df9
leaq -0x420(%rbp), %rdi
callq 0xe3460
leaq -0x300(%rbp), %rdi
callq 0xe3460
leaq -0x1e0(%rbp), %rdi
callq 0xe3460
leaq -0x180(%rbp), %rdi
callq 0xe3930
leaq -0x160(%rbp), %rdi
callq 0xaabe8
leaq -0x140(%rbp), %rdi
callq 0xaabe8
leaq -0x120(%rbp), %rdi
callq 0xaabe8
leaq -0xf0(%rbp), %rdi
callq 0xc01f0
jmp 0xe243a
leaq -0x300(%rbp), %rdi
callq 0xe3460
leaq -0x1e0(%rbp), %rdi
callq 0xe3460
leaq -0x180(%rbp), %rdi
callq 0xe3930
leaq -0x160(%rbp), %rdi
callq 0xaabe8
leaq -0x140(%rbp), %rdi
callq 0xaabe8
leaq -0x120(%rbp), %rdi
callq 0xaabe8
jmp 0xe2e51
leaq -0xd8(%rbp), %rdi
callq 0xaabe8
jmp 0xe2e5f
leaq -0xd8(%rbp), %rdi
callq 0xaabe8
jmp 0xe2ec2
jmp 0xe2e61
leaq -0xa0(%rbp), %rdi
callq 0xb2ba0
jmp 0xe231f
movl -0x14(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0xe2e91
movq -0x10(%rbp), %rdi
leaq 0x589b8(%rip), %rsi     # 0x13b840
callq 0xaa540
jmp 0xe2e8f
jmp 0xe2e91
movl -0x18(%rbp), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0xe2eb0
movq -0x10(%rbp), %rdi
leaq 0x589b5(%rip), %rsi     # 0x13b85c
callq 0xaa540
jmp 0xe2eae
jmp 0xe2eb0
leaq -0x68(%rbp), %rdi
callq 0xaabe8
addq $0x610, %rsp            # imm = 0x610
popq %rbp
retq
leaq -0x68(%rbp), %rdi
callq 0xaabe8
movq -0x40(%rbp), %rdi
callq 0xaaa60
nopw %cs:(%rax,%rax)
nop