// File: /workspace/github_cpp_makefile_star2_O1/davidcairuz[P]network-internet-relay-chat/server.cpp
// Function: server_thread(void*)
void* server_thread(void* arg) {    
    int failed = 0;
    bool quit = false;
    int new_client = *((int*)arg);
    int pos = active->find(new_client);
    string nome = active->clients[pos].name;
    spread_message("A new client has joined us!", new_client);

    while (!quit) {
        string message = socket_server->Read(new_client);
        cout << message << endl;
        socket_server->Check();

        if (message.empty()) {
            failed++;
            
            if (failed >= Socket::max_retries) message = "/quit";
            else continue;
        } else {
            failed = 0;
        }

        if (message == "/quit") {
            spread_message("Someone left the server", new_client);
            active->remove(new_client);
            quit = true;

        } else if (message == "/ping") {
            send_message("pong!", new_client);

        } else if(message.size() >= 10 && message.substr(0, 9) == "/nickname") {
            string new_nickname = message.substr(10, message.size());
            int pos = active->find(new_client);
            active->clients[pos].name = new_nickname;
        
        } else if (message.size() >= 6 && message.substr(0, 5) == "/join") {
            string channel_name = message.substr(6, message.size());
            
            int pos = active->find(new_client);
            bool is_admin = (channels[channel_name] == 0);
            
            // Checa se cliente tem permissão para entrar no canal
            // isto é, se ele é admin ou foi convidado. O cliente
            // só pode estar em um canal por vez
            if(channel_name[0] == '&' and !is_admin){
                auto permissions = channels_permissions[channel_name];
                auto can_join = find(permissions.begin(), permissions.end(), new_client) != permissions.end();
                if (!can_join) {
                    send_message("You're not welcome here >:(", new_client);
                    continue;
                }
            }

            active->clients[pos].channel_name = channel_name;
            active->clients[pos].is_admin = is_admin;    
            
            send_message("Joined channel " + channel_name, new_client);

            if(is_admin) {
                channels[channel_name] = 1;
                channels_permissions[channel_name] = {};
                channels_permissions[channel_name].push_back(new_client);
                send_message("You own this ****!", new_client);
            }
            
            channels[channel_name]++;

        } else if (message.size() >= 6 && message.substr(0, 5) == "/kick") {
            // O /kick só pode ser utilizado pelo admin e expulsa um client
            // momentaneamente do canal. O client pode voltar ao canal sem problemas.

            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("You can't be that bad!", new_client);
                continue;
            }

            string to_be_kicked = message.substr(6, message.size());
            int pos = active->find(active->clients[pos_client].channel_name, to_be_kicked);

            if (active->clients[pos].channel_name != active->clients[pos_client].channel_name) {
                send_message("This user is not here", new_client);
                continue;
            }

            send_message("Admin hates you", active->clients[pos].conn);
            active->clients[pos].channel_name = "$";
            active->clients[pos].is_admin = false;
            channels[active->clients[pos_client].channel_name]--;
            
        } else if (message.size() >= 6 && message.substr(0, 5) == "/mute") {
            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("The Force is not with you!!", new_client);
                continue;
            } 
            
            string to_be_kicked = message.substr(6, message.size());
            int pos = active->find(active->clients[pos_client].channel_name, to_be_kicked);

            if (pos == -1 or active->clients[pos].channel_name != active->clients[pos_client].channel_name) {
                send_message("This user is not here", new_client);
                continue;
            }

            send_message("Admin can't stand you anymore", active->clients[pos].conn);
            active->clients[pos].is_muted = true;
            
        } else if (message.size() >= 8 && message.substr(0, 7) == "/unmute") {
            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("The Force is not with you!!", new_client);
                continue;
            }

            string to_be_kicked = message.substr(8, message.size());
            int pos = active->find(active->clients[pos_client].channel_name, to_be_kicked);

            if (pos == -1 or active->clients[pos].channel_name != active->clients[pos_client].channel_name) {
                send_message("This user is not here", new_client);
                continue;
            }

            send_message("You have your voice again, use it wisely", active->clients[pos].conn);
            active->clients[pos].is_muted = false;
               
        } else if (message.size() >= 7 && message.substr(0, 6) == "/whois") {
            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("The Force is not with you!!", new_client);
                continue;
            } 
            
            string to_be_found = message.substr(7, message.size());
            int pos = active->find(active->clients[pos_client].channel_name, to_be_found);
            
            if (pos == -1 or active->clients[pos].channel_name != active->clients[pos_client].channel_name) {
                send_message("This user is not here", new_client);
                continue;
            }

            send_message(active->clients[pos].name + " is " + active->clients[pos].ip, new_client);
            
        } else if (message.size() >= 8 && message.substr(0, 7) == "/invite") {
            int pos_client = active->find(new_client);
            
            if (active->clients[pos_client].is_admin == false) {
                send_message("The Force is not with you!!", new_client);
                continue;
            } 
            
            string to_be_found = message.substr(8, message.size());
            int pos = active->find(to_be_found);
            
            if (pos == -1) {
                send_message("This user doesn't exist", new_client);
                continue;
            }

            send_message("Admin wants to have the pleasure of your company at " + active->clients[pos_client].channel_name + ". To join this channel, type /join " + active->clients[pos_client].channel_name, active->clients[pos].conn);
            send_message("Invite sent!", new_client);
            
            // adiciona permissão para o cliente convidado entrar no canal
            // assim, ele pode entrar a qualquer momento após o convite
            channels_permissions[active->clients[pos_client].channel_name].push_back(active->clients[pos].conn);
        
        } else {
            spread_message(message, new_client);
        }

        message = "";
    }

    cout << nome << " has left us :(" << endl;
    pthread_exit(NULL);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x5a8, %rsp            # imm = 0x5A8
movl (%rdi), %ecx
movl %ecx, -0x2c(%rbp)
movq 0x766d(%rip), %rax      # 0xb2a8
movq (%rax), %rdx
movq 0x8(%rax), %rsi
movq $-0x1, %rdi
subq %rdx, %rsi
je 0x3c7c
sarq $0x3, %rsi
movabsq $-0x1111111111111111, %rdi # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdi, %rsi
xorl %edi, %edi
imulq $0x78, %rdi, %r8
cmpl %ecx, 0x4(%rdx,%r8)
je 0x3c79
incl %edi
cmpq %rdi, %rsi
ja 0x3c62
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
movslq %edi, %rdi
movq (%rax), %rax
imulq $0x78, %rdi, %rcx
leaq -0x458(%rbp), %rdx
movq %rdx, -0x10(%rdx)
movq 0x28(%rax,%rcx), %rsi
movq 0x30(%rax,%rcx), %rdx
addq %rsi, %rdx
leaq -0x468(%rbp), %rdi
callq 0x2810
leaq -0x438(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x44b1(%rip), %rsi      # 0x816a
leaq 0x44c5(%rip), %rdx      # 0x8185
leaq -0x448(%rbp), %rdi
callq 0x28aa
movl -0x2c(%rbp), %esi
leaq -0x448(%rbp), %rdi
callq 0x3289
movq -0x448(%rbp), %rdi
cmpq %r14, %rdi
je 0x3cf6
movq -0x438(%rbp), %rsi
incq %rsi
callq 0x2250
xorl %r15d, %r15d
leaq -0x40(%rbp), %r14
leaq -0x50(%rbp), %rbx
leaq -0xc0(%rbp), %r12
movq $0x0, -0xc8(%rbp)
movq 0x74fe(%rip), %rsi      # 0xb218
movl -0x2c(%rbp), %edx
movq %rbx, %rdi
callq 0x2e6a
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
movq 0x72a4(%rip), %rdi      # 0xafd8
callq 0x22b0
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2220
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2170
movq 0x74ae(%rip), %rdi      # 0xb218
callq 0x3056
movq -0x48(%rbp), %rdx
movl $0x0, -0xa0(%rbp)
testq %rdx, %rdx
jne 0x3dad
leal 0x1(%r15), %eax
movl %eax, -0xa0(%rbp)
cmpl $0x4, %r15d
jl 0x40e3
movl $0x5, %r8d
movq %rbx, %rdi
xorl %esi, %esi
leaq 0x43de(%rip), %rcx      # 0x8186
callq 0x2330
movq %rbx, %rdi
leaq 0x43cf(%rip), %rsi      # 0x8186
callq 0x20a0
testl %eax, %eax
leaq -0x388(%rbp), %r15
je 0x3e20
movq %rbx, %rdi
leaq 0x43d3(%rip), %rsi      # 0x81a4
callq 0x20a0
testl %eax, %eax
leaq -0x5c8(%rbp), %r13
je 0x3e95
movq -0x48(%rbp), %rbx
cmpq $0xa, %rbx
jb 0x3ee7
movl $0x9, %ecx
movq %r13, %rdi
leaq -0x50(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r13, %rdi
leaq 0x43a0(%rip), %rsi      # 0x81b0
callq 0x20a0
testl %eax, %eax
sete %r14b
jmp 0x3eea
leaq -0x398(%rbp), %rax
movq %rax, -0x3a8(%rbp)
leaq -0x3a8(%rbp), %r15
movq %r15, %rdi
leaq 0x434d(%rip), %rsi      # 0x818c
leaq 0x435d(%rip), %rdx      # 0x81a3
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %r15, %rdi
callq 0x3289
movq -0x3a8(%rbp), %rdi
leaq -0x398(%rbp), %rax
cmpq %rax, %rdi
je 0x3e78
movq -0x398(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x7429(%rip), %rdi      # 0xb2a8
movb $0x1, %al
movq %rax, -0xc8(%rbp)
movl -0x2c(%rbp), %esi
callq 0x5fc2
jmp 0x40cb
leaq -0x378(%rbp), %rax
movq %rax, -0x388(%rbp)
movq %r15, %rdi
leaq 0x42fd(%rip), %rsi      # 0x81aa
leaq 0x42fb(%rip), %rdx      # 0x81af
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %r15, %rdi
callq 0x3168
movq -0x388(%rbp), %rdi
leaq -0x378(%rbp), %rax
cmpq %rax, %rdi
je 0x40cb
movq -0x378(%rbp), %rsi
jmp 0x40c3
xorl %r14d, %r14d
cmpq $0xa, %rbx
leaq -0x50(%rbp), %rbx
jb 0x3f16
movq -0x5c8(%rbp), %rdi
leaq -0x5b8(%rbp), %rax
cmpq %rax, %rdi
je 0x3f16
movq -0x5b8(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r14b, %r14b
je 0x3f80
movq -0x48(%rbp), %rcx
movl $0xa, %edx
leaq -0x70(%rbp), %rdi
movq %rbx, %rsi
leaq -0x40(%rbp), %r14
callq 0x2270
movq 0x736d(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
je 0x4096
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x3f78
incl %edx
cmpq %rdx, %rcx
ja 0x3f62
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x409d
movq -0x48(%rbp), %rbx
cmpq $0x6, %rbx
jb 0x3fbb
movl $0x5, %ecx
leaq -0x5a8(%rbp), %r14
movq %r14, %rdi
leaq -0x50(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r14, %rdi
leaq 0x420c(%rip), %rsi      # 0x81ba
callq 0x20a0
testl %eax, %eax
sete %r14b
jmp 0x3fbe
xorl %r14d, %r14d
cmpq $0x6, %rbx
leaq -0x50(%rbp), %rbx
jb 0x3fea
movq -0x5a8(%rbp), %rdi
leaq -0x598(%rbp), %rax
cmpq %rax, %rdi
je 0x3fea
movq -0x598(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r14b, %r14b
je 0x4054
movq -0x48(%rbp), %rcx
movl $0x6, %edx
leaq -0x70(%rbp), %rdi
movq %rbx, %rsi
leaq -0x40(%rbp), %r14
callq 0x2270
movq 0x7299(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
je 0x41d9
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x404c
incl %edx
cmpq %rdx, %rcx
ja 0x4036
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %r15
jmp 0x41e0
movq -0x48(%rbp), %rbx
cmpq $0x6, %rbx
jb 0x4113
movl $0x5, %ecx
leaq -0x588(%rbp), %r14
movq %r14, %rdi
leaq -0x50(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r14, %rdi
leaq 0x4179(%rip), %rsi      # 0x81ff
callq 0x20a0
testl %eax, %eax
sete %r14b
jmp 0x4116
movq $-0x1, %rcx
imulq $0x78, %rcx, %rcx
leaq (%rax,%rcx), %rdi
addq $0x28, %rdi
leaq -0x70(%rbp), %rsi
callq 0x2150
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x40cb
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x48(%rbp), %rdx
movq %rbx, %rdi
xorl %esi, %esi
leaq 0x4024(%rip), %rcx      # 0x80ff
xorl %r8d, %r8d
callq 0x2330
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x40f8
movq -0x40(%rbp), %rsi
incq %rsi
callq 0x2250
movl -0xa0(%rbp), %eax
movl %eax, %r15d
testb $0x1, -0xc8(%rbp)
je 0x3d13
jmp 0x561a
xorl %r14d, %r14d
cmpq $0x6, %rbx
jb 0x413e
movq -0x588(%rbp), %rdi
leaq -0x578(%rbp), %rax
cmpq %rax, %rdi
je 0x413e
movq -0x578(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r14b, %r14b
je 0x4197
movq 0x715e(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x40(%rbp), %r14
leaq -0x50(%rbp), %rbx
je 0x448b
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x418f
incl %edx
cmpq %rdx, %rcx
ja 0x4179
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x4492
movq -0x48(%rbp), %rbx
cmpq $0x6, %rbx
jb 0x43cd
movl $0x5, %ecx
leaq -0x568(%rbp), %r14
movq %r14, %rdi
leaq -0x50(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r14, %rdi
leaq 0x4079(%rip), %rsi      # 0x8242
callq 0x20a0
testl %eax, %eax
sete %r14b
jmp 0x43d0
movq $-0x1, %r15
leaq 0x7061(%rip), %rdi      # 0xb248
leaq -0x70(%rbp), %rsi
callq 0x609a
movl (%rax), %r13d
testl %r13d, %r13d
sete %r12b
movq -0x70(%rbp), %rax
cmpb $0x26, (%rax)
setne %al
orb %r12b, %al
testb $0x1, %al
jne 0x42ec
leaq 0x7062(%rip), %rdi      # 0xb278
leaq -0x70(%rbp), %rsi
callq 0x611a
leaq -0x90(%rbp), %rdi
movq %rax, %rsi
callq 0x619a
movb %r12b, -0x98(%rbp)
movl %r13d, %r12d
movq -0x90(%rbp), %rdi
movq -0x88(%rbp), %rsi
leaq -0x2c(%rbp), %rdx
callq 0x7559
movq %rax, %r13
movq -0x88(%rbp), %r14
xorl %ebx, %ebx
cmpq %r14, %rax
jne 0x42bd
leaq -0x358(%rbp), %rax
movq %rax, -0x368(%rbp)
leaq -0x368(%rbp), %rbx
movq %rbx, %rdi
leaq 0x3f41(%rip), %rsi      # 0x81c0
leaq 0x3f55(%rip), %rdx      # 0x81db
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
callq 0x3168
movq -0x368(%rbp), %rdi
movl $0x2, %ebx
leaq -0x358(%rbp), %rax
cmpq %rax, %rdi
je 0x42bd
movq -0x358(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x42d5
movq -0x80(%rbp), %rsi
subq %rdi, %rsi
callq 0x2250
cmpq %r14, %r13
leaq -0x40(%rbp), %r14
movl %r12d, %r13d
movb -0x98(%rbp), %r12b
je 0x4748
movq 0x6fb5(%rip), %rax      # 0xb2a8
movq (%rax), %rax
imulq $0x78, %r15, %rbx
leaq (%rax,%rbx), %rdi
addq $0x50, %rdi
leaq -0x70(%rbp), %rsi
callq 0x2150
movq 0x6f96(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movb %r12b, 0x70(%rax,%rbx)
leaq -0x3c8(%rbp), %rdi
leaq 0x3eb4(%rip), %rsi      # 0x81dc
leaq -0x70(%rbp), %rdx
callq 0x621a
movl -0x2c(%rbp), %esi
leaq -0x3c8(%rbp), %rdi
callq 0x3168
movq -0x3c8(%rbp), %rdi
leaq -0x3b8(%rbp), %rax
cmpq %rax, %rdi
je 0x4362
movq -0x3b8(%rbp), %rsi
incq %rsi
callq 0x2250
testl %r13d, %r13d
jne 0x4734
leaq 0x6ed6(%rip), %rdi      # 0xb248
leaq -0x70(%rbp), %rsi
callq 0x609a
movl $0x1, (%rax)
leaq 0x6ef0(%rip), %rdi      # 0xb278
leaq -0x70(%rbp), %rsi
callq 0x611a
movq %rax, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x75fc
leaq 0x6ed4(%rip), %rdi      # 0xb278
leaq -0x70(%rbp), %rsi
callq 0x611a
movq 0x8(%rax), %rsi
cmpq 0x10(%rax), %rsi
je 0x46d7
movl -0x2c(%rbp), %ecx
movl %ecx, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rax)
jmp 0x46e3
xorl %r14d, %r14d
cmpq $0x6, %rbx
jb 0x43f8
movq -0x568(%rbp), %rdi
leaq -0x558(%rbp), %rax
cmpq %rax, %rdi
je 0x43f8
movq -0x558(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r14b, %r14b
je 0x4449
movq 0x6ea4(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
je 0x4779
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x4441
incl %edx
cmpq %rdx, %rcx
ja 0x442b
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x4780
movq -0x48(%rbp), %rbx
cmpq $0x8, %rbx
jb 0x4615
movl $0x7, %ecx
leaq -0x548(%rbp), %r14
movq %r14, %rdi
leaq -0x50(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r14, %rdi
leaq 0x3e07(%rip), %rsi      # 0x8282
callq 0x20a0
testl %eax, %eax
sete %r14b
jmp 0x4618
movq $-0x1, %rcx
imulq $0x78, %rcx, %r15
cmpb $0x0, 0x70(%rax,%r15)
je 0x45bc
movq -0x48(%rbp), %rcx
movl $0x6, %edx
leaq -0x70(%rbp), %rdi
movq %rbx, %rsi
callq 0x2270
movq 0x6dea(%rip), %r13      # 0xb2a8
movq (%r13), %rax
leaq -0x1b8(%rbp), %rcx
movq %rcx, -0x1c8(%rbp)
movq 0x50(%rax,%r15), %rsi
movq 0x58(%rax,%r15), %rdx
addq %rsi, %rdx
leaq -0x1c8(%rbp), %rdi
callq 0x2810
leaq -0x4d8(%rbp), %rbx
movq %rbx, -0x4e8(%rbp)
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4e8(%rbp), %r12
movq %r12, %rdi
callq 0x2810
movq %r13, %rdi
leaq -0x1c8(%rbp), %rsi
movq %r12, %rdx
callq 0x62ac
movl %eax, %r13d
movq -0x4e8(%rbp), %rdi
cmpq %rbx, %rdi
je 0x4541
movq -0x4d8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x1c8(%rbp), %rdi
leaq -0x1b8(%rbp), %rax
cmpq %rax, %rdi
je 0x4563
movq -0x1b8(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x6d3e(%rip), %rax      # 0xb2a8
movslq %r13d, %rcx
movq (%rax), %rax
imulq $0x78, %rcx, %rbx
movq 0x58(%rax,%rbx), %rdx
movb $0x1, %r13b
cmpq 0x58(%rax,%r15), %rdx
leaq -0x1a8(%rbp), %r12
jne 0x4a46
testq %rdx, %rdx
je 0x4a43
leaq (%rax,%rbx), %rcx
addq $0x50, %rcx
addq %r15, %rax
addq $0x50, %rax
movq (%rax), %rsi
movq (%rcx), %rdi
callq 0x2260
testl %eax, %eax
setne %r13b
jmp 0x4a46
leaq -0x338(%rbp), %rax
movq %rax, -0x348(%rbp)
leaq -0x348(%rbp), %r15
movq %r15, %rdi
leaq 0x3c2a(%rip), %rsi      # 0x8205
leaq 0x3c39(%rip), %rdx      # 0x821b
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %r15, %rdi
callq 0x3168
movq -0x348(%rbp), %rdi
leaq -0x338(%rbp), %rax
cmpq %rax, %rdi
je 0x40e3
movq -0x338(%rbp), %rsi
jmp 0x5072
xorl %r14d, %r14d
cmpq $0x8, %rbx
jb 0x4640
movq -0x548(%rbp), %rdi
leaq -0x538(%rbp), %rax
cmpq %rax, %rdi
je 0x4640
movq -0x538(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r14b, %r14b
je 0x4695
movq 0x6c5c(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x40(%rbp), %r14
je 0x4b89
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x468d
incl %edx
cmpq %rdx, %rcx
ja 0x4677
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x4b90
movq -0x48(%rbp), %rbx
cmpq $0x7, %rbx
jb 0x4981
movl $0x6, %ecx
leaq -0x528(%rbp), %r14
movq %r14, %rdi
leaq -0x50(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r14, %rdi
leaq 0x3bec(%rip), %rsi      # 0x82b3
callq 0x20a0
testl %eax, %eax
sete %r14b
jmp 0x4984
movq %rax, %rdi
leaq -0x2c(%rbp), %rdx
callq 0x6d04
leaq -0x418(%rbp), %r15
movq %r15, -0x428(%rbp)
leaq -0x428(%rbp), %rbx
movq %rbx, %rdi
leaq 0x3aea(%rip), %rsi      # 0x81ec
leaq 0x3af5(%rip), %rdx      # 0x81fe
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
callq 0x3168
movq -0x428(%rbp), %rdi
cmpq %r15, %rdi
je 0x4734
movq -0x418(%rbp), %rsi
incq %rsi
callq 0x2250
leaq 0x6b0d(%rip), %rdi      # 0xb248
leaq -0x70(%rbp), %rsi
callq 0x609a
incl (%rax)
xorl %ebx, %ebx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x4761
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x2250
testl %ebx, %ebx
leaq -0x50(%rbp), %rbx
leaq -0xc0(%rbp), %r12
jne 0x40e3
jmp 0x40cb
movq $-0x1, %rcx
imulq $0x78, %rcx, %r14
cmpb $0x0, 0x70(%rax,%r14)
je 0x491c
movq -0x48(%rbp), %rcx
movl $0x6, %edx
leaq -0x70(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2270
movq 0x6afb(%rip), %r13      # 0xb2a8
movq (%r13), %rax
leaq -0x178(%rbp), %rcx
movq %rcx, -0x188(%rbp)
movq 0x50(%rax,%r14), %rsi
movq 0x58(%rax,%r14), %rdx
addq %rsi, %rdx
leaq -0x188(%rbp), %rdi
callq 0x2810
movq %r12, %rbx
leaq -0x4b8(%rbp), %r15
movq %r15, -0x4c8(%rbp)
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4c8(%rbp), %r12
movq %r12, %rdi
callq 0x2810
movq %r13, %rdi
leaq -0x188(%rbp), %rsi
movq %r12, %rdx
callq 0x62ac
movl %eax, %r13d
movq -0x4c8(%rbp), %rdi
cmpq %r15, %rdi
je 0x4833
movq -0x4b8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
movq %rbx, %r12
je 0x4858
movq -0x178(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $-0x1, %r13d
je 0x48a6
movq 0x6a43(%rip), %rax      # 0xb2a8
movslq %r13d, %rcx
movq (%rax), %rax
imulq $0x78, %rcx, %r15
movq 0x58(%rax,%r15), %rdx
cmpq 0x58(%rax,%r14), %rdx
jne 0x48a6
testq %rdx, %rdx
je 0x4e4f
leaq (%rax,%r15), %rcx
addq $0x50, %rcx
addq %r14, %rax
addq $0x50, %rax
movq (%rax), %rsi
movq (%rcx), %rdi
callq 0x2260
testl %eax, %eax
je 0x4e4f
leaq -0x2d8(%rbp), %rax
movq %rax, -0x2e8(%rbp)
leaq -0x2e8(%rbp), %rbx
movq %rbx, %rdi
leaq 0x3957(%rip), %rsi      # 0x821c
leaq 0x3965(%rip), %rdx      # 0x8231
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
leaq -0x40(%rbp), %r14
callq 0x3168
movq -0x2e8(%rbp), %rdi
leaq -0x2d8(%rbp), %rax
cmpq %rax, %rdi
je 0x4902
movq -0x2d8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
leaq -0x50(%rbp), %rbx
jne 0x506e
jmp 0x40e3
leaq -0x2f8(%rbp), %rax
movq %rax, -0x308(%rbp)
leaq -0x308(%rbp), %rbx
movq %rbx, %rdi
leaq 0x390d(%rip), %rsi      # 0x8248
leaq 0x3921(%rip), %rdx      # 0x8263
leaq -0x40(%rbp), %r14
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
callq 0x3168
movq -0x308(%rbp), %rdi
leaq -0x2f8(%rbp), %rax
cmpq %rax, %rdi
je 0x4978
movq -0x2f8(%rbp), %rsi
incq %rsi
callq 0x2250
leaq -0x50(%rbp), %rbx
jmp 0x40e3
xorl %r14d, %r14d
cmpq $0x7, %rbx
jb 0x49ac
movq -0x528(%rbp), %rdi
leaq -0x518(%rbp), %rax
cmpq %rax, %rdi
je 0x49ac
movq -0x518(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r14b, %r14b
je 0x4a01
movq 0x68f0(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x40(%rbp), %r14
je 0x4ed0
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x49f9
incl %edx
cmpq %rdx, %rcx
ja 0x49e3
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x4ed7
movq -0x48(%rbp), %rbx
cmpq $0x8, %rbx
jb 0x4d70
movl $0x7, %ecx
leaq -0x508(%rbp), %r14
movq %r14, %rdi
leaq -0x50(%rbp), %rsi
xorl %edx, %edx
callq 0x2270
movq %r14, %rdi
leaq 0x388c(%rip), %rsi      # 0x82bf
callq 0x20a0
testl %eax, %eax
sete %r14b
jmp 0x4d73
xorl %r13d, %r13d
testb %r13b, %r13b
je 0x4aac
leaq -0x318(%rbp), %rax
movq %rax, -0x328(%rbp)
leaq -0x328(%rbp), %rbx
movq %rbx, %rdi
leaq 0x37b2(%rip), %rsi      # 0x821c
leaq 0x37c0(%rip), %rdx      # 0x8231
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
callq 0x3168
movq -0x328(%rbp), %rdi
leaq -0x318(%rbp), %rax
cmpq %rax, %rdi
je 0x4b57
movq -0x318(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x4b57
leaq -0x198(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq %r12, %rdi
leaq 0x376e(%rip), %rsi      # 0x8232
leaq 0x3776(%rip), %rdx      # 0x8241
callq 0x28aa
movq 0x67d1(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movl 0x4(%rax,%rbx), %esi
movq %r12, %rdi
callq 0x3168
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0x4b08
movq -0x198(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x6799(%rip), %rax      # 0xb2a8
movq (%rax), %rax
leaq (%rax,%rbx), %rdi
addq $0x50, %rdi
movq 0x8(%rdi), %rdx
movl $0x1, %r8d
xorl %esi, %esi
leaq 0x35ff(%rip), %rcx      # 0x812c
callq 0x2330
movq 0x676f(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movb $0x0, 0x70(%rax,%rbx)
leaq (%rax,%r15), %rsi
addq $0x50, %rsi
leaq 0x66f8(%rip), %rdi      # 0xb248
callq 0x609a
decl (%rax)
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
leaq -0x50(%rbp), %rbx
leaq -0xc0(%rbp), %r12
je 0x4b7b
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r13b, %r13b
je 0x40cb
jmp 0x40e3
movq $-0x1, %rcx
imulq $0x78, %rcx, %rbx
cmpb $0x0, 0x70(%rax,%rbx)
je 0x4d13
movq -0x48(%rbp), %rcx
movl $0x8, %edx
leaq -0x70(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2270
movq 0x66ec(%rip), %r13      # 0xb2a8
movq (%r13), %rax
leaq -0x158(%rbp), %rcx
movq %rcx, -0x168(%rbp)
movq 0x50(%rax,%rbx), %rsi
movq 0x58(%rax,%rbx), %rdx
addq %rsi, %rdx
leaq -0x168(%rbp), %rdi
callq 0x2810
leaq -0x498(%rbp), %r15
movq %r15, -0x4a8(%rbp)
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
addq %rsi, %rdx
leaq -0x4a8(%rbp), %r12
movq %r12, %rdi
callq 0x2810
movq %r13, %rdi
leaq -0x168(%rbp), %rsi
movq %r12, %rdx
callq 0x62ac
movl %eax, %r13d
movq -0x4a8(%rbp), %rdi
cmpq %r15, %rdi
je 0x4c3f
movq -0x498(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
cmpq %rax, %rdi
leaq -0xc0(%rbp), %r12
je 0x4c68
movq -0x158(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $-0x1, %r13d
je 0x4cb6
movq 0x6633(%rip), %rax      # 0xb2a8
movslq %r13d, %rcx
movq (%rax), %rax
imulq $0x78, %rcx, %r15
movq 0x58(%rax,%r15), %rdx
cmpq 0x58(%rax,%rbx), %rdx
jne 0x4cb6
testq %rdx, %rdx
je 0x50d9
leaq (%rax,%r15), %rcx
addq $0x50, %rcx
addq %rbx, %rax
addq $0x50, %rax
movq (%rax), %rsi
movq (%rcx), %rdi
callq 0x2260
testl %eax, %eax
je 0x50d9
leaq -0x278(%rbp), %rax
movq %rax, -0x288(%rbp)
leaq -0x288(%rbp), %rbx
movq %rbx, %rdi
leaq 0x3547(%rip), %rsi      # 0x821c
leaq 0x3555(%rip), %rdx      # 0x8231
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
callq 0x3168
leaq -0x50(%rbp), %rbx
movq -0x288(%rbp), %rdi
leaq -0x278(%rbp), %rax
cmpq %rax, %rdi
je 0x505d
movq -0x278(%rbp), %rsi
jmp 0x5055
leaq -0x298(%rbp), %rax
movq %rax, -0x2a8(%rbp)
leaq -0x2a8(%rbp), %rbx
movq %rbx, %rdi
leaq 0x3516(%rip), %rsi      # 0x8248
leaq 0x352a(%rip), %rdx      # 0x8263
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
callq 0x3168
leaq -0x50(%rbp), %rbx
movq -0x2a8(%rbp), %rdi
leaq -0x298(%rbp), %rax
cmpq %rax, %rdi
je 0x40e3
movq -0x298(%rbp), %rsi
jmp 0x5072
xorl %r14d, %r14d
cmpq $0x8, %rbx
leaq -0x50(%rbp), %rbx
jb 0x4d9f
movq -0x508(%rbp), %rdi
leaq -0x4f8(%rbp), %rax
cmpq %rax, %rdi
je 0x4d9f
movq -0x4f8(%rbp), %rsi
incq %rsi
callq 0x2250
testb %r14b, %r14b
je 0x4df4
movq 0x64fd(%rip), %rcx      # 0xb2a8
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
leaq -0x40(%rbp), %r14
je 0x5156
sarq $0x3, %rcx
movabsq $-0x1111111111111111, %rdx # imm = 0xEEEEEEEEEEEEEEEF
imulq %rdx, %rcx
movl -0x2c(%rbp), %esi
xorl %edx, %edx
imulq $0x78, %rdx, %rdi
cmpl %esi, 0x4(%rax,%rdi)
je 0x4dec
incl %edx
cmpq %rdx, %rcx
ja 0x4dd6
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
movslq %edx, %rcx
jmp 0x515d
leaq -0x118(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
addq %rsi, %rdx
leaq -0x128(%rbp), %rdi
leaq -0x40(%rbp), %r14
callq 0x2810
movl -0x2c(%rbp), %esi
leaq -0x128(%rbp), %rdi
callq 0x3289
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x40cb
movq -0x118(%rbp), %rsi
jmp 0x40c3
leaq -0x2b8(%rbp), %rax
movq %rax, -0x2c8(%rbp)
leaq -0x2c8(%rbp), %rbx
movq %rbx, %rdi
leaq 0x33f6(%rip), %rsi      # 0x8264
leaq 0x340c(%rip), %rdx      # 0x8281
callq 0x28aa
movq 0x6427(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movl 0x4(%rax,%r15), %esi
movq %rbx, %rdi
callq 0x3168
leaq -0x50(%rbp), %rbx
leaq -0x40(%rbp), %r14
movq -0x2c8(%rbp), %rdi
leaq -0x2b8(%rbp), %rax
cmpq %rax, %rdi
je 0x4ebb
movq -0x2b8(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x63e6(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movb $0x1, 0x71(%rax,%r15)
jmp 0x40b2
movq $-0x1, %rcx
imulq $0x78, %rcx, %rbx
cmpb $0x0, 0x70(%rax,%rbx)
je 0x507f
movq -0x48(%rbp), %rcx
movl $0x7, %edx
leaq -0x70(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2270
movq 0x63a5(%rip), %r13      # 0xb2a8
movq (%r13), %rax
leaq -0x138(%rbp), %rcx
movq %rcx, -0x148(%rbp)
movq 0x50(%rax,%rbx), %rsi
movq 0x58(%rax,%rbx), %rdx
addq %rsi, %rdx
leaq -0x148(%rbp), %rdi
callq 0x2810
leaq -0x478(%rbp), %r15
movq %r15, -0x488(%rbp)
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
addq %rsi, %rdx
leaq -0x488(%rbp), %r12
movq %r12, %rdi
callq 0x2810
movq %r13, %rdi
leaq -0x148(%rbp), %rsi
movq %r12, %rdx
callq 0x62ac
movl %eax, %r13d
movq -0x488(%rbp), %rdi
cmpq %r15, %rdi
je 0x4f86
movq -0x478(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
leaq -0xc0(%rbp), %r12
je 0x4faf
movq -0x138(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $-0x1, %r13d
je 0x4ffd
movq 0x62ec(%rip), %r15      # 0xb2a8
movslq %r13d, %rcx
movq (%r15), %rax
imulq $0x78, %rcx, %r14
movq 0x58(%rax,%r14), %rdx
cmpq 0x58(%rax,%rbx), %rdx
jne 0x4ffd
testq %rdx, %rdx
je 0x52be
leaq (%rax,%r14), %rcx
addq $0x50, %rcx
addq %rbx, %rax
addq $0x50, %rax
movq (%rax), %rsi
movq (%rcx), %rdi
callq 0x2260
testl %eax, %eax
je 0x52be
leaq -0x218(%rbp), %rax
movq %rax, -0x228(%rbp)
leaq -0x228(%rbp), %rbx
movq %rbx, %rdi
leaq 0x3200(%rip), %rsi      # 0x821c
leaq 0x320e(%rip), %rdx      # 0x8231
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
leaq -0x40(%rbp), %r14
callq 0x3168
leaq -0x50(%rbp), %rbx
movq -0x228(%rbp), %rdi
leaq -0x218(%rbp), %rax
cmpq %rax, %rdi
je 0x505d
movq -0x218(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x40e3
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x40e3
leaq -0x238(%rbp), %rax
movq %rax, -0x248(%rbp)
leaq -0x248(%rbp), %rbx
movq %rbx, %rdi
leaq 0x31aa(%rip), %rsi      # 0x8248
leaq 0x31be(%rip), %rdx      # 0x8263
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
callq 0x3168
leaq -0x50(%rbp), %rbx
movq -0x248(%rbp), %rdi
leaq -0x238(%rbp), %rax
cmpq %rax, %rdi
je 0x40e3
movq -0x238(%rbp), %rsi
jmp 0x5072
leaq -0x258(%rbp), %rax
movq %rax, -0x268(%rbp)
leaq -0x268(%rbp), %rbx
movq %rbx, %rdi
leaq 0x3192(%rip), %rsi      # 0x828a
leaq 0x31b3(%rip), %rdx      # 0x82b2
callq 0x28aa
movq 0x619d(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movl 0x4(%rax,%r15), %esi
movq %rbx, %rdi
callq 0x3168
leaq -0x50(%rbp), %rbx
movq -0x268(%rbp), %rdi
leaq -0x258(%rbp), %rax
cmpq %rax, %rdi
je 0x5141
movq -0x258(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x6160(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movb $0x0, 0x71(%rax,%r15)
jmp 0x40b2
movq $-0x1, %rcx
imulq $0x78, %rcx, %rcx
movq %rcx, -0x98(%rbp)
cmpb $0x0, 0x70(%rax,%rcx)
je 0x526c
movq -0x48(%rbp), %rcx
movl $0x8, %edx
leaq -0x70(%rbp), %rdi
movq %rbx, %rsi
callq 0x2270
movq 0x6119(%rip), %r13      # 0xb2a8
leaq -0x3f8(%rbp), %rax
movq %rax, -0x408(%rbp)
movq -0x70(%rbp), %rsi
movq -0x68(%rbp), %rdx
addq %rsi, %rdx
leaq -0x408(%rbp), %rdi
callq 0x2810
movq %r13, %rdi
leaq -0x408(%rbp), %rsi
callq 0x635e
movl %eax, %ebx
movq -0x408(%rbp), %rdi
leaq -0x3f8(%rbp), %rax
cmpq %rax, %rdi
je 0x51e7
movq -0x3f8(%rbp), %rsi
incq %rsi
callq 0x2250
movl %ebx, -0x9c(%rbp)
cmpl $-0x1, %ebx
leaq -0x80(%rbp), %r15
leaq -0x90(%rbp), %rbx
leaq -0x3e8(%rbp), %r13
je 0x5352
movq 0x6099(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movq -0x98(%rbp), %rcx
leaq (%rax,%rcx), %rdx
addq $0x50, %rdx
movq %r13, %rdi
leaq 0x30b4(%rip), %rsi      # 0x82df
callq 0x621a
movq %r13, %rdi
leaq 0x30da(%rip), %rsi      # 0x8314
callq 0x23c0
movq %r15, -0x90(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x53b3
movq %rdx, -0x90(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x80(%rbp)
jmp 0x53ba
leaq -0xb0(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq %r12, %rdi
leaq 0x2fc4(%rip), %rsi      # 0x8248
leaq 0x2fd8(%rip), %rdx      # 0x8263
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %r12, %rdi
callq 0x3168
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x40e3
movq -0xb0(%rbp), %rsi
jmp 0x5072
movq (%r15), %rax
leaq -0x80(%rbp), %r15
movq %r15, -0x90(%rbp)
movq 0x28(%rax,%r14), %rsi
movq 0x30(%rax,%r14), %rdx
addq %rsi, %rdx
leaq -0x90(%rbp), %rbx
movq %rbx, %rdi
callq 0x2810
movq %rbx, %rdi
leaq 0x2fc8(%rip), %rsi      # 0x82ba
callq 0x23c0
movq 0x5faa(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movq 0x8(%rax,%r14), %rsi
movq 0x10(%rax,%r14), %rdx
movq %rbx, %rdi
callq 0x20b0
leaq -0xf8(%rbp), %rsi
movq %rsi, -0x108(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq -0x40(%rbp), %r14
leaq -0x50(%rbp), %rbx
je 0x55a8
movq %rdx, -0x108(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xf8(%rbp)
jmp 0x55ae
leaq -0x1f8(%rbp), %rax
movq %rax, -0x208(%rbp)
leaq -0x208(%rbp), %rbx
movq %rbx, %rdi
leaq 0x2f56(%rip), %rsi      # 0x82c7
leaq 0x2f66(%rip), %rdx      # 0x82de
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %rbx, %rdi
callq 0x3168
movq -0x208(%rbp), %rdi
leaq -0x1f8(%rbp), %rax
cmpq %rax, %rdi
je 0x5579
movq -0x1f8(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5579
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rdx, -0x88(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x5ecd(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movq -0x98(%rbp), %rcx
movq 0x50(%rax,%rcx), %rsi
movq 0x58(%rax,%rcx), %rdx
movq %rbx, %rdi
callq 0x20b0
leaq -0xd8(%rbp), %rsi
movq %rsi, -0xe8(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movl -0x9c(%rbp), %edi
je 0x542d
movq %rdx, -0xe8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xd8(%rbp)
jmp 0x5433
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0xe0(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x5e54(%rip), %rax      # 0xb2a8
movslq %edi, %rcx
movq (%rax), %rax
imulq $0x78, %rcx, %rbx
movl 0x4(%rax,%rbx), %esi
leaq -0xe8(%rbp), %rdi
callq 0x3168
movq -0xe8(%rbp), %rdi
leaq -0xd8(%rbp), %rax
cmpq %rax, %rdi
je 0x5490
movq -0xd8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x90(%rbp), %rdi
cmpq %r15, %rdi
je 0x54a8
movq -0x80(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x3e8(%rbp), %rdi
leaq -0x3d8(%rbp), %rax
cmpq %rax, %rdi
je 0x54ca
movq -0x3d8(%rbp), %rsi
incq %rsi
callq 0x2250
leaq -0x1d8(%rbp), %rax
movq %rax, -0x1e8(%rbp)
leaq -0x1e8(%rbp), %r15
movq %r15, %rdi
leaq 0x2e4f(%rip), %rsi      # 0x8338
leaq 0x2e54(%rip), %rdx      # 0x8344
callq 0x28aa
movl -0x2c(%rbp), %esi
movq %r15, %rdi
callq 0x3168
movq -0x1e8(%rbp), %rdi
leaq -0x1d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5522
movq -0x1d8(%rbp), %rsi
incq %rsi
callq 0x2250
movq 0x5d7f(%rip), %rax      # 0xb2a8
movq (%rax), %rax
movq -0x98(%rbp), %rcx
leaq (%rax,%rcx), %rsi
addq $0x50, %rsi
leaq 0x5d36(%rip), %rdi      # 0xb278
callq 0x611a
movq 0x5d5a(%rip), %rcx      # 0xb2a8
movq (%rcx), %rcx
leaq (%rcx,%rbx), %rdx
addq $0x4, %rdx
movq 0x8(%rax), %rsi
cmpq 0x10(%rax), %rsi
je 0x5571
movl (%rdx), %ecx
movl %ecx, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rax)
jmp 0x5579
movq %rax, %rdi
callq 0x6d04
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x5592
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x2250
cmpl $-0x1, -0x9c(%rbp)
leaq -0x50(%rbp), %rbx
jne 0x40cb
jmp 0x40e3
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x100(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl -0x2c(%rbp), %esi
leaq -0x108(%rbp), %rdi
callq 0x3168
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x55f9
movq -0xf8(%rbp), %rsi
incq %rsi
callq 0x2250
movq -0x90(%rbp), %rdi
cmpq %r15, %rdi
je 0x40b2
movq -0x80(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x40b2
movq -0x468(%rbp), %rsi
movq -0x460(%rbp), %rdx
movq 0x59a9(%rip), %rdi      # 0xafd8
callq 0x22b0
movq %rax, %rbx
leaq 0x2d07(%rip), %rsi      # 0x8345
movl $0xf, %edx
movq %rax, %rdi
callq 0x22b0
movq %rbx, %rdi
callq 0x2130
xorl %edi, %edi
callq 0x2390
movq %rax, %rbx
movq -0x208(%rbp), %rdi
leaq -0x1f8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a27
movq -0x1f8(%rbp), %rsi
jmp 0x5a1a
jmp 0x5b85
movq %rax, %rbx
movq -0x108(%rbp), %rdi
leaq -0xf8(%rbp), %rax
cmpq %rax, %rdi
je 0x56af
movq -0xf8(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x56af
movq %rax, %rbx
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
jne 0x56d7
jmp 0x5a27
movq %rax, %rbx
movq -0x90(%rbp), %rdi
cmpq %r15, %rdi
je 0x5a27
movq -0x80(%rbp), %rsi
jmp 0x5a1a
jmp 0x5a24
movq %rax, %rbx
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x5b37
movq -0xb0(%rbp), %rsi
jmp 0x5852
jmp 0x5ba7
jmp 0x5b85
movq %rax, %rbx
movq -0xe8(%rbp), %rdi
leaq -0xd8(%rbp), %rax
cmpq %rax, %rdi
je 0x573f
movq -0xd8(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x573f
movq %rax, %rbx
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x5760
movq -0x80(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5760
movq %rax, %rbx
movq -0x3e8(%rbp), %rdi
leaq -0x3d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a27
movq -0x3d8(%rbp), %rsi
jmp 0x5a1a
movq %rax, %rbx
movq -0x1e8(%rbp), %rdi
leaq -0x1d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a27
movq -0x1d8(%rbp), %rsi
jmp 0x5a1a
jmp 0x5a24
movq %rax, %rbx
movq -0x268(%rbp), %rdi
leaq -0x258(%rbp), %rax
cmpq %rax, %rdi
je 0x5a27
movq -0x258(%rbp), %rsi
jmp 0x5a1a
jmp 0x5b85
jmp 0x5ba7
movq %rax, %rbx
movq -0x248(%rbp), %rdi
leaq -0x238(%rbp), %rax
cmpq %rax, %rdi
je 0x5b37
movq -0x238(%rbp), %rsi
jmp 0x5852
jmp 0x5ba7
movq %rax, %rbx
movq -0x2c8(%rbp), %rdi
leaq -0x2b8(%rbp), %rax
cmpq %rax, %rdi
je 0x5a27
movq -0x2b8(%rbp), %rsi
jmp 0x5a1a
jmp 0x5a24
movq %rax, %rbx
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rax
cmpq %rax, %rdi
je 0x5b37
movq -0x118(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5b37
jmp 0x5b34
movq %rax, %rbx
movq -0x228(%rbp), %rdi
leaq -0x218(%rbp), %rax
cmpq %rax, %rdi
je 0x5a27
movq -0x218(%rbp), %rsi
jmp 0x5a1a
jmp 0x5a24
jmp 0x5b85
jmp 0x5ba7
jmp 0x5b85
movq %rax, %rbx
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x5b88
movq -0x138(%rbp), %rsi
jmp 0x5b26
movq %rax, %rbx
movq -0x2a8(%rbp), %rdi
leaq -0x298(%rbp), %rax
cmpq %rax, %rdi
je 0x5baa
movq -0x298(%rbp), %rsi
jmp 0x5b99
jmp 0x5ba7
jmp 0x5b34
movq %rax, %rbx
movq -0x288(%rbp), %rdi
leaq -0x278(%rbp), %rax
cmpq %rax, %rdi
je 0x5b88
movq -0x278(%rbp), %rsi
jmp 0x5b26
jmp 0x5b85
movq %rax, %rbx
movq -0x168(%rbp), %rdi
leaq -0x158(%rbp), %rax
cmpq %rax, %rdi
je 0x5b88
movq -0x158(%rbp), %rsi
jmp 0x5b26
jmp 0x5b85
jmp 0x5ba7
movq %rax, %rbx
movq -0x308(%rbp), %rdi
leaq -0x2f8(%rbp), %rax
cmpq %rax, %rdi
je 0x5baa
movq -0x2f8(%rbp), %rsi
jmp 0x5b99
jmp 0x5ba7
jmp 0x5b34
movq %rax, %rbx
movq -0x2e8(%rbp), %rdi
leaq -0x2d8(%rbp), %rax
cmpq %rax, %rdi
je 0x5b88
movq -0x2d8(%rbp), %rsi
jmp 0x5b26
jmp 0x5a24
movq %rax, %rbx
movq -0x328(%rbp), %rdi
leaq -0x318(%rbp), %rax
cmpq %rax, %rdi
je 0x5b88
movq -0x318(%rbp), %rsi
jmp 0x5b26
movq %rax, %rbx
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0x5b88
movq -0x198(%rbp), %rsi
jmp 0x5b26
jmp 0x5b85
jmp 0x5b85
movq %rax, %rbx
movq -0x188(%rbp), %rdi
leaq -0x178(%rbp), %rax
cmpq %rax, %rdi
je 0x5a27
movq -0x178(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5a27
movq %rax, %rbx
leaq -0x40(%rbp), %r14
jmp 0x5b88
jmp 0x5b34
movq %rax, %rbx
movq -0x368(%rbp), %rdi
leaq -0x358(%rbp), %rax
cmpq %rax, %rdi
leaq -0x40(%rbp), %r14
je 0x5aec
movq -0x358(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5aec
movq %rax, %rbx
leaq -0x40(%rbp), %r14
jmp 0x5aec
movq %rax, %rbx
movq -0x348(%rbp), %rdi
leaq -0x338(%rbp), %rax
cmpq %rax, %rdi
je 0x5baa
movq -0x338(%rbp), %rsi
jmp 0x5b99
jmp 0x5ba7
jmp 0x5b34
movq %rax, %rbx
movq -0x428(%rbp), %rdi
cmpq %r15, %rdi
je 0x5b88
movq -0x418(%rbp), %rsi
jmp 0x5b26
jmp 0x5b85
movq %rax, %rbx
movq -0x1c8(%rbp), %rdi
leaq -0x1b8(%rbp), %rax
cmpq %rax, %rdi
je 0x5b88
movq -0x1b8(%rbp), %rsi
jmp 0x5b26
jmp 0x5ba7
movq %rax, %rbx
movq -0x90(%rbp), %rdi
testq %rdi, %rdi
je 0x5b88
movq -0x80(%rbp), %rsi
subq %rdi, %rsi
jmp 0x5b29
jmp 0x5b34
jmp 0x5b85
movq %rax, %rbx
movq -0x3c8(%rbp), %rdi
leaq -0x3b8(%rbp), %rax
cmpq %rax, %rdi
je 0x5b88
movq -0x3b8(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5b88
jmp 0x5b85
jmp 0x5ba7
movq %rax, %rbx
leaq -0x40(%rbp), %r14
jmp 0x5baa
jmp 0x5b85
jmp 0x5ba7
jmp 0x5ba7
movq %rax, %rbx
movq -0x388(%rbp), %rdi
leaq -0x378(%rbp), %rax
cmpq %rax, %rdi
je 0x5baa
movq -0x378(%rbp), %rsi
jmp 0x5b99
jmp 0x5ba7
movq %rax, %rbx
movq -0x3a8(%rbp), %rdi
leaq -0x398(%rbp), %rax
cmpq %rax, %rdi
je 0x5baa
movq -0x398(%rbp), %rsi
jmp 0x5b99
jmp 0x5ba7
movq %rax, %rbx
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x5baa
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5baa
jmp 0x5bd9
jmp 0x5bd9
movq %rax, %rbx
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x5bdc
movq -0x40(%rbp), %rsi
jmp 0x5bcf
movq %rax, %rbx
movq -0x448(%rbp), %rdi
cmpq %r14, %rdi
je 0x5bdc
movq -0x438(%rbp), %rsi
incq %rsi
callq 0x2250
jmp 0x5bdc
movq %rax, %rbx
movq -0x468(%rbp), %rdi
leaq -0x458(%rbp), %rax
cmpq %rax, %rdi
je 0x5bfe
movq -0x458(%rbp), %rsi
incq %rsi
callq 0x2250
movq %rbx, %rdi
callq 0x2380