// File: /workspace/github_c_makefile_star2_O1/System-Glitch[P]ESGILinter-C/src/parsing_operations.c
// Function: parse_operation
type_t parse_operation(char *line, int line_index, scope_t *scope, messages_t *messages) {
	type_t type;
	type_t left_operand_type;
	type_t right_operand_type;
	type_t *ptr_type;
	scope_t *root_scope       = get_root_scope(scope);
	char *line_wo_comment     = str_remove_comments(line);
	arraylist_t *declarations = NULL;
	char *tmp_line            = NULL;
	char *left_operand        = NULL;
	char *right_operand       = NULL;
	const char *operator      = NULL;
	char *occurrence          = NULL;
	char *tmp                 = NULL;
	int   index_operator      =  0;
	int   left_operand_length = -1;
	int   right_operand_index = -1;
	int   length              = strlen(line_wo_comment);
	int   operator_length     = -1;
	int   rank                = -1;
	int   index_colon         =  0;
	char  has_colon           =  0;

	type.name = strduplicate("NULL");
	type.is_pointer = 0;
	type.is_literal = 0;


	tmp = remove_parenthesis(line_wo_comment, length);
	if(tmp != NULL) {
		free(line_wo_comment);
		line_wo_comment = tmp;
		length = strlen(line_wo_comment);
	}

	while((index_colon = strindexof(line_wo_comment + index_colon + 1, ':')) != -1) {
		if(!check_quotes(line_wo_comment, line_wo_comment + index_colon, length)) {
			has_colon = 1;
			break;
		}
	}

	if(has_colon) {
		//Maybe it's ternary condition
		type = parse_ternary_condition(line_wo_comment, length, line_index, scope, messages);
		if(strcmp(type.name, "NULL")) {
			free(line_wo_comment);
			return type;
		}
	} else if(starts_with_return(line_wo_comment, length)) {
		free(line_wo_comment);
		return type;
	}

	while((operator = known_operators[index_operator++]) != NULL) { //Find operator
		tmp_line = line_wo_comment;
		operator_length = strlen(operator);
		occurrence = strstr(line_wo_comment, operator);
		if(occurrence != NULL) {

			//Check if inside quotes
			while(check_quotes(line_wo_comment, occurrence, length) || check_parenthesis(line_wo_comment, occurrence, length)) {
				occurrence = strstr(occurrence + 1, operator);
				if(occurrence == NULL) break;
			}

			if(occurrence == NULL) continue;

			if(!strcmp(operator, "*") || !strcmp(operator, "&")) {

				//Check if not function declaration
				for(size_t i = 0 ; i < root_scope->functions->size ; i++) {
					if(((function_t*)arraylist_get(root_scope->functions, i))->line == line_index) {
						free(line_wo_comment);
						return type;
					}
				}

				while(is_operator_first(tmp_line, length, occurrence)) {
					tmp_line = occurrence + operator_length;
					occurrence = strstr(tmp_line, operator);
					if(occurrence == NULL)
						break;
				}
			} else if(is_operator_first(tmp_line, length, occurrence)) {
				free(line_wo_comment);
				return type;
			}

			if(occurrence == NULL) continue;

			//Split
			left_operand_length = occurrence - line_wo_comment;
			right_operand_index = left_operand_length + strlen(operator);
			left_operand        = strsubstr(line_wo_comment, 0, left_operand_length);
			right_operand       = strsubstr(line_wo_comment, right_operand_index, length - right_operand_index);

			//Check operator spacing
			if(messages->operator_spacing != NULL) {
				if((*(occurrence - 1) != ' ' || *(occurrence + operator_length) != ' ') && strcmp(right_operand, operator)) {
					arraylist_add(messages->operator_spacing, strduplicate((char*)operator));
				}
			}

			//If left operation is variable declaration
			declarations = get_variables_from_declaration(line_index, line);
			if(declarations != NULL && declarations->size > 0) {
				parse_declarations(declarations, scope, line_index, messages);

				free(type.name);
				type.name = strduplicate(((field_t*)arraylist_get(declarations, 0))->type.name);

				field_list_free(declarations);

				//Find var declaration in scope
				left_operand_type = find_variable_type_from_line(scope, line_index);

			} else {
				
				left_operand_type  = parse_operand(left_operand, line_index, scope, messages);
				right_operand_type = parse_operand(right_operand, line_index, scope, messages);

				if(strcmp(left_operand_type.name,"NULL") && strcmp(right_operand_type.name,"NULL")) {

					if(messages->wrong_assignment != NULL && is_assignation(operator) &&
						!type_equals(&left_operand_type, &right_operand_type)) {

						add_wrong_type_message(messages->wrong_assignment, &left_operand_type, &right_operand_type);
					}

					if(is_comparison(operator)) { //Type is int
						free(type.name);
						type.name = strduplicate("int");
						type.is_pointer = 0;
					} else if(right_operand_type.is_pointer || left_operand_type.is_pointer) {
						ptr_type = right_operand_type.is_pointer > left_operand_type.is_pointer ? &right_operand_type : &left_operand_type;
						free(type.name);
						type.name = strduplicate(ptr_type->name);
						type.is_pointer = ptr_type->is_pointer;
					} else {
						rank = get_highest_rank(right_operand_type.name, left_operand_type.name);
						if(rank != -1) {
							free(type.name);
							type.name = strduplicate((char*)type_rank[rank]);
							type.is_pointer = 0;
						}
					}
				}
				free(right_operand_type.name);
				free(left_operand_type.name);
			}

			//TODO detect forbidden operations (2 * &ptr , void + something, int - ptr)

			free(left_operand);
			free(right_operand);
			break;
		}
	}

	free(line_wo_comment);

	return type;	
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
movq %rcx, 0x60(%rsp)
movl %esi, 0xc(%rsp)
movq %rdi, %r15
movq %rdx, 0x38(%rsp)
movq %rdx, %rdi
callq 0x6915
movq %rax, 0x68(%rsp)
movq %r15, %rdi
callq 0x7be4
movq %rax, %r13
movq %rax, %rdi
callq 0x20b0
movq %rax, %rbx
leaq 0x7854(%rip), %rdi      # 0xe8c0
callq 0x7d58
movq %rax, %r12
movq %r13, %rdi
movl %ebx, %esi
callq 0x8401
testq %rax, %rax
je 0x70a0
movq %rax, %r14
movq %r13, %rdi
callq 0x2030
movq %r14, %rdi
callq 0x20b0
movq %rax, 0x10(%rsp)
movq %r14, %r13
jmp 0x70a5
movq %rbx, 0x10(%rsp)
leaq 0x1(%r13), %rbx
xorl %ebp, %ebp
movq %r15, 0x80(%rsp)
movslq %ebp, %rdi
addq %rbx, %rdi
movl $0x3a, %esi
callq 0x7f51
cmpl $-0x1, %eax
je 0x7158
movl %eax, %ebp
movslq %eax, %rsi
addq %r13, %rsi
movq %r13, %rdi
movq 0x10(%rsp), %rdx
callq 0x8291
testb %al, %al
jne 0x70b3
leaq 0x77d4(%rip), %rdi      # 0xe8c0
callq 0x7d58
movq %rax, %r12
movq %r13, %rdi
movl $0x3f, %esi
callq 0x20c0
testq %rax, %rax
je 0x71a8
movq %rax, %r14
movl 0xc(%rsp), %ebx
movq 0x10(%rsp), %rbp
movq %r13, %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x8291
testb %al, %al
jne 0x7138
movq %r13, %rdi
movq %r14, %rsi
movl %ebp, %edx
callq 0x82e1
testb %al, %al
je 0x71b1
incq %r14
movq %r14, %rdi
movl $0x3f, %esi
callq 0x20c0
movq %rax, %r14
testq %rax, %rax
jne 0x7116
xorl %r14d, %r14d
jmp 0x7212
movq 0x10(%rsp), %rbp
movslq %ebp, %rbx
leaq -0x1(%r13), %r14
xorl %r15d, %r15d
movsbl 0x1(%r14), %edi
incq %r14
callq 0x7ed1
cmpq %rbx, %r15
jge 0x7180
incq %r15
testb %al, %al
jne 0x7167
leaq 0x7679(%rip), %rsi      # 0xe800
movl $0x6, %edx
movq %r14, %rdi
callq 0x2070
xorl %r14d, %r14d
testl %eax, %eax
movl 0xc(%rsp), %ebx
jne 0x7229
jmp 0x73c7
xorl %r14d, %r14d
movl 0xc(%rsp), %ebx
jmp 0x720d
movq %r14, %rdi
movl $0x3a, %esi
callq 0x20c0
testq %rax, %rax
je 0x720a
movq %rax, %rbp
movq %r13, %rdi
movq %rbp, %rsi
movq 0x10(%rsp), %rdx
callq 0x8291
testb %al, %al
jne 0x71f2
movq %r13, %rdi
movq %rbp, %rsi
movq 0x10(%rsp), %rdx
callq 0x82e1
testb %al, %al
je 0x7719
incq %rbp
movq %rbp, %rdi
movl $0x3a, %esi
callq 0x20c0
movq %rax, %rbp
testq %rax, %rax
jne 0x71c6
xorl %r14d, %r14d
movq 0x10(%rsp), %rbp
leaq 0x76a7(%rip), %rsi      # 0xe8c0
movq %r12, %rdi
callq 0x2120
testl %eax, %eax
jne 0x73c7
movl %r14d, 0x1c(%rsp)
movq %r12, 0x30(%rsp)
movslq %ebp, %r14
leaq -0x1(%r13), %rax
movq %rax, 0x78(%rsp)
leaq 0x76a2(%rip), %r12      # 0xe8e8
movl $0x1, %eax
movq %r13, 0x58(%rsp)
movq %rax, 0x40(%rsp)
movq %r12, %rdi
callq 0x20b0
movq %rax, 0x70(%rsp)
movq %r13, %rdi
movq %r12, %rsi
callq 0x21c0
testq %rax, %rax
je 0x739f
movq %rax, %r15
movq %r13, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0x8291
testb %al, %al
jne 0x729b
movq %r13, %rdi
movq %r15, %rsi
movl %ebp, %edx
callq 0x82e1
testb %al, %al
je 0x72b4
incq %r15
movq %r15, %rdi
movq %r12, %rsi
callq 0x21c0
movq %rax, %r15
testq %rax, %rax
jne 0x7279
xorl %r15d, %r15d
testq %r15, %r15
je 0x739f
movq %r12, %rdi
leaq 0x6b36(%rip), %rsi      # 0xddfd
callq 0x2120
testl %eax, %eax
je 0x7310
movq %r12, %rdi
leaq 0x761c(%rip), %rsi      # 0xe8f6
callq 0x2120
testl %eax, %eax
je 0x7310
movq 0x78(%rsp), %rbx
xorl %ebp, %ebp
movsbl 0x1(%rbx), %edi
incq %rbx
callq 0x7ed1
cmpq %r14, %rbp
jge 0x7302
incq %rbp
testb %al, %al
jne 0x72ea
cmpq %r15, %rbx
jne 0x7391
jmp 0x73bd
movq 0x68(%rsp), %rax
movq 0x10(%rax), %rdi
cmpq $0x0, 0x8(%rdi)
je 0x7345
xorl %ebp, %ebp
movq %rbp, %rsi
callq 0x6c76
cmpl %ebx, 0x28(%rax)
je 0x73bd
incq %rbp
movq 0x68(%rsp), %rax
movq 0x10(%rax), %rdi
cmpq 0x8(%rdi), %rbp
jb 0x7322
movslq 0x70(%rsp), %rbx
movq %r13, %rbp
decq %rbp
xorl %r13d, %r13d
movsbl 0x1(%rbp), %edi
incq %rbp
callq 0x7ed1
cmpq %r14, %r13
jge 0x736b
incq %r13
testb %al, %al
jne 0x7353
cmpq %r15, %rbp
jne 0x738c
movq %r15, %rbp
addq %rbx, %rbp
movq %rbp, %rdi
movq %r12, %rsi
callq 0x21c0
movq %rax, %r15
testq %rax, %rax
jne 0x734d
xorl %r15d, %r15d
movq 0x58(%rsp), %r13
testq %r15, %r15
movl 0xc(%rsp), %ebx
movq 0x10(%rsp), %rbp
jne 0x73e8
movq 0x40(%rsp), %rcx
leaq 0xb7d5(%rip), %rax      # 0x12b80
movq (%rax,%rcx,8), %r12
leaq 0x1(%rcx), %rax
cmpq $0x1e, %rcx
jne 0x7250
movq 0x30(%rsp), %r12
movl 0x1c(%rsp), %r14d
movq %r13, %rdi
callq 0x2030
movzbl %r14b, %edx
movq %r12, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbp, %r14
movl %r15d, %ebp
subl %r13d, %ebp
movq %r12, %rdi
callq 0x20b0
addl %ebp, %eax
movl %eax, 0x40(%rsp)
movq %r13, %rdi
xorl %esi, %esi
movl %ebp, %edx
callq 0x7db1
movq %rax, 0x68(%rsp)
movl 0x40(%rsp), %esi
subl %esi, %r14d
movq %r13, %rdi
movl %r14d, %edx
callq 0x7db1
movq %rax, 0x10(%rsp)
movq 0x60(%rsp), %rbp
movq 0x38(%rbp), %r13
testq %r13, %r13
je 0x746c
cmpb $0x20, -0x1(%r15)
jne 0x7448
movslq 0x70(%rsp), %rax
cmpb $0x20, (%r15,%rax)
je 0x746c
movq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0x2120
testl %eax, %eax
je 0x746c
movq %r12, %rdi
callq 0x7d58
movq %r13, %rdi
movq %rax, %rsi
callq 0x6b96
movl %ebx, %edi
movq 0x80(%rsp), %rsi
callq 0x8888
testq %rax, %rax
je 0x75e5
movq %rax, %r14
cmpq $0x0, 0x8(%rax)
je 0x75e5
cmpq $0x0, 0x8(%r14)
je 0x756d
xorl %r12d, %r12d
leaq 0x7419(%rip), %rbp      # 0xe8c0
leaq 0x20(%rsp), %r15
movq %r14, %rdi
movq %r12, %rsi
callq 0x6c76
movq 0x8(%rax), %rdi
testq %rdi, %rdi
je 0x7560
movq %rax, %r13
movl %ebx, %esi
movq 0x38(%rsp), %rdx
movq 0x60(%rsp), %rbx
movq %rbx, %rcx
callq 0x7020
movq %rax, 0x20(%rsp)
movq %rdx, 0x28(%rsp)
movq %rax, %rdi
movq %rbp, %rsi
callq 0x2120
testl %eax, %eax
jne 0x7513
movq 0x8(%r13), %rdi
movl 0xc(%rsp), %esi
movq 0x38(%rsp), %rdx
movq %rbx, %rcx
callq 0xb680
movq %rax, 0x20(%rsp)
movq %rdx, 0x28(%rsp)
cmpq $0x0, 0x20(%rbx)
je 0x7552
movq 0x20(%rsp), %rdi
movq %rbp, %rsi
callq 0x2120
testl %eax, %eax
je 0x7552
addq $0x10, %r13
movq %r13, %rdi
movq %r15, %rsi
callq 0x67b4
testb %al, %al
jne 0x7552
movq 0x60(%rsp), %rax
movq 0x20(%rax), %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x7abd
movq 0x20(%rsp), %rdi
callq 0x2030
movl 0xc(%rsp), %ebx
incq %r12
cmpq 0x8(%r14), %r12
jb 0x74ac
movq 0x30(%rsp), %rdi
callq 0x2030
movq %r14, %rdi
xorl %esi, %esi
callq 0x6c76
movq 0x10(%rax), %rdi
callq 0x7d58
movq %rax, %r12
movq %r14, %rdi
callq 0x6899
movq 0x38(%rsp), %rax
movq 0x18(%rax), %rdi
cmpq $0x0, 0x8(%rdi)
je 0x78fa
xorl %r14d, %r14d
movq 0x58(%rsp), %r13
movq 0x68(%rsp), %r15
movq %r14, %rsi
callq 0x6c76
cmpl %ebx, 0x20(%rax)
je 0x790d
incq %r14
movq 0x38(%rsp), %rax
movq 0x18(%rax), %rdi
cmpq 0x8(%rdi), %r14
jb 0x75b6
leaq 0x72e0(%rip), %rcx      # 0xe8c0
jmp 0x7915
movq 0x68(%rsp), %r15
movq %r15, %rdi
movl %ebx, %esi
movl %ebx, %r14d
movq 0x38(%rsp), %rbx
movq %rbx, %rdx
movq %rbp, %rcx
callq 0x7a1b
movq %rax, 0x20(%rsp)
movq %rdx, 0x28(%rsp)
movq 0x10(%rsp), %rdi
movl %r14d, %esi
movq %rbx, %rdx
movq %rbp, %rcx
callq 0x7a1b
movq %rax, %r14
movq %rax, 0x48(%rsp)
movq %rdx, 0x50(%rsp)
movq 0x20(%rsp), %rdi
leaq 0x7288(%rip), %rsi      # 0xe8c0
callq 0x2120
testl %eax, %eax
je 0x78e9
leaq 0x7274(%rip), %rsi      # 0xe8c0
movq %r14, %rdi
callq 0x2120
testl %eax, %eax
movq 0x58(%rsp), %r13
je 0x78ee
cmpq $0x0, 0x20(%rbp)
movl 0x1c(%rsp), %r14d
je 0x769f
movq %r12, %rdi
callq 0x7a82
testb %al, %al
je 0x769f
leaq 0x20(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x67b4
testb %al, %al
jne 0x769f
movq 0x20(%rbp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x48(%rsp), %rdx
callq 0x7abd
leaq 0x7242(%rip), %rdi      # 0xe8e8
leaq 0xb6db(%rip), %rbx      # 0x12d88
movq %r12, %rsi
callq 0x2120
testl %eax, %eax
je 0x7926
movq (%rbx), %rdi
addq $0x8, %rbx
testq %rdi, %rdi
jne 0x76ad
movb 0x50(%rsp), %bl
movb 0x28(%rsp), %bpl
movl %ebx, %eax
orb %bpl, %al
je 0x7939
movq 0x30(%rsp), %rdi
callq 0x2030
cmpb %bpl, %bl
leaq 0x48(%rsp), %rax
leaq 0x20(%rsp), %rcx
cmovgq %rax, %rcx
movq (%rcx), %rdi
leaq 0x50(%rsp), %rax
leaq 0x28(%rsp), %rbx
cmovgq %rax, %rbx
callq 0x7d58
movq %rax, %r12
movb (%rbx), %r14b
jmp 0x7975
movq %r12, 0x30(%rsp)
subl %r13d, %r14d
subl %r13d, %ebp
leal -0x1(%r14), %edx
movq %r13, %rdi
xorl %esi, %esi
callq 0x7db1
movq %rax, 0x40(%rsp)
leaq 0x7187(%rip), %r12      # 0xe8c5
movl $0x1, %ebx
movq %r13, %rdi
movq %r12, %rsi
callq 0x21c0
testq %rax, %rax
je 0x779e
movq %rax, %r15
cmpb $0x3d, 0x1(%rax)
je 0x779e
movq %r13, %rdi
movq %r15, %rsi
movq 0x10(%rsp), %rdx
callq 0x8291
testb %al, %al
jne 0x7788
movq %r13, %rdi
movq %r15, %rsi
movq 0x10(%rsp), %rdx
callq 0x82e1
testb %al, %al
je 0x78d3
incq %r15
movq %r15, %rdi
movq %r12, %rsi
callq 0x21c0
movq %rax, %r15
testq %rax, %rax
jne 0x775c
leaq 0xb56b(%rip), %rax      # 0x12d10
movq (%rax,%rbx,8), %r12
leaq 0x1(%rbx), %rax
cmpq $0xc, %rbx
movq %rax, %rbx
jne 0x7743
leal 0x1(%r14), %esi
notl %r14d
addl %ebp, %r14d
movq %r13, %rdi
movl %r14d, %edx
callq 0x7db1
movq %rax, %r14
leal 0x1(%rbp), %esi
notl %ebp
addl 0x10(%rsp), %ebp
movq %r13, %rdi
movl %ebp, %edx
callq 0x7db1
movq %rax, %rbp
movq %r14, 0x70(%rsp)
movq %r14, %rdi
movl 0xc(%rsp), %r14d
movl %r14d, %esi
movq 0x38(%rsp), %r12
movq %r12, %rdx
movq 0x60(%rsp), %r15
movq %r15, %rcx
callq 0x7a1b
movq %rax, 0x20(%rsp)
movq %rdx, 0x28(%rsp)
movq %rbp, %rdi
movl %r14d, %esi
movq %r12, %rdx
movq %r15, %rcx
callq 0x7a1b
movq %rax, %r15
movq %rax, 0x48(%rsp)
movq %rdx, 0x50(%rsp)
movq 0x20(%rsp), %rdi
leaq 0x7083(%rip), %rsi      # 0xe8c0
callq 0x2120
testl %eax, %eax
movq 0x30(%rsp), %r12
je 0x79a0
leaq 0x706a(%rip), %rsi      # 0xe8c0
movq %r15, %rdi
callq 0x2120
testl %eax, %eax
je 0x79a0
movq 0x40(%rsp), %rdi
movl 0xc(%rsp), %ebx
movl %ebx, %esi
movq 0x38(%rsp), %rdx
movq 0x60(%rsp), %rcx
callq 0x7a1b
movq %rax, 0x78(%rsp)
movq 0x48(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x7b39
cmpl $-0x1, %eax
je 0x79a9
movl %eax, %r15d
movq %r12, %rdi
callq 0x2030
movslq %r15d, %rax
leaq 0xb3ce(%rip), %rcx      # 0x12c80
movq (%rcx,%rax,8), %rdi
callq 0x7d58
movq %rax, %r12
movl 0x50(%rsp), %eax
movl 0x28(%rsp), %r14d
cmpb %r14b, %al
cmovgl %eax, %r14d
jmp 0x79ac
xorl %r14d, %r14d
movq 0x30(%rsp), %r12
movl 0xc(%rsp), %ebx
movq 0x40(%rsp), %rdi
jmp 0x7a11
movq 0x58(%rsp), %r13
movq 0x30(%rsp), %r12
movl 0x1c(%rsp), %r14d
jmp 0x7975
movq 0x58(%rsp), %r13
leaq 0x6fba(%rip), %rcx      # 0xe8c0
movq 0x68(%rsp), %r15
jmp 0x7915
movq 0x10(%rax), %rcx
movq 0x18(%rax), %rax
movq %rcx, 0x20(%rsp)
movq %rax, 0x28(%rsp)
movl 0x1c(%rsp), %r14d
jmp 0x7989
movq 0x30(%rsp), %rdi
callq 0x2030
leaq 0x6fec(%rip), %rdi      # 0xe923
jmp 0x796a
movq 0x48(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x7b39
cmpl $-0x1, %eax
movq 0x30(%rsp), %r12
je 0x7975
movl %eax, %ebp
movq %r12, %rdi
callq 0x2030
movslq %ebp, %rax
leaq 0xb31a(%rip), %rcx      # 0x12c80
movq (%rcx,%rax,8), %rdi
callq 0x7d58
movq %rax, %r12
xorl %r14d, %r14d
movq 0x48(%rsp), %rdi
callq 0x2030
movq 0x20(%rsp), %rdi
callq 0x2030
movq %r15, %rdi
callq 0x2030
movq 0x10(%rsp), %rdi
callq 0x2030
jmp 0x73c7
xorl %r14d, %r14d
movl 0xc(%rsp), %ebx
jmp 0x79e6
xorl %r14d, %r14d
leaq 0x20(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x67b4
testb %al, %al
jne 0x79dc
movq 0x60(%rsp), %rax
movq 0x30(%rax), %rdi
testq %rdi, %rdi
je 0x79dc
leaq 0x20(%rsp), %rsi
leaq 0x48(%rsp), %rdx
callq 0x7abd
movq 0x78(%rsp), %rdi
callq 0x2030
movq 0x48(%rsp), %rdi
callq 0x2030
movq 0x20(%rsp), %rdi
callq 0x2030
movq 0x40(%rsp), %rdi
callq 0x2030
movq 0x70(%rsp), %rdi
callq 0x2030
movq %rbp, %rdi
callq 0x2030
jmp 0x720d