// File: /workspace/github_cpp_makefile_star2_O3/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
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x4d8, %rsp            # imm = 0x4D8
movl $0x0, 0xe40a(%rip)      # 0x1b348
leaq 0xe473(%rip), %rbx      # 0x1b3b8
leaq 0xed14(%rip), %r13      # 0x1bc60
leaq 0xe4ad(%rip), %r15      # 0x1b400
leaq 0xe3ee(%rip), %r14      # 0x1b348
movq %r14, %rdi
callq 0x9feb
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, -0x4c(%rbp)
movl %eax, -0x34(%rbp)
leaq 0xe3ec(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcd76
movq %rax, %r12
movq %r14, %rdi
callq 0xa049
testq %r12, %r12
je 0xdd28
leaq -0x4f8(%rbp), %r14
movq %r14, %rdi
leaq 0x865b(%rip), %rsi      # 0x155fc
movq %r12, %rdx
callq 0x8c2e
movq %r14, %rdi
movl $0x2, %esi
callq 0x9f0f
movq -0x4f8(%rbp), %rdi
leaq -0x4e8(%rbp), %rax
cmpq %rax, %rdi
je 0xcfce
callq 0x3230
movl 0x20(%r12), %eax
cmpq $0xa, %rax
ja 0xdd28
leaq 0x85d4(%rip), %rcx      # 0x155b8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
movq %r12, -0x30(%rbp)
jmpq *%rax
movq (%rbx), %rcx
movq 0x8(%rbx), %rax
cmpq %rcx, %rax
je 0xd575
xorl %r14d, %r14d
xorl %r12d, %r12d
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
cmpq %rdx, 0x3878(%rsi)
je 0xd05e
xorl %r13d, %r13d
movq (%rdx,%r13,8), %rdi
callq 0x13de2
movq (%rbx), %rcx
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
testb %al, %al
jne 0xd03d
movq (%rdx,%r13,8), %r12
incq %r13
movq 0x3878(%rsi), %rax
subq %rdx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
ja 0xd01e
movq 0x8(%rbx), %rax
leaq 0xec02(%rip), %r13      # 0x1bc60
incq %r14
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0xd007
testq %r12, %r12
je 0xd575
leaq -0x4c8(%rbp), %r14
movq %r14, -0x4d8(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x4d8(%rbp), %r13
movq %r13, %rdi
callq 0x7180
movq %r13, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x44(%rbp), %rdx
callq 0xcd98
movq -0x4d8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd0c6
callq 0x3230
movq -0x30(%rbp), %rax
cmpl $0x4, 0x20(%rax)
leaq -0x4a8(%rbp), %r14
jne 0xdd32
movl 0x88(%rax), %eax
movl %eax, -0x48(%rbp)
jmp 0xdd74
leaq 0xe2e0(%rip), %rax      # 0x1b3d0
movq (%rax), %rcx
movq 0x8(%rax), %rax
cmpq %rcx, %rax
je 0xcf53
xorl %r14d, %r14d
xorl %r12d, %r12d
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
cmpq %rdx, 0x3878(%rsi)
je 0xd16b
xorl %r13d, %r13d
movq (%rdx,%r13,8), %rdi
callq 0x13de2
leaq 0xe2a3(%rip), %rcx      # 0x1b3d0
movq (%rcx), %rcx
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
testb %al, %al
jne 0xd143
movq (%rdx,%r13,8), %r12
incq %r13
movq 0x3878(%rsi), %rax
subq %rdx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
ja 0xd11d
leaq 0xe270(%rip), %rax      # 0x1b3d0
movq 0x8(%rax), %rax
leaq 0xeaf5(%rip), %r13      # 0x1bc60
incq %r14
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0xd106
testq %r12, %r12
je 0xcf53
leaq -0x448(%rbp), %r14
movq %r14, -0x458(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x458(%rbp), %r13
movq %r13, %rdi
callq 0x7180
movq %r13, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x44(%rbp), %rdx
callq 0xcd98
movq -0x458(%rbp), %rdi
cmpq %r14, %rdi
je 0xd1d3
callq 0x3230
leaq -0x428(%rbp), %r14
movq %r14, -0x438(%rbp)
movq -0x30(%rbp), %rax
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq -0x438(%rbp), %r13
movq %r13, %rdi
callq 0x7180
movq %r13, %rdi
leaq -0x4c(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0xcd98
movq -0x438(%rbp), %rdi
cmpq %r14, %rdi
je 0xd220
callq 0x3230
leaq 0xe141(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0x108(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x30(%rbp), %r13
movq (%r13), %rsi
movq 0x8(%r13), %rdx
addq %rsi, %rdx
leaq -0x118(%rbp), %rdi
callq 0x7180
movq %r14, -0x40(%rbp)
leaq -0x1e8(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq 0x28(%r13), %rsi
movq 0x30(%r13), %rdx
addq %rsi, %rdx
leaq -0x1f8(%rbp), %r14
movq %r14, %rdi
callq 0x7180
movl 0x20(%r13), %ecx
movq -0x40(%rbp), %rdi
leaq -0x118(%rbp), %rsi
movq %r14, %rdx
callq 0x803a
movl %eax, %r14d
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
cmpq %rax, %rdi
leaq 0xe9af(%rip), %r13      # 0x1bc60
je 0xd2b8
callq 0x3230
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
jmp 0xde1a
movq (%rbx), %rcx
movq 0x8(%rbx), %rax
cmpq %rcx, %rax
je 0xd5b9
xorl %r14d, %r14d
xorl %r12d, %r12d
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
cmpq %rdx, 0x3878(%rsi)
je 0xd338
xorl %r13d, %r13d
movq (%rdx,%r13,8), %rdi
callq 0x13de2
movq (%rbx), %rcx
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
testb %al, %al
jne 0xd317
movq (%rdx,%r13,8), %r12
incq %r13
movq 0x3878(%rsi), %rax
subq %rdx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
ja 0xd2f8
movq 0x8(%rbx), %rax
leaq 0xe928(%rip), %r13      # 0x1bc60
incq %r14
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0xd2e1
testq %r12, %r12
je 0xd5b9
leaq -0x248(%rbp), %r14
movq %r14, -0x258(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x258(%rbp), %rdi
callq 0x7180
leaq -0x258(%rbp), %rdi
leaq -0x34(%rbp), %rsi
leaq -0x44(%rbp), %rdx
callq 0xcd98
movq -0x258(%rbp), %rdi
cmpq %r14, %rdi
je 0xd3a1
callq 0x3230
leaq -0x228(%rbp), %r14
movq %r14, -0x238(%rbp)
movq -0x30(%rbp), %rax
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq -0x238(%rbp), %rdi
callq 0x7180
leaq -0x238(%rbp), %rdi
leaq -0x4c(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0xcd98
movq -0x238(%rbp), %rdi
cmpq %r14, %rdi
je 0xd3ef
callq 0x3230
leaq 0xdf72(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0x88(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x98(%rbp), %rdi
callq 0x7180
movq %r14, -0x40(%rbp)
leaq -0x168(%rbp), %rax
movq %rax, -0x178(%rbp)
leaq -0x178(%rbp), %r14
movq %r14, %rdi
leaq 0x7e05(%rip), %rsi      # 0x15249
leaq 0x7e04(%rip), %rdx      # 0x1524f
callq 0x721e
movq -0x30(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x40(%rbp), %rdi
leaq -0x98(%rbp), %rsi
movq %r14, %rdx
callq 0x803a
movl %eax, %r14d
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0xd485
callq 0x3230
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0xd49d
callq 0x3230
callq 0xce57
testb %al, %al
jne 0xcf53
leaq 0xdeb7(%rip), %rax      # 0x1b368
movq (%rax), %rdi
movl %r14d, -0x40(%rbp)
movl %r14d, %esi
callq 0x7f98
movq %rax, %r14
leaq 0xde96(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcd6e
movl %eax, 0x64(%r14)
movq %r14, -0x58(%rbp)
leaq 0x68(%r14), %rdi
cmpq %r13, %rdi
je 0xd4eb
movq %r13, %rsi
callq 0x927a
movq -0x30(%rbp), %r14
movl 0x20(%r14), %esi
movq %r12, %rdi
callq 0x139e0
movl -0x34(%rbp), %ecx
movl -0x4c(%rbp), %r8d
movl -0x44(%rbp), %r9d
movl -0x48(%rbp), %eax
movl %eax, (%rsp)
movq %r12, %rdi
movl -0x40(%rbp), %esi
movq %r14, %rdx
callq 0x139f4
movq -0x58(%rbp), %r14
movl 0x64(%r14), %esi
leaq 0xde47(%rip), %rdi      # 0x1b370
callq 0x8f92
testq %rax, %rax
je 0xde90
leaq 0xde22(%rip), %rcx      # 0x1b360
movq (%rcx), %rdi
cmpb $0x1, 0x5(%rax)
jne 0xde9a
movl 0x64(%r14), %ecx
leal 0x7(%rcx), %edx
testl %ecx, %ecx
cmovnsl %ecx, %edx
andl $-0x8, %edx
movl (%rax), %esi
leal 0x7(%rsi), %eax
testl %esi, %esi
cmovnsl %esi, %eax
andl $-0x8, %eax
subl %eax, %esi
addl %edx, %esi
callq 0xcc4c
jmp 0xcf53
leaq -0x468(%rbp), %r14
movq %r14, -0x478(%rbp)
leaq -0x478(%rbp), %r12
movq %r12, %rdi
leaq 0x8083(%rip), %rsi      # 0x15617
leaq 0x80a9(%rip), %rdx      # 0x15644
callq 0x721e
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f0f
movq -0x478(%rbp), %rdi
jmp 0xdd1e
leaq -0x2a8(%rbp), %r14
movq %r14, -0x2b8(%rbp)
leaq -0x2b8(%rbp), %r12
movq %r12, %rdi
leaq 0x80ef(%rip), %rsi      # 0x156c7
leaq 0x8115(%rip), %rdx      # 0x156f4
callq 0x721e
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f0f
movq -0x2b8(%rbp), %rdi
jmp 0xdd1e
movq (%r15), %rcx
movq 0x8(%r15), %rax
cmpq %rcx, %rax
je 0xdc5a
xorl %r14d, %r14d
xorl %r12d, %r12d
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
cmpq %rdx, 0x3878(%rsi)
je 0xd66a
xorl %r13d, %r13d
movq (%rdx,%r13,8), %rdi
callq 0x13de2
movq (%r15), %rcx
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
testb %al, %al
jne 0xd649
movq (%rdx,%r13,8), %r12
incq %r13
movq 0x3878(%rsi), %rax
subq %rdx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
ja 0xd62a
movq 0x8(%r15), %rax
leaq 0xe5f6(%rip), %r13      # 0x1bc60
incq %r14
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0xd613
testq %r12, %r12
je 0xdc5a
leaq -0x268(%rbp), %r14
movq %r14, -0x278(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x278(%rbp), %rdi
callq 0x7180
leaq -0x278(%rbp), %rdi
leaq -0x34(%rbp), %rsi
leaq -0x44(%rbp), %rdx
callq 0xcd98
movq -0x278(%rbp), %rdi
cmpq %r14, %rdi
je 0xd6d3
callq 0x3230
leaq 0xdc8e(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0xa8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0xb8(%rbp), %rdi
callq 0x7180
movq %r14, -0x40(%rbp)
leaq -0x188(%rbp), %rax
movq %rax, -0x198(%rbp)
leaq -0x198(%rbp), %r14
movq %r14, %rdi
leaq 0x7b21(%rip), %rsi      # 0x15249
leaq 0x7b20(%rip), %rdx      # 0x1524f
callq 0x721e
movq -0x30(%rbp), %rax
movl 0x20(%rax), %ecx
movq -0x40(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
movq %r14, %rdx
callq 0x803a
movl %eax, %r14d
movq -0x198(%rbp), %rdi
leaq -0x188(%rbp), %rax
cmpq %rax, %rdi
je 0xd769
callq 0x3230
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0xd781
callq 0x3230
callq 0xce57
testb %al, %al
jne 0xcf53
leaq 0xdbcb(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc54
movq %r12, %rdi
movl $0x7, %esi
callq 0x139e0
movl -0x34(%rbp), %ecx
movl -0x4c(%rbp), %r8d
movl -0x44(%rbp), %r9d
movl -0x48(%rbp), %eax
movl %eax, (%rsp)
movq %r12, %rdi
movl %r14d, %esi
movq -0x30(%rbp), %rdx
callq 0x139f4
jmp 0xcf53
leaq 0xdc12(%rip), %rax      # 0x1b3e8
movq (%rax), %rcx
movq 0x8(%rax), %rax
cmpq %rcx, %rax
je 0xdc9e
xorl %r14d, %r14d
xorl %r12d, %r12d
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
cmpq %rdx, 0x3878(%rsi)
je 0xd851
xorl %r13d, %r13d
movq (%rdx,%r13,8), %rdi
callq 0x13de2
leaq 0xdbd5(%rip), %rcx      # 0x1b3e8
movq (%rcx), %rcx
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
testb %al, %al
jne 0xd829
movq (%rdx,%r13,8), %r12
incq %r13
movq 0x3878(%rsi), %rax
subq %rdx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
ja 0xd803
leaq 0xdba2(%rip), %rax      # 0x1b3e8
movq 0x8(%rax), %rax
leaq 0xe40f(%rip), %r13      # 0x1bc60
incq %r14
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0xd7ec
testq %r12, %r12
je 0xdc9e
leaq -0x3e8(%rbp), %r14
movq %r14, -0x3f8(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x3f8(%rbp), %r13
movq %r13, %rdi
callq 0x7180
movq %r13, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x44(%rbp), %rdx
callq 0xcd98
movq -0x3f8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd8b9
callq 0x3230
leaq -0x3c8(%rbp), %r14
movq %r14, -0x3d8(%rbp)
movq -0x30(%rbp), %rax
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq -0x3d8(%rbp), %r13
movq %r13, %rdi
callq 0x7180
movq %r13, %rdi
leaq -0x4c(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0xcd98
movq -0x3d8(%rbp), %rdi
cmpq %r14, %rdi
je 0xd906
callq 0x3230
leaq 0xda5b(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0xe8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x30(%rbp), %r13
movq (%r13), %rsi
movq 0x8(%r13), %rdx
addq %rsi, %rdx
leaq -0xf8(%rbp), %rdi
callq 0x7180
movq %r14, -0x40(%rbp)
leaq -0x1c8(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq 0x28(%r13), %rsi
movq 0x30(%r13), %rdx
addq %rsi, %rdx
leaq -0x1d8(%rbp), %r14
movq %r14, %rdi
callq 0x7180
movl 0x20(%r13), %ecx
movq -0x40(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
movq %r14, %rdx
callq 0x803a
movl %eax, %r14d
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
leaq 0xe2c9(%rip), %r13      # 0x1bc60
je 0xd99e
callq 0x3230
movq -0xf8(%rbp), %rdi
leaq -0xe8(%rbp), %rax
jmp 0xde1a
movq (%r15), %rcx
movq 0x8(%r15), %rax
cmpq %rcx, %rax
je 0xdcdf
xorl %r14d, %r14d
xorl %r12d, %r12d
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
cmpq %rdx, 0x3878(%rsi)
je 0xda1e
xorl %r13d, %r13d
movq (%rdx,%r13,8), %rdi
callq 0x13de2
movq (%r15), %rcx
movq (%rcx,%r14,8), %rsi
movq 0x3870(%rsi), %rdx
testb %al, %al
jne 0xd9fd
movq (%rdx,%r13,8), %r12
incq %r13
movq 0x3878(%rsi), %rax
subq %rdx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
ja 0xd9de
movq 0x8(%r15), %rax
leaq 0xe242(%rip), %r13      # 0x1bc60
incq %r14
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0xd9c7
testq %r12, %r12
je 0xdcdf
leaq -0x368(%rbp), %r14
movq %r14, -0x378(%rbp)
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rsi
movq 0x50(%rax), %rdx
addq %rsi, %rdx
leaq -0x378(%rbp), %r13
movq %r13, %rdi
callq 0x7180
movq %r13, %rdi
leaq -0x34(%rbp), %rsi
leaq -0x44(%rbp), %rdx
callq 0xcd98
movq -0x378(%rbp), %rdi
cmpq %r14, %rdi
je 0xda86
callq 0x3230
leaq 0xd8db(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0xc8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x30(%rbp), %r13
movq (%r13), %rsi
movq 0x8(%r13), %rdx
addq %rsi, %rdx
leaq -0xd8(%rbp), %rdi
callq 0x7180
movq %r14, -0x40(%rbp)
leaq -0x1a8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movq 0x28(%r13), %rsi
movq 0x30(%r13), %rdx
addq %rsi, %rdx
leaq -0x1b8(%rbp), %r14
movq %r14, %rdi
callq 0x7180
movl 0x20(%r13), %ecx
movq -0x40(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
movq %r14, %rdx
callq 0x803a
movl %eax, %r14d
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
leaq 0xe149(%rip), %r13      # 0x1bc60
je 0xdb1e
callq 0x3230
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0xdb36
callq 0x3230
callq 0xce57
testb %al, %al
jne 0xcf53
movl %r14d, -0x40(%rbp)
movq -0x30(%rbp), %r14
addq $0x28, %r14
leaq 0xd80a(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc54
movq %r13, %rdi
movq %r14, %rsi
callq 0xe4fa
movl -0x40(%rbp), %esi
movl %esi, (%rax)
movl -0x34(%rbp), %ecx
movl -0x44(%rbp), %r9d
movl -0x48(%rbp), %eax
movl %eax, (%rsp)
movq %r12, %rdi
movq -0x30(%rbp), %rdx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
callq 0x139f4
jmp 0xcf53
leaq 0xd7cf(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0x68(%rbp), %rax
movq %rax, -0x78(%rbp)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
leaq -0x78(%rbp), %rdi
callq 0x7180
leaq -0x148(%rbp), %rax
movq %rax, -0x158(%rbp)
leaq -0x158(%rbp), %r12
movq %r12, %rdi
leaq 0x7671(%rip), %rsi      # 0x15249
leaq 0x7670(%rip), %rdx      # 0x1524f
callq 0x721e
movq -0x30(%rbp), %rax
movl 0x20(%rax), %ecx
movq %r14, %rdi
leaq -0x78(%rbp), %rsi
movq %r12, %rdx
callq 0x803a
movl %eax, %r14d
movq -0x158(%rbp), %rdi
leaq -0x148(%rbp), %rax
cmpq %rax, %rdi
je 0xdc15
callq 0x3230
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0xdc27
callq 0x3230
callq 0xce57
testb %al, %al
jne 0xcf53
leaq 0xd725(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc54
leaq 0xd766(%rip), %rax      # 0x1b3b0
movq (%rax), %rdi
movl %r14d, %esi
callq 0x69ae
jmp 0xcf53
leaq -0x2e8(%rbp), %r14
movq %r14, -0x2f8(%rbp)
leaq -0x2f8(%rbp), %r12
movq %r12, %rdi
leaq 0x7a24(%rip), %rsi      # 0x1569d
leaq 0x7a46(%rip), %rdx      # 0x156c6
callq 0x721e
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f0f
movq -0x2f8(%rbp), %rdi
jmp 0xdd1e
leaq -0x388(%rbp), %r14
movq %r14, -0x398(%rbp)
leaq -0x398(%rbp), %r12
movq %r12, %rdi
leaq 0x7988(%rip), %rsi      # 0x15645
leaq 0x79ae(%rip), %rdx      # 0x15672
callq 0x721e
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f0f
movq -0x398(%rbp), %rdi
jmp 0xdd1e
leaq -0x328(%rbp), %r14
movq %r14, -0x338(%rbp)
leaq -0x338(%rbp), %r12
movq %r12, %rdi
leaq 0x7975(%rip), %rsi      # 0x15673
leaq 0x7997(%rip), %rdx      # 0x1569c
callq 0x721e
movq %r12, %rdi
movl $0x2, %esi
callq 0x9f0f
movq -0x338(%rbp), %rdi
cmpq %r14, %rdi
je 0xdd28
callq 0x3230
callq 0xce57
jmp 0xcf53
movq %r14, -0x4b8(%rbp)
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq -0x4b8(%rbp), %r13
movq %r13, %rdi
callq 0x7180
movq %r13, %rdi
leaq -0x4c(%rbp), %rsi
leaq -0x48(%rbp), %rdx
callq 0xcd98
movq -0x4b8(%rbp), %rdi
cmpq %r14, %rdi
je 0xdd74
callq 0x3230
leaq 0xd5ed(%rip), %rax      # 0x1b368
movq (%rax), %r14
leaq -0x128(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x30(%rbp), %r13
movq (%r13), %rsi
movq 0x8(%r13), %rdx
addq %rsi, %rdx
leaq -0x138(%rbp), %rdi
callq 0x7180
movq %r14, -0x40(%rbp)
leaq -0x208(%rbp), %rax
movq %rax, -0x218(%rbp)
movq 0x28(%r13), %rsi
movq 0x30(%r13), %rdx
addq %rsi, %rdx
leaq -0x218(%rbp), %r14
movq %r14, %rdi
callq 0x7180
movl 0x20(%r13), %ecx
movq -0x40(%rbp), %rdi
leaq -0x138(%rbp), %rsi
movq %r14, %rdx
callq 0x803a
movl %eax, %r14d
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
cmpq %rax, %rdi
leaq 0xde5b(%rip), %r13      # 0x1bc60
je 0xde0c
callq 0x3230
movq -0x138(%rbp), %rdi
leaq -0x128(%rbp), %rax
cmpq %rax, %rdi
je 0xde24
callq 0x3230
callq 0xce57
testb %al, %al
jne 0xcf53
movl %r14d, -0x40(%rbp)
movq -0x30(%rbp), %r14
addq $0x28, %r14
leaq 0xd51c(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc54
movq %r13, %rdi
movq %r14, %rsi
callq 0xe4fa
movl -0x40(%rbp), %ecx
movl %ecx, (%rax)
movq -0x30(%rbp), %r14
movl 0x20(%r14), %esi
movq %r12, %rdi
callq 0x139e0
movl -0x34(%rbp), %ecx
movl -0x4c(%rbp), %r8d
movl -0x44(%rbp), %r9d
movl -0x48(%rbp), %eax
movl %eax, (%rsp)
movq %r12, %rdi
movl -0x40(%rbp), %esi
movq %r14, %rdx
callq 0x139f4
jmp 0xcf53
leaq 0xd4c9(%rip), %rax      # 0x1b360
movq (%rax), %rdi
callq 0xcc54
jmp 0xcf53
movq %rdx, %r14
movq %rax, %r12
movq -0x1d8(%rbp), %rdi
leaq -0x1c8(%rbp), %rax
cmpq %rax, %rdi
leaq 0xdd9e(%rip), %r13      # 0x1bc60
je 0xdeff
callq 0x3230
jmp 0xdeff
movq %rdx, %r14
movq %rax, %r12
movq -0x1b8(%rbp), %rdi
leaq -0x1a8(%rbp), %rax
cmpq %rax, %rdi
leaq 0xdd77(%rip), %r13      # 0x1bc60
je 0xdf4d
callq 0x3230
jmp 0xdf4d
movq %rdx, %r14
movq %rax, %r12
leaq 0xdd61(%rip), %r13      # 0x1bc60
movq -0xf8(%rbp), %rdi
leaq -0xe8(%rbp), %rax
cmpq %rax, %rdi
je 0xdf7b
callq 0x3230
jmp 0xdf7b
movq %rdx, %r14
movq %rax, %r12
movq -0x198(%rbp), %rdi
leaq -0x188(%rbp), %rax
cmpq %rax, %rdi
je 0xdfd2
callq 0x3230
jmp 0xdfd2
movq %rdx, %r14
movq %rax, %r12
leaq 0xdd13(%rip), %r13      # 0x1bc60
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0xdff9
callq 0x3230
jmp 0xdff9
movq %rdx, %r14
movq %rax, %r12
leaq 0xdce5(%rip), %r13      # 0x1bc60
cmpl $0x1, %r14d
jne 0xe487
movq %r12, %rdi
callq 0x3120
leaq -0x3a8(%rbp), %r14
movq %r14, -0x3b8(%rbp)
leaq -0x3b8(%rbp), %r12
movq %r12, %rdi
leaq 0x765f(%rip), %rsi      # 0x1560b
leaq 0x7663(%rip), %rdx      # 0x15616
callq 0x721e
movq %r12, %rdi
callq 0x97ab
movq -0x3b8(%rbp), %rdi
jmp 0xe31c
movq %rdx, %r14
movq %rax, %r12
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0xe050
callq 0x3230
jmp 0xe050
movq %rdx, %r14
movq %rax, %r12
leaq 0xdc67(%rip), %r13      # 0x1bc60
cmpl $0x1, %r14d
jne 0xe487
movq %r12, %rdi
callq 0x3120
leaq -0x348(%rbp), %r14
movq %r14, -0x358(%rbp)
leaq -0x358(%rbp), %r12
movq %r12, %rdi
leaq 0x75e1(%rip), %rsi      # 0x1560b
leaq 0x75e5(%rip), %rdx      # 0x15616
callq 0x721e
movq %r12, %rdi
callq 0x97ab
movq -0x358(%rbp), %rdi
jmp 0xe31c
movq %rdx, %r14
movq %rax, %r12
cmpl $0x1, %r14d
jne 0xe487
movq %r12, %rdi
callq 0x3120
leaq -0x308(%rbp), %r14
movq %r14, -0x318(%rbp)
leaq -0x318(%rbp), %r12
movq %r12, %rdi
leaq 0x758a(%rip), %rsi      # 0x1560b
leaq 0x758e(%rip), %rdx      # 0x15616
callq 0x721e
movq %r12, %rdi
callq 0x97ab
movq -0x318(%rbp), %rdi
jmp 0xe31c
movq %rdx, %r14
movq %rax, %r12
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
je 0xe0ee
callq 0x3230
jmp 0xe0ee
movq %rdx, %r14
movq %rax, %r12
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
cmpq %rax, %rdi
leaq 0xdb81(%rip), %r13      # 0x1bc60
je 0xe115
callq 0x3230
jmp 0xe115
movq %rdx, %r14
movq %rax, %r12
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
je 0xe135
callq 0x3230
jmp 0xe135
movq %rdx, %r14
movq %rax, %r12
leaq 0xdb4b(%rip), %r13      # 0x1bc60
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
cmpq %rax, %rdi
je 0xe193
callq 0x3230
jmp 0xe193
movq %rdx, %r14
movq %rax, %r12
cmpl $0x1, %r14d
jne 0xe487
movq %r12, %rdi
callq 0x3120
leaq -0x2c8(%rbp), %r14
movq %r14, -0x2d8(%rbp)
leaq -0x2d8(%rbp), %r12
movq %r12, %rdi
leaq 0x74a5(%rip), %rsi      # 0x1560b
leaq 0x74a9(%rip), %rdx      # 0x15616
callq 0x721e
movq %r12, %rdi
callq 0x97ab
movq -0x2d8(%rbp), %rdi
jmp 0xe31c
movq %rdx, %r14
movq %rax, %r12
leaq 0xdacd(%rip), %r13      # 0x1bc60
cmpl $0x1, %r14d
jne 0xe487
movq %r12, %rdi
callq 0x3120
leaq -0x408(%rbp), %r14
movq %r14, -0x418(%rbp)
leaq -0x418(%rbp), %r12
movq %r12, %rdi
leaq 0x7447(%rip), %rsi      # 0x1560b
leaq 0x744b(%rip), %rdx      # 0x15616
callq 0x721e
movq %r12, %rdi
callq 0x97ab
movq -0x418(%rbp), %rdi
jmp 0xe31c
movq %rdx, %r14
movq %rax, %r12
movq -0x158(%rbp), %rdi
leaq -0x148(%rbp), %rax
cmpq %rax, %rdi
je 0xe20a
callq 0x3230
jmp 0xe20a
movq %rdx, %r14
movq %rax, %r12
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0xe224
callq 0x3230
jmp 0xe224
movq %rdx, %r14
movq %rax, %r12
cmpl $0x1, %r14d
jne 0xe487
movq %r12, %rdi
callq 0x3120
leaq -0x288(%rbp), %r14
movq %r14, -0x298(%rbp)
leaq -0x298(%rbp), %r12
movq %r12, %rdi
leaq 0x73b6(%rip), %rsi      # 0x1560b
leaq 0x73ba(%rip), %rdx      # 0x15616
callq 0x721e
movq %r12, %rdi
callq 0x97ab
movq -0x298(%rbp), %rdi
jmp 0xe31c
movq %rdx, %r14
movq %rax, %r12
movq -0x218(%rbp), %rdi
leaq -0x208(%rbp), %rax
cmpq %rax, %rdi
leaq 0xd9cd(%rip), %r13      # 0x1bc60
je 0xe2a9
callq 0x3230
jmp 0xe2a9
movq %rdx, %r14
movq %rax, %r12
leaq 0xd9b7(%rip), %r13      # 0x1bc60
movq -0x138(%rbp), %rdi
leaq -0x128(%rbp), %rax
cmpq %rax, %rdi
je 0xe2d0
callq 0x3230
jmp 0xe2d0
movq %rdx, %r14
movq %rax, %r12
leaq 0xd990(%rip), %r13      # 0x1bc60
cmpl $0x1, %r14d
jne 0xe487
movq %r12, %rdi
callq 0x3120
leaq -0x488(%rbp), %r14
movq %r14, -0x498(%rbp)
leaq -0x498(%rbp), %r12
movq %r12, %rdi
leaq 0x730a(%rip), %rsi      # 0x1560b
leaq 0x730e(%rip), %rdx      # 0x15616
callq 0x721e
movq %r12, %rdi
callq 0x97ab
movq -0x498(%rbp), %rdi
cmpq %r14, %rdi
je 0xe326
callq 0x3230
callq 0x33f0
jmp 0xcf53
movq %rax, %r12
movq -0x318(%rbp), %rdi
jmp 0xe38e
jmp 0xe39a
movq %rax, %r12
movq -0x358(%rbp), %rdi
jmp 0xe38e
jmp 0xe39a
movq %rax, %r12
movq -0x3b8(%rbp), %rdi
jmp 0xe38e
jmp 0xe39a
movq %rax, %r12
movq -0x418(%rbp), %rdi
jmp 0xe38e
jmp 0xe39a
movq %rax, %r12
movq -0x2d8(%rbp), %rdi
jmp 0xe38e
jmp 0xe39a
movq %rax, %r12
movq -0x298(%rbp), %rdi
jmp 0xe38e
jmp 0xe39a
movq %rax, %r12
movq -0x498(%rbp), %rdi
cmpq %r14, %rdi
je 0xe39d
callq 0x3230
jmp 0xe39d
movq %rax, %r12
callq 0x33f0
jmp 0xe487
movq %rax, %r12
movq -0x3d8(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x378(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x3f8(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x278(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x4b8(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x338(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x398(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x2f8(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x238(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x438(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x258(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x458(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x4d8(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x2b8(%rbp), %rdi
jmp 0xe465
movq %rax, %r12
movq -0x478(%rbp), %rdi
cmpq %r14, %rdi
jne 0xe482
jmp 0xe487
movq %rax, %r12
movq -0x4f8(%rbp), %rdi
leaq -0x4e8(%rbp), %rax
cmpq %rax, %rdi
je 0xe487
callq 0x3230
movq %r12, %rdi
callq 0x3440