// File: /workspace/github_cpp_makefile_star2_O3/acliusBackHome[P]kamaya/dist/IR.cpp
// Function: IR::exprEmit(ParseExpression const&, ParseType const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, ParseTree&, unsigned long, unsigned long)
void IR::exprEmit(const ParseExpression &init_expr, const ParseType &this_type,
                  const string &symbol, ParseTree &tree, size_t node_id,
                  size_t scope_id) {
  if (init_expr.is_const()) {
    string arg1 = getConstValueStr(init_expr);
    string result = address2pointer(init_expr.get_address());
    if (scope_id == 0) {
      // 在静态数据段生成，字符串(TODO)也在此生成
      dataEmit(symbol, this_type.get_size(), arg1, node_id);
    } else {
      // 在栈中分配
      gen(":=", arg1, "_", result, node_id);
    }
  } else {
    ExpressionType exp_type = init_expr.get_expr_type();
    string op = "_", arg1 = "_", arg2 = "_", result = "_";
    switch (exp_type) {
    // 双目运算符
    case ExpressionType::E_ADD:
      op = "+";
      break;
    case ExpressionType::E_SUB:
      op = "-";
      break;
    case ExpressionType::E_MUL:
      op = "*";
      break;
    case ExpressionType::E_DIV:
      op = "/";
      break;
    case ExpressionType::E_MOD:
      op = "%";
      break;
    case ExpressionType::E_POW:
      op = "^";
      break;
    case ExpressionType::E_LOGIC_OR:
      op = "||";
      break;
    case ExpressionType::E_LOGIC_AND:
      op = "&&";
      break;
    case ExpressionType::E_G:
      op = ">";
      break;
    case ExpressionType::E_GE:
      op = ">=";
      break;
    case ExpressionType::E_EQUAL:
      op = "==";
      break;
    case ExpressionType::E_NE:
      op = "!=";
      break;
    case ExpressionType::E_L:
      op = "<";
      break;
    case ExpressionType::E_LE:
      op = "<=";
      break;
    case ExpressionType::E_GET_ITEM: {
      getItemEmit(init_expr, this_type, symbol, tree, node_id, scope_id);
      return;
    }
    default:
      break;
    }
    if (op != "_") {
      const ParseExpression &right =
          ParseExpression::get_expression(init_expr.get_child(1));
      if (right.is_const()) {
        arg2 = getConstValueStr(right);
      } else {
        arg2 = address2pointer(right.get_address());
      }
    }
    switch (exp_type) {
    case ExpressionType::E_VAR: {
      return;
    }
    case ExpressionType::E_FUN: {
      gen("call", "_", "_", (init_expr.get_functions()[0])->get_symbol(),
          node_id);
      gen(":=", "eax", "_", address2pointer(init_expr.get_address()), node_id);
      return;
    }
    case ExpressionType::E_NOT:
      op = "!";
      break;
    case ExpressionType::E_ASSIGN: {
      // 赋值表达式
      assignEmit(init_expr.get_child(0), init_expr.get_child(1));
      const ParseExpression &left =
          ParseExpression::get_expression(init_expr.get_child(0));
      const ParseExpression &right =
          ParseExpression::get_expression(init_expr.get_child(1));
      string arg1, result;
      result = address2pointer(left.get_address());
      if (right.is_const()) {
        arg1 = getConstValueStr(right);
      } else {
        arg1 = address2pointer(right.get_address());
      }
      gen(":=", arg1, "_", result, node_id);
      return;
    }
    case ExpressionType::E_UNDEFINED: // 应该不会跑到这里
      if (scope_id == 0) {
        dataUndefinedEmit(symbol, this_type.get_size(), node_id);
      }
      // 这个表达式非常特别
      return;
    default:

      break;
    }
    if (op != "_") {
      const ParseExpression &left =
          ParseExpression::get_expression(init_expr.get_child(0));
      if (left.is_const()) {
        arg1 = getConstValueStr(left);
      } else {
        arg1 = address2pointer(left.get_address());
      }
    }
    result = address2pointer(init_expr.get_address());
    if (op != "_") {
      gen(op, arg1, arg2, result, node_id);
    } else {
      throw ParseException(ExceptionCode::EX_NOT_IMPLEMENTED,
                           "other exp type " + to_string(exp_type));
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x118, %rsp            # imm = 0x118
movq %r9, -0x58(%rbp)
movq %rcx, %r13
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, -0x30(%rbp)
movq %rsi, %rdi
callq 0x2b2f4
testb %al, %al
je 0x3dab2
leaq -0xb8(%rbp), %rdi
movq %r15, %rsi
callq 0x3cf1e
movq %r15, %rdi
callq 0x2b60a
leaq -0x138(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq %rax, %rdx
callq 0xf118
cmpq $0x0, 0x10(%rbp)
je 0x3db86
leaq -0xc8(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x7917(%rip), %rsi      # 0x4533d
leaq 0x7912(%rip), %rdx      # 0x4533f
leaq -0xd8(%rbp), %rdi
callq 0xf868
leaq -0x108(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x7c4b(%rip), %rsi      # 0x45696
leaq 0x7c45(%rip), %rdx      # 0x45697
leaq -0x118(%rbp), %rdi
callq 0xf868
leaq -0xd8(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
leaq -0x118(%rbp), %rcx
leaq -0x138(%rbp), %r8
movq -0x30(%rbp), %rdi
movq -0x58(%rbp), %r9
callq 0x3c6c0
movq -0x118(%rbp), %rdi
cmpq %r14, %rdi
je 0x3da98
callq 0x42b0
movq -0xd8(%rbp), %rdi
cmpq %rbx, %rdi
je 0x3dba8
callq 0x42b0
jmp 0x3dba8
movq %r15, %rdi
callq 0x2d39c
movl %eax, %r12d
leaq -0xa8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x7bc7(%rip), %rsi      # 0x45696
leaq 0x7bc1(%rip), %rdx      # 0x45697
leaq -0xb8(%rbp), %rdi
callq 0xf868
leaq -0x128(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x7ba2(%rip), %rsi      # 0x45696
leaq 0x7b9c(%rip), %rdx      # 0x45697
leaq -0x138(%rbp), %rdi
callq 0xf868
leaq -0xc8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x7b7d(%rip), %rsi      # 0x45696
leaq 0x7b77(%rip), %rdx      # 0x45697
leaq -0xd8(%rbp), %rdi
callq 0xf868
leaq -0x108(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x7b58(%rip), %rsi      # 0x45696
leaq 0x7b52(%rip), %rdx      # 0x45697
leaq -0x118(%rbp), %rdi
callq 0xf868
leal -0x4(%r12), %eax
cmpl $0x14, %eax
ja 0x3dc85
movl $0x1, %r8d
leaq 0x9dcc(%rip), %rcx      # 0x47938
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x30(%rbp), %rdi
movq %r15, %rsi
callq 0x3d7ca
jmp 0x3e1ef
movq %rbx, %rdi
callq 0x27c58
leaq -0xb8(%rbp), %rcx
movq -0x30(%rbp), %rdi
movq %r13, %rsi
movq %rax, %rdx
movq -0x58(%rbp), %r8
callq 0x3d2dc
leaq -0x128(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3dbbd
callq 0x42b0
leaq -0xa8(%rbp), %rax
movq -0x10(%rax), %rdi
jmp 0x3e245
leaq 0x5454(%rip), %rcx      # 0x43028
jmp 0x3dc73
movl $0x2, %r8d
leaq 0x544c(%rip), %rcx      # 0x43032
jmp 0x3dc73
movl $0x2, %r8d
leaq 0x5442(%rip), %rcx      # 0x4303a
jmp 0x3dc73
leaq 0x866f(%rip), %rcx      # 0x46270
jmp 0x3dc73
leaq 0x7731(%rip), %rcx      # 0x4533b
jmp 0x3dc73
movl $0x2, %r8d
leaq 0x541d(%rip), %rcx      # 0x43036
jmp 0x3dc73
leaq 0x623e(%rip), %rcx      # 0x43e60
jmp 0x3dc73
leaq 0x5b58(%rip), %rcx      # 0x43783
jmp 0x3dc73
movl $0x2, %r8d
leaq 0x7719(%rip), %rcx      # 0x45353
jmp 0x3dc73
movl $0x2, %r8d
leaq 0x53e2(%rip), %rcx      # 0x4302b
jmp 0x3dc73
leaq 0x76e5(%rip), %rcx      # 0x45337
jmp 0x3dc73
leaq 0x76de(%rip), %rcx      # 0x45339
jmp 0x3dc73
leaq 0x5320(%rip), %rcx      # 0x42f84
jmp 0x3dc73
movl $0x2, %r8d
leaq 0x76dd(%rip), %rcx      # 0x45350
leaq -0xb8(%rbp), %rdi
movq 0x8(%rdi), %rdx
xorl %esi, %esi
callq 0x4490
leaq 0x7a0a(%rip), %rsi      # 0x45696
leaq -0xb8(%rbp), %rdi
callq 0x40f0
testl %eax, %eax
je 0x3dd0a
movl $0x1, %esi
movq %r15, %rdi
callq 0x2ce86
movq %rax, %rdi
callq 0x2b006
movq %rax, %r14
movq %rax, %rdi
callq 0x2b2f4
testb %al, %al
je 0x3dcce
leaq -0x50(%rbp), %rdi
movq %r14, %rsi
callq 0x3cf1e
jmp 0x3dce6
movq %r14, %rdi
callq 0x2b60a
leaq -0x50(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq %rax, %rdx
callq 0xf118
leaq -0xd8(%rbp), %rdi
leaq -0x50(%rbp), %r14
movq %r14, %rsi
callq 0x43a0
movq (%r14), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3dd0a
callq 0x42b0
cmpl $0x1, %r12d
jle 0x3dee8
cmpl $0x19, %r12d
je 0x3df00
cmpl $0xb, %r12d
je 0x3dfc5
cmpl $0x2, %r12d
jne 0x3dfe4
leaq -0x40(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x7d5d(%rip), %rsi      # 0x45a9e
leaq 0x7d5a(%rip), %rdx      # 0x45aa2
leaq -0x50(%rbp), %rdi
callq 0xf868
leaq -0x88(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x7932(%rip), %rsi      # 0x45696
leaq 0x792c(%rip), %rdx      # 0x45697
leaq -0x98(%rbp), %rdi
callq 0xf868
leaq -0x68(%rbp), %r13
movq %r13, -0x10(%r13)
leaq 0x7910(%rip), %rsi      # 0x45696
leaq 0x790a(%rip), %rdx      # 0x45697
leaq -0x78(%rbp), %rdi
callq 0xf868
movq %r15, %rdi
callq 0x2cd92
movq (%rax), %rax
movq (%rax), %rsi
leaq -0xf8(%rbp), %rdi
callq 0x2e974
leaq -0x50(%rbp), %rsi
leaq -0x98(%rbp), %rdx
leaq -0x78(%rbp), %rcx
leaq -0xf8(%rbp), %r8
movq -0x30(%rbp), %rdi
movq -0x58(%rbp), %r9
callq 0x3c6c0
leaq -0xe8(%rbp), %rbx
movq -0x10(%rbx), %rdi
cmpq %rbx, %rdi
je 0x3dde8
callq 0x42b0
movq -0x78(%rbp), %rdi
cmpq %r13, %rdi
je 0x3ddf6
callq 0x42b0
movq -0x98(%rbp), %rdi
cmpq %r12, %rdi
je 0x3de07
callq 0x42b0
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x3de15
callq 0x42b0
leaq -0x50(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x751a(%rip), %rsi      # 0x4533d
leaq 0x7515(%rip), %rdx      # 0x4533f
callq 0xf868
leaq -0x98(%rbp), %rdi
movq %r12, (%rdi)
leaq 0x9969(%rip), %rsi      # 0x477a9
leaq 0x9965(%rip), %rdx      # 0x477ac
callq 0xf868
leaq -0x78(%rbp), %rdi
movq %r13, (%rdi)
leaq 0x783c(%rip), %rsi      # 0x45696
leaq 0x7836(%rip), %rdx      # 0x45697
callq 0xf868
movq %r15, %rdi
callq 0x2b60a
movq -0x30(%rbp), %r15
leaq -0xf8(%rbp), %rdi
movq %r15, %rsi
movq %rax, %rdx
callq 0xf118
leaq -0x50(%rbp), %rsi
leaq -0x98(%rbp), %rdx
leaq -0x78(%rbp), %rcx
leaq -0xf8(%rbp), %r8
movq %r15, %rdi
movq -0x58(%rbp), %r9
callq 0x3c6c0
movq -0xf8(%rbp), %rdi
cmpq %rbx, %rdi
je 0x3deb7
callq 0x42b0
movq -0x78(%rbp), %rdi
cmpq %r13, %rdi
je 0x3dec5
callq 0x42b0
movq -0x98(%rbp), %rdi
cmpq %r12, %rdi
je 0x3ded6
callq 0x42b0
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
jne 0x3e1ea
jmp 0x3e1ef
testl %r12d, %r12d
je 0x3e02e
cmpl $0x1, %r12d
je 0x3e1ef
jmp 0x3dfe4
movq %r15, %rdi
xorl %esi, %esi
callq 0x2ce86
movl $0x1, %esi
movq %r15, %rdi
callq 0x2ce86
movq %r15, %rdi
xorl %esi, %esi
callq 0x2ce86
movq %rax, %rdi
callq 0x2b006
movq %rax, %r12
movl $0x1, %esi
movq %r15, %rdi
callq 0x2ce86
movq %rax, %rdi
callq 0x2b006
movq %rax, %rbx
leaq -0x40(%rbp), %r15
movq %r15, -0x10(%r15)
xorl %eax, %eax
movq %rax, -0x8(%r15)
movb %al, (%r15)
leaq -0x88(%rbp), %r13
movq %r13, -0x10(%r13)
movq %rax, -0x8(%r13)
movb %al, (%r13)
movq %r12, %rdi
callq 0x2b60a
leaq -0x78(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq %rax, %rdx
callq 0xf118
leaq -0x98(%rbp), %rdi
leaq -0x78(%rbp), %r14
movq %r14, %rsi
callq 0x43a0
movq (%r14), %rdi
leaq -0x68(%rbp), %r14
cmpq %r14, %rdi
je 0x3dfa4
callq 0x42b0
movq %rbx, %rdi
callq 0x2b2f4
testb %al, %al
je 0x3e11a
leaq -0x78(%rbp), %rdi
movq %rbx, %rsi
callq 0x3cf1e
jmp 0x3e132
leaq -0xb8(%rbp), %rdi
movq 0x8(%rdi), %rdx
leaq 0x737f(%rip), %rcx      # 0x45356
movl $0x1, %r8d
xorl %esi, %esi
callq 0x4490
leaq 0x76ab(%rip), %rsi      # 0x45696
leaq -0xb8(%rbp), %rdi
callq 0x40f0
testl %eax, %eax
je 0x3e095
movq %r15, %rdi
xorl %esi, %esi
callq 0x2ce86
movq %rax, %rdi
callq 0x2b006
movq %rax, %rbx
movq %rax, %rdi
callq 0x2b2f4
testb %al, %al
je 0x3e059
leaq -0x50(%rbp), %rdi
movq %rbx, %rsi
callq 0x3cf1e
jmp 0x3e071
cmpq $0x0, 0x10(%rbp)
jne 0x3e1ef
movq %rbx, %rdi
callq 0x27c58
movq -0x30(%rbp), %rdi
movq %r13, %rsi
movq %rax, %rdx
movq -0x58(%rbp), %rcx
callq 0x3d4b0
jmp 0x3e1ef
movq %rbx, %rdi
callq 0x2b60a
leaq -0x50(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq %rax, %rdx
callq 0xf118
leaq -0x138(%rbp), %rdi
leaq -0x50(%rbp), %rbx
movq %rbx, %rsi
callq 0x43a0
movq (%rbx), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3e095
callq 0x42b0
movq %r15, %rdi
callq 0x2b60a
leaq -0x50(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq %rax, %rdx
callq 0xf118
leaq -0x118(%rbp), %rdi
leaq -0x50(%rbp), %rbx
movq %rbx, %rsi
callq 0x43a0
movq (%rbx), %rdi
leaq -0x40(%rbp), %rbx
cmpq %rbx, %rdi
je 0x3e0d1
callq 0x42b0
leaq 0x75be(%rip), %rsi      # 0x45696
leaq -0xb8(%rbp), %rdi
callq 0x40f0
testl %eax, %eax
je 0x3e261
leaq -0xb8(%rbp), %rsi
leaq -0x138(%rbp), %rdx
leaq -0xd8(%rbp), %rcx
leaq -0x118(%rbp), %r8
movq -0x30(%rbp), %rdi
movq -0x58(%rbp), %r9
callq 0x3c6c0
jmp 0x3e1ef
movq %rbx, %rdi
callq 0x2b60a
leaq -0x78(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq %rax, %rdx
callq 0xf118
leaq -0x50(%rbp), %rdi
leaq -0x78(%rbp), %rbx
movq %rbx, %rsi
callq 0x43a0
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x3e14f
callq 0x42b0
leaq -0x78(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x71e0(%rip), %rsi      # 0x4533d
leaq 0x71db(%rip), %rdx      # 0x4533f
callq 0xf868
leaq -0xe8(%rbp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x751b(%rip), %rsi      # 0x45696
leaq 0x7515(%rip), %rdx      # 0x45697
leaq -0xf8(%rbp), %rdi
callq 0xf868
leaq -0x78(%rbp), %rsi
leaq -0x50(%rbp), %rdx
leaq -0xf8(%rbp), %rcx
leaq -0x98(%rbp), %r8
movq -0x30(%rbp), %rdi
movq -0x58(%rbp), %r9
callq 0x3c6c0
movq -0xf8(%rbp), %rdi
cmpq %rbx, %rdi
je 0x3e1c2
callq 0x42b0
movq -0x78(%rbp), %rdi
cmpq %r14, %rdi
je 0x3e1d0
callq 0x42b0
movq -0x98(%rbp), %rdi
cmpq %r13, %rdi
je 0x3e1e1
callq 0x42b0
movq -0x50(%rbp), %rdi
cmpq %r15, %rdi
je 0x3e1ef
callq 0x42b0
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
cmpq %rax, %rdi
je 0x3e207
callq 0x42b0
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0x3e21f
callq 0x42b0
movq -0x138(%rbp), %rdi
leaq -0x128(%rbp), %rax
cmpq %rax, %rdi
je 0x3e237
callq 0x42b0
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
cmpq %rax, %rdi
je 0x3e24f
callq 0x42b0
addq $0x118, %rsp            # imm = 0x118
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x28, %edi
callq 0x4190
movq %rax, %r14
leaq -0x98(%rbp), %rdi
movl %r12d, %esi
callq 0xe5ce
leaq 0x97ee(%rip), %rsi      # 0x47a72
leaq -0x50(%rbp), %rdi
leaq -0x98(%rbp), %rdx
callq 0xe495
movb $0x1, %r15b
leaq -0x50(%rbp), %rdx
movq %r14, %rdi
movl $0x13, %esi
callq 0x333ee
xorl %r15d, %r15d
leaq 0x1cabe(%rip), %rsi     # 0x5ad70
leaq -0x2fd19(%rip), %rdx    # 0xe5a0
movq %r14, %rdi
callq 0x4540
jmp 0x3e3af
movq %rax, -0x30(%rbp)
movq -0x50(%rbp), %rdi
cmpq %rbx, %rdi
je 0x3e2d8
callq 0x42b0
leaq -0x88(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e2ed
callq 0x42b0
testb %r15b, %r15b
jne 0x3e36a
jmp 0x3e47f
movq %rax, -0x30(%rbp)
leaq -0x88(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e36a
callq 0x42b0
jmp 0x3e36a
jmp 0x3e47b
movq %rax, -0x30(%rbp)
movq -0xf8(%rbp), %rdi
cmpq %rbx, %rdi
je 0x3e332
callq 0x42b0
jmp 0x3e332
movq %rax, -0x30(%rbp)
movq -0x78(%rbp), %rdi
cmpq %r14, %rdi
je 0x3e3b3
callq 0x42b0
jmp 0x3e3b3
movq %rax, -0x30(%rbp)
movq -0xf8(%rbp), %rdi
cmpq %rbx, %rdi
jne 0x3e38b
jmp 0x3e3db
jmp 0x3e3af
jmp 0x3e3af
jmp 0x3e3af
jmp 0x3e392
jmp 0x3e398
jmp 0x3e47b
movq %rax, -0x30(%rbp)
movq %r14, %rdi
callq 0x4250
jmp 0x3e47f
movq %rax, -0x30(%rbp)
leaq -0xe8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e3db
callq 0x42b0
jmp 0x3e3db
movq %rax, -0x30(%rbp)
jmp 0x3e3e9
movq %rax, -0x30(%rbp)
jmp 0x3e3fa
jmp 0x3e47b
jmp 0x3e47b
jmp 0x3e47b
jmp 0x3e3d7
movq %rax, -0x30(%rbp)
movq -0x98(%rbp), %rdi
cmpq %r13, %rdi
je 0x3e3c4
callq 0x42b0
movq -0x50(%rbp), %rdi
cmpq %r15, %rdi
jne 0x3e403
jmp 0x3e47f
jmp 0x3e47b
movq %rax, -0x30(%rbp)
movq -0x78(%rbp), %rdi
cmpq %r13, %rdi
je 0x3e3e9
callq 0x42b0
movq -0x98(%rbp), %rdi
cmpq %r12, %rdi
je 0x3e3fa
callq 0x42b0
movq -0x50(%rbp), %rdi
cmpq %r14, %rdi
je 0x3e47f
callq 0x42b0
jmp 0x3e47f
jmp 0x3e47b
jmp 0x3e47b
jmp 0x3e47b
jmp 0x3e47b
movq %rax, -0x30(%rbp)
movq -0x118(%rbp), %rdi
cmpq %r14, %rdi
je 0x3e42d
callq 0x42b0
jmp 0x3e42d
movq %rax, -0x30(%rbp)
movq -0xd8(%rbp), %rdi
cmpq %rbx, %rdi
je 0x3e446
callq 0x42b0
jmp 0x3e446
jmp 0x3e442
movq %rax, -0x30(%rbp)
leaq -0x128(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e4db
callq 0x42b0
jmp 0x3e4db
movq %rax, -0x30(%rbp)
jmp 0x3e497
movq %rax, -0x30(%rbp)
jmp 0x3e4af
movq %rax, -0x30(%rbp)
jmp 0x3e4c7
movq %rax, -0x30(%rbp)
jmp 0x3e4f0
jmp 0x3e47b
movq %rax, -0x30(%rbp)
movq -0x118(%rbp), %rdi
leaq -0x108(%rbp), %rax
cmpq %rax, %rdi
je 0x3e497
callq 0x42b0
movq -0xd8(%rbp), %rdi
leaq -0xc8(%rbp), %rax
cmpq %rax, %rdi
je 0x3e4af
callq 0x42b0
movq -0x138(%rbp), %rdi
leaq -0x128(%rbp), %rax
cmpq %rax, %rdi
je 0x3e4c7
callq 0x42b0
movq -0xb8(%rbp), %rdi
leaq -0xa8(%rbp), %rax
jmp 0x3e4e6
movq %rax, -0x30(%rbp)
leaq -0xa8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3e4f0
callq 0x42b0
movq -0x30(%rbp), %rdi
callq 0x4560
nop