// File: /workspace/github_c_makefile_star2_O0/MartinNovotny25[P]VUT-FIT-IFJ2020/semantics.c
// Function: if_control
void if_control(TDLList *L, tBSTNodePtrLocal *node, functionData params){

    if(!(strcmp(L->Act->tdata.lex, "("))){
        TDLLSucc(L);
    }
    // Ak su oba identifikatory
    if(L->Act->tdata.type == t_IDENTIFIER && L->Act->rptr->rptr->tdata.type == t_IDENTIFIER){
        int typ1;
        int typ2;
        // je prvy v strome?
        if(MainStackSearch(mainstack, L->Act->tdata.lex, &typ1)){
            if(!(strcmp(L->Act->tdata.lex, "_"))){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }

        }else{
             error_call(ERR_SEM_UNDEF, L);
             BSTDisposeLocal(node);
        }
        
        
        if(MainStackSearch(mainstack, L->Act->rptr->rptr->tdata.lex, &typ2)){
            if(!(strcmp(L->Act->rptr->rptr->tdata.lex, "_"))){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }

        }else{
            error_call(ERR_SEM_UNDEF, L);
            BSTDisposeLocal(node);
        }

        // Maju rovnake typy?
        if(!(typ1 == typ2)){
            error_call(ERR_SEM_EXCOMPAT, L);
            BSTDisposeLocal(node);
        }

    // ak je lavy operator identifikator
    }else if(L->Act->tdata.type == t_IDENTIFIER && L->Act->rptr->rptr->tdata.type != t_IDENTIFIER){
        int typ1;
        int typ2;
        // Je prvy id v strome?
        if(MainStackSearch(mainstack, L->Act->tdata.lex, &typ1)){
            if(!(strcmp(L->Act->tdata.lex, "_"))){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }

        }else{
            error_call(ERR_SEM_UNDEF, L);
            BSTDisposeLocal(node);
        }
    
        // Ma id rovnaky typ ako cislo?
        if(L->Act->rptr->rptr->tdata.type == t_INT_NON_ZERO || L->Act->rptr->rptr->tdata.type == t_INT_ZERO){
            typ2 = t_INT_ID;
            if(!(typ1 == typ2)){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
        // ma id rovnaky typ ako float?
        }else if(L->Act->rptr->rptr->tdata.type == t_FLOAT64 || L->Act->rptr->rptr->tdata.type == t_FLOAT){
            typ2 = t_FLOAT64;
            if(!(typ1 == typ2)){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
        // ma id rovnaky typ ako string?
        }else if(L->Act->rptr->rptr->tdata.type == t_STRING){
            typ2 = t_STRING_ID;
            if(!(typ1 == typ2)){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
        }
        
    // ak je pravy operator identifikator
    }else if(L->Act->tdata.type != t_IDENTIFIER && L->Act->rptr->rptr->tdata.type == t_IDENTIFIER){
        int typ1;
        int typ2;
        // Je v strome?
        if(MainStackSearch(mainstack, L->Act->rptr->rptr->tdata.lex, &typ2)){
            if(!(strcmp(L->Act->rptr->rptr->tdata.lex, "_"))){
                error_call(ERR_SEM_EXCOMPAT, L);
                
                BSTDisposeLocal(node);
            }
        }else{
            error_call(ERR_SEM_UNDEF, L);
            BSTDisposeLocal(node);
        }

        // Ma id rovnaky typ ako cislo?
        if(L->Act->tdata.type == t_INT_NON_ZERO || L->Act->tdata.type == t_INT_ZERO){
            typ1 = t_INT_ID;
            if(!(typ1 == typ2)){
                 error_call(ERR_SEM_EXCOMPAT, L);
                   BSTDisposeLocal(node);
            }

        // ma id rovnaky typ ako float?
        }else if(L->Act->tdata.type == t_FLOAT64 || L->Act->tdata.type == t_FLOAT){
            typ1 = t_FLOAT64;
            if(!(typ1 == typ2)){
                   error_call(ERR_SEM_EXCOMPAT, L);
                   BSTDisposeLocal(node);
            }

        // ma id rovnaky typ ako string?
        }else if(L->Act->tdata.type == t_STRING){
            typ1 = t_STRING_ID;
            if(!(typ1 == typ2)){
                   error_call(ERR_SEM_EXCOMPAT, L);
                   BSTDisposeLocal(node);
            }
        }

    // Ak ani jeden nie je identifikator
    }else{
        // Ak ide o integre maju rovnake typy?
        if(L->Act->tdata.type == t_INT_ZERO || L->Act->tdata.type == t_INT_NON_ZERO){
            int typson1 = t_INT_ID;
            if(L->Act->rptr->rptr->tdata.type == t_INT_NON_ZERO || L->Act->rptr->rptr->tdata.type == t_INT_ZERO){
                int typson2 = t_INT_ID;
                if(typson1 != typson2){
                    error_call(ERR_SEM_EXCOMPAT, L);
                   BSTDisposeLocal(node);
                }

            }else{
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
        // Ak ide o floaty maju rovnake typy?
        }else if(L->Act->tdata.type == t_FLOAT64 || L->Act->tdata.type == t_FLOAT){
            int typson1 = t_FLOAT64;
            if(L->Act->rptr->rptr->tdata.type == t_FLOAT64 || L->Act->rptr->rptr->tdata.type == t_FLOAT){
                int typson2 = t_FLOAT64;
                if(typson1 != typson2){
                    error_call(ERR_SEM_EXCOMPAT, L);
                    BSTDisposeLocal(node);
                }

            }else{
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
        // Ak ide o stringy maju rovnake typy?
        }if(L->Act->tdata.type == t_STRING){
            int typson1 = t_STRING_ID;
            if(L->Act->rptr->rptr->tdata.type == t_STRING){
                int typson2 = t_STRING_ID;
                if(typson1 != typson2){
                    error_call(ERR_SEM_EXCOMPAT, L);
                    BSTDisposeLocal(node);
                }

            }else{
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
        }
    }

    TDLLSucc(L);
    int real_op = 0;
   

        
    while(L->Act->tdata.type != t_BRACES_L){
        if(L->Act->tdata.type == T_SEMICOLON){
            break;
        }
        if(L->Act->tdata.type == t_GREATER){
            real_op++;
        }else if(L->Act->tdata.type == t_GREATEROREQUAL){
            real_op++;
        }else if(L->Act->tdata.type == t_LESS){
            real_op++;
        }else if(L->Act->tdata.type == t_LESSOREQUAL){
            real_op++;
        }else if(L->Act->tdata.type == t_EQUAL){
            real_op++;
        }else if(L->Act->tdata.type == t_NOT_EQUAL){
            real_op++;
        }else {
            if(L->Act->tdata.type == t_PLUS){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
             
            if(L->Act->tdata.type == t_MINUS){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
                
            if(L->Act->tdata.type == t_MULTIPLY){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
              
            if(L->Act->tdata.type == t_DIVIDE){
                error_call(ERR_SEM_EXCOMPAT, L);
                BSTDisposeLocal(node);
            }
               
        }

        TDLLSucc(L);
    }
     
    if(real_op != 1){
        error_call(ERR_SEM_EXCOMPAT, L);
        BSTDisposeLocal(node);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1fb0, %rsp           # imm = 0x1FB0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rdi
leaq 0x57cf(%rip), %rsi      # 0xd5d4
callq 0x1070
cmpl $0x0, %eax
jne 0x7e18
movq -0x8(%rbp), %rdi
callq 0x12e0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x13, 0x8(%rax)
jne 0x7f78
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x13, 0x8(%rax)
jne 0x7f78
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
leaq 0x862e(%rip), %rsi      # 0x10488
movq %rsp, %rdi
movl $0x3e9, %ecx            # imm = 0x3E9
rep  movsq (%rsi), %es:(%rdi)
movq -0x50(%rbp), %rdi
leaq -0x14(%rbp), %rsi
callq 0x6ec0
testb $0x1, %al
jne 0x7e78
jmp 0x7ead
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rdi
leaq 0x5739(%rip), %rsi      # 0xd5c3
callq 0x1070
cmpl $0x0, %eax
jne 0x7eab
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x7ec4
movq -0x8(%rbp), %rsi
movl $0x3, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
movq (%rax), %rax
movq %rax, -0x58(%rbp)
leaq 0x85a6(%rip), %rsi      # 0x10488
movq %rsp, %rdi
movl $0x3e9, %ecx            # imm = 0x3E9
rep  movsq (%rsi), %es:(%rdi)
movq -0x58(%rbp), %rdi
leaq -0x18(%rbp), %rsi
callq 0x6ec0
testb $0x1, %al
jne 0x7f00
jmp 0x7f3d
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
movq (%rax), %rdi
leaq 0x56a9(%rip), %rsi      # 0xd5c3
callq 0x1070
cmpl $0x0, %eax
jne 0x7f3b
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x7f54
movq -0x8(%rbp), %rsi
movl $0x3, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
movl -0x14(%rbp), %eax
cmpl -0x18(%rbp), %eax
je 0x7f73
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x8430
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x13, 0x8(%rax)
jne 0x8116
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x13, 0x8(%rax)
je 0x8116
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq %rax, -0x60(%rbp)
leaq 0x84ce(%rip), %rsi      # 0x10488
movq %rsp, %rdi
movl $0x3e9, %ecx            # imm = 0x3E9
rep  movsq (%rsi), %es:(%rdi)
movq -0x60(%rbp), %rdi
leaq -0x1c(%rbp), %rsi
callq 0x6ec0
testb $0x1, %al
jne 0x7fd8
jmp 0x800d
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rdi
leaq 0x55d9(%rip), %rsi      # 0xd5c3
callq 0x1070
cmpl $0x0, %eax
jne 0x800b
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x8024
movq -0x8(%rbp), %rsi
movl $0x3, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x11, 0x8(%rax)
je 0x8050
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x10, 0x8(%rax)
jne 0x807b
movl $0x18, -0x20(%rbp)
movl -0x1c(%rbp), %eax
cmpl -0x20(%rbp), %eax
je 0x8076
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x8111
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x17, 0x8(%rax)
je 0x80a7
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x29, 0x8(%rax)
jne 0x80cf
movl $0x17, -0x20(%rbp)
movl -0x1c(%rbp), %eax
cmpl -0x20(%rbp), %eax
je 0x80cd
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x810f
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x2b, 0x8(%rax)
jne 0x810d
movl $0x14, -0x20(%rbp)
movl -0x1c(%rbp), %eax
cmpl -0x20(%rbp), %eax
je 0x810b
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x810d
jmp 0x810f
jmp 0x8111
jmp 0x842e
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x13, 0x8(%rax)
je 0x8299
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x13, 0x8(%rax)
jne 0x8299
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
movq (%rax), %rax
movq %rax, -0x68(%rbp)
leaq 0x8328(%rip), %rsi      # 0x10488
movq %rsp, %rdi
movl $0x3e9, %ecx            # imm = 0x3E9
rep  movsq (%rsi), %es:(%rdi)
movq -0x68(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x6ec0
testb $0x1, %al
jne 0x817e
jmp 0x81bb
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
movq (%rax), %rdi
leaq 0x542b(%rip), %rsi      # 0xd5c3
callq 0x1070
cmpl $0x0, %eax
jne 0x81b9
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x81d2
movq -0x8(%rbp), %rsi
movl $0x3, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x11, 0x8(%rax)
je 0x81ee
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x10, 0x8(%rax)
jne 0x8216
movl $0x18, -0x24(%rbp)
movl -0x24(%rbp), %eax
cmpl -0x28(%rbp), %eax
je 0x8214
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x8294
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x17, 0x8(%rax)
je 0x8232
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x29, 0x8(%rax)
jne 0x825a
movl $0x17, -0x24(%rbp)
movl -0x24(%rbp), %eax
cmpl -0x28(%rbp), %eax
je 0x8258
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x8292
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x2b, 0x8(%rax)
jne 0x8290
movl $0x14, -0x24(%rbp)
movl -0x24(%rbp), %eax
cmpl -0x28(%rbp), %eax
je 0x828e
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x8290
jmp 0x8292
jmp 0x8294
jmp 0x842c
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x10, 0x8(%rax)
je 0x82b5
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x11, 0x8(%rax)
jne 0x832c
movl $0x18, -0x2c(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x11, 0x8(%rax)
je 0x82e8
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x10, 0x8(%rax)
jne 0x8310
movl $0x18, -0x30(%rbp)
movl -0x2c(%rbp), %eax
cmpl -0x30(%rbp), %eax
je 0x830e
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x8327
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x83be
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x17, 0x8(%rax)
je 0x8348
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x29, 0x8(%rax)
jne 0x83bc
movl $0x17, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x17, 0x8(%rax)
je 0x837b
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x29, 0x8(%rax)
jne 0x83a3
movl $0x17, -0x38(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x38(%rbp), %eax
je 0x83a1
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x83ba
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x83bc
jmp 0x83be
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x2b, 0x8(%rax)
jne 0x842a
movl $0x14, -0x3c(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x18(%rax), %rax
movq 0x18(%rax), %rax
cmpl $0x2b, 0x8(%rax)
jne 0x8411
movl $0x14, -0x40(%rbp)
movl -0x3c(%rbp), %eax
cmpl -0x40(%rbp), %eax
je 0x840f
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x8428
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x842a
jmp 0x842c
jmp 0x842e
jmp 0x8430
movq -0x8(%rbp), %rdi
callq 0x12e0
movl $0x0, -0x44(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x34, 0x8(%rax)
je 0x85bb
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x38, 0x8(%rax)
jne 0x8465
jmp 0x85bb
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x2, 0x8(%rax)
jne 0x8481
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x85ad
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x1f, 0x8(%rax)
jne 0x849d
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x85ab
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x1, 0x8(%rax)
jne 0x84b9
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x85a9
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x1e, 0x8(%rax)
jne 0x84d5
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x85a7
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x20, 0x8(%rax)
jne 0x84f1
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x85a5
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x21, 0x8(%rax)
jne 0x850d
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x85a3
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xa, 0x8(%rax)
jne 0x8532
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0xb, 0x8(%rax)
jne 0x8557
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x9, 0x8(%rax)
jne 0x857c
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x8, 0x8(%rax)
jne 0x85a1
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
jmp 0x85a3
jmp 0x85a5
jmp 0x85a7
jmp 0x85a9
jmp 0x85ab
jmp 0x85ad
movq -0x8(%rbp), %rdi
callq 0x12e0
jmp 0x8440
cmpl $0x1, -0x44(%rbp)
je 0x85d8
movq -0x8(%rbp), %rsi
movl $0x5, %edi
callq 0x64e0
movq -0x10(%rbp), %rdi
callq 0x6d90
addq $0x1fb0, %rsp           # imm = 0x1FB0
popq %rbp
retq
nopw %cs:(%rax,%rax)