// File: Ziang95[P]Tomasulo_simulator/issue.cpp
// Function: issue_automat(void*)
void *issue_automat(void *arg)
{
    next_vdd = 0;
    const instr *tmp = nullptr;
    memCell Vj, Vk;
    int Qj, Qk;
    while (true)
    {
        at_rising_edge(next_vdd);
        tmp = nullptr;
        Qj = Qk = -1;
        tmp = instr_Q->getInstr();
        at_falling_edge(next_vdd);
        if (tmp)
        {
            msg_log("Issuing code: " + tmp->name, 2);
            resStation *avai = nullptr;
            switch (tmp->code)
            {
            case ADD: case ADDI: case SUB:
            {
                for (int i = 0; i < iAdder.size(); i++)
                    for (int j = 0; j < (*iAdder[i]).rs.size(); j++)
                        if ((*iAdder[i]).rs[j]->get_state() == false)
                            avai = (*iAdder[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    if (tmp->code == ADDI)
                        Vk.i = tmp->imdt;
                    else
                        get_reg_or_rob(tmp->oprnd2, Qk, Vk);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, tmp->dest, tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    RAT[tmp->dest] = dest;
                    avai->set_code(tmp->code);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                else
                {
                    msg_log("No available iAdder rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case ADD_D: case SUB_D:
            {
                for (int i = 0; i < fAdder.size(); i++)
                    for (int j = 0; j < (*fAdder[i]).rs.size(); j++)
                        if ((*fAdder[i]).rs[j]->get_state() == false)
                            avai = (*fAdder[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    get_reg_or_rob(tmp->oprnd2, Qk, Vk);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, tmp->dest, tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    RAT[tmp->dest] = dest;
                    avai->set_code(tmp->code);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                break;
            }
            case MUL_D:
            {
                for (int i = 0; i < fMtplr.size(); i++)
                    for (int j = 0; j < (*fMtplr[i]).rs.size(); j++)
                        if ((*fMtplr[i]).rs[j]->get_state() == false)
                            avai = (*fMtplr[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    get_reg_or_rob(tmp->oprnd2, Qk, Vk);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, tmp->dest, tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    RAT[tmp->dest] = dest;
                    avai->set_code(tmp->code);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                else
                {
                    msg_log("No available fAdder rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case LD:
            {
                for (int i = 0; i < lsUnit.size(); i++)
                    for (int j = 0; j < (*lsUnit[i]).rs.size(); j++)
                        if ((*lsUnit[i]).rs[j]->get_state() == false)
                            avai = (*lsUnit[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, tmp->dest, tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    RAT[tmp->dest] = dest;
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                else
                {
                    msg_log("No available LD rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case SD:
            {
                for (int i = 0; i < lsUnit.size(); i++)
                    for (int j = 0; j < (*lsUnit[i]).rs.size(); j++)
                        if ((*lsUnit[i]).rs[j]->get_state() == false)
                            avai = (*lsUnit[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, "NO_RET", tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    instr_Q->ptr_advance();
                    avai->set_code(SD);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                }
                else
                {
                    msg_log("No available SD rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case BNE: case BEQ:
            {
                for (int i = 0; i < iAdder.size(); i++)
                    for (int j = 0; j < (*iAdder[i]).rs.size(); j++)
                        if ((*iAdder[i]).rs[j]->get_state() == false)
                            avai = (*iAdder[i]).rs[j];
                if (avai)
                {
                    get_reg_or_rob(tmp->oprnd1, Qj, Vj);
                    get_reg_or_rob(tmp->oprnd2, Qk, Vk);
                    int dest;
                    try
                    {
                        dest = CPU_ROB->add_entry(tmp->name, "NO_RET", tmp->code);
                    }
                    catch(const int e)
                    {
                        err_log("ROB is full");
                        break;
                    }
                    if (check_squash())
                        break;
                    ROBEntry *R = CPU_ROB->get_entry(dest);
                    R->instr_i = instr_Q->get_head();
                    R->bkupRAT = RAT;
                    avai->set_code(tmp->code);
                    avai->fill_rs(dest, tmp, Qj, Qk, Vj, Vk);
                    if (BTBEntry* predctr = CPU_BTB.getEntry(R->instr_i))
                    {
                        if (predctr->taken)
                            instr_Q->move_ptr(((R->instr_i)/8)*8 + (predctr->target)%8);
                        else
                            instr_Q->ptr_advance();
                    }
                    else
                        instr_Q->ptr_advance();
                }
                else
                {
                    msg_log("No available branch rs, wait until next cycle", 2);
                    check_squash();
                }
                break;
            }
            case NOP:
            {
                int dest;
                try
                {
                    dest = CPU_ROB->add_entry(tmp->name, "NO_RET", tmp->code);
                }
                catch(const int e)
                {
                    err_log("ROB is full");
                    break;
                }
                if (check_squash())
                    break;
                instr_Q->ptr_advance();
                nopBub->generate_bubble(dest);
                break;
            }
            default:
                if (check_squash())
                    break;
                break;
            }
        }
        else
            check_squash();
    }
    return nullptr;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7e0, %rsp            # imm = 0x7E0
movq %rdi, -0x8(%rbp)
movl $0x0, 0x177c7(%rip)     # 0x2f440
movq $0x0, -0x10(%rbp)
leaq 0x177b8(%rip), %rdi     # 0x2f440
callq 0x12130
movq $0x0, -0x10(%rbp)
movl $0xffffffff, -0x20(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0x1c(%rbp) # imm = 0xFFFFFFFF
leaq 0x177ae(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x179e0
movq %rax, -0x10(%rbp)
leaq 0x17783(%rip), %rdi     # 0x2f440
callq 0x121a0
cmpq $0x0, -0x10(%rbp)
je 0x19a33
movq -0x10(%rbp), %rdx
leaq 0xa93c(%rip), %rsi      # 0x22614
leaq -0x40(%rbp), %rdi
movq %rdi, -0x618(%rbp)
callq 0xf080
movq -0x618(%rbp), %rdi
movl $0x2, %esi
callq 0x12060
jmp 0x17cfb
leaq -0x40(%rbp), %rdi
callq 0x4240
movq $0x0, -0x58(%rbp)
movq -0x10(%rbp), %rax
movl 0x20(%rax), %eax
movq %rax, -0x620(%rbp)
subq $0xa, %rax
ja 0x19a22
movq -0x620(%rbp), %rax
leaq 0xa89e(%rip), %rcx      # 0x225d0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movl $0x0, -0x5c(%rbp)
movslq -0x5c(%rbp), %rax
movq %rax, -0x628(%rbp)
leaq 0x17742(%rip), %rdi     # 0x2f4b0
callq 0x88b0
movq %rax, %rcx
movq -0x628(%rbp), %rax
cmpq %rcx, %rax
jae 0x17e45
movl $0x0, -0x60(%rbp)
movslq -0x60(%rbp), %rax
movq %rax, -0x630(%rbp)
movslq -0x5c(%rbp), %rsi
leaq 0x1770d(%rip), %rdi     # 0x2f4b0
callq 0x19aa0
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
callq 0xa4f0
movq %rax, %rcx
movq -0x630(%rbp), %rax
cmpq %rcx, %rax
jae 0x17e35
movslq -0x5c(%rbp), %rsi
leaq 0x176df(%rip), %rdi     # 0x2f4b0
callq 0x19aa0
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x60(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rdi
callq 0x21080
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x17e25
movslq -0x5c(%rbp), %rsi
leaq 0x176aa(%rip), %rdi     # 0x2f4b0
callq 0x19aa0
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x60(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x17e27
movl -0x60(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x60(%rbp)
jmp 0x17d8d
jmp 0x17e37
movl -0x5c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5c(%rbp)
jmp 0x17d5c
cmpq $0x0, -0x58(%rbp)
je 0x18135
movq -0x10(%rbp), %rsi
addq $0x48, %rsi
leaq -0x80(%rbp), %rdi
movq %rdi, -0x638(%rbp)
callq 0x4180
movq -0x638(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
leaq -0x14(%rbp), %rdx
callq 0x17a50
jmp 0x17e7e
leaq -0x80(%rbp), %rdi
callq 0x4240
movq -0x10(%rbp), %rax
cmpl $0x4, 0x20(%rax)
jne 0x17eba
movq -0x10(%rbp), %rax
movl 0x88(%rax), %eax
movl %eax, -0x18(%rbp)
jmp 0x17f16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq -0x10(%rbp), %rsi
addq $0x68, %rsi
leaq -0xa0(%rbp), %rdi
movq %rdi, -0x640(%rbp)
callq 0x4180
movq -0x640(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x18(%rbp), %rdx
callq 0x17a50
jmp 0x17eeb
leaq -0xa0(%rbp), %rdi
callq 0x4240
jmp 0x17f16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
leaq 0x17543(%rip), %rax     # 0x2f460
movq (%rax), %rax
movq %rax, -0x648(%rbp)
movq -0x10(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x4180
jmp 0x17f39
movq -0x10(%rbp), %rsi
addq $0x28, %rsi
leaq -0xe8(%rbp), %rdi
callq 0x4180
jmp 0x17f4f
movq -0x648(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0xc8(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0xe600
movl %eax, -0x64c(%rbp)
jmp 0x17f78
movl -0x64c(%rbp), %eax
movl %eax, -0xa4(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x4240
leaq -0xc8(%rbp), %rdi
callq 0x4240
jmp 0x1809d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x17fe1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x17fd5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x4240
leaq -0xc8(%rbp), %rdi
callq 0x4240
movl -0x4c(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x19a3d
movq -0x48(%rbp), %rdi
callq 0x4160
movl (%rax), %eax
movl %eax, -0xec(%rbp)
leaq -0x111(%rbp), %rdi
movq %rdi, -0x658(%rbp)
callq 0x4600
movq -0x658(%rbp), %rdx
leaq 0xa600(%rip), %rsi      # 0x22623
leaq -0x110(%rbp), %rdi
callq 0x44c0
jmp 0x18031
leaq -0x110(%rbp), %rdi
callq 0x11880
jmp 0x1803f
leaq -0x110(%rbp), %rdi
callq 0x4240
leaq -0x111(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18087
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x4240
leaq -0x111(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a3d
callq 0x17b60
testb $0x1, %al
jne 0x180a8
jmp 0x180ad
jmp 0x19a31
leaq 0x173a4(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x17840
movl -0xa4(%rbp), %eax
movl %eax, -0x65c(%rbp)
movq -0x10(%rbp), %rsi
addq $0x28, %rsi
leaq 0x17c81(%rip), %rdi     # 0x2fd58
callq 0x19ae0
movl -0x65c(%rbp), %ecx
movl %ecx, (%rax)
movq -0x58(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %esi
callq 0x20d00
movq -0x58(%rbp), %rdi
movl -0xa4(%rbp), %esi
movq -0x10(%rbp), %rdx
movl -0x1c(%rbp), %ecx
movl -0x20(%rbp), %r8d
movl -0x14(%rbp), %eax
movl %eax, -0x118(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x11c(%rbp)
movl -0x118(%rbp), %r9d
movl -0x11c(%rbp), %eax
movl %eax, (%rsp)
callq 0x20d40
jmp 0x181cd
leaq -0x141(%rbp), %rdi
movq %rdi, -0x668(%rbp)
callq 0x4600
movq -0x668(%rbp), %rdx
leaq 0xa4d9(%rip), %rsi      # 0x2262f
leaq -0x140(%rbp), %rdi
callq 0x44c0
jmp 0x18164
leaq -0x140(%rbp), %rdi
movl $0x2, %esi
callq 0x12060
jmp 0x18177
leaq -0x140(%rbp), %rdi
callq 0x4240
leaq -0x141(%rbp), %rdi
callq 0x43d0
callq 0x17b60
jmp 0x181cd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x181bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x4240
leaq -0x141(%rbp), %rdi
callq 0x43d0
jmp 0x19a3d
jmp 0x19a31
movl $0x0, -0x148(%rbp)
movslq -0x148(%rbp), %rax
movq %rax, -0x670(%rbp)
leaq 0x172d7(%rip), %rdi     # 0x2f4c8
callq 0x89b0
movq %rax, %rcx
movq -0x670(%rbp), %rax
cmpq %rcx, %rax
jae 0x182ed
movl $0x0, -0x14c(%rbp)
movslq -0x14c(%rbp), %rax
movq %rax, -0x678(%rbp)
movslq -0x148(%rbp), %rsi
leaq 0x17299(%rip), %rdi     # 0x2f4c8
callq 0x19b10
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
callq 0xa4f0
movq %rax, %rcx
movq -0x678(%rbp), %rax
cmpq %rcx, %rax
jae 0x182d7
movslq -0x148(%rbp), %rsi
leaq 0x17264(%rip), %rdi     # 0x2f4c8
callq 0x19b10
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x14c(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rdi
callq 0x21080
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x182c1
movslq -0x148(%rbp), %rsi
leaq 0x17229(%rip), %rdi     # 0x2f4c8
callq 0x19b10
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x14c(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x182c3
movl -0x14c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14c(%rbp)
jmp 0x18213
jmp 0x182d9
movl -0x148(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x148(%rbp)
jmp 0x181dc
cmpq $0x0, -0x58(%rbp)
je 0x185c6
movq -0x10(%rbp), %rsi
addq $0x48, %rsi
leaq -0x170(%rbp), %rdi
movq %rdi, -0x680(%rbp)
callq 0x4180
movq -0x680(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
leaq -0x14(%rbp), %rdx
callq 0x17a50
jmp 0x18329
leaq -0x170(%rbp), %rdi
callq 0x4240
movq -0x10(%rbp), %rsi
addq $0x68, %rsi
leaq -0x190(%rbp), %rdi
movq %rdi, -0x688(%rbp)
callq 0x4180
movq -0x688(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x18(%rbp), %rdx
callq 0x17a50
jmp 0x18366
leaq -0x190(%rbp), %rdi
callq 0x4240
leaq 0x170e7(%rip), %rax     # 0x2f460
movq (%rax), %rax
movq %rax, -0x690(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x1b8(%rbp), %rdi
callq 0x4180
jmp 0x18395
movq -0x10(%rbp), %rsi
addq $0x28, %rsi
leaq -0x1d8(%rbp), %rdi
callq 0x4180
jmp 0x183ab
movq -0x690(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0x1b8(%rbp), %rsi
leaq -0x1d8(%rbp), %rdx
callq 0xe600
movl %eax, -0x694(%rbp)
jmp 0x183d4
movl -0x694(%rbp), %eax
movl %eax, -0x194(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0x4240
leaq -0x1b8(%rbp), %rdi
callq 0x4240
jmp 0x18533
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18477
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1846b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0x4240
leaq -0x1b8(%rbp), %rdi
callq 0x4240
movl -0x4c(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x19a3d
movq -0x48(%rbp), %rdi
callq 0x4160
movl (%rax), %eax
movl %eax, -0x1dc(%rbp)
leaq -0x201(%rbp), %rdi
movq %rdi, -0x6a0(%rbp)
callq 0x4600
movq -0x6a0(%rbp), %rdx
leaq 0xa16a(%rip), %rsi      # 0x22623
leaq -0x200(%rbp), %rdi
callq 0x44c0
jmp 0x184c7
leaq -0x200(%rbp), %rdi
callq 0x11880
jmp 0x184d5
leaq -0x200(%rbp), %rdi
callq 0x4240
leaq -0x201(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1851d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x4240
leaq -0x201(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a3d
callq 0x17b60
testb $0x1, %al
jne 0x1853e
jmp 0x18543
jmp 0x19a31
leaq 0x16f0e(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x17840
movl -0x194(%rbp), %eax
movl %eax, -0x6a4(%rbp)
movq -0x10(%rbp), %rsi
addq $0x28, %rsi
leaq 0x177eb(%rip), %rdi     # 0x2fd58
callq 0x19ae0
movl -0x6a4(%rbp), %ecx
movl %ecx, (%rax)
movq -0x58(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %esi
callq 0x20d00
movq -0x58(%rbp), %rdi
movl -0x194(%rbp), %esi
movq -0x10(%rbp), %rdx
movl -0x1c(%rbp), %ecx
movl -0x20(%rbp), %r8d
movl -0x14(%rbp), %eax
movl %eax, -0x208(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x20c(%rbp)
movl -0x208(%rbp), %r9d
movl -0x20c(%rbp), %eax
movl %eax, (%rsp)
callq 0x20d40
jmp 0x19a31
movl $0x0, -0x210(%rbp)
movslq -0x210(%rbp), %rax
movq %rax, -0x6b0(%rbp)
leaq 0x16ef6(%rip), %rdi     # 0x2f4e0
callq 0x8ab0
movq %rax, %rcx
movq -0x6b0(%rbp), %rax
cmpq %rcx, %rax
jae 0x186e6
movl $0x0, -0x214(%rbp)
movslq -0x214(%rbp), %rax
movq %rax, -0x6b8(%rbp)
movslq -0x210(%rbp), %rsi
leaq 0x16eb8(%rip), %rdi     # 0x2f4e0
callq 0x19b30
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
callq 0xa4f0
movq %rax, %rcx
movq -0x6b8(%rbp), %rax
cmpq %rcx, %rax
jae 0x186d0
movslq -0x210(%rbp), %rsi
leaq 0x16e83(%rip), %rdi     # 0x2f4e0
callq 0x19b30
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x214(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rdi
callq 0x21080
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x186ba
movslq -0x210(%rbp), %rsi
leaq 0x16e48(%rip), %rdi     # 0x2f4e0
callq 0x19b30
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x214(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x186bc
movl -0x214(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x214(%rbp)
jmp 0x1860c
jmp 0x186d2
movl -0x210(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x210(%rbp)
jmp 0x185d5
cmpq $0x0, -0x58(%rbp)
je 0x189c4
movq -0x10(%rbp), %rsi
addq $0x48, %rsi
leaq -0x238(%rbp), %rdi
movq %rdi, -0x6c0(%rbp)
callq 0x4180
movq -0x6c0(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
leaq -0x14(%rbp), %rdx
callq 0x17a50
jmp 0x18722
leaq -0x238(%rbp), %rdi
callq 0x4240
movq -0x10(%rbp), %rsi
addq $0x68, %rsi
leaq -0x258(%rbp), %rdi
movq %rdi, -0x6c8(%rbp)
callq 0x4180
movq -0x6c8(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x18(%rbp), %rdx
callq 0x17a50
jmp 0x1875f
leaq -0x258(%rbp), %rdi
callq 0x4240
leaq 0x16cee(%rip), %rax     # 0x2f460
movq (%rax), %rax
movq %rax, -0x6d0(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x280(%rbp), %rdi
callq 0x4180
jmp 0x1878e
movq -0x10(%rbp), %rsi
addq $0x28, %rsi
leaq -0x2a0(%rbp), %rdi
callq 0x4180
jmp 0x187a4
movq -0x6d0(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0x280(%rbp), %rsi
leaq -0x2a0(%rbp), %rdx
callq 0xe600
movl %eax, -0x6d4(%rbp)
jmp 0x187cd
movl -0x6d4(%rbp), %eax
movl %eax, -0x25c(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x4240
leaq -0x280(%rbp), %rdi
callq 0x4240
jmp 0x1892c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18870
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18864
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x4240
leaq -0x280(%rbp), %rdi
callq 0x4240
movl -0x4c(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x19a3d
movq -0x48(%rbp), %rdi
callq 0x4160
movl (%rax), %eax
movl %eax, -0x2a4(%rbp)
leaq -0x2c9(%rbp), %rdi
movq %rdi, -0x6e0(%rbp)
callq 0x4600
movq -0x6e0(%rbp), %rdx
leaq 0x9d71(%rip), %rsi      # 0x22623
leaq -0x2c8(%rbp), %rdi
callq 0x44c0
jmp 0x188c0
leaq -0x2c8(%rbp), %rdi
callq 0x11880
jmp 0x188ce
leaq -0x2c8(%rbp), %rdi
callq 0x4240
leaq -0x2c9(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18916
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x2c8(%rbp), %rdi
callq 0x4240
leaq -0x2c9(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a3d
callq 0x17b60
testb $0x1, %al
jne 0x18937
jmp 0x1893c
jmp 0x19a31
leaq 0x16b15(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x17840
movl -0x25c(%rbp), %eax
movl %eax, -0x6e4(%rbp)
movq -0x10(%rbp), %rsi
addq $0x28, %rsi
leaq 0x173f2(%rip), %rdi     # 0x2fd58
callq 0x19ae0
movl -0x6e4(%rbp), %ecx
movl %ecx, (%rax)
movq -0x58(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %esi
callq 0x20d00
movq -0x58(%rbp), %rdi
movl -0x25c(%rbp), %esi
movq -0x10(%rbp), %rdx
movl -0x1c(%rbp), %ecx
movl -0x20(%rbp), %r8d
movl -0x14(%rbp), %eax
movl %eax, -0x2d0(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x2d4(%rbp)
movl -0x2d0(%rbp), %r9d
movl -0x2d4(%rbp), %eax
movl %eax, (%rsp)
callq 0x20d40
jmp 0x18a5c
leaq -0x2f9(%rbp), %rdi
movq %rdi, -0x6f0(%rbp)
callq 0x4600
movq -0x6f0(%rbp), %rdx
leaq 0x9c78(%rip), %rsi      # 0x2265d
leaq -0x2f8(%rbp), %rdi
callq 0x44c0
jmp 0x189f3
leaq -0x2f8(%rbp), %rdi
movl $0x2, %esi
callq 0x12060
jmp 0x18a06
leaq -0x2f8(%rbp), %rdi
callq 0x4240
leaq -0x2f9(%rbp), %rdi
callq 0x43d0
callq 0x17b60
jmp 0x18a5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18a4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x4240
leaq -0x2f9(%rbp), %rdi
callq 0x43d0
jmp 0x19a3d
jmp 0x19a31
movl $0x0, -0x300(%rbp)
movslq -0x300(%rbp), %rax
movq %rax, -0x6f8(%rbp)
leaq 0x16a78(%rip), %rdi     # 0x2f4f8
callq 0x8bb0
movq %rax, %rcx
movq -0x6f8(%rbp), %rax
cmpq %rcx, %rax
jae 0x18b7c
movl $0x0, -0x304(%rbp)
movslq -0x304(%rbp), %rax
movq %rax, -0x700(%rbp)
movslq -0x300(%rbp), %rsi
leaq 0x16a3a(%rip), %rdi     # 0x2f4f8
callq 0x19b50
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
callq 0xa4f0
movq %rax, %rcx
movq -0x700(%rbp), %rax
cmpq %rcx, %rax
jae 0x18b66
movslq -0x300(%rbp), %rsi
leaq 0x16a05(%rip), %rdi     # 0x2f4f8
callq 0x19b50
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x304(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rdi
callq 0x21080
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x18b50
movslq -0x300(%rbp), %rsi
leaq 0x169ca(%rip), %rdi     # 0x2f4f8
callq 0x19b50
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x304(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x18b52
movl -0x304(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x304(%rbp)
jmp 0x18aa2
jmp 0x18b68
movl -0x300(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x300(%rbp)
jmp 0x18a6b
cmpq $0x0, -0x58(%rbp)
je 0x18df0
movq -0x10(%rbp), %rsi
addq $0x48, %rsi
leaq -0x328(%rbp), %rdi
movq %rdi, -0x708(%rbp)
callq 0x4180
movq -0x708(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
leaq -0x14(%rbp), %rdx
callq 0x17a50
jmp 0x18bb8
leaq -0x328(%rbp), %rdi
callq 0x4240
leaq 0x16895(%rip), %rax     # 0x2f460
movq (%rax), %rax
movq %rax, -0x710(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x350(%rbp), %rdi
callq 0x4180
jmp 0x18be7
movq -0x10(%rbp), %rsi
addq $0x28, %rsi
leaq -0x370(%rbp), %rdi
callq 0x4180
jmp 0x18bfd
movq -0x710(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0x350(%rbp), %rsi
leaq -0x370(%rbp), %rdx
callq 0xe600
movl %eax, -0x714(%rbp)
jmp 0x18c26
movl -0x714(%rbp), %eax
movl %eax, -0x32c(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x4240
leaq -0x350(%rbp), %rdi
callq 0x4240
jmp 0x18d68
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x328(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18cac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18ca0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x4240
leaq -0x350(%rbp), %rdi
callq 0x4240
movl -0x4c(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x19a3d
movq -0x48(%rbp), %rdi
callq 0x4160
movl (%rax), %eax
movl %eax, -0x374(%rbp)
leaq -0x399(%rbp), %rdi
movq %rdi, -0x720(%rbp)
callq 0x4600
movq -0x720(%rbp), %rdx
leaq 0x9935(%rip), %rsi      # 0x22623
leaq -0x398(%rbp), %rdi
callq 0x44c0
jmp 0x18cfc
leaq -0x398(%rbp), %rdi
callq 0x11880
jmp 0x18d0a
leaq -0x398(%rbp), %rdi
callq 0x4240
leaq -0x399(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18d52
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x4240
leaq -0x399(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a3d
callq 0x17b60
testb $0x1, %al
jne 0x18d73
jmp 0x18d78
jmp 0x19a31
leaq 0x166d9(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x17840
movl -0x32c(%rbp), %eax
movl %eax, -0x724(%rbp)
movq -0x10(%rbp), %rsi
addq $0x28, %rsi
leaq 0x16fb6(%rip), %rdi     # 0x2fd58
callq 0x19ae0
movl -0x724(%rbp), %ecx
movl %ecx, (%rax)
movq -0x58(%rbp), %rdi
movl -0x32c(%rbp), %esi
movq -0x10(%rbp), %rdx
movl -0x1c(%rbp), %ecx
movl -0x20(%rbp), %r8d
movl -0x14(%rbp), %eax
movl %eax, -0x3a0(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x3a4(%rbp)
movl -0x3a0(%rbp), %r9d
movl -0x3a4(%rbp), %eax
movl %eax, (%rsp)
callq 0x20d40
jmp 0x18e88
leaq -0x3c9(%rbp), %rdi
movq %rdi, -0x730(%rbp)
callq 0x4600
movq -0x730(%rbp), %rdx
leaq 0x987a(%rip), %rsi      # 0x2268b
leaq -0x3c8(%rbp), %rdi
callq 0x44c0
jmp 0x18e1f
leaq -0x3c8(%rbp), %rdi
movl $0x2, %esi
callq 0x12060
jmp 0x18e32
leaq -0x3c8(%rbp), %rdi
callq 0x4240
leaq -0x3c9(%rbp), %rdi
callq 0x43d0
callq 0x17b60
jmp 0x18e88
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x18e77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x4240
leaq -0x3c9(%rbp), %rdi
callq 0x43d0
jmp 0x19a3d
jmp 0x19a31
movl $0x0, -0x3d0(%rbp)
movslq -0x3d0(%rbp), %rax
movq %rax, -0x738(%rbp)
leaq 0x1664c(%rip), %rdi     # 0x2f4f8
callq 0x8bb0
movq %rax, %rcx
movq -0x738(%rbp), %rax
cmpq %rcx, %rax
jae 0x18fa8
movl $0x0, -0x3d4(%rbp)
movslq -0x3d4(%rbp), %rax
movq %rax, -0x740(%rbp)
movslq -0x3d0(%rbp), %rsi
leaq 0x1660e(%rip), %rdi     # 0x2f4f8
callq 0x19b50
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
callq 0xa4f0
movq %rax, %rcx
movq -0x740(%rbp), %rax
cmpq %rcx, %rax
jae 0x18f92
movslq -0x3d0(%rbp), %rsi
leaq 0x165d9(%rip), %rdi     # 0x2f4f8
callq 0x19b50
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x3d4(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rdi
callq 0x21080
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x18f7c
movslq -0x3d0(%rbp), %rsi
leaq 0x1659e(%rip), %rdi     # 0x2f4f8
callq 0x19b50
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x3d4(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x18f7e
movl -0x3d4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3d4(%rbp)
jmp 0x18ece
jmp 0x18f94
movl -0x3d0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3d0(%rbp)
jmp 0x18e97
cmpq $0x0, -0x58(%rbp)
je 0x19233
movq -0x10(%rbp), %rsi
addq $0x48, %rsi
leaq -0x3f8(%rbp), %rdi
movq %rdi, -0x748(%rbp)
callq 0x4180
movq -0x748(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
leaq -0x14(%rbp), %rdx
callq 0x17a50
jmp 0x18fe4
leaq -0x3f8(%rbp), %rdi
callq 0x4240
leaq 0x16469(%rip), %rax     # 0x2f460
movq (%rax), %rax
movq %rax, -0x750(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x420(%rbp), %rdi
callq 0x4180
jmp 0x19013
leaq -0x441(%rbp), %rdi
movq %rdi, -0x758(%rbp)
callq 0x4600
movq -0x758(%rbp), %rdx
leaq 0x921c(%rip), %rsi      # 0x22250
leaq -0x440(%rbp), %rdi
callq 0x44c0
jmp 0x19042
movq -0x750(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0x420(%rbp), %rsi
leaq -0x440(%rbp), %rdx
callq 0xe600
movl %eax, -0x75c(%rbp)
jmp 0x1906b
movl -0x75c(%rbp), %eax
movl %eax, -0x3fc(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x4240
leaq -0x441(%rbp), %rdi
callq 0x43d0
leaq -0x420(%rbp), %rdi
callq 0x4240
jmp 0x191c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x19109
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x190f1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x4240
leaq -0x441(%rbp), %rdi
callq 0x43d0
leaq -0x420(%rbp), %rdi
callq 0x4240
movl -0x4c(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x19a3d
movq -0x48(%rbp), %rdi
callq 0x4160
movl (%rax), %eax
movl %eax, -0x448(%rbp)
leaq -0x469(%rbp), %rdi
movq %rdi, -0x768(%rbp)
callq 0x4600
movq -0x768(%rbp), %rdx
leaq 0x94d8(%rip), %rsi      # 0x22623
leaq -0x468(%rbp), %rdi
callq 0x44c0
jmp 0x19159
leaq -0x468(%rbp), %rdi
callq 0x11880
jmp 0x19167
leaq -0x468(%rbp), %rdi
callq 0x4240
leaq -0x469(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x191af
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x468(%rbp), %rdi
callq 0x4240
leaq -0x469(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a3d
callq 0x17b60
testb $0x1, %al
jne 0x191d0
jmp 0x191d5
jmp 0x19a31
leaq 0x1627c(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x17840
movq -0x58(%rbp), %rdi
movl $0x7, %esi
callq 0x20d00
movq -0x58(%rbp), %rdi
movl -0x3fc(%rbp), %esi
movq -0x10(%rbp), %rdx
movl -0x1c(%rbp), %ecx
movl -0x20(%rbp), %r8d
movl -0x14(%rbp), %eax
movl %eax, -0x470(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x474(%rbp)
movl -0x470(%rbp), %r9d
movl -0x474(%rbp), %eax
movl %eax, (%rsp)
callq 0x20d40
jmp 0x192cb
leaq -0x499(%rbp), %rdi
movq %rdi, -0x770(%rbp)
callq 0x4600
movq -0x770(%rbp), %rdx
leaq 0x9461(%rip), %rsi      # 0x226b5
leaq -0x498(%rbp), %rdi
callq 0x44c0
jmp 0x19262
leaq -0x498(%rbp), %rdi
movl $0x2, %esi
callq 0x12060
jmp 0x19275
leaq -0x498(%rbp), %rdi
callq 0x4240
leaq -0x499(%rbp), %rdi
callq 0x43d0
callq 0x17b60
jmp 0x192cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x192ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x498(%rbp), %rdi
callq 0x4240
leaq -0x499(%rbp), %rdi
callq 0x43d0
jmp 0x19a3d
jmp 0x19a31
movl $0x0, -0x4a0(%rbp)
movslq -0x4a0(%rbp), %rax
movq %rax, -0x778(%rbp)
leaq 0x161c1(%rip), %rdi     # 0x2f4b0
callq 0x88b0
movq %rax, %rcx
movq -0x778(%rbp), %rax
cmpq %rcx, %rax
jae 0x193eb
movl $0x0, -0x4a4(%rbp)
movslq -0x4a4(%rbp), %rax
movq %rax, -0x780(%rbp)
movslq -0x4a0(%rbp), %rsi
leaq 0x16183(%rip), %rdi     # 0x2f4b0
callq 0x19aa0
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
callq 0xa4f0
movq %rax, %rcx
movq -0x780(%rbp), %rax
cmpq %rcx, %rax
jae 0x193d5
movslq -0x4a0(%rbp), %rsi
leaq 0x1614e(%rip), %rdi     # 0x2f4b0
callq 0x19aa0
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x4a4(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rdi
callq 0x21080
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x193bf
movslq -0x4a0(%rbp), %rsi
leaq 0x16113(%rip), %rdi     # 0x2f4b0
callq 0x19aa0
movq (%rax), %rdi
addq $0x3870, %rdi           # imm = 0x3870
movslq -0x4a4(%rbp), %rsi
callq 0x19ac0
movq (%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x193c1
movl -0x4a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4a4(%rbp)
jmp 0x19311
jmp 0x193d7
movl -0x4a0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4a0(%rbp)
jmp 0x192da
cmpq $0x0, -0x58(%rbp)
je 0x197a0
movq -0x10(%rbp), %rsi
addq $0x48, %rsi
leaq -0x4c8(%rbp), %rdi
movq %rdi, -0x788(%rbp)
callq 0x4180
movq -0x788(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
leaq -0x14(%rbp), %rdx
callq 0x17a50
jmp 0x19427
leaq -0x4c8(%rbp), %rdi
callq 0x4240
movq -0x10(%rbp), %rsi
addq $0x68, %rsi
leaq -0x4e8(%rbp), %rdi
movq %rdi, -0x790(%rbp)
callq 0x4180
movq -0x790(%rbp), %rdi
leaq -0x20(%rbp), %rsi
leaq -0x18(%rbp), %rdx
callq 0x17a50
jmp 0x19464
leaq -0x4e8(%rbp), %rdi
callq 0x4240
leaq 0x15fe9(%rip), %rax     # 0x2f460
movq (%rax), %rax
movq %rax, -0x798(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x510(%rbp), %rdi
callq 0x4180
jmp 0x19493
leaq -0x531(%rbp), %rdi
movq %rdi, -0x7a0(%rbp)
callq 0x4600
movq -0x7a0(%rbp), %rdx
leaq 0x8d9c(%rip), %rsi      # 0x22250
leaq -0x530(%rbp), %rdi
callq 0x44c0
jmp 0x194c2
movq -0x798(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0x510(%rbp), %rsi
leaq -0x530(%rbp), %rdx
callq 0xe600
movl %eax, -0x7a4(%rbp)
jmp 0x194eb
movl -0x7a4(%rbp), %eax
movl %eax, -0x4ec(%rbp)
leaq -0x530(%rbp), %rdi
callq 0x4240
leaq -0x531(%rbp), %rdi
callq 0x43d0
leaq -0x510(%rbp), %rdi
callq 0x4240
jmp 0x19662
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x4c8(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x4e8(%rbp), %rdi
callq 0x4240
jmp 0x19a3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x195a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1958e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x530(%rbp), %rdi
callq 0x4240
leaq -0x531(%rbp), %rdi
callq 0x43d0
leaq -0x510(%rbp), %rdi
callq 0x4240
movl -0x4c(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x19a3d
movq -0x48(%rbp), %rdi
callq 0x4160
movl (%rax), %eax
movl %eax, -0x538(%rbp)
leaq -0x559(%rbp), %rdi
movq %rdi, -0x7b0(%rbp)
callq 0x4600
movq -0x7b0(%rbp), %rdx
leaq 0x903b(%rip), %rsi      # 0x22623
leaq -0x558(%rbp), %rdi
callq 0x44c0
jmp 0x195f6
leaq -0x558(%rbp), %rdi
callq 0x11880
jmp 0x19604
leaq -0x558(%rbp), %rdi
callq 0x4240
leaq -0x559(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1964c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x558(%rbp), %rdi
callq 0x4240
leaq -0x559(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a3d
callq 0x17b60
testb $0x1, %al
jne 0x1966d
jmp 0x19672
jmp 0x19a31
leaq 0x15de7(%rip), %rax     # 0x2f460
movq (%rax), %rdi
movl -0x4ec(%rbp), %esi
callq 0xe4d0
movq %rax, -0x568(%rbp)
leaq 0x15dc3(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x179d0
movl %eax, %ecx
movq -0x568(%rbp), %rax
movl %ecx, 0x64(%rax)
movq -0x568(%rbp), %rdi
addq $0x68, %rdi
leaq 0x1669d(%rip), %rsi     # 0x2fd58
callq 0x10af0
movq -0x58(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %esi
callq 0x20d00
movq -0x58(%rbp), %rdi
movl -0x4ec(%rbp), %esi
movq -0x10(%rbp), %rdx
movl -0x1c(%rbp), %ecx
movl -0x20(%rbp), %r8d
movl -0x14(%rbp), %eax
movl %eax, -0x56c(%rbp)
movl -0x18(%rbp), %eax
movl %eax, -0x570(%rbp)
movl -0x56c(%rbp), %r9d
movl -0x570(%rbp), %eax
movl %eax, (%rsp)
callq 0x20d40
movq -0x568(%rbp), %rax
movl 0x64(%rax), %esi
leaq 0x15d4b(%rip), %rdi     # 0x2f468
callq 0x10530
movq %rax, -0x578(%rbp)
cmpq $0x0, -0x578(%rbp)
je 0x1978c
movq -0x578(%rbp), %rax
testb $0x1, 0x5(%rax)
je 0x1977b
leaq 0x15d11(%rip), %rax     # 0x2f458
movq (%rax), %rdi
movq -0x568(%rbp), %rax
movl 0x64(%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
movl %eax, %esi
shll $0x3, %esi
movq -0x578(%rbp), %rax
movl (%rax), %eax
movl $0x8, %ecx
cltd
idivl %ecx
addl %edx, %esi
callq 0x17820
jmp 0x1978a
leaq 0x15cd6(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x17840
jmp 0x1979b
leaq 0x15cc5(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x17840
jmp 0x19838
leaq -0x599(%rbp), %rdi
movq %rdi, -0x7b8(%rbp)
callq 0x4600
movq -0x7b8(%rbp), %rdx
leaq 0x8f1e(%rip), %rsi      # 0x226df
leaq -0x598(%rbp), %rdi
callq 0x44c0
jmp 0x197cf
leaq -0x598(%rbp), %rdi
movl $0x2, %esi
callq 0x12060
jmp 0x197e2
leaq -0x598(%rbp), %rdi
callq 0x4240
leaq -0x599(%rbp), %rdi
callq 0x43d0
callq 0x17b60
jmp 0x19838
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x19827
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x598(%rbp), %rdi
callq 0x4240
leaq -0x599(%rbp), %rdi
callq 0x43d0
jmp 0x19a3d
jmp 0x19a31
leaq 0x15c1c(%rip), %rax     # 0x2f460
movq (%rax), %rax
movq %rax, -0x7c0(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x5c0(%rbp), %rdi
callq 0x4180
jmp 0x19860
leaq -0x5e1(%rbp), %rdi
movq %rdi, -0x7c8(%rbp)
callq 0x4600
movq -0x7c8(%rbp), %rdx
leaq 0x89cf(%rip), %rsi      # 0x22250
leaq -0x5e0(%rbp), %rdi
callq 0x44c0
jmp 0x1988f
movq -0x7c0(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x20(%rax), %ecx
leaq -0x5c0(%rbp), %rsi
leaq -0x5e0(%rbp), %rdx
callq 0xe600
movl %eax, -0x7cc(%rbp)
jmp 0x198b8
movl -0x7cc(%rbp), %eax
movl %eax, -0x5a0(%rbp)
leaq -0x5e0(%rbp), %rdi
callq 0x4240
leaq -0x5e1(%rbp), %rdi
callq 0x43d0
leaq -0x5c0(%rbp), %rdi
callq 0x4240
jmp 0x199ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x19939
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x19921
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x5e0(%rbp), %rdi
callq 0x4240
leaq -0x5e1(%rbp), %rdi
callq 0x43d0
leaq -0x5c0(%rbp), %rdi
callq 0x4240
movl -0x4c(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x19a3d
movq -0x48(%rbp), %rdi
callq 0x4160
movl (%rax), %eax
movl %eax, -0x5e8(%rbp)
leaq -0x609(%rbp), %rdi
movq %rdi, -0x7d8(%rbp)
callq 0x4600
movq -0x7d8(%rbp), %rdx
leaq 0x8ca8(%rip), %rsi      # 0x22623
leaq -0x608(%rbp), %rdi
callq 0x44c0
jmp 0x19989
leaq -0x608(%rbp), %rdi
callq 0x11880
jmp 0x19997
leaq -0x608(%rbp), %rdi
callq 0x4240
leaq -0x609(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x199dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x608(%rbp), %rdi
callq 0x4240
leaq -0x609(%rbp), %rdi
callq 0x43d0
callq 0x4590
jmp 0x19a3d
callq 0x17b60
testb $0x1, %al
jne 0x199fa
jmp 0x199fc
jmp 0x19a31
leaq 0x15a55(%rip), %rax     # 0x2f458
movq (%rax), %rdi
callq 0x17840
leaq 0x15a96(%rip), %rax     # 0x2f4a8
movq (%rax), %rdi
movl -0x5a0(%rbp), %esi
callq 0x78a0
jmp 0x19a31
callq 0x17b60
testb $0x1, %al
jne 0x19a2d
jmp 0x19a2f
jmp 0x19a31
jmp 0x19a31
jmp 0x19a38
callq 0x17b60
jmp 0x17c81
movq -0x48(%rbp), %rdi
callq 0x45f0
nopw %cs:(%rax,%rax)