// File: /workspace/github_c_makefile_star2_O1/takoeight0821[P]hoc_nyan/src/gen_ir.c
// Function: emit_expr
static IReg* emit_expr(Node* node) {
  switch (node->tag) {
  case NINT: {
    IReg* reg = new_reg(4);
    emit_ir(imm(reg, node->integer));
    return reg;
  }
  case NVAR: {
    IReg* addr = emit_lval(node);

    if (node->type->array_size == 0) {
      IReg* val = new_reg(size_of(type_of(node)));
      emit_ir(load(val, addr));
      return val;
    } else {
      return addr;
    }
  }
  case NGVAR: {
    IReg* addr = emit_lval(node);

    if (node->type->array_size == 0) {
      IReg* val = new_reg(size_of(type_of(node)));
      emit_ir(load(val, addr));
      return val;
    } else {
      return addr;
    }
  }
  case NASSIGN: {
    IReg* addr = emit_lval(node->lhs);
    IReg* val = emit_expr(node->rhs);
    IReg* val1 = new_reg(size_of(type_of(node->lhs)));
    emit_ir(move(val1, val));
    emit_ir(store(addr, val1));
    return val1;
  }
  case NADD: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IADD, reg, lhs, rhs));
    return reg;
  }
  case NSUB: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(ISUB, reg, lhs, rhs));
    return reg;
  }
  case NMUL: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IMUL, reg, lhs, rhs));
    return reg;
  }
  case NDIV: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IDIV, reg, lhs, rhs));
    return reg;
  }
  case NMOD: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IMOD, reg, lhs, rhs));
    return reg;
  }
  case NLT: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(ILT, reg, lhs, rhs));
    return reg;
  }
  case NLE: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(ILE, reg, lhs, rhs));
    return reg;
  }
  case NGT: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IGT, reg, lhs, rhs));
    return reg;
  }
  case NGE: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IGE, reg, lhs, rhs));
    return reg;
  }
  case NEQ: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IEQ, reg, lhs, rhs));
    return reg;
  }
  case NNE: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(INE, reg, lhs, rhs));
    return reg;
  }
  case NLOGNOT: {
    IReg* val = emit_expr(node->expr);
    IReg* zero = new_reg(size_of(type_of(node)));
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(imm(zero, 0));
    emit_ir(new_binop_ir(IEQ, reg, val, zero));
    return reg;
  }
  case NNOT: {
    IReg* val = emit_expr(node->expr);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(bitwise_not(reg, val));
    return reg;
  }
  case NAND: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IAND, reg, lhs, rhs));
    return reg;
  }
  case NOR: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IOR, reg, lhs, rhs));
    return reg;
  }
  case NXOR: {
    IReg* lhs = emit_expr(node->lhs);
    IReg* rhs = emit_expr(node->rhs);
    IReg* reg = new_reg(size_of(type_of(node)));
    emit_ir(new_binop_ir(IXOR, reg, lhs, rhs));
    return reg;
  }
  case NLOGAND: {
    char* when_lhs_false = new_label("when_lhs_false");
    char* when_lhs_true = new_label("when_lhs_true");
    char* end = new_label("end");

    IReg* lhs = emit_expr(node->lhs);
    IReg* zero = new_reg(size_of(type_of(node->lhs)));
    emit_ir(imm(zero, 0));
    IReg* lhs_cond = new_reg(size_of(type_of(node->lhs)));
    emit_ir(new_binop_ir(IEQ, lhs_cond, lhs, zero));
    emit_ir(branch(lhs_cond, when_lhs_false, when_lhs_true));

    IReg* reg = new_reg(size_of(type_of(node)));

    in_new_block(when_lhs_true);
    IReg* rhs = emit_expr(node->rhs);
    emit_ir(move(reg, rhs));
    emit_ir(jmp(end));

    in_new_block(when_lhs_false);
    emit_ir(imm(reg, 0));
    emit_ir(jmp(end));

    in_new_block(end);
    return reg;
  }
  case NLOGOR: {
    char* when_lhs_false = new_label("when_lhs_false");
    char* when_lhs_true = new_label("when_lhs_true");
    char* end = new_label("end");

    IReg* lhs = emit_expr(node->lhs);
    IReg* zero = new_reg(size_of(type_of(node->lhs)));
    emit_ir(imm(zero, 0));
    IReg* lhs_cond = new_reg(size_of(type_of(node->lhs)));
    emit_ir(new_binop_ir(IEQ, lhs_cond, lhs, zero));
    emit_ir(branch(lhs_cond, when_lhs_false, when_lhs_true));

    IReg* reg = new_reg(size_of(type_of(node)));

    in_new_block(when_lhs_true);
    emit_ir(move(reg, lhs));
    emit_ir(jmp(end));

    in_new_block(when_lhs_false);
    IReg* rhs = emit_expr(node->rhs);
    emit_ir(move(reg, rhs));
    emit_ir(jmp(end));

    in_new_block(end);
    return reg;
  }
  case NCOMMA: {
    emit_expr(node->lhs);
    return emit_expr(node->rhs);
  }
  case NDEFVAR: {
    // for initializer
    emit_ir(alloc(size_of(type_of(node))));
    /* assign_var(node->name, new); */
    return NULL;
  }
  case NCALL: {
    Vector* args = new_vec();

    for (size_t i = 0; i < node->args->length; i++) {
      IReg* arg = emit_expr(node->args->ptr[i]);
      vec_push(args, arg);
    }

    IR* ir = new_ir(ICALL);
    ir->r0 = new_reg(size_of(type_of(node)));
    ir->func_name = node->name;
    ir->args = args;
    emit_ir(ir);

    return ir->r0;
  }
  case NADDR: {
    return emit_lval(node->expr);
  }
  case NDEREF: {
    IReg* reg = new_reg(size_of(type_of(node)));
    IReg* addr = emit_expr(node->expr);
    emit_ir(load(reg, addr));
    return reg;
  }
  case NMEMBER: {
    IReg* reg = new_reg(size_of(type_of(node)));
    IReg* addr = emit_lval(node);
    emit_ir(load(reg, addr));
    return reg;
  }
  case NSIZEOF: {
    IReg* reg = new_reg(size_of(type_of(node->expr)));
    emit_ir(imm(reg, size_of(type_of(node->expr))));
    return reg;
  }
  case NCAST: {
    IReg* reg = new_reg(size_of(type_of(node->expr)));
    emit_ir(move(reg, emit_expr(node->expr)));
    return reg;
  }
  default: {
    bad_token(node->token, "error: statement cannot appear on here");
  }
  }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %r14
leaq 0x807f(%rip), %rbx      # 0xeb30
movl (%r14), %eax
cmpq $0x28, %rax
ja 0x79de
movslq (%rbx,%rax,4), %rax
addq %rbx, %rax
jmpq *%rax
movq 0x18(%r14), %rdi
callq 0x6a99
movq 0x20(%r14), %r14
jmp 0x6ab1
movq %r14, %rdi
callq 0x7a2c
movq %rax, %rbx
movq 0x10(%r14), %rax
cmpq $0x0, 0x20(%rax)
jne 0x76eb
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %r15
movl 0xc61d(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc614(%rip)      # 0x13138
movl %eax, 0x4(%r15)
movq %r14, 0x8(%r15)
movl $0x13, %edi
callq 0x8cb0
movq %r15, 0x10(%rax)
movq %rbx, 0x18(%rax)
movq 0xc5eb(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq %r15, %rbx
jmp 0x76eb
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc59c(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc593(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x5, %edi
jmp 0x76ca
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r15
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc557(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc54e(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r15, 0x8(%rbx)
movq 0x38(%r14), %rdi
callq 0x6a99
jmp 0x75fe
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %rbx
movl $0x12, %edi
callq 0x8cb0
movl %ebx, 0x4(%rax)
movq 0xc50a(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
xorl %ebx, %ebx
jmp 0x76eb
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc4bc(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc4b3(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0xd, %edi
jmp 0x76ca
movq 0x38(%r14), %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x7a2c
movq 0x38(%r14), %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r15
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc45f(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc456(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r15, 0x8(%rbx)
movq 0x38(%r14), %rdi
callq 0x6a99
movq %rax, %r14
movl $0x16, %edi
jmp 0x7606
movq 0x38(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc402(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc3f9(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x10, %edi
callq 0x8cb0
movq %rbx, 0x10(%rax)
movq %r15, 0x18(%rax)
jmp 0x76d8
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc398(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc38f(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x7, %edi
jmp 0x76ca
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc33b(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc332(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x2, %edi
jmp 0x76ca
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc2de(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc2d5(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
jmp 0x75b1
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc286(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc27d(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0xe, %edi
jmp 0x76ca
xorl %eax, %eax
callq 0x307c
movq %rax, %rbx
movq 0x50(%r14), %rax
cmpq $0x0, 0x10(%rax)
je 0x6f08
xorl %r15d, %r15d
movq (%rax), %rax
movq (%rax,%r15,8), %rdi
callq 0x6a99
movq %rbx, %rdi
movq %rax, %rsi
callq 0x30b6
incq %r15
movq 0x50(%r14), %rax
cmpq 0x10(%rax), %r15
jb 0x6ee4
movl $0x17, %edi
callq 0x8cb0
movq %rax, %r15
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r12
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movl 0xc1fb(%rip), %ecx      # 0x13138
leal 0x1(%rcx), %edx
movl %edx, 0xc1f2(%rip)      # 0x13138
movl %ecx, 0x4(%rax)
movq %r12, 0x8(%rax)
movq %rax, 0x10(%r15)
movq 0x40(%r14), %rax
movq %rax, 0x48(%r15)
movq %rbx, 0x50(%r15)
movq 0xc1cc(%rip), %rax      # 0x13130
movq 0x8(%rax), %rdi
movq %r15, %rsi
callq 0x30b6
movq 0x10(%r15), %rbx
jmp 0x76eb
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc1a7(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc19e(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq $0x4, 0x8(%rbx)
movl 0x28(%r14), %ebp
movl $0x1, %edi
movl $0x58, %esi
callq 0x20f0
movl $0x0, (%rax)
movq %rbx, 0x10(%rax)
movl %ebp, 0x4(%rax)
jmp 0x76d8
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc12b(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc122(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0xc, %edi
jmp 0x76ca
movl 0xc0fb(%rip), %edx      # 0x13128
leaq 0x7ba6(%rip), %rbx      # 0xebda
leaq 0x7c54(%rip), %rsi      # 0xec8f
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7f2
movq %rax, 0x8(%rsp)
movl 0xc0d8(%rip), %edx      # 0x13128
incl %edx
movl %edx, 0xc0d0(%rip)      # 0x13128
leaq 0x7c3f(%rip), %rsi      # 0xec9e
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7f2
movq %rax, %r13
movl 0xc0b6(%rip), %edx      # 0x13128
incl %edx
movl %edx, 0xc0ae(%rip)      # 0x13128
leaq 0x718e(%rip), %rsi      # 0xe20f
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7f2
movq %rax, 0x10(%rsp)
incl 0xc092(%rip)            # 0x13128
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %rbp
movq 0x18(%r14), %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r12
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xc06a(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xc061(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r12, 0x8(%rbx)
movl $0x1, %edi
movl $0x58, %esi
callq 0x20f0
movq $0x0, (%rax)
movq %rbx, 0x10(%rax)
movq 0xc031(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq 0x18(%r14), %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r12
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %r15
movl 0xc001(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbff8(%rip)      # 0x13138
movl %eax, 0x4(%r15)
movq %r12, 0x8(%r15)
movl $0xb, %edi
movq %r15, %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0x8cc6
movq 0xbfce(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movl $0x18, %edi
callq 0x8cb0
movq %r15, 0x18(%rax)
movq 0x8(%rsp), %r12
movq %r12, 0x38(%rax)
movq %r13, 0x40(%rax)
movq 0xbfa0(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r15
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbf71(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbf68(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r15, 0x8(%rbx)
movq %r13, %rdi
callq 0x61af
movl $0x16, %edi
callq 0x8cb0
movq %rbx, 0x10(%rax)
movq %rbp, 0x18(%rax)
movq 0xbf38(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movl $0x19, %edi
callq 0x8cb0
movq 0x10(%rsp), %r15
movq %r15, 0x30(%rax)
movq 0xbf12(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq %r12, %rdi
callq 0x61af
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r14
movl $0x16, %edi
callq 0x8cb0
movq %rbx, 0x10(%rax)
movq %r14, 0x18(%rax)
movq 0xbed9(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movl $0x19, %edi
callq 0x8cb0
movq %r15, 0x30(%rax)
movq 0xbeb8(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq %r15, %rdi
jmp 0x7962
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbe69(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbe60(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x3, %edi
jmp 0x76ca
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbe0c(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbe03(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x9, %edi
jmp 0x76ca
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbdaf(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbda6(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x4, %edi
jmp 0x76ca
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbd52(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbd49(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x6, %edi
jmp 0x76ca
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbcf5(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbcec(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0xf, %edi
jmp 0x76ca
movq 0x18(%r14), %rdi
callq 0x7a2c
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq 0x18(%r14), %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbc97(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbc8e(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x16, %edi
callq 0x8cb0
movq %rbx, 0x10(%rax)
movq %r12, 0x18(%rax)
movq 0xbc66(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
testq %r15, %r15
je 0x79ee
testq %rbx, %rbx
je 0x7a0d
movl $0x15, %edi
callq 0x8cb0
movq %r15, 0x18(%rax)
movq %rbx, 0x20(%rax)
jmp 0x76d8
movq 0x38(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %rbx
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %r12
movl 0xbc02(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbbf9(%rip)      # 0x13138
movl %eax, 0x4(%r12)
movq %rbx, 0x8(%r12)
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbbc4(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbbbb(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x1, %edi
movl $0x58, %esi
callq 0x20f0
movq $0x0, (%rax)
movq %r12, 0x10(%rax)
movq 0xbb8b(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movl $0xb, %edi
jmp 0x76ca
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r15
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbb52(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbb49(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r15, 0x8(%rbx)
movq %r14, %rdi
callq 0x7a2c
movq %rax, %r14
movl $0x13, %edi
callq 0x8cb0
movq %rbx, 0x10(%rax)
movq %r14, 0x18(%rax)
jmp 0x76d8
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xbadd(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xbad4(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0x8, %edi
jmp 0x76ca
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %r15
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r12
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xba83(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xba7a(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r14, 0x8(%rbx)
movl $0xa, %edi
movq %rbx, %rsi
movq %r15, %rdx
movq %r12, %rcx
callq 0x8cc6
movq 0xba51(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl 0xba25(%rip), %edx      # 0x13128
leaq 0x74d0(%rip), %rbx      # 0xebda
leaq 0x757e(%rip), %rsi      # 0xec8f
xorl %r15d, %r15d
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7f2
movq %rax, 0x8(%rsp)
movl 0xb9ff(%rip), %edx      # 0x13128
incl %edx
movl %edx, 0xb9f7(%rip)      # 0x13128
leaq 0x7566(%rip), %rsi      # 0xec9e
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7f2
movq %rax, %r13
movl 0xb9dd(%rip), %edx      # 0x13128
incl %edx
movl %edx, 0xb9d5(%rip)      # 0x13128
leaq 0x6ab5(%rip), %rsi      # 0xe20f
movq %rbx, %rdi
xorl %eax, %eax
callq 0xd7f2
movq %rax, 0x10(%rsp)
incl 0xb9b9(%rip)            # 0x13128
movq 0x18(%r14), %rdi
callq 0x6a99
movq %rax, %rbx
movq 0x18(%r14), %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r12
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbp
movl 0xb991(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xb988(%rip)      # 0x13138
movl %eax, 0x4(%rbp)
movq %r12, 0x8(%rbp)
movl $0x1, %edi
movl $0x58, %esi
callq 0x20f0
movq %r15, (%rax)
movq %rbp, 0x10(%rax)
movq 0xb95c(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq 0x18(%r14), %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r12
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %r15
movl 0xb92c(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xb923(%rip)      # 0x13138
movl %eax, 0x4(%r15)
movq %r12, 0x8(%r15)
movl $0xb, %edi
movq %r15, %rsi
movq %rbx, %rdx
movq %rbp, %rcx
callq 0x8cc6
movq 0xb8f9(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movl $0x18, %edi
callq 0x8cb0
movq %r15, 0x18(%rax)
movq 0x8(%rsp), %r12
movq %r12, 0x38(%rax)
movq %r13, 0x40(%rax)
movq 0xb8cb(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq %r14, %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r15
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xb89c(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xb893(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r15, 0x8(%rbx)
movq %r13, %rdi
callq 0x61af
movq 0x20(%r14), %rdi
callq 0x6a99
movq %rax, %r14
movl $0x16, %edi
callq 0x8cb0
movq %rbx, 0x10(%rax)
movq %r14, 0x18(%rax)
movq 0xb857(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movl $0x19, %edi
callq 0x8cb0
movq 0x10(%rsp), %r14
movq %r14, 0x30(%rax)
movq 0xb831(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq %r12, %rdi
callq 0x61af
movl $0x1, %edi
movl $0x58, %esi
callq 0x20f0
xorl %ecx, %ecx
movq %rcx, (%rax)
movq %rbx, 0x10(%rax)
movq 0xb7fe(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movl $0x19, %edi
callq 0x8cb0
movq %r14, 0x30(%rax)
movq 0xb7dd(%rip), %rcx      # 0x13130
movq 0x8(%rcx), %rdi
movq %rax, %rsi
callq 0x30b6
movq %r14, %rdi
callq 0x61af
jmp 0x76eb
movq 0x38(%r14), %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r15
movl $0x1, %edi
movl $0x20, %esi
callq 0x20f0
movq %rax, %rbx
movl 0xb7a0(%rip), %eax      # 0x13138
leal 0x1(%rax), %ecx
movl %ecx, 0xb797(%rip)      # 0x13138
movl %eax, 0x4(%rbx)
movq %r15, 0x8(%rbx)
movq 0x38(%r14), %rdi
callq 0x9e0f
movq %rax, %rdi
callq 0x9c8c
movq %rax, %r14
movl $0x1, %edi
movl $0x58, %esi
callq 0x20f0
movl $0x0, (%rax)
movq %rbx, 0x10(%rax)
movl %r14d, 0x4(%rax)
jmp 0x76d8
movq 0x8(%r14), %rdi
leaq 0x72c3(%rip), %rsi      # 0xecac
callq 0xce4d
leaq 0x71ec(%rip), %rdi      # 0xebe1
leaq 0x71e9(%rip), %rsi      # 0xebe5
leaq 0x72e8(%rip), %rcx      # 0xeceb
movl $0x69, %edx
callq 0x20c0
leaq 0x72f1(%rip), %rdi      # 0xed05
leaq 0x71ca(%rip), %rsi      # 0xebe5
leaq 0x72c9(%rip), %rcx      # 0xeceb
movl $0x6a, %edx
callq 0x20c0