// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/irgen_llvmir.c
// Function: ir_expr_member_arridx_fncall
static bool _ir_expr_member_arridx_fncall(
	IRGeneratorLlvmirContext *ctx,
	ResizableString *rstr,
	_ExprResult *expr_result,
	ParserASTNode *node
) {
	assert(ctx);
	assert(rstr);
	assert(expr_result);
	assert(node);

	switch (node->type) {
		case FE_NODE_EXPR_MEMBER: {
			// %3 = getelementptr inbounds %struct.A, %struct.A* %1, i32 0, i32 2
			assert(node->nchilds == 2);

			ParserASTNode *node_expr = node->childs[0];
			ParserASTNode *node_id = node->childs[1];
			
			_ExprResult result;
			_expr_result_init(&result);

			_ir_expr(ctx, rstr, &result, node_expr);
			rstr_append_with_rstr(rstr, &(result.rstr_for_result_ptr));

			ParserASTNode *node_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_expr);
			assert(node_type->type == FE_NODE_TYPE_STRUCT);
			ParserASTNode *node_struct_id = node_type->childs[0];
			assert(node_struct_id->type == FE_NODE_IDENTIFIER);
			ResizableString rstr_struct_name;
			rstr_init_with_raw(
				&rstr_struct_name, node_struct_id->token->content, node_struct_id->token->len
			);

			int index = fe_sem_get_struct_member_index(
				ctx->psrctx, node, node_struct_id->token, node_id->token
			);

			ParserASTNode *node_struct_member_type = fe_sem_get_struct_member_type_node(
				ctx->psrctx, node, node_struct_id->token, node_id->token
			);
			ResizableString rstr_struct_member_type;
			rstr_init(&rstr_struct_member_type);
			_ir_type(ctx, &rstr_struct_member_type, node_struct_member_type);

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

			ResizableString rstr_tmp_label0;
			rstr_init(&rstr_tmp_label0);
			_generate_func_tmp(ctx, func_symbol, &rstr_tmp_label0);
			rstr_appendf(
				&(expr_result->rstr_for_result_ptr),
				"%s = getelementptr inbounds %%struct.%s, %s, i32 0, i32 %d\n",
				RSTR_CSTR(&rstr_tmp_label0),
				RSTR_CSTR(&rstr_struct_name),
				RSTR_CSTR(&(result.rstr_result_ptr)),
				index
			);
			_expr_result_set_result_ptr(expr_result, RSTR_CSTR(&rstr_struct_member_type), RSTR_CSTR(&rstr_tmp_label0));

			ResizableString rstr_tmp_label1;
			rstr_init(&rstr_tmp_label1);
			_generate_func_tmp(ctx, func_symbol, &rstr_tmp_label1);
			rstr_appendf(
				&(expr_result->rstr_for_result),
				"%s = load %s, %s\n",
				RSTR_CSTR(&rstr_tmp_label1),
				RSTR_CSTR(&rstr_struct_member_type),
				RSTR_CSTR(&(expr_result->rstr_result_ptr))
			);
			_expr_result_set_result(expr_result, RSTR_CSTR(&rstr_struct_member_type), RSTR_CSTR(&rstr_tmp_label1));

			_expr_result_free(&result);

			rstr_free(&rstr_struct_name);
			rstr_free(&rstr_struct_member_type);
			rstr_free(&rstr_tmp_label0);
			rstr_free(&rstr_tmp_label1);

			return true;
		}
		case FE_NODE_EXPR_PMEMBER: {
			// %3 = load %struct.A*, %struct.A** %1, align 8
			// %4 = getelementptr inbounds %struct.A, %struct.A* %3, i32 0, i32 1
			assert(node->nchilds == 2);
			
			ParserASTNode *node_expr = node->childs[0];
			ParserASTNode *node_id = node->childs[1];
			
			_ExprResult result;
			_expr_result_init(&result);

			_ir_expr(ctx, rstr, &result, node_expr);
			rstr_append_with_rstr(rstr, &(result.rstr_for_result_ptr));
			rstr_append_with_rstr(rstr, &(result.rstr_for_result));

			ParserASTNode *node_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_expr);
			assert(node_type->type == FE_NODE_TYPE_POINTER);
			ParserASTNode *node_struct_type = node_type->childs[0];
			assert(node_struct_type->type == FE_NODE_TYPE_STRUCT);
			ParserASTNode *node_struct_id = node_struct_type->childs[0];
			assert(node_struct_id->type == FE_NODE_IDENTIFIER);
			ResizableString rstr_struct_name;
			rstr_init_with_raw(
				&rstr_struct_name, node_struct_id->token->content, node_struct_id->token->len
			);

			int index = fe_sem_get_struct_member_index(
				ctx->psrctx, node, node_struct_id->token, node_id->token
			);

			ParserASTNode *node_struct_member_type = fe_sem_get_struct_member_type_node(
				ctx->psrctx, node, node_struct_id->token, node_id->token
			);
			ResizableString rstr_struct_member_type;
			rstr_init(&rstr_struct_member_type);
			_ir_type(ctx, &rstr_struct_member_type, node_struct_member_type);

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

			ResizableString rstr_tmp_label0;
			rstr_init(&rstr_tmp_label0);
			_generate_func_tmp(ctx, func_symbol, &rstr_tmp_label0);
			rstr_appendf(
				&(expr_result->rstr_for_result_ptr),
				"%s = getelementptr inbounds %%struct.%s, %s, i32 0, i32 %d\n",
				RSTR_CSTR(&rstr_tmp_label0),
				RSTR_CSTR(&rstr_struct_name),
				RSTR_CSTR(&(result.rstr_result)),
				index
			);
			_expr_result_set_result_ptr(expr_result, RSTR_CSTR(&rstr_struct_member_type), RSTR_CSTR(&rstr_tmp_label0));

			ResizableString rstr_tmp_label1;
			rstr_init(&rstr_tmp_label1);
			_generate_func_tmp(ctx, func_symbol, &rstr_tmp_label1);
			rstr_appendf(
				&(expr_result->rstr_for_result),
				"%s = load %s, %s\n",
				RSTR_CSTR(&rstr_tmp_label1),
				RSTR_CSTR(&rstr_struct_member_type),
				RSTR_CSTR(&(expr_result->rstr_result_ptr))
			);
			_expr_result_set_result(expr_result, RSTR_CSTR(&rstr_struct_member_type), RSTR_CSTR(&rstr_tmp_label1));

			_expr_result_free(&result);

			rstr_free(&rstr_struct_name);
			rstr_free(&rstr_struct_member_type);
			rstr_free(&rstr_tmp_label0);
			rstr_free(&rstr_tmp_label1);

			return true;
		}
		case FE_NODE_EXPR_ARRAY_INDEX: {
			// Array:
			//		%5 = getelementptr inbounds [10 x i8], [10 x i8]* %1, i64 0, i64 0
			// Pointer:
			//		%8 = getelementptr inbounds i8, i8* %7, i64 0
			assert(node->nchilds == 2);
			
			ParserASTNode *node_base = node->childs[0];
			uint8_t node_base_type = FE_EXPR_AST_NODE_GET_TYPE(node_base);
			assert(node_base_type == FE_TYPE_ARRAY
					|| node_base_type == FE_TYPE_POINTER);
			
			ParserASTNode *node_index = node->childs[1];

			_ExprResult result_base;
			_expr_result_init(&result_base);
			_ir_expr(ctx, rstr, &result_base, node_base);
			rstr_append_with_rstr(rstr, &(result_base.rstr_for_result_ptr));
			if (node_base_type == FE_TYPE_POINTER) {
				rstr_append_with_rstr(rstr, &(result_base.rstr_for_result));
			}

			_ExprResult result_index;
			_expr_result_init(&result_index);
			_ir_expr(ctx, rstr, &result_index, node_index);
			rstr_append_with_rstr(rstr, &(result_index.rstr_for_result_ptr));
			rstr_append_with_rstr(rstr, &(result_index.rstr_for_result));

			ResizableString rstr_type;
			rstr_init(&rstr_type);
			_ir_type(ctx, &rstr_type, FE_EXPR_AST_NODE_GET_TYPE_NODE(node));

			ResizableString rstr_base_type;
			rstr_init(&rstr_base_type);
			_ir_type(ctx, &rstr_base_type, FE_EXPR_AST_NODE_GET_TYPE_NODE(node_base));

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

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

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

			if (node_base_type == FE_TYPE_ARRAY) {
				rstr_appendf(
					&(expr_result->rstr_for_result_ptr),
					"%s = getelementptr inbounds %s, %s, %s 0, %s\n",
					RSTR_CSTR(&rstr_tmp_label_ptr),
					RSTR_CSTR(&rstr_base_type),
					RSTR_CSTR(&(result_base.rstr_result_ptr)),
					_LLVM_TYPE_INTxx(ctx),
					RSTR_CSTR(&(result_index.rstr_result))
				);
				_expr_result_set_result_ptr(expr_result, RSTR_CSTR(&rstr_type), RSTR_CSTR(&rstr_tmp_label_ptr));

				rstr_appendf(
					&(expr_result->rstr_for_result),
					"%s = load %s, %s\n",
					RSTR_CSTR(&rstr_tmp_label_val),
					RSTR_CSTR(&rstr_type),
					RSTR_CSTR(&(expr_result->rstr_result_ptr))
				);
				_expr_result_set_result(expr_result, RSTR_CSTR(&rstr_type), RSTR_CSTR(&rstr_tmp_label_val));
			} else if (node_base_type == FE_TYPE_POINTER) {
				rstr_appendf(
					&(expr_result->rstr_for_result_ptr),
					"%s = getelementptr inbounds %s, %s, %s\n",
					RSTR_CSTR(&rstr_tmp_label_ptr),
					RSTR_CSTR(&rstr_type),
					RSTR_CSTR(&(result_base.rstr_result)),
					RSTR_CSTR(&(result_index.rstr_result))
				);
				_expr_result_set_result_ptr(expr_result, RSTR_CSTR(&rstr_type), RSTR_CSTR(&rstr_tmp_label_ptr));

				rstr_appendf(
					&(expr_result->rstr_for_result),
					"%s = load %s, %s\n",
					RSTR_CSTR(&rstr_tmp_label_val),
					RSTR_CSTR(&rstr_type),
					RSTR_CSTR(&(expr_result->rstr_result_ptr))
				);
				_expr_result_set_result(expr_result, RSTR_CSTR(&rstr_type), RSTR_CSTR(&rstr_tmp_label_val));
			} else {
				assert(0);
			}

			_expr_result_free(&result_base);
			_expr_result_free(&result_index);
			rstr_free(&rstr_type);
			rstr_free(&rstr_base_type);
			rstr_free(&rstr_tmp_label_ptr);
			rstr_free(&rstr_tmp_label_val);

			return true;
		}
		case FE_NODE_EXPR_FUNC_CALL: {
			// call i64 (i8*, ...) @printf(i8* %tmp0, i32 %tmp1)
			assert(node->nchilds == 2);

			ParserSymbol *func_symbol = ctx->func_symbol;
			assert(func_symbol);
			
			_ExprResult result_func_expr;
			_expr_result_init(&result_func_expr);

			ParserASTNode *node_func_expr = node->childs[0];
			ParserASTNode *node_func_expr_func_ptr_type = FE_EXPR_AST_NODE_GET_TYPE_NODE(node_func_expr);
			assert(node_func_expr_func_ptr_type->type == FE_NODE_TYPE_POINTER);
			ParserASTNode *node_func_expr_func_type = node_func_expr_func_ptr_type->childs[0];
			assert(node_func_expr_func_type->type == FE_NODE_TYPE_FUNC);

			ResizableString rstr_func_type;
			rstr_init(&rstr_func_type);
			_ir_type(ctx, &rstr_func_type, node_func_expr_func_type);

			_ir_expr(ctx, rstr, &result_func_expr, node_func_expr);
			rstr_append_with_rstr(rstr, &(result_func_expr.rstr_for_result_ptr));
			rstr_append_with_rstr(rstr, &(result_func_expr.rstr_for_result));

			ParserASTNode *node_func_type_params = node_func_expr_func_type->childs[0];
			ParserASTNode *node_func_type_return_type = NULL;
			if (node_func_expr_func_type->nchilds == 2) {
				node_func_type_return_type = node_func_expr_func_type->childs[1];
			}

			ParserASTNode *node_func_params = node->childs[1];

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

			if (node_func_type_return_type != NULL) {
				rstr_appendf(
					&(expr_result->rstr_for_result),
					"%s = ",
					RSTR_CSTR(&rstr_tmp_label_val)
				);
			}

			ResizableString rstr_func_params;
			rstr_init(&rstr_func_params);
			for (int i = 0; i < node_func_params->nchilds; i++) {
				ParserASTNode *node_func_param = node_func_params->childs[i];

				_ExprResult result_func_param;
				_expr_result_init(&result_func_param);

				_ir_expr(ctx, rstr, &result_func_param, node_func_param);
				rstr_append_with_rstr(rstr, &(result_func_param.rstr_for_result_ptr));
				rstr_append_with_rstr(rstr, &(result_func_param.rstr_for_result));

				if (i < node_func_type_params->nchilds
						&& node_func_type_params->childs[i]->type == FE_NODE_FUNC_PARAMS_ITEM) {
					ParserASTNode *node_func_type_param = node_func_type_params->childs[i];
					ParserASTNode *node_func_type_param_type = node_func_type_param->childs[1];

					_ExprResult result_casted_func_param;
					_expr_result_init(&result_casted_func_param);

					_expr_result_cast(
						ctx,
						&result_casted_func_param,
						node_func_type_param_type,
						&result_func_param,
						FE_EXPR_AST_NODE_GET_TYPE_NODE(node_func_param)
					);
					rstr_append_with_rstr(rstr, &(result_casted_func_param.rstr_for_result_ptr));
					rstr_append_with_rstr(rstr, &(result_casted_func_param.rstr_for_result));

					rstr_append_with_rstr(&rstr_func_params, &(result_casted_func_param.rstr_result));

					_expr_result_free(&result_casted_func_param);
				} else {
					rstr_append_with_rstr(&rstr_func_params, &(result_func_param.rstr_result));
				}

				_expr_result_free(&result_func_param);

				if (i + 1 < node_func_params->nchilds) {
					rstr_append_with_cstr(&rstr_func_params, ", ");
				}
			}

			rstr_appendf(
				&(expr_result->rstr_for_result),
				"call %s %s(%s)\n",
				RSTR_CSTR(&rstr_func_type),
				RSTR_CSTR(&(result_func_expr.rstr_result_val)),
				RSTR_CSTR(&rstr_func_params)
			);

			if (node_func_type_return_type != NULL) {
				ResizableString rstr_return_type;
				rstr_init(&rstr_return_type);
				_ir_type(ctx, &rstr_return_type, node_func_type_return_type);

				_expr_result_set_result(expr_result, RSTR_CSTR(&rstr_return_type), RSTR_CSTR(&rstr_tmp_label_val));

				rstr_free(&rstr_return_type);
			}

			rstr_free(&rstr_func_type);
			_expr_result_free(&result_func_expr);
			rstr_free(&rstr_tmp_label_val);
			rstr_free(&rstr_func_params);

			return true;
		}
		default: {
			return false;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x8b0, %rsp            # imm = 0x8B0
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x2df34
jmp 0x2df53
leaq 0x4e61b(%rip), %rdi     # 0x7c556
leaq 0x4a18e(%rip), %rsi     # 0x780d0
movl $0x7fc, %edx            # imm = 0x7FC
leaq 0x4aaef(%rip), %rcx     # 0x78a3d
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x2df5c
jmp 0x2df7b
leaq 0x44bab(%rip), %rdi     # 0x72b0e
leaq 0x4a166(%rip), %rsi     # 0x780d0
movl $0x7fd, %edx            # imm = 0x7FD
leaq 0x4aac7(%rip), %rcx     # 0x78a3d
callq 0x30a0
cmpq $0x0, -0x20(%rbp)
je 0x2df84
jmp 0x2dfa3
leaq 0x46c88(%rip), %rdi     # 0x74c13
leaq 0x4a13e(%rip), %rsi     # 0x780d0
movl $0x7fe, %edx            # imm = 0x7FE
leaq 0x4aa9f(%rip), %rcx     # 0x78a3d
callq 0x30a0
cmpq $0x0, -0x28(%rbp)
je 0x2dfac
jmp 0x2dfcb
leaq 0x48020(%rip), %rdi     # 0x75fd3
leaq 0x4a116(%rip), %rsi     # 0x780d0
movl $0x7ff, %edx            # imm = 0x7FF
leaq 0x4aa77(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x28(%rbp), %rax
movl (%rax), %eax
addl $0xfffff130, %eax       # imm = 0xFFFFF130
movl %eax, %ecx
movq %rcx, -0x5a0(%rbp)
subl $0x3, %eax
ja 0x2f8df
movq -0x5a0(%rbp), %rax
leaq 0x4a012(%rip), %rcx     # 0x78008
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x28(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2e00b
jmp 0x2e02a
leaq 0x50662(%rip), %rdi     # 0x7e674
leaq 0x4a0b7(%rip), %rsi     # 0x780d0
movl $0x804, %edx            # imm = 0x804
leaq 0x4aa18(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x2a260
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x30(%rbp), %rcx
leaq -0xb8(%rbp), %rdx
callq 0x2d590
movq -0x18(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x30(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rax
cmpl $0x410, (%rax)          # imm = 0x410
jne 0x2e0a1
jmp 0x2e0c0
leaq 0x46f79(%rip), %rdi     # 0x75021
leaq 0x4a021(%rip), %rsi     # 0x780d0
movl $0x810, %edx            # imm = 0x810
leaq 0x4a982(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0xc0(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jne 0x2e0e6
jmp 0x2e105
leaq 0x46f5b(%rip), %rdi     # 0x75048
leaq 0x49fdc(%rip), %rsi     # 0x780d0
movl $0x812, %edx            # imm = 0x812
leaq 0x4a93d(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0xc8(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
movq -0xc8(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x4(%rax), %edx
leaq -0xd8(%rbp), %rdi
callq 0x8ee0
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rsi
movq -0xc8(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rcx
callq 0x4ce30
movl %eax, -0xdc(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rsi
movq -0xc8(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rcx
callq 0x4cfb0
movq %rax, -0xe8(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0xe8(%rbp), %rdx
leaq -0xf8(%rbp), %rsi
callq 0x299e0
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x100(%rbp)
cmpq $0x0, -0x100(%rbp)
je 0x2e1bf
jmp 0x2e1de
leaq 0x47fad(%rip), %rdi     # 0x76173
leaq 0x49f03(%rip), %rsi     # 0x780d0
movl $0x824, %edx            # imm = 0x824
leaq 0x4a864(%rip), %rcx     # 0x78a3d
callq 0x30a0
leaq -0x110(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x100(%rbp), %rsi
leaq -0x110(%rbp), %rdx
callq 0x35980
movq -0x20(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x5a8(%rbp)
cmpq $0x0, -0x108(%rbp)
jne 0x2e22a
leaq 0x49694(%rip), %rax     # 0x778b5
movq %rax, -0x5b0(%rbp)
jmp 0x2e238
movq -0x108(%rbp), %rax
movq %rax, -0x5b0(%rbp)
movq -0x5b0(%rbp), %rax
movq %rax, -0x5b8(%rbp)
cmpq $0x0, -0xd0(%rbp)
jne 0x2e260
leaq 0x4965e(%rip), %rax     # 0x778b5
movq %rax, -0x5c0(%rbp)
jmp 0x2e26e
movq -0xd0(%rbp), %rax
movq %rax, -0x5c0(%rbp)
movq -0x5c0(%rbp), %rax
movq %rax, -0x5c8(%rbp)
cmpq $0x0, -0x60(%rbp)
jne 0x2e293
leaq 0x4962b(%rip), %rax     # 0x778b5
movq %rax, -0x5d0(%rbp)
jmp 0x2e29e
movq -0x60(%rbp), %rax
movq %rax, -0x5d0(%rbp)
movq -0x5c8(%rbp), %rcx
movq -0x5b8(%rbp), %rdx
movq -0x5a8(%rbp), %rdi
movq -0x5d0(%rbp), %r8
movl -0xdc(%rbp), %r9d
leaq 0x4a7e8(%rip), %rsi     # 0x78ab0
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x5d8(%rbp)
cmpq $0x0, -0xf0(%rbp)
jne 0x2e2f4
leaq 0x495ca(%rip), %rax     # 0x778b5
movq %rax, -0x5e0(%rbp)
jmp 0x2e302
movq -0xf0(%rbp), %rax
movq %rax, -0x5e0(%rbp)
movq -0x5e0(%rbp), %rax
movq %rax, -0x5e8(%rbp)
cmpq $0x0, -0x108(%rbp)
jne 0x2e32a
leaq 0x49594(%rip), %rax     # 0x778b5
movq %rax, -0x5f0(%rbp)
jmp 0x2e338
movq -0x108(%rbp), %rax
movq %rax, -0x5f0(%rbp)
movq -0x5e8(%rbp), %rsi
movq -0x5d8(%rbp), %rdi
movq -0x5f0(%rbp), %rdx
callq 0x35a50
leaq -0x120(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x100(%rbp), %rsi
leaq -0x120(%rbp), %rdx
callq 0x35980
movq -0x20(%rbp), %rax
movq %rax, -0x5f8(%rbp)
cmpq $0x0, -0x118(%rbp)
jne 0x2e39a
leaq 0x49524(%rip), %rax     # 0x778b5
movq %rax, -0x600(%rbp)
jmp 0x2e3a8
movq -0x118(%rbp), %rax
movq %rax, -0x600(%rbp)
movq -0x600(%rbp), %rax
movq %rax, -0x608(%rbp)
cmpq $0x0, -0xf0(%rbp)
jne 0x2e3d0
leaq 0x494ee(%rip), %rax     # 0x778b5
movq %rax, -0x610(%rbp)
jmp 0x2e3de
movq -0xf0(%rbp), %rax
movq %rax, -0x610(%rbp)
movq -0x610(%rbp), %rax
movq %rax, -0x618(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x58(%rax)
jne 0x2e407
leaq 0x494b7(%rip), %rax     # 0x778b5
movq %rax, -0x620(%rbp)
jmp 0x2e416
movq -0x20(%rbp), %rax
movq 0x58(%rax), %rax
movq %rax, -0x620(%rbp)
movq -0x618(%rbp), %rcx
movq -0x608(%rbp), %rdx
movq -0x5f8(%rbp), %rdi
movq -0x620(%rbp), %r8
leaq 0x4a6b3(%rip), %rsi     # 0x78aec
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x628(%rbp)
cmpq $0x0, -0xf0(%rbp)
jne 0x2e465
leaq 0x49459(%rip), %rax     # 0x778b5
movq %rax, -0x630(%rbp)
jmp 0x2e473
movq -0xf0(%rbp), %rax
movq %rax, -0x630(%rbp)
movq -0x630(%rbp), %rax
movq %rax, -0x638(%rbp)
cmpq $0x0, -0x118(%rbp)
jne 0x2e49b
leaq 0x49423(%rip), %rax     # 0x778b5
movq %rax, -0x640(%rbp)
jmp 0x2e4a9
movq -0x118(%rbp), %rax
movq %rax, -0x640(%rbp)
movq -0x638(%rbp), %rsi
movq -0x628(%rbp), %rdi
movq -0x640(%rbp), %rdx
callq 0x358a0
leaq -0xb8(%rbp), %rdi
callq 0x2c6a0
leaq -0xd8(%rbp), %rdi
callq 0x9310
leaq -0xf8(%rbp), %rdi
callq 0x9310
leaq -0x110(%rbp), %rdi
callq 0x9310
leaq -0x120(%rbp), %rdi
callq 0x9310
movb $0x1, -0x1(%rbp)
jmp 0x2f8e3
movq -0x28(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2e514
jmp 0x2e533
leaq 0x50159(%rip), %rdi     # 0x7e674
leaq 0x49bae(%rip), %rsi     # 0x780d0
movl $0x84b, %edx            # imm = 0x84B
leaq 0x4a50f(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x128(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x130(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x2a260
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x128(%rbp), %rcx
leaq -0x1b0(%rbp), %rdx
callq 0x2d590
movq -0x18(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x18(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x9100
movq -0x128(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x1b8(%rbp)
movq -0x1b8(%rbp), %rax
cmpl $0x440, (%rax)          # imm = 0x440
jne 0x2e5c6
jmp 0x2e5e5
leaq 0x46ac5(%rip), %rdi     # 0x75092
leaq 0x49afc(%rip), %rsi     # 0x780d0
movl $0x858, %edx            # imm = 0x858
leaq 0x4a45d(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x1b8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x1c0(%rbp)
movq -0x1c0(%rbp), %rax
cmpl $0x410, (%rax)          # imm = 0x410
jne 0x2e60b
jmp 0x2e62a
leaq 0x4a4ec(%rip), %rdi     # 0x78afe
leaq 0x49ab7(%rip), %rsi     # 0x780d0
movl $0x85a, %edx            # imm = 0x85A
leaq 0x4a418(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x1c0(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x1c8(%rbp)
movq -0x1c8(%rbp), %rax
cmpl $0x200, (%rax)          # imm = 0x200
jne 0x2e650
jmp 0x2e66f
leaq 0x469f1(%rip), %rdi     # 0x75048
leaq 0x49a72(%rip), %rsi     # 0x780d0
movl $0x85c, %edx            # imm = 0x85C
leaq 0x4a3d3(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x1c8(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x1c8(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x4(%rax), %edx
leaq -0x1d8(%rbp), %rdi
callq 0x8ee0
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rsi
movq -0x1c8(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x130(%rbp), %rax
movq 0x10(%rax), %rcx
callq 0x4ce30
movl %eax, -0x1dc(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rsi
movq -0x1c8(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x130(%rbp), %rax
movq 0x10(%rax), %rcx
callq 0x4cfb0
movq %rax, -0x1e8(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x1e8(%rbp), %rdx
leaq -0x1f8(%rbp), %rsi
callq 0x299e0
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x200(%rbp)
cmpq $0x0, -0x200(%rbp)
je 0x2e72f
jmp 0x2e74e
leaq 0x47a3d(%rip), %rdi     # 0x76173
leaq 0x49993(%rip), %rsi     # 0x780d0
movl $0x86e, %edx            # imm = 0x86E
leaq 0x4a2f4(%rip), %rcx     # 0x78a3d
callq 0x30a0
leaq -0x210(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x200(%rbp), %rsi
leaq -0x210(%rbp), %rdx
callq 0x35980
movq -0x20(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x648(%rbp)
cmpq $0x0, -0x208(%rbp)
jne 0x2e79a
leaq 0x49124(%rip), %rax     # 0x778b5
movq %rax, -0x650(%rbp)
jmp 0x2e7a8
movq -0x208(%rbp), %rax
movq %rax, -0x650(%rbp)
movq -0x650(%rbp), %rax
movq %rax, -0x658(%rbp)
cmpq $0x0, -0x1d0(%rbp)
jne 0x2e7d0
leaq 0x490ee(%rip), %rax     # 0x778b5
movq %rax, -0x660(%rbp)
jmp 0x2e7de
movq -0x1d0(%rbp), %rax
movq %rax, -0x660(%rbp)
movq -0x660(%rbp), %rax
movq %rax, -0x668(%rbp)
cmpq $0x0, -0x188(%rbp)
jne 0x2e806
leaq 0x490b8(%rip), %rax     # 0x778b5
movq %rax, -0x670(%rbp)
jmp 0x2e814
movq -0x188(%rbp), %rax
movq %rax, -0x670(%rbp)
movq -0x668(%rbp), %rcx
movq -0x658(%rbp), %rdx
movq -0x648(%rbp), %rdi
movq -0x670(%rbp), %r8
movl -0x1dc(%rbp), %r9d
leaq 0x4a272(%rip), %rsi     # 0x78ab0
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x678(%rbp)
cmpq $0x0, -0x1f0(%rbp)
jne 0x2e86a
leaq 0x49054(%rip), %rax     # 0x778b5
movq %rax, -0x680(%rbp)
jmp 0x2e878
movq -0x1f0(%rbp), %rax
movq %rax, -0x680(%rbp)
movq -0x680(%rbp), %rax
movq %rax, -0x688(%rbp)
cmpq $0x0, -0x208(%rbp)
jne 0x2e8a0
leaq 0x4901e(%rip), %rax     # 0x778b5
movq %rax, -0x690(%rbp)
jmp 0x2e8ae
movq -0x208(%rbp), %rax
movq %rax, -0x690(%rbp)
movq -0x688(%rbp), %rsi
movq -0x678(%rbp), %rdi
movq -0x690(%rbp), %rdx
callq 0x35a50
leaq -0x220(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x200(%rbp), %rsi
leaq -0x220(%rbp), %rdx
callq 0x35980
movq -0x20(%rbp), %rax
movq %rax, -0x698(%rbp)
cmpq $0x0, -0x218(%rbp)
jne 0x2e910
leaq 0x48fae(%rip), %rax     # 0x778b5
movq %rax, -0x6a0(%rbp)
jmp 0x2e91e
movq -0x218(%rbp), %rax
movq %rax, -0x6a0(%rbp)
movq -0x6a0(%rbp), %rax
movq %rax, -0x6a8(%rbp)
cmpq $0x0, -0x1f0(%rbp)
jne 0x2e946
leaq 0x48f78(%rip), %rax     # 0x778b5
movq %rax, -0x6b0(%rbp)
jmp 0x2e954
movq -0x1f0(%rbp), %rax
movq %rax, -0x6b0(%rbp)
movq -0x6b0(%rbp), %rax
movq %rax, -0x6b8(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x58(%rax)
jne 0x2e97d
leaq 0x48f41(%rip), %rax     # 0x778b5
movq %rax, -0x6c0(%rbp)
jmp 0x2e98c
movq -0x20(%rbp), %rax
movq 0x58(%rax), %rax
movq %rax, -0x6c0(%rbp)
movq -0x6b8(%rbp), %rcx
movq -0x6a8(%rbp), %rdx
movq -0x698(%rbp), %rdi
movq -0x6c0(%rbp), %r8
leaq 0x4a13d(%rip), %rsi     # 0x78aec
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x6c8(%rbp)
cmpq $0x0, -0x1f0(%rbp)
jne 0x2e9db
leaq 0x48ee3(%rip), %rax     # 0x778b5
movq %rax, -0x6d0(%rbp)
jmp 0x2e9e9
movq -0x1f0(%rbp), %rax
movq %rax, -0x6d0(%rbp)
movq -0x6d0(%rbp), %rax
movq %rax, -0x6d8(%rbp)
cmpq $0x0, -0x218(%rbp)
jne 0x2ea11
leaq 0x48ead(%rip), %rax     # 0x778b5
movq %rax, -0x6e0(%rbp)
jmp 0x2ea1f
movq -0x218(%rbp), %rax
movq %rax, -0x6e0(%rbp)
movq -0x6d8(%rbp), %rsi
movq -0x6c8(%rbp), %rdi
movq -0x6e0(%rbp), %rdx
callq 0x358a0
leaq -0x1b0(%rbp), %rdi
callq 0x2c6a0
leaq -0x1d8(%rbp), %rdi
callq 0x9310
leaq -0x1f8(%rbp), %rdi
callq 0x9310
leaq -0x210(%rbp), %rdi
callq 0x9310
leaq -0x220(%rbp), %rdi
callq 0x9310
movb $0x1, -0x1(%rbp)
jmp 0x2f8e3
movq -0x28(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2ea8a
jmp 0x2eaa9
leaq 0x4fbe3(%rip), %rdi     # 0x7e674
leaq 0x49638(%rip), %rsi     # 0x780d0
movl $0x897, %edx            # imm = 0x897
leaq 0x49f99(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x228(%rbp)
movq -0x228(%rbp), %rax
movb 0x60(%rax), %al
movb %al, -0x229(%rbp)
movzbl -0x229(%rbp), %eax
cmpl $0xe, %eax
je 0x2eae3
movzbl -0x229(%rbp), %eax
cmpl $0x10, %eax
jne 0x2eae5
jmp 0x2eb04
leaq 0x46600(%rip), %rdi     # 0x750ec
leaq 0x495dd(%rip), %rsi     # 0x780d0
movl $0x89c, %edx            # imm = 0x89C
leaq 0x49f3e(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x238(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x2a260
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x228(%rbp), %rcx
leaq -0x2b8(%rbp), %rdx
callq 0x2d590
movq -0x18(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movzbl -0x229(%rbp), %eax
cmpl $0x10, %eax
jne 0x2eb6e
movq -0x18(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x9100
leaq -0x338(%rbp), %rdi
callq 0x2a260
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x238(%rbp), %rcx
leaq -0x338(%rbp), %rdx
callq 0x2d590
movq -0x18(%rbp), %rdi
leaq -0x338(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x18(%rbp), %rdi
leaq -0x338(%rbp), %rsi
callq 0x9100
leaq -0x348(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x68(%rax), %rdx
leaq -0x348(%rbp), %rsi
callq 0x299e0
leaq -0x358(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x228(%rbp), %rax
movq 0x68(%rax), %rdx
leaq -0x358(%rbp), %rsi
callq 0x299e0
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x360(%rbp)
cmpq $0x0, -0x360(%rbp)
je 0x2ec1f
jmp 0x2ec3e
leaq 0x4754d(%rip), %rdi     # 0x76173
leaq 0x494a3(%rip), %rsi     # 0x780d0
movl $0x8b7, %edx            # imm = 0x8B7
leaq 0x49e04(%rip), %rcx     # 0x78a3d
callq 0x30a0
leaq -0x370(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x360(%rbp), %rsi
leaq -0x370(%rbp), %rdx
callq 0x35980
leaq -0x380(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x360(%rbp), %rsi
leaq -0x380(%rbp), %rdx
callq 0x35980
movzbl -0x229(%rbp), %eax
cmpl $0xe, %eax
jne 0x2efa5
movq -0x20(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x6e8(%rbp)
cmpq $0x0, -0x368(%rbp)
jne 0x2ecbd
leaq 0x48c01(%rip), %rax     # 0x778b5
movq %rax, -0x6f0(%rbp)
jmp 0x2eccb
movq -0x368(%rbp), %rax
movq %rax, -0x6f0(%rbp)
movq -0x6f0(%rbp), %rax
movq %rax, -0x6f8(%rbp)
cmpq $0x0, -0x350(%rbp)
jne 0x2ecf3
leaq 0x48bcb(%rip), %rax     # 0x778b5
movq %rax, -0x700(%rbp)
jmp 0x2ed01
movq -0x350(%rbp), %rax
movq %rax, -0x700(%rbp)
movq -0x700(%rbp), %rax
movq %rax, -0x708(%rbp)
cmpq $0x0, -0x260(%rbp)
jne 0x2ed29
leaq 0x48b95(%rip), %rax     # 0x778b5
movq %rax, -0x710(%rbp)
jmp 0x2ed37
movq -0x260(%rbp), %rax
movq %rax, -0x710(%rbp)
movq -0x710(%rbp), %rax
movq %rax, -0x720(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movl 0x30(%rax), %edx
leaq 0x4968a(%rip), %rax     # 0x783e0
leaq 0x4967f(%rip), %rcx     # 0x783dc
cmpl $0x1, %edx
cmoveq %rcx, %rax
movq %rax, -0x718(%rbp)
cmpq $0x0, -0x310(%rbp)
jne 0x2ed85
leaq 0x48b39(%rip), %rax     # 0x778b5
movq %rax, -0x728(%rbp)
jmp 0x2ed93
movq -0x310(%rbp), %rax
movq %rax, -0x728(%rbp)
movq -0x718(%rbp), %r9
movq -0x720(%rbp), %r8
movq -0x708(%rbp), %rcx
movq -0x6f8(%rbp), %rdx
movq -0x6e8(%rbp), %rdi
movq -0x728(%rbp), %rax
leaq 0x49d68(%rip), %rsi     # 0x78b2c
movq %rax, (%rsp)
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x730(%rbp)
cmpq $0x0, -0x340(%rbp)
jne 0x2edf4
leaq 0x48aca(%rip), %rax     # 0x778b5
movq %rax, -0x738(%rbp)
jmp 0x2ee02
movq -0x340(%rbp), %rax
movq %rax, -0x738(%rbp)
movq -0x738(%rbp), %rax
movq %rax, -0x740(%rbp)
cmpq $0x0, -0x368(%rbp)
jne 0x2ee2a
leaq 0x48a94(%rip), %rax     # 0x778b5
movq %rax, -0x748(%rbp)
jmp 0x2ee38
movq -0x368(%rbp), %rax
movq %rax, -0x748(%rbp)
movq -0x740(%rbp), %rsi
movq -0x730(%rbp), %rdi
movq -0x748(%rbp), %rdx
callq 0x35a50
movq -0x20(%rbp), %rax
movq %rax, -0x750(%rbp)
cmpq $0x0, -0x378(%rbp)
jne 0x2ee77
leaq 0x48a47(%rip), %rax     # 0x778b5
movq %rax, -0x758(%rbp)
jmp 0x2ee85
movq -0x378(%rbp), %rax
movq %rax, -0x758(%rbp)
movq -0x758(%rbp), %rax
movq %rax, -0x760(%rbp)
cmpq $0x0, -0x340(%rbp)
jne 0x2eead
leaq 0x48a11(%rip), %rax     # 0x778b5
movq %rax, -0x768(%rbp)
jmp 0x2eebb
movq -0x340(%rbp), %rax
movq %rax, -0x768(%rbp)
movq -0x768(%rbp), %rax
movq %rax, -0x770(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x58(%rax)
jne 0x2eee4
leaq 0x489da(%rip), %rax     # 0x778b5
movq %rax, -0x778(%rbp)
jmp 0x2eef3
movq -0x20(%rbp), %rax
movq 0x58(%rax), %rax
movq %rax, -0x778(%rbp)
movq -0x770(%rbp), %rcx
movq -0x760(%rbp), %rdx
movq -0x750(%rbp), %rdi
movq -0x778(%rbp), %r8
leaq 0x49bd6(%rip), %rsi     # 0x78aec
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x780(%rbp)
cmpq $0x0, -0x340(%rbp)
jne 0x2ef42
leaq 0x4897c(%rip), %rax     # 0x778b5
movq %rax, -0x788(%rbp)
jmp 0x2ef50
movq -0x340(%rbp), %rax
movq %rax, -0x788(%rbp)
movq -0x788(%rbp), %rax
movq %rax, -0x790(%rbp)
cmpq $0x0, -0x378(%rbp)
jne 0x2ef78
leaq 0x48946(%rip), %rax     # 0x778b5
movq %rax, -0x798(%rbp)
jmp 0x2ef86
movq -0x378(%rbp), %rax
movq %rax, -0x798(%rbp)
movq -0x790(%rbp), %rsi
movq -0x780(%rbp), %rdi
movq -0x798(%rbp), %rdx
callq 0x358a0
jmp 0x2f2b3
movzbl -0x229(%rbp), %eax
cmpl $0x10, %eax
jne 0x2f292
movq -0x20(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x7a0(%rbp)
cmpq $0x0, -0x368(%rbp)
jne 0x2efde
leaq 0x488e0(%rip), %rax     # 0x778b5
movq %rax, -0x7a8(%rbp)
jmp 0x2efec
movq -0x368(%rbp), %rax
movq %rax, -0x7a8(%rbp)
movq -0x7a8(%rbp), %rax
movq %rax, -0x7b0(%rbp)
cmpq $0x0, -0x340(%rbp)
jne 0x2f014
leaq 0x488aa(%rip), %rax     # 0x778b5
movq %rax, -0x7b8(%rbp)
jmp 0x2f022
movq -0x340(%rbp), %rax
movq %rax, -0x7b8(%rbp)
movq -0x7b8(%rbp), %rax
movq %rax, -0x7c0(%rbp)
cmpq $0x0, -0x290(%rbp)
jne 0x2f04a
leaq 0x48874(%rip), %rax     # 0x778b5
movq %rax, -0x7c8(%rbp)
jmp 0x2f058
movq -0x290(%rbp), %rax
movq %rax, -0x7c8(%rbp)
movq -0x7c8(%rbp), %rax
movq %rax, -0x7d0(%rbp)
cmpq $0x0, -0x310(%rbp)
jne 0x2f080
leaq 0x4883e(%rip), %rax     # 0x778b5
movq %rax, -0x7d8(%rbp)
jmp 0x2f08e
movq -0x310(%rbp), %rax
movq %rax, -0x7d8(%rbp)
movq -0x7d0(%rbp), %r8
movq -0x7c0(%rbp), %rcx
movq -0x7b0(%rbp), %rdx
movq -0x7a0(%rbp), %rdi
movq -0x7d8(%rbp), %r9
leaq 0x49aa2(%rip), %rsi     # 0x78b5a
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x7e0(%rbp)
cmpq $0x0, -0x340(%rbp)
jne 0x2f0e4
leaq 0x487da(%rip), %rax     # 0x778b5
movq %rax, -0x7e8(%rbp)
jmp 0x2f0f2
movq -0x340(%rbp), %rax
movq %rax, -0x7e8(%rbp)
movq -0x7e8(%rbp), %rax
movq %rax, -0x7f0(%rbp)
cmpq $0x0, -0x368(%rbp)
jne 0x2f11a
leaq 0x487a4(%rip), %rax     # 0x778b5
movq %rax, -0x7f8(%rbp)
jmp 0x2f128
movq -0x368(%rbp), %rax
movq %rax, -0x7f8(%rbp)
movq -0x7f0(%rbp), %rsi
movq -0x7e0(%rbp), %rdi
movq -0x7f8(%rbp), %rdx
callq 0x35a50
movq -0x20(%rbp), %rax
movq %rax, -0x800(%rbp)
cmpq $0x0, -0x378(%rbp)
jne 0x2f167
leaq 0x48757(%rip), %rax     # 0x778b5
movq %rax, -0x808(%rbp)
jmp 0x2f175
movq -0x378(%rbp), %rax
movq %rax, -0x808(%rbp)
movq -0x808(%rbp), %rax
movq %rax, -0x810(%rbp)
cmpq $0x0, -0x340(%rbp)
jne 0x2f19d
leaq 0x48721(%rip), %rax     # 0x778b5
movq %rax, -0x818(%rbp)
jmp 0x2f1ab
movq -0x340(%rbp), %rax
movq %rax, -0x818(%rbp)
movq -0x818(%rbp), %rax
movq %rax, -0x820(%rbp)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x58(%rax)
jne 0x2f1d4
leaq 0x486ea(%rip), %rax     # 0x778b5
movq %rax, -0x828(%rbp)
jmp 0x2f1e3
movq -0x20(%rbp), %rax
movq 0x58(%rax), %rax
movq %rax, -0x828(%rbp)
movq -0x820(%rbp), %rcx
movq -0x810(%rbp), %rdx
movq -0x800(%rbp), %rdi
movq -0x828(%rbp), %r8
leaq 0x498e6(%rip), %rsi     # 0x78aec
movb $0x0, %al
callq 0x94d0
movq -0x20(%rbp), %rax
movq %rax, -0x830(%rbp)
cmpq $0x0, -0x340(%rbp)
jne 0x2f232
leaq 0x4868c(%rip), %rax     # 0x778b5
movq %rax, -0x838(%rbp)
jmp 0x2f240
movq -0x340(%rbp), %rax
movq %rax, -0x838(%rbp)
movq -0x838(%rbp), %rax
movq %rax, -0x840(%rbp)
cmpq $0x0, -0x378(%rbp)
jne 0x2f268
leaq 0x48656(%rip), %rax     # 0x778b5
movq %rax, -0x848(%rbp)
jmp 0x2f276
movq -0x378(%rbp), %rax
movq %rax, -0x848(%rbp)
movq -0x840(%rbp), %rsi
movq -0x830(%rbp), %rdi
movq -0x848(%rbp), %rdx
callq 0x358a0
jmp 0x2f2b1
leaq 0x431c2(%rip), %rdi     # 0x7245b
leaq 0x48e30(%rip), %rsi     # 0x780d0
movl $0x8e9, %edx            # imm = 0x8E9
leaq 0x49791(%rip), %rcx     # 0x78a3d
callq 0x30a0
jmp 0x2f2b3
leaq -0x2b8(%rbp), %rdi
callq 0x2c6a0
leaq -0x338(%rbp), %rdi
callq 0x2c6a0
leaq -0x348(%rbp), %rdi
callq 0x9310
leaq -0x358(%rbp), %rdi
callq 0x9310
leaq -0x370(%rbp), %rdi
callq 0x9310
leaq -0x380(%rbp), %rdi
callq 0x9310
movb $0x1, -0x1(%rbp)
jmp 0x2f8e3
movq -0x28(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2f310
jmp 0x2f32f
leaq 0x4f35d(%rip), %rdi     # 0x7e674
leaq 0x48db2(%rip), %rsi     # 0x780d0
movl $0x8f7, %edx            # imm = 0x8F7
leaq 0x49713(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x388(%rbp)
cmpq $0x0, -0x388(%rbp)
je 0x2f34a
jmp 0x2f369
leaq 0x46e22(%rip), %rdi     # 0x76173
leaq 0x48d78(%rip), %rsi     # 0x780d0
movl $0x8fa, %edx            # imm = 0x8FA
leaq 0x496d9(%rip), %rcx     # 0x78a3d
callq 0x30a0
leaq -0x408(%rbp), %rdi
callq 0x2a260
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x410(%rbp)
movq -0x410(%rbp), %rax
movq 0x68(%rax), %rax
movq %rax, -0x418(%rbp)
movq -0x418(%rbp), %rax
cmpl $0x440, (%rax)          # imm = 0x440
jne 0x2f3aa
jmp 0x2f3c9
leaq 0x45da2(%rip), %rdi     # 0x75153
leaq 0x48d18(%rip), %rsi     # 0x780d0
movl $0x901, %edx            # imm = 0x901
leaq 0x49679(%rip), %rcx     # 0x78a3d
callq 0x30a0
movq -0x418(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x420(%rbp)
movq -0x420(%rbp), %rax
cmpl $0x430, (%rax)          # imm = 0x430
jne 0x2f3ef
jmp 0x2f40e
leaq 0x45d98(%rip), %rdi     # 0x7518e
leaq 0x48cd3(%rip), %rsi     # 0x780d0
movl $0x903, %edx            # imm = 0x903
leaq 0x49634(%rip), %rcx     # 0x78a3d
callq 0x30a0
leaq -0x430(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x420(%rbp), %rdx
leaq -0x430(%rbp), %rsi
callq 0x299e0
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x410(%rbp), %rcx
leaq -0x408(%rbp), %rdx
callq 0x2d590
movq -0x18(%rbp), %rdi
leaq -0x408(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x18(%rbp), %rdi
leaq -0x408(%rbp), %rsi
callq 0x9100
movq -0x420(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x438(%rbp)
movq $0x0, -0x440(%rbp)
movq -0x420(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2f4b3
movq -0x420(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x440(%rbp)
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x448(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x388(%rbp), %rsi
leaq -0x458(%rbp), %rdx
callq 0x35980
cmpq $0x0, -0x440(%rbp)
je 0x2f542
movq -0x20(%rbp), %rax
movq %rax, -0x850(%rbp)
cmpq $0x0, -0x450(%rbp)
jne 0x2f518
leaq 0x483a6(%rip), %rax     # 0x778b5
movq %rax, -0x858(%rbp)
jmp 0x2f526
movq -0x450(%rbp), %rax
movq %rax, -0x858(%rbp)
movq -0x850(%rbp), %rdi
movq -0x858(%rbp), %rdx
leaq 0x49647(%rip), %rsi     # 0x78b82
movb $0x0, %al
callq 0x94d0
leaq -0x468(%rbp), %rdi
callq 0x8c90
movl $0x0, -0x46c(%rbp)
movl -0x46c(%rbp), %eax
movq -0x448(%rbp), %rcx
cmpl 0x44(%rcx), %eax
jge 0x2f720
movq -0x448(%rbp), %rax
movq 0x48(%rax), %rax
movslq -0x46c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x478(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0x2a260
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x478(%rbp), %rcx
leaq -0x4f8(%rbp), %rdx
callq 0x2d590
movq -0x18(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x18(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0x9100
movl -0x46c(%rbp), %eax
movq -0x438(%rbp), %rcx
cmpl 0x44(%rcx), %eax
jge 0x2f6bf
movq -0x438(%rbp), %rax
movq 0x48(%rax), %rax
movslq -0x46c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
cmpl $0xa02, (%rax)          # imm = 0xA02
jne 0x2f6bf
movq -0x438(%rbp), %rax
movq 0x48(%rax), %rax
movslq -0x46c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x500(%rbp)
movq -0x500(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x508(%rbp)
leaq -0x588(%rbp), %rdi
callq 0x2a260
movq -0x10(%rbp), %rdi
movq -0x508(%rbp), %rdx
movq -0x478(%rbp), %rax
movq 0x68(%rax), %r8
leaq -0x588(%rbp), %rsi
leaq -0x4f8(%rbp), %rcx
callq 0x2a360
movq -0x18(%rbp), %rdi
leaq -0x588(%rbp), %rsi
addq $0x10, %rsi
callq 0x9100
movq -0x18(%rbp), %rdi
leaq -0x588(%rbp), %rsi
callq 0x9100
leaq -0x588(%rbp), %rsi
addq $0x20, %rsi
leaq -0x468(%rbp), %rdi
callq 0x9100
leaq -0x588(%rbp), %rdi
callq 0x2c6a0
jmp 0x2f6d6
leaq -0x4f8(%rbp), %rsi
addq $0x20, %rsi
leaq -0x468(%rbp), %rdi
callq 0x9100
leaq -0x4f8(%rbp), %rdi
callq 0x2c6a0
movl -0x46c(%rbp), %eax
addl $0x1, %eax
movq -0x448(%rbp), %rcx
cmpl 0x44(%rcx), %eax
jge 0x2f70a
leaq -0x468(%rbp), %rdi
leaq 0x45ac4(%rip), %rsi     # 0x751c9
callq 0x8d70
jmp 0x2f70c
movl -0x46c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x46c(%rbp)
jmp 0x2f558
movq -0x20(%rbp), %rax
movq %rax, -0x860(%rbp)
cmpq $0x0, -0x428(%rbp)
jne 0x2f745
leaq 0x48179(%rip), %rax     # 0x778b5
movq %rax, -0x868(%rbp)
jmp 0x2f753
movq -0x428(%rbp), %rax
movq %rax, -0x868(%rbp)
movq -0x868(%rbp), %rax
movq %rax, -0x870(%rbp)
cmpq $0x0, -0x3c0(%rbp)
jne 0x2f77b
leaq 0x48143(%rip), %rax     # 0x778b5
movq %rax, -0x878(%rbp)
jmp 0x2f789
movq -0x3c0(%rbp), %rax
movq %rax, -0x878(%rbp)
movq -0x878(%rbp), %rax
movq %rax, -0x880(%rbp)
cmpq $0x0, -0x460(%rbp)
jne 0x2f7b1
leaq 0x4810d(%rip), %rax     # 0x778b5
movq %rax, -0x888(%rbp)
jmp 0x2f7bf
movq -0x460(%rbp), %rax
movq %rax, -0x888(%rbp)
movq -0x880(%rbp), %rcx
movq -0x870(%rbp), %rdx
movq -0x860(%rbp), %rdi
movq -0x888(%rbp), %r8
leaq 0x493a6(%rip), %rsi     # 0x78b88
movb $0x0, %al
callq 0x94d0
cmpq $0x0, -0x440(%rbp)
je 0x2f8a9
leaq -0x598(%rbp), %rdi
callq 0x8c90
movq -0x10(%rbp), %rdi
movq -0x440(%rbp), %rdx
leaq -0x598(%rbp), %rsi
callq 0x299e0
movq -0x20(%rbp), %rax
movq %rax, -0x890(%rbp)
cmpq $0x0, -0x590(%rbp)
jne 0x2f83f
leaq 0x4807f(%rip), %rax     # 0x778b5
movq %rax, -0x898(%rbp)
jmp 0x2f84d
movq -0x590(%rbp), %rax
movq %rax, -0x898(%rbp)
movq -0x898(%rbp), %rax
movq %rax, -0x8a0(%rbp)
cmpq $0x0, -0x450(%rbp)
jne 0x2f875
leaq 0x48049(%rip), %rax     # 0x778b5
movq %rax, -0x8a8(%rbp)
jmp 0x2f883
movq -0x450(%rbp), %rax
movq %rax, -0x8a8(%rbp)
movq -0x8a0(%rbp), %rsi
movq -0x890(%rbp), %rdi
movq -0x8a8(%rbp), %rdx
callq 0x358a0
leaq -0x598(%rbp), %rdi
callq 0x9310
leaq -0x430(%rbp), %rdi
callq 0x9310
leaq -0x408(%rbp), %rdi
callq 0x2c6a0
leaq -0x458(%rbp), %rdi
callq 0x9310
leaq -0x468(%rbp), %rdi
callq 0x9310
movb $0x1, -0x1(%rbp)
jmp 0x2f8e3
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x8b0, %rsp            # imm = 0x8B0
popq %rbp
retq
nopw %cs:(%rax,%rax)