// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/irgen_llvmir.c
// Function: ir_expr_add
static void _ir_expr_add(
	IRGeneratorLlvmirContext *ctx,
	ResizableString *rstr,
	ResizableString *rstr_result_lhs_ptr,
	_ExprResult *expr_result,
	ParserASTNode *node
) {
	assert(ctx);
	assert(rstr);
	assert(expr_result);
	assert(node);
	assert(node->type == FE_NODE_EXPR_ADD
			|| node->type == FE_NODE_EXPR_ADD_ASSIGN);

	ParserSymbol *func_symbol = ctx->func_symbol;
	assert(func_symbol);

	uint8_t type1 = FE_EXPR_AST_NODE_GET_TYPE(node->childs[0]);
	uint8_t type2 = FE_EXPR_AST_NODE_GET_TYPE(node->childs[1]);

	if ((fe_sem_is_pointer_type(type1) && fe_sem_is_integer_type(type2))) {
		ParserASTNode *node_lhs = NULL;
		ParserASTNode *node_rhs = NULL;

		if (fe_sem_is_pointer_type(type1) && fe_sem_is_integer_type(type2)) {
			node_lhs = node->childs[0];
			node_rhs = node->childs[1];
		} else if (fe_sem_is_integer_type(type1) && fe_sem_is_pointer_type(type2)) {
			node_lhs = node->childs[1];
			node_rhs = node->childs[0];
		} else {
			assert(0);
		}

		_ExprResult result_lhs;
		_ExprResult result_rhs;

		_expr_result_init(&result_lhs);
		_expr_result_init(&result_rhs);

		_ir_expr(ctx, rstr, &result_lhs, node_lhs);
		rstr_append_with_rstr(rstr, &(result_lhs.rstr_for_result_ptr));
		rstr_append_with_rstr(rstr, &(result_lhs.rstr_for_result));

		if (rstr_result_lhs_ptr != NULL) {
			rstr_append_with_rstr(
				rstr_result_lhs_ptr,
				&(result_lhs.rstr_result_ptr)
			);
		}

		_ir_expr(ctx, rstr, &result_rhs, node_rhs);
		rstr_append_with_rstr(rstr, &(result_rhs.rstr_for_result_ptr));
		rstr_append_with_rstr(rstr, &(result_rhs.rstr_for_result));

		ParserASTNode *node_lhs_ptr_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_lhs);
		assert(node_lhs_ptr_type->type == FE_NODE_TYPE_POINTER);
		ParserASTNode *node_lhs_type = node_lhs_ptr_type->childs[0];

		ResizableString rstr_lhs_type;
		rstr_init(&rstr_lhs_type);
		_ir_type(ctx, &rstr_lhs_type, node_lhs_type);

		ResizableString rstr_tmp_label_val;
		rstr_init(&rstr_tmp_label_val);
		_generate_func_tmp(ctx, func_symbol, &rstr_tmp_label_val);

		rstr_appendf(
			&(expr_result->rstr_for_result),
			"%s = getelementptr inbounds %s, %s, %s\n",
			RSTR_CSTR(&rstr_tmp_label_val),
			RSTR_CSTR(&rstr_lhs_type),
			RSTR_CSTR(&(result_lhs.rstr_result)),
			RSTR_CSTR(&(result_rhs.rstr_result))
		);
		_expr_result_set_result(
			expr_result,
			RSTR_CSTR(&(result_lhs.rstr_result_type)),
			RSTR_CSTR(&rstr_tmp_label_val)
		);

		_expr_result_free(&result_lhs);
		_expr_result_free(&result_rhs);
		rstr_free(&rstr_lhs_type);
		rstr_free(&rstr_tmp_label_val);
	} else if (fe_sem_is_number_type(type1) && fe_sem_is_number_type(type2)) {
		ParserASTNode *node_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node);
		uint8_t type = FE_EXPR_AST_NODE_GET_TYPE(node);

		ParserASTNode *node_lhs = node->childs[0];
		ParserASTNode *node_rhs = node->childs[1];

		_ExprResult result_lhs;
		_ExprResult result_rhs;
		_ExprResult result_lhs_casted;
		_ExprResult result_rhs_casted;

		_expr_result_init(&result_lhs);
		_expr_result_init(&result_rhs);
		_expr_result_init(&result_lhs_casted);
		_expr_result_init(&result_rhs_casted);

		_ir_expr(ctx, rstr, &result_lhs, node_lhs);
		rstr_append_with_rstr(rstr, &(result_lhs.rstr_for_result_ptr));
		rstr_append_with_rstr(rstr, &(result_lhs.rstr_for_result));

		if (rstr_result_lhs_ptr != NULL) {
			rstr_append_with_rstr(
				rstr_result_lhs_ptr,
				&(result_lhs.rstr_result_ptr)
			);
		}

		_ir_expr(ctx, rstr, &result_rhs, node_rhs);
		rstr_append_with_rstr(rstr, &(result_rhs.rstr_for_result_ptr));
		rstr_append_with_rstr(rstr, &(result_rhs.rstr_for_result));

		_expr_result_cast(
			ctx,
			&result_lhs_casted,
			node_type,
			&result_lhs,
			FE_EXPR_AST_NODE_GET_TYPE_NODE(node_lhs)
		);
		rstr_append_with_rstr(rstr, &(result_lhs_casted.rstr_for_result_ptr));
		rstr_append_with_rstr(rstr, &(result_lhs_casted.rstr_for_result));

		_expr_result_cast(
			ctx,
			&result_rhs_casted,
			node_type,
			&result_rhs,
			FE_EXPR_AST_NODE_GET_TYPE_NODE(node_rhs)
		);
		rstr_append_with_rstr(rstr, &(result_rhs_casted.rstr_for_result_ptr));
		rstr_append_with_rstr(rstr, &(result_rhs_casted.rstr_for_result));

		ResizableString rstr_tmp_label_val;
		rstr_init(&rstr_tmp_label_val);
		_generate_func_tmp(ctx, func_symbol, &rstr_tmp_label_val);

		if (fe_sem_is_signed_type(type)) {
			rstr_appendf(
				&(expr_result->rstr_for_result),
				"%s = add nsw %s, %s\n",
				RSTR_CSTR(&rstr_tmp_label_val),
				RSTR_CSTR(&(result_lhs_casted.rstr_result)),
				RSTR_CSTR(&(result_rhs_casted.rstr_result_val))
			);
		} else if (fe_sem_is_unsigned_type(type)) {
			rstr_appendf(
				&(expr_result->rstr_for_result),
				"%s = add %s, %s\n",
				RSTR_CSTR(&rstr_tmp_label_val),
				RSTR_CSTR(&(result_lhs_casted.rstr_result)),
				RSTR_CSTR(&(result_rhs_casted.rstr_result_val))
			);
		} else if (fe_sem_is_float_type(type)) {
			rstr_appendf(
				&(expr_result->rstr_for_result),
				"%s = fadd %s, %s\n",
				RSTR_CSTR(&rstr_tmp_label_val),
				RSTR_CSTR(&(result_lhs_casted.rstr_result)),
				RSTR_CSTR(&(result_rhs_casted.rstr_result_val))
			);
		} else {
			assert(0);
		}
		_expr_result_set_result(
			expr_result,
			RSTR_CSTR(&(result_lhs_casted.rstr_result_type)),
			RSTR_CSTR(&rstr_tmp_label_val)
		);

		_expr_result_free(&result_lhs);
		_expr_result_free(&result_rhs);
		_expr_result_free(&result_lhs_casted);
		_expr_result_free(&result_rhs_casted);
		rstr_free(&rstr_tmp_label_val);
	} else {
		assert(0);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4c0, %rsp            # imm = 0x4C0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x36f58
jmp 0x36f77
leaq 0x455f7(%rip), %rdi     # 0x7c556
leaq 0x4116a(%rip), %rsi     # 0x780d0
movl $0xca0, %edx            # imm = 0xCA0
leaq 0x4205a(%rip), %rcx     # 0x78fcc
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x36f80
jmp 0x36f9f
leaq 0x3bb87(%rip), %rdi     # 0x72b0e
leaq 0x41142(%rip), %rsi     # 0x780d0
movl $0xca1, %edx            # imm = 0xCA1
leaq 0x42032(%rip), %rcx     # 0x78fcc
callq 0x30a0
cmpq $0x0, -0x20(%rbp)
je 0x36fa8
jmp 0x36fc7
leaq 0x3dc64(%rip), %rdi     # 0x74c13
leaq 0x4111a(%rip), %rsi     # 0x780d0
movl $0xca2, %edx            # imm = 0xCA2
leaq 0x4200a(%rip), %rcx     # 0x78fcc
callq 0x30a0
cmpq $0x0, -0x28(%rbp)
je 0x36fd0
jmp 0x36fef
leaq 0x3effc(%rip), %rdi     # 0x75fd3
leaq 0x410f2(%rip), %rsi     # 0x780d0
movl $0xca3, %edx            # imm = 0xCA3
leaq 0x41fe2(%rip), %rcx     # 0x78fcc
callq 0x30a0
movq -0x28(%rbp), %rax
cmpl $0xea0, (%rax)          # imm = 0xEA0
je 0x37007
movq -0x28(%rbp), %rax
cmpl $0xe11, (%rax)          # imm = 0xE11
jne 0x37009
jmp 0x37028
leaq 0x3e703(%rip), %rdi     # 0x75713
leaq 0x410b9(%rip), %rsi     # 0x780d0
movl $0xca5, %edx            # imm = 0xCA5
leaq 0x41fa9(%rip), %rcx     # 0x78fcc
callq 0x30a0
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x3703d
jmp 0x3705c
leaq 0x3f12f(%rip), %rdi     # 0x76173
leaq 0x41085(%rip), %rsi     # 0x780d0
movl $0xca8, %edx            # imm = 0xCA8
leaq 0x41f75(%rip), %rcx     # 0x78fcc
callq 0x30a0
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movb 0x60(%rax), %al
movb %al, -0x31(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movb 0x60(%rax), %al
movb %al, -0x32(%rbp)
movzbl -0x31(%rbp), %edi
callq 0x4d4a0
testb $0x1, %al
jne 0x37091
jmp 0x37452
movzbl -0x32(%rbp), %edi
callq 0x4d3b0
testb $0x1, %al
jne 0x370a3
jmp 0x37452
movq $0x0, -0x40(%rbp)
movq $0x0, -0x48(%rbp)
movzbl -0x31(%rbp), %edi
callq 0x4d4a0
testb $0x1, %al
jne 0x370c2
jmp 0x370f2
movzbl -0x32(%rbp), %edi
callq 0x4d3b0
testb $0x1, %al
jne 0x370d1
jmp 0x370f2
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x37152
movzbl -0x31(%rbp), %edi
callq 0x4d3b0
testb $0x1, %al
jne 0x37101
jmp 0x37131
movzbl -0x32(%rbp), %edi
callq 0x4d4a0
testb $0x1, %al
jne 0x37110
jmp 0x37131
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x37150
leaq 0x3b323(%rip), %rdi     # 0x7245b
leaq 0x40f91(%rip), %rsi     # 0x780d0
movl $0xcb8, %edx            # imm = 0xCB8
leaq 0x41e81(%rip), %rcx     # 0x78fcc
callq 0x30a0
jmp 0x37152
leaq -0xc8(%rbp), %rdi
callq 0x2a260
leaq -0x148(%rbp), %rdi
callq 0x2a260
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x40(%rbp), %rcx
leaq -0xc8(%rbp), %rdx
callq 0x2d590
movq -0x10(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x10(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x9100
cmpq $0x0, -0x18(%rbp)
je 0x371c1
movq -0x18(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
addq $0x50, %rsi
callq 0x9100
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rcx
leaq -0x148(%rbp), %rdx
callq 0x2d590
movq -0x10(%rbp), %rdi
leaq -0x148(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x10(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x9100
movq -0x40(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x150(%rbp)
movq -0x150(%rbp), %rax
cmpl $0x440, (%rax)          # imm = 0x440
jne 0x3721d
jmp 0x3723c
leaq 0x41e1c(%rip), %rdi     # 0x79040
leaq 0x40ea5(%rip), %rsi     # 0x780d0
movl $0xcd1, %edx            # imm = 0xCD1
leaq 0x41d95(%rip), %rcx     # 0x78fcc
callq 0x30a0
movq -0x150(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x158(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x8c90
movq -0x8(%rbp), %rdi
movq -0x158(%rbp), %rdx
leaq -0x168(%rbp), %rsi
callq 0x299e0
leaq -0x178(%rbp), %rdi
callq 0x8c90
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
leaq -0x178(%rbp), %rdx
callq 0x35980
movq -0x20(%rbp), %rax
movq %rax, -0x3b0(%rbp)
cmpq $0x0, -0x170(%rbp)
jne 0x372b9
leaq 0x40605(%rip), %rax     # 0x778b5
movq %rax, -0x3b8(%rbp)
jmp 0x372c7
movq -0x170(%rbp), %rax
movq %rax, -0x3b8(%rbp)
movq -0x3b8(%rbp), %rax
movq %rax, -0x3c0(%rbp)
cmpq $0x0, -0x160(%rbp)
jne 0x372ef
leaq 0x405cf(%rip), %rax     # 0x778b5
movq %rax, -0x3c8(%rbp)
jmp 0x372fd
movq -0x160(%rbp), %rax
movq %rax, -0x3c8(%rbp)
movq -0x3c8(%rbp), %rax
movq %rax, -0x3d0(%rbp)
cmpq $0x0, -0xa0(%rbp)
jne 0x37325
leaq 0x40599(%rip), %rax     # 0x778b5
movq %rax, -0x3d8(%rbp)
jmp 0x37333
movq -0xa0(%rbp), %rax
movq %rax, -0x3d8(%rbp)
movq -0x3d8(%rbp), %rax
movq %rax, -0x3e0(%rbp)
cmpq $0x0, -0x120(%rbp)
jne 0x3735b
leaq 0x40563(%rip), %rax     # 0x778b5
movq %rax, -0x3e8(%rbp)
jmp 0x37369
movq -0x120(%rbp), %rax
movq %rax, -0x3e8(%rbp)
movq -0x3e0(%rbp), %r8
movq -0x3d0(%rbp), %rcx
movq -0x3c0(%rbp), %rdx
movq -0x3b0(%rbp), %rdi
movq -0x3e8(%rbp), %r9
leaq 0x417c7(%rip), %rsi     # 0x78b5a
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x3f0(%rbp)
cmpq $0x0, -0x90(%rbp)
jne 0x373bf
leaq 0x404ff(%rip), %rax     # 0x778b5
movq %rax, -0x3f8(%rbp)
jmp 0x373cd
movq -0x90(%rbp), %rax
movq %rax, -0x3f8(%rbp)
movq -0x3f8(%rbp), %rax
movq %rax, -0x400(%rbp)
cmpq $0x0, -0x170(%rbp)
jne 0x373f5
leaq 0x404c9(%rip), %rax     # 0x778b5
movq %rax, -0x408(%rbp)
jmp 0x37403
movq -0x170(%rbp), %rax
movq %rax, -0x408(%rbp)
movq -0x400(%rbp), %rsi
movq -0x3f0(%rbp), %rdi
movq -0x408(%rbp), %rdx
callq 0x358a0
leaq -0xc8(%rbp), %rdi
callq 0x2c6a0
leaq -0x148(%rbp), %rdi
callq 0x2c6a0
leaq -0x168(%rbp), %rdi
callq 0x9310
leaq -0x178(%rbp), %rdi
callq 0x9310
jmp 0x379e5
movzbl -0x31(%rbp), %edi
callq 0x4d4e0
testb $0x1, %al
jne 0x37464
jmp 0x379c4
movzbl -0x32(%rbp), %edi
callq 0x4d4e0
testb $0x1, %al
jne 0x37476
jmp 0x379c4
movq -0x28(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x180(%rbp)
movq -0x28(%rbp), %rax
movb 0x60(%rax), %al
movb %al, -0x181(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x190(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x198(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x2a260
leaq -0x298(%rbp), %rdi
callq 0x2a260
leaq -0x318(%rbp), %rdi
callq 0x2a260
leaq -0x398(%rbp), %rdi
callq 0x2a260
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x190(%rbp), %rcx
leaq -0x218(%rbp), %rdx
callq 0x2d590
movq -0x10(%rbp), %rdi
leaq -0x218(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x10(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x9100
cmpq $0x0, -0x18(%rbp)
je 0x37541
movq -0x18(%rbp), %rdi
leaq -0x218(%rbp), %rsi
addq $0x50, %rsi
callq 0x9100
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x198(%rbp), %rcx
leaq -0x298(%rbp), %rdx
callq 0x2d590
movq -0x10(%rbp), %rdi
leaq -0x298(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x10(%rbp), %rdi
leaq -0x298(%rbp), %rsi
callq 0x9100
movq -0x8(%rbp), %rdi
movq -0x180(%rbp), %rdx
movq -0x190(%rbp), %rax
movq 0x68(%rax), %r8
leaq -0x318(%rbp), %rsi
leaq -0x218(%rbp), %rcx
callq 0x2a360
movq -0x10(%rbp), %rdi
leaq -0x318(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x10(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x9100
movq -0x8(%rbp), %rdi
movq -0x180(%rbp), %rdx
movq -0x198(%rbp), %rax
movq 0x68(%rax), %r8
leaq -0x398(%rbp), %rsi
leaq -0x298(%rbp), %rcx
callq 0x2a360
movq -0x10(%rbp), %rdi
leaq -0x398(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x10(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x9100
leaq -0x3a8(%rbp), %rdi
callq 0x8c90
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rsi
leaq -0x3a8(%rbp), %rdx
callq 0x35980
movzbl -0x181(%rbp), %edi
callq 0x4d310
testb $0x1, %al
jne 0x3764f
jmp 0x3771d
movq -0x20(%rbp), %rax
movq %rax, -0x410(%rbp)
cmpq $0x0, -0x3a0(%rbp)
jne 0x37674
leaq 0x4024a(%rip), %rax     # 0x778b5
movq %rax, -0x418(%rbp)
jmp 0x37682
movq -0x3a0(%rbp), %rax
movq %rax, -0x418(%rbp)
movq -0x418(%rbp), %rax
movq %rax, -0x420(%rbp)
cmpq $0x0, -0x2f0(%rbp)
jne 0x376aa
leaq 0x40214(%rip), %rax     # 0x778b5
movq %rax, -0x428(%rbp)
jmp 0x376b8
movq -0x2f0(%rbp), %rax
movq %rax, -0x428(%rbp)
movq -0x428(%rbp), %rax
movq %rax, -0x430(%rbp)
cmpq $0x0, -0x350(%rbp)
jne 0x376e0
leaq 0x401de(%rip), %rax     # 0x778b5
movq %rax, -0x438(%rbp)
jmp 0x376ee
movq -0x350(%rbp), %rax
movq %rax, -0x438(%rbp)
movq -0x430(%rbp), %rcx
movq -0x420(%rbp), %rdx
movq -0x410(%rbp), %rdi
movq -0x438(%rbp), %r8
leaq 0x4195f(%rip), %rsi     # 0x79070
movb $0x0, %al
callq 0x94d0
jmp 0x37903
movzbl -0x181(%rbp), %edi
callq 0x4d360
testb $0x1, %al
jne 0x37732
jmp 0x37800
movq -0x20(%rbp), %rax
movq %rax, -0x440(%rbp)
cmpq $0x0, -0x3a0(%rbp)
jne 0x37757
leaq 0x40167(%rip), %rax     # 0x778b5
movq %rax, -0x448(%rbp)
jmp 0x37765
movq -0x3a0(%rbp), %rax
movq %rax, -0x448(%rbp)
movq -0x448(%rbp), %rax
movq %rax, -0x450(%rbp)
cmpq $0x0, -0x2f0(%rbp)
jne 0x3778d
leaq 0x40131(%rip), %rax     # 0x778b5
movq %rax, -0x458(%rbp)
jmp 0x3779b
movq -0x2f0(%rbp), %rax
movq %rax, -0x458(%rbp)
movq -0x458(%rbp), %rax
movq %rax, -0x460(%rbp)
cmpq $0x0, -0x350(%rbp)
jne 0x377c3
leaq 0x400fb(%rip), %rax     # 0x778b5
movq %rax, -0x468(%rbp)
jmp 0x377d1
movq -0x350(%rbp), %rax
movq %rax, -0x468(%rbp)
movq -0x460(%rbp), %rcx
movq -0x450(%rbp), %rdx
movq -0x440(%rbp), %rdi
movq -0x468(%rbp), %r8
leaq 0x41891(%rip), %rsi     # 0x79085
movb $0x0, %al
callq 0x94d0
jmp 0x37901
movzbl -0x181(%rbp), %edi
callq 0x4d400
testb $0x1, %al
jne 0x37815
jmp 0x378e0
movq -0x20(%rbp), %rax
movq %rax, -0x470(%rbp)
cmpq $0x0, -0x3a0(%rbp)
jne 0x3783a
leaq 0x40084(%rip), %rax     # 0x778b5
movq %rax, -0x478(%rbp)
jmp 0x37848
movq -0x3a0(%rbp), %rax
movq %rax, -0x478(%rbp)
movq -0x478(%rbp), %rax
movq %rax, -0x480(%rbp)
cmpq $0x0, -0x2f0(%rbp)
jne 0x37870
leaq 0x4004e(%rip), %rax     # 0x778b5
movq %rax, -0x488(%rbp)
jmp 0x3787e
movq -0x2f0(%rbp), %rax
movq %rax, -0x488(%rbp)
movq -0x488(%rbp), %rax
movq %rax, -0x490(%rbp)
cmpq $0x0, -0x350(%rbp)
jne 0x378a6
leaq 0x40018(%rip), %rax     # 0x778b5
movq %rax, -0x498(%rbp)
jmp 0x378b4
movq -0x350(%rbp), %rax
movq %rax, -0x498(%rbp)
movq -0x490(%rbp), %rcx
movq -0x480(%rbp), %rdx
movq -0x470(%rbp), %rdi
movq -0x498(%rbp), %r8
leaq 0x417bf(%rip), %rsi     # 0x79096
movb $0x0, %al
callq 0x94d0
jmp 0x378ff
leaq 0x3ab74(%rip), %rdi     # 0x7245b
leaq 0x407e2(%rip), %rsi     # 0x780d0
movl $0xd3f, %edx            # imm = 0xD3F
leaq 0x416d2(%rip), %rcx     # 0x78fcc
callq 0x30a0
jmp 0x37901
jmp 0x37903
movq -0x20(%rbp), %rax
movq %rax, -0x4a0(%rbp)
cmpq $0x0, -0x2e0(%rbp)
jne 0x37928
leaq 0x3ff96(%rip), %rax     # 0x778b5
movq %rax, -0x4a8(%rbp)
jmp 0x37936
movq -0x2e0(%rbp), %rax
movq %rax, -0x4a8(%rbp)
movq -0x4a8(%rbp), %rax
movq %rax, -0x4b0(%rbp)
cmpq $0x0, -0x3a0(%rbp)
jne 0x3795e
leaq 0x3ff60(%rip), %rax     # 0x778b5
movq %rax, -0x4b8(%rbp)
jmp 0x3796c
movq -0x3a0(%rbp), %rax
movq %rax, -0x4b8(%rbp)
movq -0x4b0(%rbp), %rsi
movq -0x4a0(%rbp), %rdi
movq -0x4b8(%rbp), %rdx
callq 0x358a0
leaq -0x218(%rbp), %rdi
callq 0x2c6a0
leaq -0x298(%rbp), %rdi
callq 0x2c6a0
leaq -0x318(%rbp), %rdi
callq 0x2c6a0
leaq -0x398(%rbp), %rdi
callq 0x2c6a0
leaq -0x3a8(%rbp), %rdi
callq 0x9310
jmp 0x379e3
leaq 0x3aa90(%rip), %rdi     # 0x7245b
leaq 0x406fe(%rip), %rsi     # 0x780d0
movl $0xd4d, %edx            # imm = 0xD4D
leaq 0x415ee(%rip), %rcx     # 0x78fcc
callq 0x30a0
jmp 0x379e5
addq $0x4c0, %rsp            # imm = 0x4C0
popq %rbp
retq
nop