// File: /workspace/github_cpp_makefile_star2_O2/pranavmodx[P]modlang/src/evaluator.cpp
// Function: Evaluator::Eval(Node*, Environment*)
Object *Evaluator::Eval(Node *node, Environment *env)
{
	std::string nodeType = node->nodeType();

	// Statements
	if (nodeType == "Program")
		return evalProgram(((Program *)node), env);

	else if (nodeType == "ExpressionStatement")
		return Eval(((ExpressionStatement *)node)->expression, env);

	else if (nodeType == "BlockStatement")
		return evalBlockStatement(((BlockStatement *)node), env);

	else if (nodeType == "ReturnStatement")
	{
		Object *value = Eval(((ReturnStatement *)node)->returnValue, env);

		if (value->type() == ERROR_OBJ)
			return value;

		ReturnValue *returnValue = new ReturnValue(value);
		return returnValue;
	}

	else if (nodeType == "LetStatement")
	{
		Object *value = Eval(((LetStatement *)node)->value, env);

		if (value->type() == ERROR_OBJ)
			return value;

		env->Set((((LetStatement *)node)->name).value, value);
	}

	else if (nodeType == "AssignStatement")
	{
		Object *value = Eval(((AssignStatement *)node)->value, env);

		if (value->type() == ERROR_OBJ)
			return value;

		Object *obj = env->Get((((AssignStatement *)node)->name).value);

		if (obj->type() == ERROR_OBJ)
			return obj;

		env->Set((((AssignStatement *)node)->name).value, value);
	}

	// Expressions
	else if (nodeType == "IntegerLiteral")
	{
		Integer *integer = new Integer(((IntegerLiteral *)node)->value);
		return integer;
	}

	else if (nodeType == "BooleanLiteral")
	{
		return ((BooleanLiteral *)node)->value ? __TRUE : __FALSE;
	}

	else if (nodeType == "StringLiteral")
	{
		String *str = new String(((StringLiteral *)node)->value);
		return str;
	}

	else if (nodeType == "PrefixExpression")
	{
		Object *right = Eval(((PrefixExpression *)node)->right, env);
		if (right->type() == ERROR_OBJ)
			return right;

		return evalPrefixExpression(((PrefixExpression *)node)->operand, right);
	}

	else if (nodeType == "InfixExpression")
	{
		Object *left = Eval(((InfixExpression *)node)->left, env);
		if (left->type() == ERROR_OBJ)
			return left;

		Object *right = Eval(((InfixExpression *)node)->right, env);
		if (right->type() == ERROR_OBJ)
			return right;

		return evalInfixExpression(((InfixExpression *)node)->operand, left, right);
	}

	else if (nodeType == "IfExpression")
		return evalIfExpression((IfExpression *)node, env);

	else if (nodeType == "WhileExpression")
	{
		while (true)
		{
			Object *condition = Eval(((WhileExpression *)node)->condition, env);

			if (condition->type() == ERROR_OBJ)
				return condition;

			if (!isTruthy(condition))
				return __NULL;

			Object *result = Eval(((WhileExpression *)node)->consequence, env);

			if (result->type() == ERROR_OBJ ||
				result->type() == RETURN_VALUE_OBJ)
				return result;
		}
	}

	else if (nodeType == "Identifier")
	{
		return evalIdentifier((Identifier *)node, env);
	}

	else if (nodeType == "FunctionLiteral")
	{
		Object *fn = new Function(((FunctionLiteral *)node)->parameters, ((FunctionLiteral *)node)->body, env);

		return fn;
	}

	else if (nodeType == "CallExpression")
	{
		Object *fn = Eval(((CallExpression *)node)->function, env);

		if (fn->type() == ERROR_OBJ)
			return fn;

		std::vector<Object *> args;

		for (auto *argument : ((CallExpression *)node)->arguments)
		{
			Object *arg = Eval(argument, env);

			if (arg->type() == ERROR_OBJ)
				return arg;

			args.push_back(arg);
		}

		return evalCallExpression(fn, args);
	}

	else if (nodeType == "ArrayLiteral")
	{
		std::vector<Object *> elems;

		for (auto *element : ((ArrayLiteral *)node)->elements)
		{
			Object *elem = Eval(element, env);

			if (elem->type() == ERROR_OBJ)
				return elem;

			elems.push_back(elem);
		}

		return new Array(elems);
	}

	else if (nodeType == "IndexExpression")
	{
		Object *array = Eval(((IndexExpression *)node)->array, env);

		if (array->type() == ERROR_OBJ)
			return array;

		Object *index = Eval(((IndexExpression *)node)->index, env);

		if (index->type() == ERROR_OBJ)
			return index;

		return evalIndexExpression(array, index, env);
	}

	else if (nodeType == "HashMapLiteral")
		return evalHashMapLiteral((HashMapLiteral *)node, env);

	else if (nodeType == "HashSetLiteral")
		return evalHashSetLiteral((HashSetLiteral *)node, env);

	else if (nodeType == "StackLiteral")
		return evalStackLiteral((StackLiteral *)node, env);

	else if (nodeType == "QueueLiteral")
		return evalQueueLiteral((QueueLiteral *)node, env);

	else if (nodeType == "DequeLiteral")
		return evalDequeLiteral((DequeLiteral *)node, env);

	else if (nodeType == "MaxHeapLiteral")
		return evalMaxHeapLiteral((MaxHeapLiteral *)node, env);

	else if (nodeType == "MinHeapLiteral")
		return evalMinHeapLiteral((MinHeapLiteral *)node, env);

	return __NULL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq (%rsi), %rax
leaq 0x28(%rsp), %r12
movq %r12, %rdi
callq *0x10(%rax)
leaq 0x6736(%rip), %rsi      # 0x1c23d
movq %r12, %rdi
callq 0x18aa7
testb %al, %al
je 0x15b23
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x165e4
jmp 0x15b6c
leaq 0x6760(%rip), %rsi      # 0x1c28a
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15b49
movq 0x48(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
jmp 0x15b6c
leaq 0x676f(%rip), %rsi      # 0x1c2bf
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15b8e
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x166ec
movq %rax, %r12
leaq 0x28(%rsp), %rdi
callq 0x5388
movq %r12, %rax
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x66e5(%rip), %rsi      # 0x1c27a
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15c00
movq 0x48(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r12
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *(%rax)
leaq 0x1776f(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %rbx, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15b6f
pushq $0x10
popq %rdi
callq 0x51d0
leaq 0x13f44(%rip), %rcx     # 0x29b38
movq %rcx, (%rax)
movq %r12, 0x8(%rax)
jmp 0x15b6c
leaq 0x664b(%rip), %rsi      # 0x1c252
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15ca1
movq 0xb0(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r12
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *(%rax)
leaq 0x176f6(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %r15, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15b6f
addq $0x90, %r14
leaq 0x118(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0x5260
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
callq 0x12cb0
movq %r13, %rdi
callq 0x5388
leaq 0x1685f(%rip), %rax     # 0x2c4f8
movq (%rax), %r12
jmp 0x15b6f
leaq 0x65c2(%rip), %rsi      # 0x1c26a
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15d03
movq 0xb0(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r15
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %r15, %rsi
callq *(%rax)
leaq 0x17659(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %r12
movq %r12, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %r12, %rdi
callq 0x5388
testb %bpl, %bpl
je 0x15d6c
movq %r15, %r12
jmp 0x15b6f
leaq 0x68fc(%rip), %rsi      # 0x1c606
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15d3c
pushq $0x10
popq %rdi
callq 0x51d0
movq %rax, %r12
movl 0x48(%r14), %eax
leaq 0x13d9a(%rip), %rcx     # 0x29ac8
movq %rcx, (%r12)
movl %eax, 0x8(%r12)
jmp 0x15b6f
leaq 0x68d7(%rip), %rsi      # 0x1c61a
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15dfe
cmpb $0x0, 0x48(%r14)
je 0x15e54
leaq 0x16799(%rip), %rax     # 0x2c500
jmp 0x15c99
addq $0x90, %r14
leaq 0xd8(%rsp), %rdi
movq %r14, %rsi
callq 0x5260
leaq 0xd8(%rsp), %rsi
movq %rbx, %rdi
callq 0x12bea
movq %rax, %r12
leaq 0xd8(%rsp), %rdi
callq 0x5388
movq (%r12), %rax
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *(%rax)
leaq 0x17580(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %r13
movq %r13, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %r13, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15b6f
leaq 0xf8(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0x5260
movq %rbx, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x12cb0
jmp 0x15c8a
leaq 0x6824(%rip), %rsi      # 0x1c629
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15e60
pushq $0x28
popq %rdi
callq 0x51d0
movq %rax, %r12
addq $0x48, %r14
leaq 0xb8(%rsp), %rdi
movq %r14, %rsi
callq 0x5260
leaq 0xb8(%rsp), %rsi
movq %r12, %rdi
callq 0x18ab4
leaq 0xb8(%rsp), %rdi
callq 0x5388
jmp 0x15b6f
leaq 0x166ad(%rip), %rax     # 0x2c508
jmp 0x15c99
leaq 0x6437(%rip), %rsi      # 0x1c29e
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15ef2
movq 0x68(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r12
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *(%rax)
leaq 0x1749d(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %rbx, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15b6f
addq $0x48, %r14
leaq 0x98(%rsp), %rdi
movq %r14, %rsi
callq 0x5260
leaq 0x98(%rsp), %rsi
movq %r15, %rdi
movq %r12, %rdx
callq 0x167b8
movq %rax, %r12
leaq 0x98(%rsp), %rdi
jmp 0x15e4a
leaq 0x63b6(%rip), %rsi      # 0x1c2af
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15f9f
movq 0x48(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r12
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *(%rax)
leaq 0x17407(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %r13
movq %r13, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %r13, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15b6f
movq 0x70(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %rbx
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq *(%rax)
leaq 0x173c1(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %r13
movq %r13, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %r13, %rdi
callq 0x5388
testb %bpl, %bpl
je 0x160d6
movq %rbx, %r12
jmp 0x15b6f
leaq 0x6328(%rip), %rsi      # 0x1c2ce
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15fc7
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16d92
jmp 0x15b6c
leaq 0x630d(%rip), %rsi      # 0x1c2db
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x160b1
movq 0x48(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r12
movq (%rax), %rax
leaq 0x8(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq *(%rax)
movq %r13, %rdi
leaq 0x1732c(%rip), %rsi     # 0x2d338
callq 0xa7b4
movl %eax, %ebp
movq %r13, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15b6f
movq %r12, %rdi
callq 0x15a59
leaq 0x50(%rsp), %rbp
testb %al, %al
je 0x15c92
movq 0x50(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r12
movq (%rax), %rax
leaq 0x8(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq *(%rax)
movq %r13, %rdi
leaq 0x172d3(%rip), %rsi     # 0x2d338
callq 0xa7b4
testb %al, %al
jne 0x16224
movq (%r12), %rax
movq %rbp, %rdi
movq %r12, %rsi
callq *(%rax)
movq %rbp, %rdi
leaq 0x17250(%rip), %rsi     # 0x2d2d8
callq 0xa7b4
movl %eax, %ebp
leaq 0x50(%rsp), %rdi
callq 0x5388
leaq 0x8(%rsp), %rdi
callq 0x5388
testb %bpl, %bpl
je 0x15fe0
jmp 0x15b6f
leaq 0x61a7(%rip), %rsi      # 0x1c25f
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x16107
movq %r14, %rsi
movq %rbx, %rdx
callq 0x16de4
jmp 0x15b6c
addq $0x50, %r14
leaq 0x78(%rsp), %rdi
movq %r14, %rsi
callq 0x5260
leaq 0x78(%rsp), %rsi
movq %r15, %rdi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x168fe
movq %rax, %r12
leaq 0x78(%rsp), %rdi
jmp 0x15e4a
leaq 0x61dd(%rip), %rsi      # 0x1c2eb
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x16142
pushq $0x30
popq %rdi
callq 0x51d0
movq %rax, %r12
movq 0x60(%r14), %rdx
addq $0x48, %r14
movq %rax, %rdi
movq %r14, %rsi
movq %rbx, %rcx
callq 0x18ac8
jmp 0x15b6f
leaq 0x61b2(%rip), %rsi      # 0x1c2fb
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x1622e
movq 0x48(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r12
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *(%rax)
leaq 0x171b7(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %r13
movq %r13, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %r13, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15b6f
xorps %xmm0, %xmm0
leaq 0x50(%rsp), %rax
movaps %xmm0, (%rax)
andq $0x0, 0x10(%rax)
movq 0x50(%r14), %r13
movq 0x58(%r14), %rax
movq %rax, 0x70(%rsp)
leaq 0x8(%rsp), %r14
cmpq 0x70(%rsp), %r13
je 0x16398
movq (%r13), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, 0x48(%rsp)
movq (%rax), %rcx
movq %r14, %rdi
movq %rax, %rsi
callq *(%rcx)
movq %r14, %rdi
leaq 0x17141(%rip), %rsi     # 0x2d338
callq 0xa7b4
movl %eax, %ebp
movq %r14, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x16377
leaq 0x50(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x18822
addq $0x8, %r13
jmp 0x161c3
leaq 0x8(%rsp), %rdi
jmp 0x15e4a
leaq 0x6010(%rip), %rsi      # 0x1c245
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x162bf
xorps %xmm0, %xmm0
leaq 0x50(%rsp), %rax
movaps %xmm0, (%rax)
andq $0x0, 0x10(%rax)
movq 0x48(%r14), %r13
movq 0x50(%r14), %r12
leaq 0x8(%rsp), %r14
cmpq %r12, %r13
je 0x1637e
movq (%r13), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, 0x48(%rsp)
movq (%rax), %rcx
movq %r14, %rdi
movq %rax, %rsi
callq *(%rcx)
movq %r14, %rdi
leaq 0x170a6(%rip), %rsi     # 0x2d338
callq 0xa7b4
movl %eax, %ebp
movq %r14, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x16377
leaq 0x50(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x18822
addq $0x8, %r13
jmp 0x16260
leaq 0x6044(%rip), %rsi      # 0x1c30a
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x163ba
movq 0x48(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %r12
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %r12, %rsi
callq *(%rax)
leaq 0x1703a(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %r13
movq %r13, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %r13, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15b6f
movq 0x50(%r14), %rsi
movq %r15, %rdi
movq %rbx, %rdx
callq 0x15ad8
movq %rax, %rbx
movq (%rax), %rax
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq *(%rax)
leaq 0x16ff4(%rip), %rsi     # 0x2d338
leaq 0x8(%rsp), %r14
movq %r14, %rdi
callq 0xa7b4
movl %eax, %ebp
movq %r14, %rdi
callq 0x5388
testb %bpl, %bpl
jne 0x15f97
movq %r15, %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x171a8
jmp 0x15b6c
movq 0x48(%rsp), %r12
jmp 0x163ab
pushq $0x20
popq %rdi
callq 0x51d0
movq %rax, %r12
leaq 0x50(%rsp), %rsi
movq %rax, %rdi
callq 0x18af8
jmp 0x163ab
leaq 0x50(%rsp), %rdx
movq %r15, %rdi
movq %r12, %rsi
callq 0x16ea6
movq %rax, %r12
leaq 0x50(%rsp), %rdi
callq 0x1a46e
jmp 0x15b6f
leaq 0x5f59(%rip), %rsi      # 0x1c31a
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x163e2
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x17380
jmp 0x15b6c
leaq 0x5f40(%rip), %rsi      # 0x1c329
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x1640a
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x17580
jmp 0x15b6c
leaq 0x5f27(%rip), %rsi      # 0x1c338
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x16432
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x17706
jmp 0x15b6c
leaq 0x5f0c(%rip), %rsi      # 0x1c345
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x1645a
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x17800
jmp 0x15b6c
leaq 0x5ef1(%rip), %rsi      # 0x1c352
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x16482
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x178fa
jmp 0x15b6c
leaq 0x5ed6(%rip), %rsi      # 0x1c35f
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x164aa
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x179f4
jmp 0x15b6c
leaq 0x5ebd(%rip), %rsi      # 0x1c36e
leaq 0x28(%rsp), %rdi
callq 0x18aa7
testb %al, %al
je 0x15c92
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
callq 0x17afe
jmp 0x15b6c
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
jmp 0x16527
movq %rax, %rbx
pushq $0x20
popq %rsi
movq %r12, %rdi
callq 0x51e0
jmp 0x1652a
jmp 0x16527
jmp 0x165ce
jmp 0x165ce
movq %rax, %rbx
pushq $0x30
jmp 0x1657f
jmp 0x165ce
jmp 0x16527
jmp 0x16527
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
jmp 0x165b9
jmp 0x16527
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x1a46e
jmp 0x165d1
jmp 0x165ce
jmp 0x165ce
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
jmp 0x165b9
jmp 0x165ce
jmp 0x165ce
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
jmp 0x165b9
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
movq %rax, %rbx
leaq 0xb8(%rsp), %rdi
callq 0x5388
jmp 0x1657d
movq %rax, %rbx
pushq $0x28
popq %rsi
movq %r12, %rdi
callq 0x51e0
jmp 0x165d1
jmp 0x165ce
jmp 0x165ce
movq %rax, %rbx
leaq 0xf8(%rsp), %rdi
jmp 0x165b9
jmp 0x165ce
movq %rax, %rbx
leaq 0xd8(%rsp), %rdi
jmp 0x165b9
jmp 0x165ce
jmp 0x165ce
movq %rax, %rbx
leaq 0x118(%rsp), %rdi
callq 0x5388
jmp 0x165d1
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
jmp 0x165ce
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x5388
movq %rbx, %rdi
callq 0x5330
nop