// File: rfotino[P]consolite-compiler/src/syntax.cpp
// Function: FunctionCallToken::parse(Tokenizer*, std::vector<std::shared_ptr<FunctionToken>, std::allocator<std::shared_ptr<FunctionToken>>> const&, std::vector<std::shared_ptr<GlobalVarToken>, std::allocator<std::shared_ptr<GlobalVarToken>>> const&, std::vector<std::shared_ptr<ParamToken>, std::allocator<std::shared_ptr<ParamToken>>> const&, std::vector<std::shared_ptr<LocalVarToken>, std::allocator<std::shared_ptr<LocalVarToken>>> const&)
bool FunctionCallToken::parse(
      Tokenizer *tokenizer,
      const std::vector<std::shared_ptr<FunctionToken>>& functions,
      const std::vector<std::shared_ptr<GlobalVarToken>>& globals,
      const std::vector<std::shared_ptr<ParamToken>>& parameters,
      const std::vector<std::shared_ptr<LocalVarToken>>& localVars) {
  _lineNum = tokenizer->peekNext().line();
  // Start by getting the name of the function we are calling.
  AtomToken nameToken = tokenizer->getNext();
  if (nameToken.str().empty()) {
    _error("Unexpected EOF.", nameToken.line());
    return false;
  } else if (!isValidName(nameToken.str())) {
    _error("Invalid name for a function.", nameToken.line());
    return false;
  }
  _funcName = nameToken.str();
  // Next get the pointer to the function so that we know it exists
  // and can validate the arguments with the parameters later on.
  auto function = getFunction(_funcName, functions);
  if (!function) {
    _error("Function '" + _funcName + "' does not exist.", _lineNum);
    return false;
  }
  // The next token should be an open parenthesis.
  if (!_expect(tokenizer, "(")) {
    return false;
  }
  // Now get the comma-separated list of expressions.
  if (")" != tokenizer->peekNext().str()) {
    while (true) {
      std::shared_ptr<ExprToken> expr(new ExprToken());
      if (!expr->parse(tokenizer, functions, globals, parameters, localVars)) {
        return false;
      }
      _arguments.push_back(expr);
      // If the next token is not a comma, we are done. Otherwise consume
      // the comma and continue.
      if ("," != tokenizer->peekNext().str()) {
        break;
      }
      tokenizer->getNext();
    }
  }
  // Consume the closing parenthesis.
  if (!_expect(tokenizer, ")")) {
    return false;
  }
  // Check that the number of parameters is correct.
  if (this->numArgs() != function->numParams()) {
    _error("Invalid function call, expected " +
           std::to_string(function->numParams()) + " arguments but got " +
           std::to_string(this->numArgs()) + ".",
           _lineNum);
    return false;
  }
  // Make sure this is not a call to "void main()", which is illegal.
  if ("main" == function->name() && "void" == function->type().name() &&
      0 == function->numParams()) {
    _error("Illegal call to 'void main()', the entry point cannot be called "
	   "from within the program.",
	   _lineNum);
    return false;
  }
  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x510, %rsp            # imm = 0x510
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x450(%rbp)
movq -0x18(%rbp), %rsi
leaq -0x68(%rbp), %rdi
movq %rdi, -0x448(%rbp)
callq 0x6bae0
movq -0x448(%rbp), %rdi
callq 0x32270
movl %eax, -0x440(%rbp)
jmp 0x1fd56
movq -0x450(%rbp), %rax
movl -0x440(%rbp), %ecx
movl %ecx, 0x8(%rax)
leaq -0x68(%rbp), %rdi
callq 0x99b0
movq -0x18(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
movq %rdi, -0x458(%rbp)
callq 0x6ae20
movq -0x458(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0xd5c0
jmp 0x1fd9b
leaq -0xc8(%rbp), %rdi
callq 0x8690
movb %al, -0x459(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x8848
movb -0x459(%rbp), %al
testb $0x1, %al
jne 0x1fdc8
jmp 0x1feac
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x468(%rbp)
callq 0x8760
movq -0x468(%rbp), %rdx
leaq 0x4fc7e(%rip), %rsi     # 0x6fa67
leaq -0xe8(%rbp), %rdi
callq 0xced0
jmp 0x1fdf7
leaq -0xa8(%rbp), %rdi
callq 0x32270
movl %eax, -0x46c(%rbp)
jmp 0x1fe0b
movl -0x46c(%rbp), %esi
leaq -0xe8(%rbp), %rdi
callq 0x6d960
jmp 0x1fe1f
leaq -0xe8(%rbp), %rdi
callq 0x8848
leaq -0xe9(%rbp), %rdi
callq 0x8460
movb $0x0, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
jmp 0x209fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x99b0
jmp 0x20a22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x20a16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x1fe9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x8848
leaq -0xe9(%rbp), %rdi
callq 0x8460
jmp 0x20a16
leaq -0x110(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0xd5c0
jmp 0x1fec1
leaq -0x110(%rbp), %rdi
callq 0x6cd20
movb %al, -0x46d(%rbp)
jmp 0x1fed5
movb -0x46d(%rbp), %al
xorb $-0x1, %al
movb %al, -0x46e(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x8848
movb -0x46e(%rbp), %al
testb $0x1, %al
jne 0x1fefe
jmp 0x1ffd4
leaq -0x131(%rbp), %rdi
movq %rdi, -0x478(%rbp)
callq 0x8760
movq -0x478(%rbp), %rdx
leaq 0x4fb5a(%rip), %rsi     # 0x6fa79
leaq -0x130(%rbp), %rdi
callq 0xced0
jmp 0x1ff2d
leaq -0xa8(%rbp), %rdi
callq 0x32270
movl %eax, -0x47c(%rbp)
jmp 0x1ff41
movl -0x47c(%rbp), %esi
leaq -0x130(%rbp), %rdi
callq 0x6d960
jmp 0x1ff55
leaq -0x130(%rbp), %rdi
callq 0x8848
leaq -0x131(%rbp), %rdi
callq 0x8460
movb $0x0, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
jmp 0x209fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x8848
jmp 0x20a16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x1ffc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x8848
leaq -0x131(%rbp), %rdi
callq 0x8460
jmp 0x20a16
jmp 0x1ffd6
leaq -0x158(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0xd5c0
jmp 0x1ffeb
movq -0x450(%rbp), %rdi
addq $0x10, %rdi
movq %rdi, -0x488(%rbp)
leaq -0x158(%rbp), %rsi
movq %rsi, -0x490(%rbp)
callq 0x84e0
movq -0x490(%rbp), %rdi
callq 0x8848
movq -0x488(%rbp), %rsi
movq -0x20(%rbp), %rdx
leaq -0x168(%rbp), %rdi
callq 0x6d580
jmp 0x20035
leaq -0x168(%rbp), %rdi
callq 0xd8c0
testb $0x1, %al
jne 0x20110
movq -0x450(%rbp), %rdx
addq $0x10, %rdx
leaq 0x4fa3b(%rip), %rsi     # 0x6fa96
leaq -0x1a8(%rbp), %rdi
callq 0xdc30
jmp 0x20069
leaq 0x4fa31(%rip), %rdx     # 0x6faa1
leaq -0x188(%rbp), %rdi
leaq -0x1a8(%rbp), %rsi
callq 0xe020
jmp 0x20085
movq -0x450(%rbp), %rax
movl 0x8(%rax), %esi
leaq -0x188(%rbp), %rdi
callq 0x6d960
jmp 0x2009d
leaq -0x188(%rbp), %rdi
callq 0x8848
leaq -0x1a8(%rbp), %rdi
callq 0x8848
movb $0x0, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
jmp 0x209e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x209ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x200ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x8848
leaq -0x1a8(%rbp), %rdi
callq 0x8848
jmp 0x209ee
movq -0x18(%rbp), %rax
movq %rax, -0x4a0(%rbp)
leaq -0x1c9(%rbp), %rdi
movq %rdi, -0x498(%rbp)
callq 0x8760
movq -0x498(%rbp), %rdx
leaq 0x4ef71(%rip), %rsi     # 0x6f0ad
leaq -0x1c8(%rbp), %rdi
callq 0xced0
jmp 0x2014a
movq -0x4a0(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x4a1(%rbp)
jmp 0x2016a
movb -0x4a1(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4a2(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x8848
leaq -0x1c9(%rbp), %rdi
callq 0x8460
movb -0x4a2(%rbp), %al
testb $0x1, %al
jne 0x2019c
jmp 0x201e6
movb $0x0, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
jmp 0x209e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x201d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x8848
leaq -0x1c9(%rbp), %rdi
callq 0x8460
jmp 0x209ee
movq -0x18(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0x6bae0
jmp 0x201f8
leaq -0x1f0(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0xd5c0
jmp 0x2020d
leaq 0x5075a(%rip), %rdi     # 0x7096e
leaq -0x1f0(%rbp), %rsi
callq 0xd8e0
movb %al, -0x4a3(%rbp)
jmp 0x20228
leaq -0x1f0(%rbp), %rdi
callq 0x8848
leaq -0x220(%rbp), %rdi
callq 0x99b0
movb -0x4a3(%rbp), %al
testb $0x1, %al
jne 0x2024f
jmp 0x2046f
jmp 0x20251
jmp 0x20253
movl $0x28, %edi
callq 0x83e0
movq %rax, -0x4b0(%rbp)
jmp 0x20266
movq -0x4b0(%rbp), %rdi
callq 0x32670
jmp 0x20274
movq -0x4b0(%rbp), %rsi
leaq -0x230(%rbp), %rdi
callq 0x33ab0
jmp 0x20289
leaq -0x230(%rbp), %rdi
callq 0x33ae0
movq %rax, %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
movq -0x38(%rbp), %r9
callq 0x1d9b0
movb %al, -0x4b1(%rbp)
jmp 0x202b9
movb -0x4b1(%rbp), %al
testb $0x1, %al
jne 0x20342
jmp 0x202c5
movb $0x0, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
jmp 0x20429
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x202fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x8848
leaq -0x220(%rbp), %rdi
callq 0x99b0
jmp 0x209ee
movq -0x4b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
movl $0x28, %esi
callq 0x83f0
jmp 0x209ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2045c
movq -0x450(%rbp), %rdi
addq $0x30, %rdi
leaq -0x230(%rbp), %rsi
callq 0x33b00
jmp 0x2035b
movq -0x18(%rbp), %rsi
leaq -0x280(%rbp), %rdi
callq 0x6bae0
jmp 0x2036d
leaq -0x250(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0xd5c0
jmp 0x20382
leaq 0x4f6ee(%rip), %rdi     # 0x6fa77
leaq -0x250(%rbp), %rsi
callq 0xd8e0
movb %al, -0x4b2(%rbp)
jmp 0x2039d
leaq -0x250(%rbp), %rdi
callq 0x8848
leaq -0x280(%rbp), %rdi
callq 0x99b0
movb -0x4b2(%rbp), %al
testb $0x1, %al
jne 0x203c1
jmp 0x20401
movl $0x3, -0xf0(%rbp)
jmp 0x20429
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x203f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x8848
leaq -0x280(%rbp), %rdi
callq 0x99b0
jmp 0x2045c
movq -0x18(%rbp), %rsi
leaq -0x2b0(%rbp), %rdi
callq 0x6ae20
jmp 0x20413
leaq -0x2b0(%rbp), %rdi
callq 0x99b0
movl $0x0, -0xf0(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x33b70
movl -0xf0(%rbp), %eax
movl %eax, -0x4b8(%rbp)
testl %eax, %eax
je 0x20457
jmp 0x20447
movl -0x4b8(%rbp), %eax
subl $0x3, %eax
je 0x2046d
jmp 0x209e0
jmp 0x20251
leaq -0x230(%rbp), %rdi
callq 0x33b70
jmp 0x209ee
jmp 0x2046f
movq -0x18(%rbp), %rax
movq %rax, -0x4c8(%rbp)
leaq -0x2d1(%rbp), %rdi
movq %rdi, -0x4c0(%rbp)
callq 0x8760
movq -0x4c0(%rbp), %rdx
leaq 0x504d3(%rip), %rsi     # 0x7096e
leaq -0x2d0(%rbp), %rdi
callq 0xced0
jmp 0x204a9
movq -0x4c8(%rbp), %rdi
leaq -0x2d0(%rbp), %rsi
movl $0x1, %edx
callq 0x6da60
movb %al, -0x4c9(%rbp)
jmp 0x204c9
movb -0x4c9(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4ca(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x8848
leaq -0x2d1(%rbp), %rdi
callq 0x8460
movb -0x4ca(%rbp), %al
testb $0x1, %al
jne 0x204fb
jmp 0x20545
movb $0x0, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
jmp 0x209e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x20534
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x8848
leaq -0x2d1(%rbp), %rdi
callq 0x8460
jmp 0x209ee
movq -0x450(%rbp), %rdi
callq 0x33b90
movq %rax, -0x4d8(%rbp)
jmp 0x2055a
leaq -0x168(%rbp), %rdi
callq 0xd780
movq %rax, %rdi
callq 0xd970
movq %rax, -0x4e0(%rbp)
jmp 0x20577
movq -0x4d8(%rbp), %rax
movq -0x4e0(%rbp), %rcx
cmpq %rcx, %rax
je 0x2076f
leaq -0x168(%rbp), %rdi
callq 0xd780
movq %rax, %rdi
callq 0xd970
movq %rax, -0x4e8(%rbp)
jmp 0x205ab
movq -0x4e8(%rbp), %rsi
leaq -0x378(%rbp), %rdi
callq 0x33c80
jmp 0x205c0
leaq 0x4f4ec(%rip), %rsi     # 0x6fab3
leaq -0x358(%rbp), %rdi
leaq -0x378(%rbp), %rdx
callq 0x325f0
jmp 0x205dc
leaq 0x4f4f1(%rip), %rdx     # 0x6fad4
leaq -0x338(%rbp), %rdi
leaq -0x358(%rbp), %rsi
callq 0xe020
jmp 0x205f8
movq -0x450(%rbp), %rdi
callq 0x33b90
movq %rax, -0x4f0(%rbp)
jmp 0x2060d
movq -0x4f0(%rbp), %rsi
leaq -0x398(%rbp), %rdi
callq 0x33c80
jmp 0x20622
leaq -0x318(%rbp), %rdi
leaq -0x338(%rbp), %rsi
leaq -0x398(%rbp), %rdx
callq 0x33bb0
jmp 0x2063e
leaq 0x4f78e(%rip), %rdx     # 0x6fdd3
leaq -0x2f8(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0xe020
jmp 0x2065a
movq -0x450(%rbp), %rax
movl 0x8(%rax), %esi
leaq -0x2f8(%rbp), %rdi
callq 0x6d960
jmp 0x20672
leaq -0x2f8(%rbp), %rdi
callq 0x8848
leaq -0x318(%rbp), %rdi
callq 0x8848
leaq -0x398(%rbp), %rdi
callq 0x8848
leaq -0x338(%rbp), %rdi
callq 0x8848
leaq -0x358(%rbp), %rdi
callq 0x8848
leaq -0x378(%rbp), %rdi
callq 0x8848
movb $0x0, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
jmp 0x209e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2075e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x20752
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x20746
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2073a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x2072e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x8848
leaq -0x318(%rbp), %rdi
callq 0x8848
leaq -0x398(%rbp), %rdi
callq 0x8848
leaq -0x338(%rbp), %rdi
callq 0x8848
leaq -0x358(%rbp), %rdi
callq 0x8848
leaq -0x378(%rbp), %rdi
callq 0x8848
jmp 0x209ee
leaq -0x168(%rbp), %rdi
callq 0xd780
movq %rax, %rsi
movb $0x0, -0x411(%rbp)
movb $0x0, -0x412(%rbp)
leaq -0x3b8(%rbp), %rdi
callq 0xdbe0
jmp 0x2079a
leaq 0x4e962(%rip), %rdi     # 0x6f103
leaq -0x3b8(%rbp), %rsi
callq 0xd590
movb %al, -0x4f1(%rbp)
jmp 0x207b5
movb -0x4f1(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x4f2(%rbp)
jne 0x207cd
jmp 0x2086f
leaq -0x168(%rbp), %rdi
callq 0xd780
movq %rax, %rsi
leaq -0x410(%rbp), %rdi
callq 0xd910
jmp 0x207ea
movb $0x1, -0x411(%rbp)
leaq -0x3d8(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0xd940
jmp 0x20806
movb $0x1, -0x412(%rbp)
leaq 0x4e820(%rip), %rdi     # 0x6f034
leaq -0x3d8(%rbp), %rsi
callq 0xd590
movb %al, -0x4f3(%rbp)
jmp 0x20828
movb -0x4f3(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x4f2(%rbp)
jne 0x2083d
jmp 0x2086f
leaq -0x168(%rbp), %rdi
callq 0xd780
movq %rax, %rdi
callq 0xd970
movq %rax, -0x500(%rbp)
jmp 0x2085a
movq -0x500(%rbp), %rcx
xorl %eax, %eax
cmpq %rcx, %rax
sete %al
movb %al, -0x4f2(%rbp)
movb -0x4f2(%rbp), %al
movb %al, -0x501(%rbp)
testb $0x1, -0x412(%rbp)
jne 0x20886
jmp 0x20892
leaq -0x3d8(%rbp), %rdi
callq 0x8848
testb $0x1, -0x411(%rbp)
jne 0x2089d
jmp 0x208a9
leaq -0x410(%rbp), %rdi
callq 0xd440
leaq -0x3b8(%rbp), %rdi
callq 0x8848
movb -0x501(%rbp), %al
testb $0x1, %al
jne 0x208c4
jmp 0x209d2
leaq -0x439(%rbp), %rdi
movq %rdi, -0x510(%rbp)
callq 0x8760
movq -0x510(%rbp), %rdx
leaq 0x4f203(%rip), %rsi     # 0x6fae8
leaq -0x438(%rbp), %rdi
callq 0xced0
jmp 0x208f3
movq -0x450(%rbp), %rax
movl 0x8(%rax), %esi
leaq -0x438(%rbp), %rdi
callq 0x6d960
jmp 0x2090b
leaq -0x438(%rbp), %rdi
callq 0x8848
leaq -0x439(%rbp), %rdi
callq 0x8460
movb $0x0, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
jmp 0x209e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x20990
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x20977
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
testb $0x1, -0x412(%rbp)
jne 0x20969
jmp 0x20975
leaq -0x3d8(%rbp), %rdi
callq 0x8848
jmp 0x20977
testb $0x1, -0x411(%rbp)
jne 0x20982
jmp 0x2098e
leaq -0x410(%rbp), %rdi
callq 0xd440
jmp 0x20990
leaq -0x3b8(%rbp), %rdi
callq 0x8848
jmp 0x209ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x209c4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x438(%rbp), %rdi
callq 0x8848
leaq -0x439(%rbp), %rdi
callq 0x8460
jmp 0x209ee
movb $0x1, -0x1(%rbp)
movl $0x1, -0xf0(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x94c0
jmp 0x209fc
leaq -0x168(%rbp), %rdi
callq 0x94c0
jmp 0x20a16
leaq -0xa8(%rbp), %rdi
callq 0x99b0
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x510, %rsp            # imm = 0x510
popq %rbp
retq
leaq -0xa8(%rbp), %rdi
callq 0x99b0
movq -0x70(%rbp), %rdi
callq 0x8750
nopl (%rax,%rax)