// File: /workspace/github_c_makefile_star2_O0/cbouilla[P]AES-attacks-finder/parser_machinery.c
// Function: parse
void parse(char *filename, 
	   Equation **equations, 
	   int *n_eqs, 
	   int *n_vars, 
	   int **known_vars, 
	   int *known_array_size, 
	   string_list_t **dictionnary,
	   int *n_msg,
	   int *n_var_by_msg,
	   int ***message_groups) {
  int i,j;

  message_variables = malloc(32*sizeof(string_list_t*));
  for(i=0; i<32; i++)
    message_variables[i] = NULL;

  yyin = fopen(filename, "r");
  // TODO : detect errors

  yyparse();
  fclose(yyin);

  register_string(&all_variables, "1"); // register the constant variable



  // allocate the equations
  Equation *eqs = malloc(n_equations*sizeof(Equation));

  equation_t *equation = all_equations;
  i=0;
  while (equation != NULL) {
    
    // allocate the equation
    eqs[i] = malloc(sizeof(EQUATION));
    
    // scan the terms
    eqs[i]->nV = 0;
    eqs[i]->nS = 0;
    term_t *term = equation->head_term;
    while (term != NULL) {
      if (term->sbox == NULL) eqs[i]->nV++; else eqs[i]->nS++;
      term = term->next;
    }
    
    // allocate the coefficients/stuff
    eqs[i]->var = malloc(eqs[i]->nV*sizeof(int));
    eqs[i]->coefV = malloc(eqs[i]->nV*sizeof(unsigned char));
    eqs[i]->sbox = malloc(eqs[i]->nS*sizeof(unsigned char));
    eqs[i]->coefS = malloc(eqs[i]->nS*sizeof(unsigned char));
    eqs[i]->S = malloc(eqs[i]->nS*sizeof(EQUATION*));
    for(j=0; j<eqs[i]->nS; j++)
      eqs[i]->S[j] = malloc(sizeof(EQUATION));
    
    // now rescan the terms and populate the datastructure
    term = equation->head_term;
    int lin_i = 0;
    int box_i = 0;
    while (term != NULL) {
      if (term->variable == NULL) { /* constant term */
	eqs[i]->coefV[lin_i] = term->coeff;
	//printf("read coeff : %02x\n", term->coeff);
	eqs[i]->var[lin_i] = 0; // variable zero denotes constant terms

	lin_i++;
      } else if (term->sbox == NULL) { /* linear term */
	eqs[i]->coefV[lin_i] = term->coeff;
	eqs[i]->var[lin_i] = register_string(&all_variables, term->variable); 

	lin_i++;	
      } else { /* Sbox */
	eqs[i]->coefS[box_i] = term->coeff;
	eqs[i]->sbox[box_i] = register_string(&all_boxes, term->sbox); 
	eqs[i]->S[box_i]->nV = 1;
	eqs[i]->S[box_i]->nS = 0;
	eqs[i]->S[box_i]->S = NULL;
	eqs[i]->S[box_i]->coefS = NULL;
	eqs[i]->S[box_i]->sbox = NULL;
	eqs[i]->S[box_i]->coefV = malloc(sizeof(unsigned char));
	eqs[i]->S[box_i]->var = malloc(sizeof(int));
	eqs[i]->S[box_i]->coefV[0] = 1;
	eqs[i]->S[box_i]->var[0] = register_string(&all_variables, term->variable);

	box_i++;	
      }
      term = term->next;
    }

    i++;
    equation = equation->next;
  }

  // now dealing with the known vars

  n_known_variables++;   // we know "variable 0", ie the constant terms
  int * known_vars_array = malloc(n_known_variables*sizeof(int));
  string_list_t *curr_var = known_variables;
  known_vars_array[0] = 0;
  j = 1;
  while (curr_var != NULL) {
    known_vars_array[j] = find_string(all_variables, curr_var->name);
    if (known_vars_array[j] < 0) {
      fprintf(stderr, "[Parser] a known variable (%s) does not occur in the equations !\n", curr_var->name);
      exit(1);
    }
    curr_var = curr_var->next;
    j++;
  }

  // dealing with the "message" grouping, if relevant
  int all_msg_nvar = -1;
  int **msg_grouping = NULL;

  if (n_messages == 0 && message_variables[0] == NULL) 
    printf("[+] No (explicit) message information available\n");
  else {
    printf("[+] %d distinct messages appear in the equations\n", n_messages+1);
    n_messages++;

    msg_grouping = malloc(n_messages*sizeof(int*));
    for(i=0; i<n_messages; i++) {
      
      // count the number of variables in current message
      int nvars = 0;
      curr_var = message_variables[i];
      while (curr_var != NULL) { curr_var = curr_var->next; nvars++; }
      printf("  [+] %d variables found in message %d\n", nvars, i+1);
      
      if (all_msg_nvar < 0) all_msg_nvar = nvars;
      if (all_msg_nvar > 0 && nvars != all_msg_nvar) {
	printf("\nHmmm, all your message do not have the same number of variables... This is quite suspect !\n");
	exit(1);
      }
      
      // allocate and fill array 
      msg_grouping[i] = malloc(nvars*sizeof(int));
      curr_var = message_variables[i];
      j = 0;
      while (curr_var != NULL) {
	msg_grouping[i][j] = find_string(all_variables, curr_var->name);
	if (msg_grouping[i][j] < 0) {
	  fprintf(stderr, "[Parser] in the ''message'' section, a variable (%s) does not occur in the equations !\n", curr_var->name);
	  exit(1);
	}
	curr_var = curr_var->next;
	j++;
      }
      
      // moving on to the next message
    }
  }
    
  // storing the results and leaving
  
  *equations = eqs;
  *known_vars = known_vars_array;
  
  *n_eqs = n_equations;
  *n_vars = all_variables->number + 1;  // numbered from 0 to all_variables->number
  *n_msg = n_messages;
  *n_var_by_msg = all_msg_nvar;
  
  *known_array_size = n_known_variables;
  *dictionnary = all_variables;
  *message_groups = msg_grouping;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movl $0x100, %edi            # imm = 0x100
callq 0x21c0
movq %rax, 0x2a37c(%rip)     # 0x3d3d0
movl $0x0, -0x34(%rbp)
cmpl $0x20, -0x34(%rbp)
jge 0x1307f
movq 0x2a368(%rip), %rax     # 0x3d3d0
movslq -0x34(%rbp), %rcx
movq $0x0, (%rax,%rcx,8)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x1305b
movq -0x8(%rbp), %rdi
leaq 0x22e44(%rip), %rsi     # 0x35ece
callq 0x2200
movq %rax, %rcx
leaq 0x2a357(%rip), %rax     # 0x3d3f0
movq %rcx, (%rax)
callq 0x13850
leaq 0x2a348(%rip), %rax     # 0x3d3f0
movq (%rax), %rdi
callq 0x20d0
leaq 0x2a2f1(%rip), %rdi     # 0x3d3a8
leaq 0x2209a(%rip), %rsi     # 0x35158
callq 0x12e90
movslq 0x2a2f6(%rip), %rdi     # 0x3d3c0
shlq $0x3, %rdi
callq 0x21c0
movq %rax, -0x40(%rbp)
movq 0x2a2c2(%rip), %rax     # 0x3d3a0
movq %rax, -0x48(%rbp)
movl $0x0, -0x34(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x13546
movl $0x38, %edi
callq 0x21c0
movq %rax, %rdx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl $0x0, (%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl $0x0, 0x18(%rax)
movq -0x48(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x13187
movq -0x50(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x13164
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x13179
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl 0x18(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x18(%rax)
movq -0x50(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0x1313d
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq (%rax), %rdi
shlq $0x2, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq (%rax), %rdi
shlq $0x0, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq 0x18(%rax), %rdi
shlq $0x0, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, 0x30(%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq 0x18(%rax), %rdi
shlq $0x0, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, 0x28(%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq 0x18(%rax), %rdi
shlq $0x3, %rdi
callq 0x21c0
movq %rax, %rcx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, 0x20(%rax)
movl $0x0, -0x38(%rbp)
movl -0x38(%rbp), %eax
movq -0x40(%rbp), %rcx
movslq -0x34(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
cmpl 0x18(%rcx), %eax
jge 0x132ac
movl $0x38, %edi
callq 0x21c0
movq %rax, %rdx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x20(%rax), %rax
movslq -0x38(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x13268
movq -0x48(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movl $0x0, -0x54(%rbp)
movl $0x0, -0x58(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x1352c
movq -0x50(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x13321
movq -0x50(%rbp), %rax
movb 0x10(%rax), %dl
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x10(%rax), %rax
movslq -0x54(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rax
movslq -0x54(%rbp), %rcx
movl $0x0, (%rax,%rcx,4)
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x1351b
movq -0x50(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x13384
movq -0x50(%rbp), %rax
movb 0x10(%rax), %dl
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x10(%rax), %rax
movslq -0x54(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x50(%rbp), %rax
movq (%rax), %rsi
leaq 0x2a050(%rip), %rdi     # 0x3d3a8
callq 0x12e90
movl %eax, %edx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x8(%rax), %rax
movslq -0x54(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x13519
movq -0x50(%rbp), %rax
movb 0x10(%rax), %dl
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x28(%rax), %rax
movslq -0x58(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x29fff(%rip), %rdi     # 0x3d3b0
callq 0x12e90
movb %al, %dl
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x30(%rax), %rax
movslq -0x58(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl $0x1, (%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl $0x0, 0x18(%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq $0x0, 0x20(%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq $0x0, 0x28(%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq $0x0, 0x30(%rax)
movl $0x1, %edi
callq 0x21c0
movq %rax, %rcx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, 0x10(%rax)
movl $0x4, %edi
callq 0x21c0
movq %rax, %rcx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq %rcx, 0x8(%rax)
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x10(%rax), %rax
movb $0x1, (%rax)
movq -0x50(%rbp), %rax
movq (%rax), %rsi
leaq 0x29ebd(%rip), %rdi     # 0x3d3a8
callq 0x12e90
movl %eax, %ecx
movq -0x40(%rbp), %rax
movslq -0x34(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq 0x20(%rax), %rax
movslq -0x58(%rbp), %rdx
movq (%rax,%rdx,8), %rax
movq 0x8(%rax), %rax
movl %ecx, (%rax)
movl -0x58(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x58(%rbp)
jmp 0x1351b
movq -0x50(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0x132c5
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x130e9
movl 0x29e78(%rip), %eax     # 0x3d3c4
addl $0x1, %eax
movl %eax, 0x29e6f(%rip)     # 0x3d3c4
movslq 0x29e68(%rip), %rdi     # 0x3d3c4
shlq $0x2, %rdi
callq 0x21c0
movq %rax, -0x60(%rbp)
movq 0x29e48(%rip), %rax     # 0x3d3b8
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
movl $0x0, (%rax)
movl $0x1, -0x38(%rbp)
cmpq $0x0, -0x68(%rbp)
je 0x135fa
movq 0x29e15(%rip), %rdi     # 0x3d3a8
movq -0x68(%rbp), %rax
movq (%rax), %rsi
callq 0x12f60
movl %eax, %edx
movq -0x60(%rbp), %rax
movslq -0x38(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x60(%rbp), %rax
movslq -0x38(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
jge 0x135e3
movq 0x29a37(%rip), %rax     # 0x3cff8
movq (%rax), %rdi
movq -0x68(%rbp), %rax
movq (%rax), %rdx
leaq 0x224e3(%rip), %rsi     # 0x35ab5
movb $0x0, %al
callq 0x2180
movl $0x1, %edi
callq 0x2240
movq -0x68(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x68(%rbp)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x13585
movl $0xffffffff, -0x6c(%rbp) # imm = 0xFFFFFFFF
movq $0x0, -0x78(%rbp)
cmpl $0x0, 0x29dbc(%rip)     # 0x3d3cc
jne 0x13632
movq 0x29db7(%rip), %rax     # 0x3d3d0
cmpq $0x0, (%rax)
jne 0x13632
leaq 0x224d1(%rip), %rdi     # 0x35af7
movb $0x0, %al
callq 0x2100
jmp 0x137d7
movl 0x29d94(%rip), %esi     # 0x3d3cc
addl $0x1, %esi
leaq 0x224e6(%rip), %rdi     # 0x35b28
movb $0x0, %al
callq 0x2100
movl 0x29d7d(%rip), %eax     # 0x3d3cc
addl $0x1, %eax
movl %eax, 0x29d74(%rip)     # 0x3d3cc
movslq 0x29d6d(%rip), %rdi     # 0x3d3cc
shlq $0x3, %rdi
callq 0x21c0
movq %rax, -0x78(%rbp)
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl 0x29d50(%rip), %eax     # 0x3d3cc
jge 0x137d5
movl $0x0, -0x7c(%rbp)
movq 0x29d40(%rip), %rax     # 0x3d3d0
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x68(%rbp)
cmpq $0x0, -0x68(%rbp)
je 0x136ba
movq -0x68(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x68(%rbp)
movl -0x7c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7c(%rbp)
jmp 0x1369c
movl -0x7c(%rbp), %esi
movl -0x34(%rbp), %edx
addl $0x1, %edx
leaq 0x22490(%rip), %rdi     # 0x35b5a
movb $0x0, %al
callq 0x2100
cmpl $0x0, -0x6c(%rbp)
jge 0x136dd
movl -0x7c(%rbp), %eax
movl %eax, -0x6c(%rbp)
cmpl $0x0, -0x6c(%rbp)
jle 0x13703
movl -0x7c(%rbp), %eax
cmpl -0x6c(%rbp), %eax
je 0x13703
leaq 0x22490(%rip), %rdi     # 0x35b82
movb $0x0, %al
callq 0x2100
movl $0x1, %edi
callq 0x2240
movslq -0x7c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x21c0
movq %rax, %rdx
movq -0x78(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x29caa(%rip), %rax     # 0x3d3d0
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x68(%rbp)
movl $0x0, -0x38(%rbp)
cmpq $0x0, -0x68(%rbp)
je 0x137c5
movq 0x29c5d(%rip), %rdi     # 0x3d3a8
movq -0x68(%rbp), %rax
movq (%rax), %rsi
callq 0x12f60
movl %eax, %edx
movq -0x78(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x38(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x78(%rbp), %rax
movslq -0x34(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x38(%rbp), %rcx
cmpl $0x0, (%rax,%rcx,4)
jge 0x137ab
movq 0x2986f(%rip), %rax     # 0x3cff8
movq (%rax), %rdi
movq -0x68(%rbp), %rax
movq (%rax), %rdx
leaq 0x22445(%rip), %rsi     # 0x35bdf
movb $0x0, %al
callq 0x2180
movl $0x1, %edi
callq 0x2240
movq -0x68(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x68(%rbp)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x13739
jmp 0x137c7
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x13673
jmp 0x137d7
movq -0x40(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movl 0x29bcd(%rip), %ecx     # 0x3d3c0
movq -0x18(%rbp), %rax
movl %ecx, (%rax)
movq 0x29ba8(%rip), %rax     # 0x3d3a8
movl 0x8(%rax), %ecx
addl $0x1, %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movl 0x29bba(%rip), %ecx     # 0x3d3cc
movq 0x18(%rbp), %rax
movl %ecx, (%rax)
movl -0x6c(%rbp), %ecx
movq 0x20(%rbp), %rax
movl %ecx, (%rax)
movl 0x29b9d(%rip), %ecx     # 0x3d3c4
movq -0x30(%rbp), %rax
movl %ecx, (%rax)
movq 0x29b74(%rip), %rcx     # 0x3d3a8
movq 0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x78(%rbp), %rcx
movq 0x28(%rbp), %rax
movq %rcx, (%rax)
addq $0x80, %rsp
popq %rbp
retq
nop