// File: pollow[P]MIPSClide/assembler.cpp
// Function: Assembler::parse()
void Assembler::parse() {
    // No white space at the begin and end of instruction
    static vector<regex> types {
        // command reg1, reg2, imm I-0
        regex("(\\w+)\\s*\\$(\\w+)\\s*,\\s*\\$(\\w+)\\s*,\\s*(-?\\d+)"),
        // command reg1, imm I-1
        regex("(\\w+)\\s*\\$(\\w+)\\s*,\\s*(-?\\d+)"),
        // command reg1, reg2, label I-2
        regex("(\\w+)\\s*\\$(\\w+)\\s*,\\s*\\$(\\w+)\\s*,\\s*(\\w+)"),
        // command reg1, label I-3
        regex("(\\w+)\\s*\\$(\\w+)\\s*,\\s*(\\w+)"),
        // command reg1, number(reg2) I-4
        regex("(\\w+)\\s*\\$(\\w+)\\s*,\\s*(-?\\d+)\\s*\\(\\s*\\$(\\w+)\\s*\\)"),
        // command reg1, reg2, reg3 R-0
        regex("(\\w+)\\s*\\$(\\w+)\\s*,\\s*\\$(\\w+)\\s*,\\s*\\$(\\w+)"),
        // command reg1, reg2 R-1
        regex("(\\w+)\\s*\\$(\\w+)\\s*,\\s*\\$(\\w+)"),
        // command reg1 R-2
        regex("(\\w+)\\s*\\$(\\w+)"),
        // command reg1, reg2, shamt R-3 useless, same as the first.
        regex("(\\w+)\\s*\\$(\\w+)\\s*,\\s*\\$(\\w+)\\s*,\\s*(-?\\d+)"),
        // command label J-0
        regex("(\\w+)\\s*(\\w+)")
    };

    smatch result;
    for(auto i = statements.begin(); i != statements.end(); i++) {
        try {
            // static regex comma_split("(^\\s+)|(\\s+$)");
            static regex comma_split(",");
            if ( tolower((*i)[0]) == 'd' && tolower((*i)[1]) == 'd' ) {
                string data = i->substr(3, i->size()-3);
                data = regex_replace(data, comma_split, " ");
                for(auto j = labels.begin(); j != labels.end(); j++) {
                    if (data.find(j->first) != string::npos) {
                        data = regex_replace(data, regex(j->first), (stringstream() << j->second).str());
                    }
                }
                stringstream buffer( data );
                buffer >> setbase(0);
                for(unsigned int i; buffer >> i; ) {
                    machine_code.push_back(i);
                }
            } else if ( i->substr(0, 4) == "resd" || i->substr(0, 4) == "RESD" ) {
                string data = i->substr(4, i->size()-4);
                stringstream buffer( data );
                int count;
                buffer >> setbase(0) >> count;
                for(int i = 0; i < count; i++) machine_code.push_back(0);
            } else {
                auto j = types.begin();
                for(; j != types.end(); j++) 
                    if ( regex_match(*i, result, *j) ) {
                        // cout << *i << endl;
                        elements.push_back( {} );
                        for(size_t k = 1; k < result.size(); k++) 
                            elements.back().push_back(result[k].str());
                        Instruction *tmp;
                        int imm = 0;
                        switch (j-types.begin()) {
                            case 0 : 
                                tmp = new Instruction(result[1].str(), result[2].str(), result[3].str(),
                                        atoi(result[4].str().c_str()), 'I');
                                break;
                            case 1 : 
                                tmp = new Instruction(result[1].str(), result[2].str(), 
                                        atoi(result[3].str().c_str()), 'I');
                                break;
                            case 2 : 
                                if (!labels.count(result[4].str())) {
                                    throw invalid_argument("Label undefined");
                                }
                                imm = labels[result[4].str()] - (i - statements.begin()+1) & ((1 << 16) - 1);
                                tmp = new Instruction(result[1].str(), result[2].str(), result[3].str(), imm, 'I');
                                break;
                            case 3 : 
                                if (!labels.count(result[4].str())) {
                                    throw invalid_argument("Label undefined");
                                }
                                imm = labels[result[4].str()] - (i - statements.begin()+1) & ((1 << 16) - 1);
                                tmp = new Instruction(result[1].str(), result[2].str(), imm, 'I');
                                break;
                            case 4 : 
                                tmp = new Instruction(result[1].str(), result[2].str(), atoi(result[3].str().c_str()),
                                        result[4].str(), 'I');
                                break;
                            case 5 : 
                                tmp = new Instruction(result[1].str(), result[2].str(), result[3].str(), 
                                        result[4].str(), 'R');
                                break;
                            case 6 : 
                                tmp = new Instruction(result[1].str(), result[2].str(), result[3].str(), 'R');
                                break;
                            case 7 : 
                                tmp = new Instruction(result[1].str(), result[2].str(), 'R');
                                break;
                            case 8 : 
                                tmp = new Instruction(result[1].str(), result[2].str(), 
                                        atoi(result[3].str().c_str()), 'R');
                                break;
                            case 9 : 
                                if (!labels.count(result[2].str())) {
                                    throw invalid_argument("Label undefined");
                                }
                                imm = labels[result[2].str()];
                                tmp = new Instruction(result[1].str(), imm, 'J');
                                break;
                        }
                        machine_code.push_back(tmp->compile());
                        break;
                    }
                if ( j == types.end() ) {
                    throw invalid_argument("Syntax Error");
                }
            }
        } catch(exception &err) {
            throw invalid_argument("Error occurs when parsing:\n\t" + string(err.what()) + "\n\t\tat " + (*i));
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1080, %rsp           # imm = 0x1080
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xd50(%rbp)
cmpb $0x0, 0x59d67(%rip)     # 0x6b8a8
jne 0x11d5e
leaq 0x59d5a(%rip), %rdi     # 0x6b8a8
callq 0x67c0
cmpl $0x0, %eax
je 0x11d5e
leaq -0x158(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x38797(%rip), %rsi     # 0x4a308
movl $0x10, %edx
callq 0x14f60
jmp 0x11b7d
leaq -0x138(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x387a2(%rip), %rsi     # 0x4a334
movl $0x10, %edx
callq 0x14f60
jmp 0x11b9e
leaq -0x118(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x3879f(%rip), %rsi     # 0x4a352
movl $0x10, %edx
callq 0x14f60
jmp 0x11bbf
leaq -0xf8(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x387a8(%rip), %rsi     # 0x4a37c
movl $0x10, %edx
callq 0x14f60
jmp 0x11be0
leaq -0xd8(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x387a3(%rip), %rsi     # 0x4a398
movl $0x10, %edx
callq 0x14f60
jmp 0x11c01
leaq -0xb8(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x387b4(%rip), %rsi     # 0x4a3ca
movl $0x10, %edx
callq 0x14f60
jmp 0x11c22
leaq -0x98(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x387bf(%rip), %rsi     # 0x4a3f6
movl $0x10, %edx
callq 0x14f60
jmp 0x11c43
leaq -0x78(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x387bf(%rip), %rsi     # 0x4a414
movl $0x10, %edx
callq 0x14f60
jmp 0x11c61
leaq -0x58(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x38695(%rip), %rsi     # 0x4a308
movl $0x10, %edx
callq 0x14f60
jmp 0x11c7f
leaq -0x38(%rbp), %rdi
movq %rdi, -0x160(%rbp)
leaq 0x38793(%rip), %rsi     # 0x4a424
movl $0x10, %edx
callq 0x14f60
jmp 0x11c9d
leaq -0x158(%rbp), %rax
movq %rax, -0x18(%rbp)
movq $0xa, -0x10(%rbp)
leaq -0x16d(%rbp), %rdi
movq %rdi, -0xd58(%rbp)
callq 0x15030
movq -0xd58(%rbp), %rcx
movq -0x18(%rbp), %rsi
movq -0x10(%rbp), %rdx
leaq 0x59bb7(%rip), %rdi     # 0x6b890
callq 0x15050
jmp 0x11ce0
leaq -0x16d(%rbp), %rdi
callq 0x150d0
leaq -0x158(%rbp), %rax
movq %rax, -0xd68(%rbp)
addq $0x140, %rax            # imm = 0x140
movq %rax, -0xd60(%rbp)
movq -0xd60(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xd70(%rbp)
callq 0x15000
movq -0xd68(%rbp), %rcx
movq -0xd70(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xd60(%rbp)
jne 0x11d07
leaq 0x33b1(%rip), %rdi      # 0x150f0
leaq 0x59b4a(%rip), %rsi     # 0x6b890
leaq 0x5970b(%rip), %rdx     # 0x6b458
callq 0x63d0
leaq 0x59b4f(%rip), %rdi     # 0x6b8a8
callq 0x62e0
leaq -0x190(%rbp), %rdi
callq 0x15150
movq -0xd50(%rbp), %rdi
addq $0x20, %rdi
callq 0xf7d0
movq %rax, -0x198(%rbp)
movq -0xd50(%rbp), %rdi
addq $0x20, %rdi
callq 0xf9c0
movq %rax, -0x1a0(%rbp)
leaq -0x198(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0xf980
testb $0x1, %al
jne 0x11db4
jmp 0x140b8
cmpb $0x0, 0x59b15(%rip)     # 0x6b8d0
jne 0x11e0e
leaq 0x59b0c(%rip), %rdi     # 0x6b8d0
callq 0x67c0
cmpl $0x0, %eax
je 0x11e0e
leaq 0x59adb(%rip), %rdi     # 0x6b8b0
leaq 0x38656(%rip), %rsi     # 0x4a432
movl $0x10, %edx
callq 0x14f60
jmp 0x11de8
leaq 0x3211(%rip), %rdi      # 0x15000
leaq 0x59aba(%rip), %rsi     # 0x6b8b0
leaq 0x5965b(%rip), %rdx     # 0x6b458
callq 0x63d0
leaq 0x59ac7(%rip), %rdi     # 0x6b8d0
callq 0x62e0
leaq -0x198(%rbp), %rdi
callq 0xf9f0
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6870
movq %rax, -0xd78(%rbp)
jmp 0x11e2f
movq -0xd78(%rbp), %rax
movsbl (%rax), %edi
callq 0x68a8
cmpl $0x64, %eax
jne 0x12321
leaq -0x198(%rbp), %rdi
callq 0xf9f0
movq %rax, %rdi
movl $0x1, %esi
callq 0x6870
movq %rax, -0xd80(%rbp)
jmp 0x11e69
movq -0xd80(%rbp), %rax
movsbl (%rax), %edi
callq 0x68a8
cmpl $0x64, %eax
jne 0x12321
leaq -0x198(%rbp), %rdi
movq %rdi, -0xd90(%rbp)
callq 0x15190
movq -0xd90(%rbp), %rdi
movq %rax, -0xd88(%rbp)
callq 0x15190
movq %rax, %rdi
callq 0x6320
movq -0xd88(%rbp), %rsi
movq %rax, %rcx
addq $-0x3, %rcx
leaq -0x1c0(%rbp), %rdi
movl $0x3, %edx
callq 0x6460
jmp 0x11ed0
leaq 0x599d9(%rip), %rdx     # 0x6b8b0
leaq 0x39644(%rip), %rcx     # 0x4b522
leaq -0x1e0(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
xorl %r8d, %r8d
callq 0x151b0
jmp 0x11ef6
leaq -0x1c0(%rbp), %rdi
leaq -0x1e0(%rbp), %rsi
callq 0x6520
leaq -0x1e0(%rbp), %rdi
callq 0x62a0
movq -0xd50(%rbp), %rdi
addq $0x68, %rdi
callq 0x15290
movq %rax, -0x1e8(%rbp)
movq -0xd50(%rbp), %rdi
addq $0x68, %rdi
callq 0x152f0
movq %rax, -0x1f0(%rbp)
leaq -0x1e8(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x152c0
testb $0x1, %al
jne 0x11f5f
jmp 0x1220f
leaq -0x1e8(%rbp), %rdi
callq 0x15320
movq %rax, %rsi
leaq -0x1c0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %edx
callq 0x6880
cmpq $-0x1, %rax
je 0x121f3
leaq -0x1e8(%rbp), %rdi
callq 0x15320
movq %rax, %rsi
leaq -0x230(%rbp), %rdi
movl $0x10, %edx
callq 0x15430
jmp 0x11faa
leaq -0x3d8(%rbp), %rdi
callq 0x6330
jmp 0x11fb8
leaq -0x1e8(%rbp), %rdi
callq 0x15320
movq %rax, %rsi
addq $0x20, %rsi
leaq -0x3d8(%rbp), %rdi
callq 0x154e0
movq %rax, -0xd98(%rbp)
jmp 0x11fe0
movq -0xd98(%rbp), %rsi
leaq -0x250(%rbp), %rdi
callq 0x6420
jmp 0x11ff5
leaq -0x210(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
leaq -0x230(%rbp), %rdx
leaq -0x250(%rbp), %rcx
xorl %r8d, %r8d
callq 0x15350
jmp 0x1201b
leaq -0x1c0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x6520
leaq -0x210(%rbp), %rdi
callq 0x62a0
leaq -0x250(%rbp), %rdi
callq 0x62a0
leaq -0x3d8(%rbp), %rdi
callq 0x6360
leaq -0x230(%rbp), %rdi
callq 0x15000
jmp 0x121f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
movq -0x160(%rbp), %rax
leaq -0x158(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0xda0(%rbp)
je 0x120c0
movq -0xda0(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xda8(%rbp)
callq 0x15000
movq -0xda8(%rbp), %rax
leaq -0x158(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0xda0(%rbp)
jne 0x1208f
jmp 0x1212e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x16d(%rbp), %rdi
callq 0x150d0
leaq -0x158(%rbp), %rax
movq %rax, -0xdb8(%rbp)
addq $0x140, %rax            # imm = 0x140
movq %rax, -0xdb0(%rbp)
movq -0xdb0(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0xdc0(%rbp)
callq 0x15000
movq -0xdb8(%rbp), %rcx
movq -0xdc0(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0xdb0(%rbp)
jne 0x120fb
jmp 0x1212e
leaq 0x59773(%rip), %rdi     # 0x6b8a8
callq 0x62d0
jmp 0x140d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq 0x59778(%rip), %rdi     # 0x6b8d0
callq 0x62d0
jmp 0x13eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12310
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x121e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x121d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x62a0
leaq -0x3d8(%rbp), %rdi
callq 0x6360
leaq -0x230(%rbp), %rdi
callq 0x15000
jmp 0x12310
jmp 0x121f5
leaq -0x1e8(%rbp), %rdi
xorl %esi, %esi
callq 0x15510
movq %rax, -0x3e0(%rbp)
jmp 0x11f2c
movl $0x10, %edi
movl $0x8, %esi
callq 0x15550
movl %eax, -0xdc4(%rbp)
jmp 0x12226
movl -0xdc4(%rbp), %edx
leaq -0x568(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x6690
jmp 0x12241
xorl %edi, %edi
callq 0xb770
movl %eax, -0xdc8(%rbp)
jmp 0x12250
movl -0xdc8(%rbp), %eax
movl %eax, -0x56c(%rbp)
movl -0x56c(%rbp), %esi
leaq -0x568(%rbp), %rdi
callq 0x65b0
jmp 0x12270
jmp 0x12272
leaq -0x568(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x6080
movq %rax, -0xdd0(%rbp)
jmp 0x1228e
movq -0xdd0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x6550
movb %al, -0xdd1(%rbp)
jmp 0x122ac
movb -0xdd1(%rbp), %al
testb $0x1, %al
jne 0x122b8
jmp 0x122f3
movq -0xd50(%rbp), %rdi
addq $0x50, %rdi
leaq -0x570(%rbp), %rsi
callq 0xb7b0
jmp 0x122d1
jmp 0x12272
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x568(%rbp), %rdi
callq 0x6360
jmp 0x12310
leaq -0x568(%rbp), %rdi
callq 0x6360
leaq -0x1c0(%rbp), %rdi
callq 0x62a0
jmp 0x13fd9
leaq -0x1c0(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
leaq -0x198(%rbp), %rdi
callq 0x15190
movq %rax, %rsi
movb $0x0, -0x5b1(%rbp)
xorl %eax, %eax
movl %eax, %edx
leaq -0x590(%rbp), %rdi
movl $0x4, %ecx
callq 0x6460
jmp 0x1234e
leaq 0x380df(%rip), %rsi     # 0x4a434
leaq -0x590(%rbp), %rdi
callq 0x15570
movb %al, -0xdd2(%rbp)
jmp 0x12369
movb -0xdd2(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0xdd3(%rbp)
jne 0x123d4
jmp 0x1237e
leaq -0x198(%rbp), %rdi
callq 0x15190
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x5b0(%rbp), %rdi
movl $0x4, %ecx
callq 0x6460
jmp 0x123a4
movb $0x1, -0x5b1(%rbp)
leaq 0x38087(%rip), %rsi     # 0x4a439
leaq -0x5b0(%rbp), %rdi
callq 0x15570
movb %al, -0xdd4(%rbp)
jmp 0x123c6
movb -0xdd4(%rbp), %al
movb %al, -0xdd3(%rbp)
jmp 0x123d4
movb -0xdd3(%rbp), %al
movb %al, -0xdd5(%rbp)
testb $0x1, -0x5b1(%rbp)
jne 0x123eb
jmp 0x123f7
leaq -0x5b0(%rbp), %rdi
callq 0x62a0
leaq -0x590(%rbp), %rdi
callq 0x62a0
movb -0xdd5(%rbp), %al
testb $0x1, %al
jne 0x12412
jmp 0x125e2
leaq -0x198(%rbp), %rdi
movq %rdi, -0xde8(%rbp)
callq 0x15190
movq -0xde8(%rbp), %rdi
movq %rax, -0xde0(%rbp)
callq 0x15190
movq %rax, %rdi
callq 0x6320
movq -0xde0(%rbp), %rsi
movq %rax, %rcx
addq $-0x4, %rcx
leaq -0x5d8(%rbp), %rdi
movl $0x4, %edx
callq 0x6460
jmp 0x12461
movl $0x10, %edi
movl $0x8, %esi
callq 0x15550
movl %eax, -0xdec(%rbp)
jmp 0x12478
movl -0xdec(%rbp), %edx
leaq -0x760(%rbp), %rdi
leaq -0x5d8(%rbp), %rsi
callq 0x6690
jmp 0x12493
xorl %edi, %edi
callq 0xb770
movl %eax, -0xdf0(%rbp)
jmp 0x124a2
movl -0xdf0(%rbp), %eax
movl %eax, -0x768(%rbp)
movl -0x768(%rbp), %esi
leaq -0x760(%rbp), %rdi
callq 0x65b0
movq %rax, -0xdf8(%rbp)
jmp 0x124c9
movq -0xdf8(%rbp), %rdi
leaq -0x764(%rbp), %rsi
callq 0x6290
jmp 0x124de
movl $0x0, -0x76c(%rbp)
movl -0x76c(%rbp), %eax
cmpl -0x764(%rbp), %eax
jge 0x125b4
movq -0xd50(%rbp), %rdi
addq $0x50, %rdi
movl $0x0, -0x770(%rbp)
leaq -0x770(%rbp), %rsi
callq 0x155a0
jmp 0x1251d
jmp 0x1251f
movl -0x76c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x76c(%rbp)
jmp 0x124e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x1256f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
testb $0x1, -0x5b1(%rbp)
jne 0x12561
jmp 0x1256d
leaq -0x5b0(%rbp), %rdi
callq 0x62a0
jmp 0x1256f
leaq -0x590(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x125d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x760(%rbp), %rdi
callq 0x6360
jmp 0x125d1
leaq -0x760(%rbp), %rdi
callq 0x6360
leaq -0x5d8(%rbp), %rdi
callq 0x62a0
jmp 0x13fd7
leaq -0x5d8(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
leaq 0x592a7(%rip), %rdi     # 0x6b890
callq 0x155d0
movq %rax, -0x778(%rbp)
leaq 0x59294(%rip), %rdi     # 0x6b890
callq 0x15640
movq %rax, -0x780(%rbp)
leaq -0x778(%rbp), %rdi
leaq -0x780(%rbp), %rsi
callq 0x15600
testb $0x1, %al
jne 0x12624
jmp 0x13e29
leaq -0x198(%rbp), %rdi
callq 0xf9f0
movq %rax, -0xe08(%rbp)
leaq -0x778(%rbp), %rdi
callq 0x156d0
movq -0xe08(%rbp), %rdi
movq %rax, %rdx
leaq -0x190(%rbp), %rsi
xorl %ecx, %ecx
callq 0x15670
movb %al, -0xdf9(%rbp)
jmp 0x12663
movb -0xdf9(%rbp), %al
testb $0x1, %al
jne 0x12672
jmp 0x13e0d
movq -0xd50(%rbp), %rax
addq $0x38, %rax
movq %rax, -0xe18(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x7a0(%rbp)
movq $0x0, -0x790(%rbp)
leaq -0x7a0(%rbp), %rdi
movq %rdi, -0xe10(%rbp)
callq 0xbf30
movq -0xe18(%rbp), %rdi
movq -0xe10(%rbp), %rsi
callq 0x156f0
jmp 0x126c1
leaq -0x7a0(%rbp), %rdi
callq 0xc820
movq $0x1, -0x7a8(%rbp)
movq -0x7a8(%rbp), %rax
movq %rax, -0xe20(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x15720
movq %rax, %rcx
movq -0xe20(%rbp), %rax
cmpq %rcx, %rax
jae 0x127cb
movq -0xd50(%rbp), %rdi
addq $0x38, %rdi
callq 0x15770
movq %rax, -0xe30(%rbp)
movq -0x7a8(%rbp), %rsi
leaq -0x190(%rbp), %rdi
callq 0x157b0
movq %rax, -0xe28(%rbp)
jmp 0x12738
movq -0xe28(%rbp), %rsi
leaq -0x7c8(%rbp), %rdi
callq 0x15820
jmp 0x1274d
movq -0xe30(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
callq 0xf570
jmp 0x12762
leaq -0x7c8(%rbp), %rdi
callq 0x62a0
movq -0x7a8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x7a8(%rbp)
jmp 0x126d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x7a0(%rbp), %rdi
callq 0xc820
jmp 0x13eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x7c8(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
movl $0x0, -0x7d4(%rbp)
leaq 0x590b4(%rip), %rdi     # 0x6b890
callq 0x155d0
movq %rax, -0x7e0(%rbp)
leaq -0x778(%rbp), %rdi
leaq -0x7e0(%rbp), %rsi
callq 0x158e0
movq %rax, %rcx
movq %rcx, -0xe38(%rbp)
subq $0x9, %rax
ja 0x13dc4
movq -0xe38(%rbp), %rax
leaq 0x3793f(%rip), %rcx     # 0x4a15c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x98, %edi
callq 0x6440
movq %rax, -0xe40(%rbp)
jmp 0x12839
movb $0x1, -0x861(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xe48(%rbp)
jmp 0x1285a
movq -0xe48(%rbp), %rsi
leaq -0x800(%rbp), %rdi
callq 0x15820
jmp 0x1286f
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xe50(%rbp)
jmp 0x12889
movq -0xe50(%rbp), %rsi
leaq -0x820(%rbp), %rdi
callq 0x15820
jmp 0x1289e
leaq -0x190(%rbp), %rdi
movl $0x3, %esi
callq 0x157b0
movq %rax, -0xe58(%rbp)
jmp 0x128b8
movq -0xe58(%rbp), %rsi
leaq -0x840(%rbp), %rdi
callq 0x15820
jmp 0x128cd
leaq -0x190(%rbp), %rdi
movl $0x4, %esi
callq 0x157b0
movq %rax, -0xe60(%rbp)
jmp 0x128e7
movq -0xe60(%rbp), %rsi
leaq -0x860(%rbp), %rdi
callq 0x15820
jmp 0x128fc
leaq -0x860(%rbp), %rdi
callq 0x61b0
movq %rax, %rdi
callq 0x6660
movq -0xe40(%rbp), %rdi
movl %eax, %r8d
leaq -0x800(%rbp), %rsi
leaq -0x820(%rbp), %rdx
leaq -0x840(%rbp), %rcx
movl $0x49, %r9d
callq 0x15920
jmp 0x1293c
movq -0xe40(%rbp), %rax
movb $0x0, -0x861(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0x860(%rbp), %rdi
callq 0x62a0
leaq -0x840(%rbp), %rdi
callq 0x62a0
leaq -0x820(%rbp), %rdi
callq 0x62a0
leaq -0x800(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12a18
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12a0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12a00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x129f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x860(%rbp), %rdi
callq 0x62a0
leaq -0x840(%rbp), %rdi
callq 0x62a0
leaq -0x820(%rbp), %rdi
callq 0x62a0
leaq -0x800(%rbp), %rdi
callq 0x62a0
testb $0x1, -0x861(%rbp)
jne 0x12a23
jmp 0x12a2f
movq -0xe40(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movl $0x98, %edi
callq 0x6440
movq %rax, -0xe68(%rbp)
jmp 0x12a47
movb $0x1, -0x8c9(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xe70(%rbp)
jmp 0x12a68
movq -0xe70(%rbp), %rsi
leaq -0x888(%rbp), %rdi
callq 0x15820
jmp 0x12a7d
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xe78(%rbp)
jmp 0x12a97
movq -0xe78(%rbp), %rsi
leaq -0x8a8(%rbp), %rdi
callq 0x15820
jmp 0x12aac
leaq -0x190(%rbp), %rdi
movl $0x3, %esi
callq 0x157b0
movq %rax, -0xe80(%rbp)
jmp 0x12ac6
movq -0xe80(%rbp), %rsi
leaq -0x8c8(%rbp), %rdi
callq 0x15820
jmp 0x12adb
leaq -0x8c8(%rbp), %rdi
callq 0x61b0
movq %rax, %rdi
callq 0x6660
movq -0xe68(%rbp), %rdi
movl %eax, %ecx
leaq -0x888(%rbp), %rsi
leaq -0x8a8(%rbp), %rdx
movl $0x49, %r8d
callq 0x15af0
jmp 0x12b13
movq -0xe68(%rbp), %rax
movb $0x0, -0x8c9(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0x8c8(%rbp), %rdi
callq 0x62a0
leaq -0x8a8(%rbp), %rdi
callq 0x62a0
leaq -0x888(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12bc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12bb7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12bab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x8c8(%rbp), %rdi
callq 0x62a0
leaq -0x8a8(%rbp), %rdi
callq 0x62a0
leaq -0x888(%rbp), %rdi
callq 0x62a0
testb $0x1, -0x8c9(%rbp)
jne 0x12bce
jmp 0x12bda
movq -0xe68(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movq -0xd50(%rbp), %rax
addq $0x68, %rax
movq %rax, -0xe90(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x4, %esi
callq 0x157b0
movq %rax, -0xe88(%rbp)
jmp 0x12c0b
movq -0xe88(%rbp), %rsi
leaq -0x8f0(%rbp), %rdi
callq 0x15820
jmp 0x12c20
movq -0xe90(%rbp), %rdi
leaq -0x8f0(%rbp), %rsi
callq 0x15bd0
movq %rax, -0xe98(%rbp)
jmp 0x12c3c
movq -0xe98(%rbp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0xe99(%rbp)
leaq -0x8f0(%rbp), %rdi
callq 0x62a0
movb -0xe99(%rbp), %al
testb $0x1, %al
jne 0x12c6d
jmp 0x12cf7
movl $0x10, %edi
callq 0x6210
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xea8(%rbp)
leaq 0x377b3(%rip), %rsi     # 0x4a43e
callq 0x6820
jmp 0x12c92
movq -0xea8(%rbp), %rdi
movq 0x58330(%rip), %rsi     # 0x6afd0
movq 0x58311(%rip), %rdx     # 0x6afb8
callq 0x6730
jmp 0x140ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x8f0(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
movq -0xea8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
callq 0x6350
jmp 0x13eba
movq -0xd50(%rbp), %rax
addq $0x68, %rax
movq %rax, -0xeb8(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x4, %esi
callq 0x157b0
movq %rax, -0xeb0(%rbp)
jmp 0x12d23
movq -0xeb0(%rbp), %rsi
leaq -0x910(%rbp), %rdi
callq 0x15820
jmp 0x12d38
movq -0xeb8(%rbp), %rdi
leaq -0x910(%rbp), %rsi
callq 0x15c30
movq %rax, -0xec0(%rbp)
jmp 0x12d54
movq -0xd50(%rbp), %rdi
movq -0xec0(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xecc(%rbp)
addq $0x20, %rdi
callq 0xf7d0
movq %rax, -0x918(%rbp)
leaq -0x198(%rbp), %rdi
leaq -0x918(%rbp), %rsi
callq 0x11100
movl -0xecc(%rbp), %ecx
notl %eax
addl %ecx, %eax
movzwl %ax, %eax
movl %eax, -0x7d4(%rbp)
leaq -0x910(%rbp), %rdi
callq 0x62a0
movl $0x98, %edi
callq 0x6440
movq %rax, -0xec8(%rbp)
jmp 0x12dbf
movb $0x1, -0x979(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xed8(%rbp)
jmp 0x12de0
movq -0xed8(%rbp), %rsi
leaq -0x938(%rbp), %rdi
callq 0x15820
jmp 0x12df5
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xee0(%rbp)
jmp 0x12e0f
movq -0xee0(%rbp), %rsi
leaq -0x958(%rbp), %rdi
callq 0x15820
jmp 0x12e24
leaq -0x190(%rbp), %rdi
movl $0x3, %esi
callq 0x157b0
movq %rax, -0xee8(%rbp)
jmp 0x12e3e
movq -0xee8(%rbp), %rsi
leaq -0x978(%rbp), %rdi
callq 0x15820
jmp 0x12e53
movq -0xec8(%rbp), %rdi
movl -0x7d4(%rbp), %r8d
leaq -0x938(%rbp), %rsi
leaq -0x958(%rbp), %rdx
leaq -0x978(%rbp), %rcx
movl $0x49, %r9d
callq 0x15920
jmp 0x12e83
movq -0xec8(%rbp), %rax
movb $0x0, -0x979(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0x978(%rbp), %rdi
callq 0x62a0
leaq -0x958(%rbp), %rdi
callq 0x62a0
leaq -0x938(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x910(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12f56
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12f4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x12f3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x978(%rbp), %rdi
callq 0x62a0
leaq -0x958(%rbp), %rdi
callq 0x62a0
leaq -0x938(%rbp), %rdi
callq 0x62a0
testb $0x1, -0x979(%rbp)
jne 0x12f61
jmp 0x12f6d
movq -0xec8(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movq -0xd50(%rbp), %rax
addq $0x68, %rax
movq %rax, -0xef8(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x4, %esi
callq 0x157b0
movq %rax, -0xef0(%rbp)
jmp 0x12f9e
movq -0xef0(%rbp), %rsi
leaq -0x9a0(%rbp), %rdi
callq 0x15820
jmp 0x12fb3
movq -0xef8(%rbp), %rdi
leaq -0x9a0(%rbp), %rsi
callq 0x15bd0
movq %rax, -0xf00(%rbp)
jmp 0x12fcf
movq -0xf00(%rbp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0xf01(%rbp)
leaq -0x9a0(%rbp), %rdi
callq 0x62a0
movb -0xf01(%rbp), %al
testb $0x1, %al
jne 0x13000
jmp 0x1308a
movl $0x10, %edi
callq 0x6210
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xf10(%rbp)
leaq 0x37420(%rip), %rsi     # 0x4a43e
callq 0x6820
jmp 0x13025
movq -0xf10(%rbp), %rdi
movq 0x57f9d(%rip), %rsi     # 0x6afd0
movq 0x57f7e(%rip), %rdx     # 0x6afb8
callq 0x6730
jmp 0x140ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x9a0(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
movq -0xf10(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
callq 0x6350
jmp 0x13eba
movq -0xd50(%rbp), %rax
addq $0x68, %rax
movq %rax, -0xf20(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x4, %esi
callq 0x157b0
movq %rax, -0xf18(%rbp)
jmp 0x130b6
movq -0xf18(%rbp), %rsi
leaq -0x9c0(%rbp), %rdi
callq 0x15820
jmp 0x130cb
movq -0xf20(%rbp), %rdi
leaq -0x9c0(%rbp), %rsi
callq 0x15c30
movq %rax, -0xf28(%rbp)
jmp 0x130e7
movq -0xd50(%rbp), %rdi
movq -0xf28(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xf34(%rbp)
addq $0x20, %rdi
callq 0xf7d0
movq %rax, -0x9c8(%rbp)
leaq -0x198(%rbp), %rdi
leaq -0x9c8(%rbp), %rsi
callq 0x11100
movl -0xf34(%rbp), %ecx
notl %eax
addl %ecx, %eax
movzwl %ax, %eax
movl %eax, -0x7d4(%rbp)
leaq -0x9c0(%rbp), %rdi
callq 0x62a0
movl $0x98, %edi
callq 0x6440
movq %rax, -0xf30(%rbp)
jmp 0x13152
movb $0x1, -0xa09(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xf40(%rbp)
jmp 0x13173
movq -0xf40(%rbp), %rsi
leaq -0x9e8(%rbp), %rdi
callq 0x15820
jmp 0x13188
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xf48(%rbp)
jmp 0x131a2
movq -0xf48(%rbp), %rsi
leaq -0xa08(%rbp), %rdi
callq 0x15820
jmp 0x131b7
movq -0xf30(%rbp), %rdi
movl -0x7d4(%rbp), %ecx
leaq -0x9e8(%rbp), %rsi
leaq -0xa08(%rbp), %rdx
movl $0x49, %r8d
callq 0x15af0
jmp 0x131df
movq -0xf30(%rbp), %rax
movb $0x0, -0xa09(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0xa08(%rbp), %rdi
callq 0x62a0
leaq -0x9e8(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0x9c0(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13286
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x1327a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xa08(%rbp), %rdi
callq 0x62a0
leaq -0x9e8(%rbp), %rdi
callq 0x62a0
testb $0x1, -0xa09(%rbp)
jne 0x13291
jmp 0x1329d
movq -0xf30(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movl $0x98, %edi
callq 0x6440
movq %rax, -0xf50(%rbp)
jmp 0x132b5
movb $0x1, -0xa91(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xf58(%rbp)
jmp 0x132d6
movq -0xf58(%rbp), %rsi
leaq -0xa30(%rbp), %rdi
callq 0x15820
jmp 0x132eb
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xf60(%rbp)
jmp 0x13305
movq -0xf60(%rbp), %rsi
leaq -0xa50(%rbp), %rdi
callq 0x15820
jmp 0x1331a
leaq -0x190(%rbp), %rdi
movl $0x3, %esi
callq 0x157b0
movq %rax, -0xf68(%rbp)
jmp 0x13334
movq -0xf68(%rbp), %rsi
leaq -0xa70(%rbp), %rdi
callq 0x15820
jmp 0x13349
leaq -0xa70(%rbp), %rdi
callq 0x61b0
movq %rax, %rdi
callq 0x6660
movl %eax, -0xf74(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x4, %esi
callq 0x157b0
movq %rax, -0xf70(%rbp)
jmp 0x1337d
movq -0xf70(%rbp), %rsi
leaq -0xa90(%rbp), %rdi
callq 0x15820
jmp 0x13392
movl -0xf74(%rbp), %ecx
movq -0xf50(%rbp), %rdi
leaq -0xa30(%rbp), %rsi
leaq -0xa50(%rbp), %rdx
leaq -0xa90(%rbp), %r8
movl $0x49, %r9d
callq 0x15d10
jmp 0x133c1
movq -0xf50(%rbp), %rax
movb $0x0, -0xa91(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0xa90(%rbp), %rdi
callq 0x62a0
leaq -0xa70(%rbp), %rdi
callq 0x62a0
leaq -0xa50(%rbp), %rdi
callq 0x62a0
leaq -0xa30(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x1349d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13491
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13485
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13479
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xa90(%rbp), %rdi
callq 0x62a0
leaq -0xa70(%rbp), %rdi
callq 0x62a0
leaq -0xa50(%rbp), %rdi
callq 0x62a0
leaq -0xa30(%rbp), %rdi
callq 0x62a0
testb $0x1, -0xa91(%rbp)
jne 0x134a8
jmp 0x134b4
movq -0xf50(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movl $0x98, %edi
callq 0x6440
movq %rax, -0xf80(%rbp)
jmp 0x134cc
movb $0x1, -0xb19(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xf88(%rbp)
jmp 0x134ed
movq -0xf88(%rbp), %rsi
leaq -0xab8(%rbp), %rdi
callq 0x15820
jmp 0x13502
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xf90(%rbp)
jmp 0x1351c
movq -0xf90(%rbp), %rsi
leaq -0xad8(%rbp), %rdi
callq 0x15820
jmp 0x13531
leaq -0x190(%rbp), %rdi
movl $0x3, %esi
callq 0x157b0
movq %rax, -0xf98(%rbp)
jmp 0x1354b
movq -0xf98(%rbp), %rsi
leaq -0xaf8(%rbp), %rdi
callq 0x15820
jmp 0x13560
leaq -0x190(%rbp), %rdi
movl $0x4, %esi
callq 0x157b0
movq %rax, -0xfa0(%rbp)
jmp 0x1357a
movq -0xfa0(%rbp), %rsi
leaq -0xb18(%rbp), %rdi
callq 0x15820
jmp 0x1358f
movq -0xf80(%rbp), %rdi
leaq -0xab8(%rbp), %rsi
leaq -0xad8(%rbp), %rdx
leaq -0xaf8(%rbp), %rcx
leaq -0xb18(%rbp), %r8
movl $0x52, %r9d
callq 0x15e20
jmp 0x135bf
movq -0xf80(%rbp), %rax
movb $0x0, -0xb19(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0xb18(%rbp), %rdi
callq 0x62a0
leaq -0xaf8(%rbp), %rdi
callq 0x62a0
leaq -0xad8(%rbp), %rdi
callq 0x62a0
leaq -0xab8(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x1369b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x1368f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13683
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13677
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xb18(%rbp), %rdi
callq 0x62a0
leaq -0xaf8(%rbp), %rdi
callq 0x62a0
leaq -0xad8(%rbp), %rdi
callq 0x62a0
leaq -0xab8(%rbp), %rdi
callq 0x62a0
testb $0x1, -0xb19(%rbp)
jne 0x136a6
jmp 0x136b2
movq -0xf80(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movl $0x98, %edi
callq 0x6440
movq %rax, -0xfa8(%rbp)
jmp 0x136ca
movb $0x1, -0xb81(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xfb0(%rbp)
jmp 0x136eb
movq -0xfb0(%rbp), %rsi
leaq -0xb40(%rbp), %rdi
callq 0x15820
jmp 0x13700
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xfb8(%rbp)
jmp 0x1371a
movq -0xfb8(%rbp), %rsi
leaq -0xb60(%rbp), %rdi
callq 0x15820
jmp 0x1372f
leaq -0x190(%rbp), %rdi
movl $0x3, %esi
callq 0x157b0
movq %rax, -0xfc0(%rbp)
jmp 0x13749
movq -0xfc0(%rbp), %rsi
leaq -0xb80(%rbp), %rdi
callq 0x15820
jmp 0x1375e
movq -0xfa8(%rbp), %rdi
leaq -0xb40(%rbp), %rsi
leaq -0xb60(%rbp), %rdx
leaq -0xb80(%rbp), %rcx
movl $0x52, %r8d
callq 0x15f30
jmp 0x13787
movq -0xfa8(%rbp), %rax
movb $0x0, -0xb81(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0xb80(%rbp), %rdi
callq 0x62a0
leaq -0xb60(%rbp), %rdi
callq 0x62a0
leaq -0xb40(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13837
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x1382b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x1381f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xb80(%rbp), %rdi
callq 0x62a0
leaq -0xb60(%rbp), %rdi
callq 0x62a0
leaq -0xb40(%rbp), %rdi
callq 0x62a0
testb $0x1, -0xb81(%rbp)
jne 0x13842
jmp 0x1384e
movq -0xfa8(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movl $0x98, %edi
callq 0x6440
movq %rax, -0xfc8(%rbp)
jmp 0x13866
movb $0x1, -0xbc9(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xfd0(%rbp)
jmp 0x13887
movq -0xfd0(%rbp), %rsi
leaq -0xba8(%rbp), %rdi
callq 0x15820
jmp 0x1389c
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xfd8(%rbp)
jmp 0x138b6
movq -0xfd8(%rbp), %rsi
leaq -0xbc8(%rbp), %rdi
callq 0x15820
jmp 0x138cb
movq -0xfc8(%rbp), %rdi
leaq -0xba8(%rbp), %rsi
leaq -0xbc8(%rbp), %rdx
movl $0x52, %ecx
callq 0x16010
jmp 0x138ec
movq -0xfc8(%rbp), %rax
movb $0x0, -0xbc9(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0xbc8(%rbp), %rdi
callq 0x62a0
leaq -0xba8(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13970
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13964
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xbc8(%rbp), %rdi
callq 0x62a0
leaq -0xba8(%rbp), %rdi
callq 0x62a0
testb $0x1, -0xbc9(%rbp)
jne 0x1397b
jmp 0x13987
movq -0xfc8(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movl $0x98, %edi
callq 0x6440
movq %rax, -0xfe0(%rbp)
jmp 0x1399f
movb $0x1, -0xc31(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0xfe8(%rbp)
jmp 0x139c0
movq -0xfe8(%rbp), %rsi
leaq -0xbf0(%rbp), %rdi
callq 0x15820
jmp 0x139d5
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0xff0(%rbp)
jmp 0x139ef
movq -0xff0(%rbp), %rsi
leaq -0xc10(%rbp), %rdi
callq 0x15820
jmp 0x13a04
leaq -0x190(%rbp), %rdi
movl $0x3, %esi
callq 0x157b0
movq %rax, -0xff8(%rbp)
jmp 0x13a1e
movq -0xff8(%rbp), %rsi
leaq -0xc30(%rbp), %rdi
callq 0x15820
jmp 0x13a33
leaq -0xc30(%rbp), %rdi
callq 0x61b0
movq %rax, %rdi
callq 0x6660
movq -0xfe0(%rbp), %rdi
movl %eax, %ecx
leaq -0xbf0(%rbp), %rsi
leaq -0xc10(%rbp), %rdx
movl $0x52, %r8d
callq 0x15af0
jmp 0x13a6b
movq -0xfe0(%rbp), %rax
movb $0x0, -0xc31(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0xc30(%rbp), %rdi
callq 0x62a0
leaq -0xc10(%rbp), %rdi
callq 0x62a0
leaq -0xbf0(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13b1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13b0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13b03
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xc30(%rbp), %rdi
callq 0x62a0
leaq -0xc10(%rbp), %rdi
callq 0x62a0
leaq -0xbf0(%rbp), %rdi
callq 0x62a0
testb $0x1, -0xc31(%rbp)
jne 0x13b26
jmp 0x13b32
movq -0xfe0(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movq -0xd50(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x1008(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0x1000(%rbp)
jmp 0x13b63
movq -0x1000(%rbp), %rsi
leaq -0xc58(%rbp), %rdi
callq 0x15820
jmp 0x13b78
movq -0x1008(%rbp), %rdi
leaq -0xc58(%rbp), %rsi
callq 0x15bd0
movq %rax, -0x1010(%rbp)
jmp 0x13b94
movq -0x1010(%rbp), %rax
cmpq $0x0, %rax
setne %al
xorb $-0x1, %al
movb %al, -0x1011(%rbp)
leaq -0xc58(%rbp), %rdi
callq 0x62a0
movb -0x1011(%rbp), %al
testb $0x1, %al
jne 0x13bc5
jmp 0x13c4f
movl $0x10, %edi
callq 0x6210
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1020(%rbp)
leaq 0x3685b(%rip), %rsi     # 0x4a43e
callq 0x6820
jmp 0x13bea
movq -0x1020(%rbp), %rdi
movq 0x573d8(%rip), %rsi     # 0x6afd0
movq 0x573b9(%rip), %rdx     # 0x6afb8
callq 0x6730
jmp 0x140ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xc58(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
movq -0x1020(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
callq 0x6350
jmp 0x13eba
movq -0xd50(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x1030(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x2, %esi
callq 0x157b0
movq %rax, -0x1028(%rbp)
jmp 0x13c7b
movq -0x1028(%rbp), %rsi
leaq -0xc78(%rbp), %rdi
callq 0x15820
jmp 0x13c90
movq -0x1030(%rbp), %rdi
leaq -0xc78(%rbp), %rsi
callq 0x15c30
movq %rax, -0x1038(%rbp)
jmp 0x13cac
movq -0x1038(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x7d4(%rbp)
leaq -0xc78(%rbp), %rdi
callq 0x62a0
movl $0x98, %edi
callq 0x6440
movq %rax, -0x1040(%rbp)
jmp 0x13cda
movb $0x1, -0xc99(%rbp)
leaq -0x190(%rbp), %rdi
movl $0x1, %esi
callq 0x157b0
movq %rax, -0x1048(%rbp)
jmp 0x13cfb
movq -0x1048(%rbp), %rsi
leaq -0xc98(%rbp), %rdi
callq 0x15820
jmp 0x13d10
movq -0x1040(%rbp), %rdi
movl -0x7d4(%rbp), %edx
leaq -0xc98(%rbp), %rsi
movl $0x4a, %ecx
callq 0x160d0
jmp 0x13d30
movq -0x1040(%rbp), %rax
movb $0x0, -0xc99(%rbp)
movq %rax, -0x7d0(%rbp)
leaq -0xc98(%rbp), %rdi
callq 0x62a0
jmp 0x13dc4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xc78(%rbp), %rdi
callq 0x62a0
jmp 0x13eba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x13da8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xc98(%rbp), %rdi
callq 0x62a0
testb $0x1, -0xc99(%rbp)
jne 0x13db3
jmp 0x13dbf
movq -0x1040(%rbp), %rdi
callq 0x6400
jmp 0x13eba
movq -0xd50(%rbp), %rax
addq $0x50, %rax
movq %rax, -0x1058(%rbp)
movq -0x7d0(%rbp), %rdi
callq 0x42af0
movl %eax, -0x104c(%rbp)
jmp 0x13dea
movq -0x1058(%rbp), %rdi
movl -0x104c(%rbp), %eax
movl %eax, -0xca0(%rbp)
leaq -0xca0(%rbp), %rsi
callq 0x155a0
jmp 0x13e0b
jmp 0x13e29
jmp 0x13e0f
leaq -0x778(%rbp), %rdi
xorl %esi, %esi
callq 0x16180
movq %rax, -0xca8(%rbp)
jmp 0x125f5
leaq 0x57a60(%rip), %rdi     # 0x6b890
callq 0x15640
movq %rax, -0xcb0(%rbp)
leaq -0x778(%rbp), %rdi
leaq -0xcb0(%rbp), %rsi
callq 0x161c0
testb $0x1, %al
jne 0x13e58
jmp 0x13fd5
movl $0x10, %edi
callq 0x6210
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x1060(%rbp)
leaq 0x365d8(%rip), %rsi     # 0x4a44e
callq 0x6820
jmp 0x13e7d
movq -0x1060(%rbp), %rdi
movq 0x57145(%rip), %rsi     # 0x6afd0
movq 0x57126(%rip), %rdx     # 0x6afb8
callq 0x6730
jmp 0x140ed
movq -0x1060(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
callq 0x6350
movl -0x16c(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x140cd
movq -0x168(%rbp), %rdi
callq 0x61a0
movq %rax, -0xcb8(%rbp)
movb $0x1, -0xd3a(%rbp)
movl $0x10, %edi
callq 0x6210
movq %rax, -0x1078(%rbp)
movq -0xcb8(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
callq *%rax
movq %rax, -0x1070(%rbp)
leaq -0xd39(%rbp), %rdi
movq %rdi, -0x1068(%rbp)
callq 0x67a0
movq -0x1070(%rbp), %rsi
movq -0x1068(%rbp), %rdx
leaq -0xd38(%rbp), %rdi
callq 0x65e0
jmp 0x13f3e
leaq 0x36516(%rip), %rsi     # 0x4a45b
leaq -0xd18(%rbp), %rdi
leaq -0xd38(%rbp), %rdx
callq 0xf340
jmp 0x13f5a
leaq 0x36517(%rip), %rdx     # 0x4a478
leaq -0xcf8(%rbp), %rdi
leaq -0xd18(%rbp), %rsi
callq 0x16250
jmp 0x13f76
leaq -0x198(%rbp), %rdi
callq 0xf9f0
movq %rax, %rdx
leaq -0xcd8(%rbp), %rdi
leaq -0xcf8(%rbp), %rsi
callq 0x16200
jmp 0x13f9a
movq -0x1078(%rbp), %rdi
leaq -0xcd8(%rbp), %rsi
callq 0x6770
jmp 0x13faf
movq -0x1078(%rbp), %rdi
movb $0x0, -0xd3a(%rbp)
movq 0x5700c(%rip), %rsi     # 0x6afd0
movq 0x56fed(%rip), %rdx     # 0x6afb8
callq 0x6730
jmp 0x140ed
jmp 0x13fd7
jmp 0x13fd9
jmp 0x1409c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x14070
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x14064
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x14058
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
jmp 0x1404c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x168(%rbp)
movl %eax, -0x16c(%rbp)
leaq -0xcd8(%rbp), %rdi
callq 0x62a0
leaq -0xcf8(%rbp), %rdi
callq 0x62a0
leaq -0xd18(%rbp), %rdi
callq 0x62a0
leaq -0xd38(%rbp), %rdi
callq 0x62a0
leaq -0xd39(%rbp), %rdi
callq 0x64a0
testb $0x1, -0xd3a(%rbp)
jne 0x14087
jmp 0x14093
movq -0x1078(%rbp), %rdi
callq 0x6350
callq 0x66c0
jmp 0x1409a
jmp 0x140cd
jmp 0x1409e
leaq -0x198(%rbp), %rdi
xorl %esi, %esi
callq 0xfa10
movq %rax, -0xd48(%rbp)
jmp 0x11d81
leaq -0x190(%rbp), %rdi
callq 0x162a0
addq $0x1080, %rsp           # imm = 0x1080
popq %rbp
retq
leaq -0x190(%rbp), %rdi
callq 0x162a0
movq -0x168(%rbp), %rdi
callq 0x6790
movq %rax, %rdi
callq 0xb910
nopl (%rax)