// File: /workspace/github_cpp_makefile_star2_O2/rfotino[P]consolite-compiler/src/syntax.cpp
// Function: ExprToken::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 ExprToken::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) {
  std::string prev;
  std::stack<std::string> parens;
  std::stack<std::shared_ptr<Token>> opStack;
  while (true) {
    AtomToken t = tokenizer->peekNext();
    if (-1 == _lineNum) {
      _lineNum = t.line();
    }
    std::shared_ptr<LiteralToken> literal(new LiteralToken());
    std::shared_ptr<OperatorToken> op(new OperatorToken());
    if ("(" == t.str()) {
      if (!prev.empty() && "(" != prev && "op" != prev) {
        _error("Unexpected token '" + t.str() + "' in expression.", t.line());
        return false;
      }
      prev = t.str();
      parens.push(t.str());
      opStack.push(std::shared_ptr<Token>(new AtomToken("(", t.line())));
    } else if (")" == t.str() || "]" == t.str()) {
      if ((!parens.empty() && otherParen(t.str()) != parens.top()) ||
          (")" != prev && "val" != prev)) {
        _error("Unexpected token '" + t.str() + "' in expression.", t.line());
        return false;
      } else if (parens.empty()) {
        break;
      }
      // Pop operators off the stack until we reach a corresponding "("
      while (!opStack.empty() &&
             std::dynamic_pointer_cast<OperatorToken>(opStack.top())) {
        _postfix.push_back(opStack.top());
        opStack.pop();
      }
      // Pop off the "("
      opStack.pop();
      parens.pop();
      prev = ")";
    } else if (literal->parse(t)) {
      if (!prev.empty() && "(" != prev && "op" != prev) {
        _error("Unexpected token '" + t.str() + "' in expression.", t.line());
        return false;
      }
      prev = "val";
      _postfix.push_back(literal);
    } else if (op->parse(t)) {
      // Determine if the operator is binary or unary.
      if (op->maybeBinary() && (")" == prev || "val" == prev)) {
        op->setBinary();
      } else if (op->maybeUnary() &&
                 (prev.empty() || "(" == prev || "op" == prev)) {
        op->setUnary();
      } else {
        _error("Unexpected token '" + t.str() + "' in expression.", t.line());
        return false;
      }
      // Handle the operator stack based on precedence.
      std::shared_ptr<OperatorToken> topOp;
      while (!opStack.empty() &&
             (topOp = std::dynamic_pointer_cast<OperatorToken>(opStack.top()))) {
        if (op->precedence() < topOp->precedence()) {
          break;
        } else if (op->precedence() == topOp->precedence()) {
          if (op->leftToRight()) {
            _postfix.push_back(opStack.top());
            opStack.pop();
          }
          break;
        } else {
          _postfix.push_back(opStack.top());
          opStack.pop();
        }
      }
      opStack.push(op);
      // If it's an open square bracket, add it to the parentheses stack.
      // Also push an open parenthesis to the operator stack, since the
      // expression inside [] is treated as if it were parenthesized.
      if ("[" == t.str()) {
        parens.push(t.str());
        opStack.push(std::shared_ptr<Token>(new AtomToken("(", op->line())));
      }
      prev = "op";
    } else if (isValidName(t.str())) {
      auto globalVar = getGlobal(t.str(), globals);
      auto function = getFunction(t.str(), functions);
      auto param = getParameter(t.str(), parameters);
      auto localVar = getLocal(t.str(), localVars);
      if (nullptr != globalVar) {
        // If the name represents a global variable, push it onto the stack
        _postfix.push_back(globalVar);
        prev = "val";
      } else if (nullptr != param) {
        // If the name represents a parameter, push it onto the stack
        _postfix.push_back(param);
        prev = "val";
      } else if (nullptr != localVar) {
        // If the name represents a parameter, push it onto the stack
        _postfix.push_back(localVar);
        prev = "val";
      } else if (nullptr != function) {
        // If the function returns void, this is an error. We can't have
        // void functions mixed in with expressions.
        if ("void" == function->type().name()) {
          _error("Function call to 'void " + function->name() + "()' not "
                 "allowed in expression.",
                 t.line());
          return false;
        }
        // If it is not void, parse the function call.
        std::shared_ptr<FunctionCallToken> fnCall(new FunctionCallToken());
        if (!fnCall->parse(tokenizer, functions, globals,
                           parameters, localVars)) {
          return false;
        }
        _postfix.push_back(fnCall);
        prev = "val";
        // Continue so we don't consume an extra token at the end, all
        // tokens have been consumed already for the function call.
        continue;
      } else {
        _error("Unknown token '" + t.str() + "'.", t.line());
        return false;
      }
    } else if (t.str().empty()) {
      if (!parens.empty() || (")" != prev && "val" != prev)) {
        _error("Unexpected EOF in expression.", t.line());
        return false;
      }
      break;
    } else {
      if (!parens.empty() || (")" != prev && "val" != prev)) {
        _error("Unexpected token '" + t.str() + "' in expression.", t.line());
        return false;
      }
      break;
    }
    // We actually used the token we peeked at, so consume it here.
    tokenizer->getNext();
  }
  // Pop any remaining operators off the stack.
  while (!opStack.empty()) {
    _postfix.push_back(opStack.top());
    opStack.pop();
  }
  // Validate the expression for further errors.
  if (!_validate()) {
    return false;
  }
  // Evaluate the expression, if it is known at compile-time.
  _evaluate();
  // Flag variables that are not able to be stored in registers due to
  // address-of operations.
  _flagNonRegs();
  return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x268, %rsp            # imm = 0x268
movq %r9, 0x138(%rsp)
movq %r8, 0x140(%rsp)
movq %rcx, 0x150(%rsp)
movq %rdx, 0x148(%rsp)
movq %rsi, 0xe0(%rsp)
movq %rdi, 0x20(%rsp)
leaq 0xa0(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x1a8(%rsp), %rdi
callq 0x9bde
leaq 0xe8(%rsp), %rdi
callq 0x18390
movq 0x20(%rsp), %rax
leaq 0x10(%rax), %r13
leaq 0xb0(%rsp), %rbp
leaq 0x58(%rsp), %rbx
movq %rbp, %rdi
movq 0xe0(%rsp), %rsi
callq 0x279a6
movq 0x20(%rsp), %rax
cmpl $-0x1, 0x8(%rax)
jne 0xe654
movl 0xb8(%rsp), %eax
movq 0x20(%rsp), %rcx
movl %eax, 0x8(%rcx)
pushq $0x10
popq %rdi
callq 0x72b0
orl $-0x1, 0x8(%rax)
leaq 0x2fd59(%rip), %rcx     # 0x3e3c0
movq %rcx, (%rax)
andw $0x0, 0xc(%rax)
leaq 0x198(%rsp), %rdi
movq %rax, %rsi
callq 0x24bd2
pushq $0x38
popq %rdi
callq 0x72b0
xorps %xmm0, %xmm0
movaps %xmm0, (%rax)
movaps %xmm0, 0x10(%rax)
movaps %xmm0, 0x20(%rax)
andq $0x0, 0x30(%rax)
movq %rax, %rcx
orl $-0x1, 0x8(%rax)
addq $0x20, %rcx
leaq 0x2fd44(%rip), %rdx     # 0x3e3f0
movq %rdx, (%rax)
movq %rcx, 0x10(%rax)
movb $0x0, 0x20(%rax)
leaq 0x48(%rsp), %rdi
movq %rax, %rsi
callq 0x24bde
movq %rbx, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x73e0
leaq 0x1a9ce(%rip), %rdi     # 0x290a9
movq %rbx, %rsi
callq 0x97dd
movl %eax, %r14d
movq %rbx, %rdi
callq 0x75c8
testb %r14b, %r14b
je 0xe78c
cmpq $0x0, 0x98(%rsp)
leaq 0x90(%rsp), %r14
je 0xe7c0
leaq 0x1a994(%rip), %rdi     # 0x290a9
movq %r14, %rsi
callq 0x9976
testb %al, %al
je 0xe7c0
leaq 0x1b178(%rip), %rdi     # 0x298a4
movq %r14, %rsi
callq 0x9976
testb %al, %al
je 0xe7c0
leaq 0x28(%rsp), %r14
movq %r14, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x73e0
movq %rsp, %r15
movq %r15, %rdi
leaq 0x1b149(%rip), %rsi     # 0x298a7
movq %r14, %rdx
callq 0x1832f
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x1af6e(%rip), %rdx     # 0x296e1
callq 0x9ad4
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x285f3
jmp 0xe9ef
movq %rbx, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x73e0
leaq 0x1c13b(%rip), %rdi     # 0x2a8de
movq %rbx, %rsi
callq 0x97dd
testb %al, %al
je 0xe874
movq %rbx, %rdi
callq 0x75c8
jmp 0xe8b2
movq %rbx, %rdi
leaq 0xc0(%rsp), %r15
movq %r15, %rsi
callq 0x73e0
movq %r14, %rdi
movq %rbx, %rsi
callq 0x7360
movq %rbx, %rdi
callq 0x75c8
movq %rbx, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x1a8(%rsp), %rdi
movq %rbx, %rsi
callq 0x24caa
movq %rbx, %rdi
callq 0x75c8
pushq $0x30
popq %rdi
callq 0x72b0
movq %rax, %r14
movq %rbx, %rdi
leaq 0x1a88b(%rip), %rsi     # 0x290a9
leaq 0x28(%rsp), %rdx
callq 0x9502
movb $0x1, %bpl
movl 0xb8(%rsp), %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x183ac
movq %rsp, %r15
xorl %ebp, %ebp
movq %r15, %rdi
movq %r14, %rsi
callq 0x24f0c
leaq 0xe8(%rsp), %rdi
movq %r15, %rsi
callq 0x24fc4
leaq 0x8(%rsp), %rdi
callq 0x7a34
movq %rbx, %rdi
callq 0x75c8
jmp 0xf146
movq %rsp, %r15
movq %r15, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x73e0
leaq 0x1b014(%rip), %rdi     # 0x298a2
movq %r15, %rsi
callq 0x97dd
movl %eax, %r14d
movq %r15, %rdi
callq 0x75c8
movq %rbx, %rdi
callq 0x75c8
testb %r14b, %r14b
je 0xeafa
movq 0x1b8(%rsp), %r15
movq 0x1d8(%rsp), %rbp
cmpq %r15, %rbp
leaq 0x90(%rsp), %r14
je 0xe94e
leaq 0x1f8(%rsp), %r12
movq %r12, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x73e0
leaq 0x218(%rsp), %rdi
movq %r12, %rsi
callq 0x27f59
movq 0x1d8(%rsp), %rsi
cmpq 0x1e0(%rsp), %rsi
jne 0xe91d
movq 0x1f0(%rsp), %rax
movq -0x8(%rax), %rsi
movl $0x200, %eax            # imm = 0x200
addq %rax, %rsi
addq $-0x20, %rsi
leaq 0x218(%rsp), %rdi
callq 0x9aab
testb %al, %al
je 0xe94e
leaq 0x218(%rsp), %rdi
callq 0x75c8
leaq 0x1f8(%rsp), %rdi
callq 0x75c8
jmp 0xe9a4
leaq 0x1bf89(%rip), %rdi     # 0x2a8de
movq %r14, %rsi
callq 0x9976
testb %al, %al
je 0xea12
leaq 0x1af4e(%rip), %rdi     # 0x298ba
movq %r14, %rsi
callq 0x9976
movl %eax, %r14d
cmpq %r15, %rbp
je 0xe996
leaq 0x218(%rsp), %rdi
callq 0x75c8
leaq 0x1f8(%rsp), %rdi
callq 0x75c8
testb %r14b, %r14b
leaq 0x60(%rsp), %rbp
je 0xea36
leaq 0x28(%rsp), %r14
movq %r14, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x73e0
movq %rsp, %r15
movq %r15, %rdi
leaq 0x1aee1(%rip), %rsi     # 0x298a7
movq %r14, %rdx
callq 0x1832f
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x1ad06(%rip), %rdx     # 0x296e1
callq 0x9ad4
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x285f3
movq %rbx, %rdi
callq 0x75c8
movq %rsp, %rdi
callq 0x75c8
leaq 0x28(%rsp), %rdi
callq 0x75c8
pushq $0x1
popq %r14
jmp 0xf16b
cmpq %r15, %rbp
leaq 0x60(%rsp), %rbp
je 0xea36
leaq 0x218(%rsp), %rdi
callq 0x75c8
leaq 0x1f8(%rsp), %rdi
callq 0x75c8
movq 0x1d8(%rsp), %rax
pushq $0x3
popq %r14
cmpq 0x1b8(%rsp), %rax
je 0xf16b
leaq 0x90(%rsp), %r14
movq 0x118(%rsp), %rsi
cmpq 0xf8(%rsp), %rsi
je 0xeba7
cmpq 0x120(%rsp), %rsi
jne 0xea8c
movq 0x130(%rsp), %rax
movq -0x8(%rax), %rsi
movl $0x200, %eax            # imm = 0x200
addq %rax, %rsi
addq $-0x10, %rsi
movq %rbx, %rdi
callq 0x183d8
movq 0x58(%rsp), %r14
movq %rbp, %rdi
callq 0x7a34
testq %r14, %r14
leaq 0x90(%rsp), %r14
je 0xeba7
movq 0x118(%rsp), %rsi
cmpq 0x120(%rsp), %rsi
jne 0xeadc
movq 0x130(%rsp), %rax
movq -0x8(%rax), %rsi
movl $0x200, %eax            # imm = 0x200
addq %rax, %rsi
addq $-0x10, %rsi
movq %r13, %rdi
callq 0x1842e
leaq 0xe8(%rsp), %rdi
callq 0x252f8
jmp 0xea58
movq 0x198(%rsp), %rdi
movq %rbp, %rsi
callq 0xb584
testb %al, %al
je 0xebd5
cmpq $0x0, 0x98(%rsp)
leaq 0x90(%rsp), %r14
je 0xed83
leaq 0x1a579(%rip), %rdi     # 0x290a9
movq %r14, %rsi
callq 0x9976
testb %al, %al
je 0xed83
leaq 0x1ad5d(%rip), %rdi     # 0x298a4
movq %r14, %rsi
callq 0x9976
testb %al, %al
je 0xed83
leaq 0x28(%rsp), %r14
movq %r14, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x73e0
movq %rsp, %r15
movq %r15, %rdi
leaq 0x1ad2e(%rip), %rsi     # 0x298a7
movq %r14, %rdx
callq 0x1832f
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x1ab53(%rip), %rdx     # 0x296e1
callq 0x9ad4
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x285f3
jmp 0xe9ef
leaq 0xe8(%rsp), %rdi
callq 0x252f8
leaq 0x1a8(%rsp), %rdi
callq 0x25368
movq %r14, %rdi
leaq 0x1bd13(%rip), %rsi     # 0x2a8de
callq 0x7580
jmp 0xf146
movq 0x48(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0xb824
testb %al, %al
je 0xedb7
movq 0x48(%rsp), %rdi
callq 0xbc60
testb %al, %al
je 0xec2e
leaq 0x1bcda(%rip), %rdi     # 0x2a8de
leaq 0x90(%rsp), %r14
movq %r14, %rsi
callq 0x97dd
movb $0x1, %bpl
testb %al, %al
jne 0xec87
leaq 0x1ac98(%rip), %rdi     # 0x298ba
movq %r14, %rsi
callq 0x97dd
testb %al, %al
jne 0xec87
movq 0x48(%rsp), %rdi
callq 0xbff6
testb %al, %al
leaq 0x90(%rsp), %r14
leaq 0xc0(%rsp), %r15
je 0xef4b
cmpq $0x0, 0x98(%rsp)
je 0xec85
leaq 0x1a447(%rip), %rdi     # 0x290a9
movq %r14, %rsi
callq 0x97dd
testb %al, %al
jne 0xec85
leaq 0x1ac2f(%rip), %rdi     # 0x298a4
movq %r14, %rsi
callq 0x97dd
testb %al, %al
je 0xef4b
xorl %ebp, %ebp
movq 0x48(%rsp), %rax
movb %bpl, 0x30(%rax)
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
leaq 0xc0(%rsp), %r15
movq 0x118(%rsp), %rsi
cmpq 0xf8(%rsp), %rsi
je 0xf041
cmpq 0x120(%rsp), %rsi
jne 0xecd3
movq 0x130(%rsp), %rax
movq -0x8(%rax), %rsi
movl $0x200, %eax            # imm = 0x200
addq %rax, %rsi
addq $-0x10, %rsi
movq %rbx, %rdi
callq 0x183d8
movq %rsp, %rdi
movq %rbx, %rsi
callq 0x253dc
movq (%rsp), %r14
leaq 0x60(%rsp), %rdi
callq 0x7a34
testq %r14, %r14
je 0xf041
movq 0x48(%rsp), %rdi
callq 0xc1e2
movl %eax, %r14d
movq (%rsp), %rdi
callq 0xc1e2
cmpl %eax, %r14d
jl 0xf041
movq 0x48(%rsp), %rdi
callq 0xc1e2
movl %eax, %r14d
movq (%rsp), %rdi
callq 0xc1e2
cmpl %eax, %r14d
je 0xeff7
movq 0x118(%rsp), %rsi
cmpq 0x120(%rsp), %rsi
jne 0xed65
movq 0x130(%rsp), %rax
movq -0x8(%rax), %rsi
movl $0x200, %eax            # imm = 0x200
addq %rax, %rsi
addq $-0x10, %rsi
movq %r13, %rdi
callq 0x1842e
leaq 0xe8(%rsp), %rdi
callq 0x252f8
jmp 0xec9f
movq %r14, %rdi
leaq 0x1ab2d(%rip), %rsi     # 0x298ba
callq 0x7580
movq %rbx, %rdi
leaq 0x198(%rsp), %rsi
callq 0x253c8
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2483a
leaq 0x60(%rsp), %rdi
jmp 0xf141
movq %rbx, %rdi
leaq 0xc0(%rsp), %r15
movq %r15, %rsi
callq 0x73e0
movq %rbx, %rdi
callq 0x2804b
movl %eax, %r14d
movq %rbx, %rdi
callq 0x75c8
testb %r14b, %r14b
je 0xeec1
movq %rbx, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x158(%rsp), %rdi
movq %rbx, %rsi
movq 0x150(%rsp), %rdx
callq 0x28490
movq %rbx, %rdi
callq 0x75c8
movq %rbx, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x188(%rsp), %rdi
movq %rbx, %rsi
movq 0x148(%rsp), %rdx
callq 0x283f4
movq %rbx, %rdi
callq 0x75c8
movq %rbx, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x178(%rsp), %rdi
movq %rbx, %rsi
movq 0x140(%rsp), %rdx
callq 0x282bc
movq %rbx, %rdi
callq 0x75c8
movq %rbx, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x168(%rsp), %rdi
movq %rbx, %rsi
movq 0x138(%rsp), %rdx
callq 0x28358
movq %rbx, %rdi
callq 0x75c8
cmpq $0x0, 0x158(%rsp)
je 0xefc8
movq %rbx, %rdi
leaq 0x158(%rsp), %rsi
callq 0x2541e
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2483a
jmp 0xf253
movq %rbx, %rdi
movq %r15, %rsi
callq 0x73e0
movq 0x60(%rsp), %r14
movq %rbx, %rdi
callq 0x75c8
movq 0x1b8(%rsp), %rax
movq 0x1d8(%rsp), %rcx
testq %r14, %r14
je 0xef96
cmpq %rax, %rcx
je 0xf1aa
leaq 0x28(%rsp), %r14
movq %r14, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x73e0
movq %rsp, %r15
movq %r15, %rdi
leaq 0x1a98a(%rip), %rsi     # 0x298a7
movq %r14, %rdx
callq 0x1832f
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x1a7af(%rip), %rdx     # 0x296e1
callq 0x9ad4
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x285f3
jmp 0xe9ef
leaq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x73e0
movq %rsp, %r15
movq %r15, %rdi
leaq 0x1a93f(%rip), %rsi     # 0x298a7
movq %r14, %rdx
callq 0x1832f
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x1a764(%rip), %rdx     # 0x296e1
callq 0x9ad4
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x285f3
jmp 0xe9ef
cmpq %rax, %rcx
je 0xf1e8
movq %rbx, %rdi
leaq 0x1a95c(%rip), %rsi     # 0x29905
movq %rsp, %rdx
callq 0x9502
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x285f3
movq %rbx, %rdi
jmp 0xea04
cmpq $0x0, 0x178(%rsp)
je 0xf22d
movq %rbx, %rdi
leaq 0x178(%rsp), %rsi
callq 0x25432
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2483a
jmp 0xf253
movq 0x48(%rsp), %rax
cmpb $0x1, 0x30(%rax)
jne 0xf041
movq 0x118(%rsp), %rsi
cmpq 0x120(%rsp), %rsi
jne 0xf028
movq 0x130(%rsp), %rax
movq -0x8(%rax), %rsi
movl $0x200, %eax            # imm = 0x200
addq %rax, %rsi
addq $-0x10, %rsi
movq %r13, %rdi
callq 0x1842e
leaq 0xe8(%rsp), %rdi
callq 0x252f8
movq %rbx, %rdi
leaq 0x48(%rsp), %rsi
callq 0x2540a
leaq 0xe8(%rsp), %rdi
movq %rbx, %rsi
callq 0x24fc4
leaq 0x60(%rsp), %rdi
callq 0x7a34
movq %rbx, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x1a57a(%rip), %rdi     # 0x295f4
movq %rbx, %rsi
callq 0x97dd
movl %eax, %r14d
movq %rbx, %rdi
callq 0x75c8
testb %r14b, %r14b
leaq 0x90(%rsp), %r12
je 0xf12d
movq %rbx, %rdi
movq %r15, %rsi
callq 0x73e0
leaq 0x1a8(%rsp), %rdi
movq %rbx, %rsi
callq 0x24caa
movq %rbx, %rdi
callq 0x75c8
pushq $0x30
popq %rdi
callq 0x72b0
movq %rax, %r15
movq %rbx, %rdi
leaq 0x19fd3(%rip), %rsi     # 0x290a9
leaq 0x158(%rsp), %rdx
callq 0x9502
movq 0x48(%rsp), %rax
movl 0x8(%rax), %edx
movb $0x1, %bpl
movq %r15, %rdi
movq %rbx, %rsi
callq 0x183ac
leaq 0x28(%rsp), %r14
xorl %ebp, %ebp
movq %r14, %rdi
movq %r15, %rsi
callq 0x24f0c
leaq 0xe8(%rsp), %rdi
movq %r14, %rsi
callq 0x24fc4
leaq 0x30(%rsp), %rdi
callq 0x7a34
movq %rbx, %rdi
callq 0x75c8
movq %r12, %rdi
leaq 0x1a76d(%rip), %rsi     # 0x298a4
callq 0x7580
leaq 0x8(%rsp), %rdi
callq 0x7a34
leaq 0x238(%rsp), %rdi
movq 0xe0(%rsp), %rsi
callq 0x2772c
leaq 0x238(%rsp), %rdi
callq 0x7b20
xorl %r14d, %r14d
leaq 0x50(%rsp), %rdi
callq 0x7a34
leaq 0x1a0(%rsp), %rdi
callq 0x7a34
leaq 0xb0(%rsp), %rbp
movq %rbp, %rdi
callq 0x7b20
testl %r14d, %r14d
je 0xe62a
cmpl $0x2, %r14d
je 0xe62a
jmp 0xf493
leaq 0x1b72d(%rip), %rdi     # 0x2a8de
leaq 0x90(%rsp), %rsi
callq 0x9976
pushq $0x3
popq %r14
testb %al, %al
je 0xf16b
leaq 0x1a6ed(%rip), %rdi     # 0x298ba
leaq 0x90(%rsp), %rsi
callq 0x9976
pushq $0x3
popq %r14
testb %al, %al
jne 0xeefb
jmp 0xf16b
leaq 0x1b6ef(%rip), %rdi     # 0x2a8de
leaq 0x90(%rsp), %rsi
callq 0x9976
pushq $0x3
popq %r14
testb %al, %al
je 0xf16b
leaq 0x1a6ab(%rip), %rdi     # 0x298ba
leaq 0x90(%rsp), %rsi
callq 0x9976
pushq $0x3
popq %r14
testb %al, %al
jne 0xef9f
jmp 0xf16b
cmpq $0x0, 0x168(%rsp)
je 0xf2b6
movq %rbx, %rdi
leaq 0x168(%rsp), %rsi
callq 0x25446
movq %r13, %rdi
movq %rbx, %rsi
callq 0x2483a
leaq 0x60(%rsp), %rdi
callq 0x7a34
xorl %r14d, %r14d
leaq 0x90(%rsp), %rdi
leaq 0x1a64b(%rip), %rsi     # 0x298ba
callq 0x7580
leaq 0x170(%rsp), %rdi
callq 0x7a34
leaq 0x180(%rsp), %rdi
callq 0x7a34
leaq 0x190(%rsp), %rdi
callq 0x7a34
leaq 0x160(%rsp), %rdi
callq 0x7a34
testl %r14d, %r14d
jne 0xf16b
jmp 0xf146
movq 0x188(%rsp), %rsi
testq %rsi, %rsi
je 0xf35f
addq $0x20, %rsi
movq %rbx, %rdi
callq 0x9b54
movq %rsp, %r15
movq %r15, %rdi
leaq 0x68(%rsp), %rsi
callq 0x73e0
leaq 0x19d46(%rip), %rdi     # 0x29030
movq %r15, %rsi
callq 0x97dd
movl %eax, %r14d
movq %r15, %rdi
callq 0x75c8
movq %rbx, %rdi
callq 0x97a8
testb %r14b, %r14b
je 0xf3c8
movq 0x188(%rsp), %rsi
addq $0x58, %rsi
leaq 0x28(%rsp), %r14
movq %r14, %rdi
callq 0x73e0
movq %rsp, %r15
movq %r15, %rdi
leaq 0x1a58a(%rip), %rsi     # 0x298be
movq %r14, %rdx
callq 0x1832f
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x1a58d(%rip), %rdx     # 0x298d6
callq 0x9ad4
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x285f3
jmp 0xf3a5
leaq 0x28(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x73e0
movq %rsp, %r15
movq %r15, %rdi
leaq 0x1a579(%rip), %rsi     # 0x298f5
movq %r14, %rdx
callq 0x1832f
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x1a9b1(%rip), %rdx     # 0x29d42
callq 0x9ad4
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x285f3
movq %rbx, %rdi
callq 0x75c8
movq %rsp, %rdi
callq 0x75c8
leaq 0x28(%rsp), %rdi
callq 0x75c8
pushq $0x1
popq %r14
jmp 0xf274
pushq $0x48
popq %rdi
callq 0x72b0
xorps %xmm0, %xmm0
movaps %xmm0, (%rax)
movaps %xmm0, 0x10(%rax)
movaps %xmm0, 0x20(%rax)
movq %rax, %rcx
orl $-0x1, 0x8(%rax)
addq $0x20, %rcx
leaq 0x2f030(%rip), %rdx     # 0x3e420
movq %rdx, (%rax)
movq %rcx, 0x10(%rax)
movb $0x0, 0x20(%rax)
movups %xmm0, 0x30(%rax)
andq $0x0, 0x40(%rax)
movq %rbx, %rdi
movq %rax, %rsi
callq 0x2545a
movq 0x58(%rsp), %rdi
movq 0xe0(%rsp), %rsi
movq 0x148(%rsp), %rdx
movq 0x150(%rsp), %rcx
movq 0x140(%rsp), %r8
movq 0x138(%rsp), %r9
callq 0xf8c8
pushq $0x1
popq %r14
testb %al, %al
je 0xf484
movq %rsp, %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x25536
movq %r13, %rdi
movq %r14, %rsi
callq 0x2483a
leaq 0x8(%rsp), %rdi
callq 0x7a34
leaq 0x90(%rsp), %rdi
leaq 0x1a43f(%rip), %rsi     # 0x298ba
callq 0x7580
pushq $0x2
popq %r14
leaq 0x60(%rsp), %rdi
callq 0x7a34
jmp 0xf274
cmpl $0x3, %r14d
jne 0xf50e
movl $0x200, %r14d           # imm = 0x200
leaq 0xe8(%rsp), %rbx
movq 0x118(%rsp), %rsi
cmpq 0xf8(%rsp), %rsi
je 0xf4e8
cmpq 0x120(%rsp), %rsi
jne 0xf4d2
movq 0x130(%rsp), %rax
movq -0x8(%rax), %rsi
addq %r14, %rsi
addq $-0x10, %rsi
movq %r13, %rdi
callq 0x1842e
movq %rbx, %rdi
callq 0x252f8
jmp 0xf4a7
movq 0x20(%rsp), %rdi
callq 0xffca
testb %al, %al
je 0xf50e
movq 0x20(%rsp), %rdi
callq 0x10528
movb $0x1, %bl
movq 0x20(%rsp), %rdi
callq 0x10ae0
jmp 0xf510
xorl %ebx, %ebx
leaq 0xe8(%rsp), %rdi
callq 0x18a04
leaq 0x1a8(%rsp), %rdi
callq 0xa0da
leaq 0x90(%rsp), %rdi
callq 0x75c8
movl %ebx, %eax
addq $0x268, %rsp            # imm = 0x268
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x7a34
jmp 0xf5f2
jmp 0xf568
jmp 0xf577
jmp 0xf584
jmp 0xf64a
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
jmp 0xf57a
movq %rax, %rbx
movq %rsp, %rdi
callq 0x75c8
jmp 0xf587
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x75c8
jmp 0xf64d
jmp 0xf64a
jmp 0xf5ef
jmp 0xf64a
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x97a8
jmp 0xf64d
jmp 0xf64a
jmp 0xf5ef
jmp 0xf5ef
jmp 0xf77a
jmp 0xf7d1
jmp 0xf741
jmp 0xf750
jmp 0xf75d
jmp 0xf7d1
jmp 0xf741
jmp 0xf750
jmp 0xf75d
jmp 0xf7d1
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x7a34
jmp 0xf64d
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x7a34
xorl %ebp, %ebp
jmp 0xf6cf
movq %rax, %rbx
jmp 0xf6de
jmp 0xf72f
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
jmp 0xf732
jmp 0xf72f
jmp 0xf741
jmp 0xf750
jmp 0xf75d
jmp 0xf7d1
movq %rax, %rbx
leaq 0x170(%rsp), %rdi
callq 0x7a34
jmp 0xf66e
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
jmp 0xf66e
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
callq 0x7a34
leaq 0x190(%rsp), %rdi
callq 0x7a34
leaq 0x160(%rsp), %rdi
jmp 0xf737
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
jmp 0xf67b
movq %rax, %rbx
jmp 0xf67b
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
jmp 0xf688
movq %rax, %rbx
jmp 0xf688
jmp 0xf77a
jmp 0xf7d1
jmp 0xf7d1
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
testb %bpl, %bpl
je 0xf732
pushq $0x30
popq %rsi
movq %r15, %rdi
callq 0x72c0
jmp 0xf732
jmp 0xf72f
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x7a34
jmp 0xf732
jmp 0xf72f
jmp 0xf7c8
jmp 0xf77a
jmp 0xf7d1
movq %rax, %rbx
jmp 0xf805
movq %rax, %rbx
jmp 0xf812
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
jmp 0xf737
jmp 0xf741
jmp 0xf750
jmp 0xf75d
jmp 0xf7d1
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x7a34
jmp 0xf7d4
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
jmp 0xf753
movq %rax, %rbx
movq %rsp, %rdi
callq 0x75c8
jmp 0xf760
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
jmp 0xf782
jmp 0xf7d1
movq %rax, %rbx
leaq 0x1f8(%rsp), %rdi
jmp 0xf782
jmp 0xf7d1
jmp 0xf77a
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
jmp 0xf7d4
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x7a34
xorl %ebp, %ebp
jmp 0xf7ac
movq %rax, %rbx
jmp 0xf7bb
jmp 0xf7d1
jmp 0xf7d1
jmp 0xf7d1
jmp 0xf7c8
jmp 0xf7d1
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x75c8
testb %bpl, %bpl
je 0xf7d4
pushq $0x30
popq %rsi
movq %r14, %rdi
callq 0x72c0
jmp 0xf7d4
movq %rax, %rbx
jmp 0xf7f8
jmp 0xf7d1
jmp 0xf7d1
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x7a34
leaq 0x1a0(%rsp), %rdi
callq 0x7a34
leaq 0xb0(%rsp), %rdi
callq 0x7b20
leaq 0xe8(%rsp), %rdi
callq 0x18a04
leaq 0x1a8(%rsp), %rdi
callq 0xa0da
leaq 0x90(%rsp), %rdi
callq 0x75c8
movq %rbx, %rdi
callq 0x7510
movq %rax, %rbx
jmp 0xf7eb
movq %rax, %rbx
jmp 0xf7de
nop