
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 delete_non_B_K_work_stuff(work_stuff *work)

{
  char **ppcVar1;
  int iVar2;
  string *__ptr;
  
  forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);
  if (work->typevec != (char **)0x0) {
    free(work->typevec);
    work->typevec = (char **)0x0;
    work->typevec_size = 0;
  }
  if (work->proctypevec != (int *)0x0) {
    free(work->proctypevec);
    work->proctypevec = (int *)0x0;
    work->proctypevec_size = 0;
  }
  ppcVar1 = work->tmpl_argvec;
  if (ppcVar1 != (char **)0x0) {
    if (0 < work->ntmpl_args) {
      iVar2 = 0;
      do {
        ppcVar1 = ppcVar1 + iVar2;
        iVar2 = iVar2 + 1;
        free(*ppcVar1);
        ppcVar1 = work->tmpl_argvec;
      } while (iVar2 < work->ntmpl_args);
    }
    free(ppcVar1);
    work->tmpl_argvec = (char **)0x0;
  }
  __ptr = work->previous_argument;
  if (__ptr != (string *)0x0) {
    if (__ptr->b != (char *)0x0) {
      free(__ptr->b);
      __ptr->p = (char *)0x0;
      __ptr->e = (char *)0x0;
      __ptr->b = (char *)0x0;
      __ptr = work->previous_argument;
    }
    free(__ptr);
    work->previous_argument = (string *)0x0;
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 FUN_001cdf70(int param_1)

{
  int iVar1;
  void *__ptr;
  int iVar2;
  undefined4 *__ptr_00;
  
  FUN_001cdf00();
  if (*(void **)(param_1 + 4) != (void *)0x0) {
    free(*(void **)(param_1 + 4));
    *(undefined4 *)(param_1 + 4) = 0;
    *(undefined4 *)(param_1 + 0x24) = 0;
  }
  if (*(void **)(param_1 + 0x54) != (void *)0x0) {
    free(*(void **)(param_1 + 0x54));
    *(undefined4 *)(param_1 + 0x54) = 0;
    *(undefined4 *)(param_1 + 0x58) = 0;
  }
  __ptr = *(void **)(param_1 + 0x40);
  if (__ptr != (void *)0x0) {
    if (0 < *(int *)(param_1 + 0x44)) {
      iVar2 = 0;
      do {
        iVar1 = iVar2 * 4;
        iVar2 = iVar2 + 1;
        free(*(void **)((int)__ptr + iVar1));
        __ptr = *(void **)(param_1 + 0x40);
      } while (iVar2 < *(int *)(param_1 + 0x44));
    }
    free(__ptr);
    *(undefined4 *)(param_1 + 0x40) = 0;
  }
  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);
  if (__ptr_00 != (undefined4 *)0x0) {
    if ((void *)*__ptr_00 != (void *)0x0) {
      free((void *)*__ptr_00);
      __ptr_00[1] = 0;
      __ptr_00[2] = 0;
      *__ptr_00 = 0;
      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);
    }
    free(__ptr_00);
    *(undefined4 *)(param_1 + 0x4c) = 0;
  }
  return;
}


PUSH EDI
LEA EDX,[EAX + 0x20]
MOV EDI,EAX
ADD EAX,0x4
PUSH ESI
PUSH EBX
CALL 0x00035840
ADD EBX,0x1c1080
CALL 0x001cdf00
MOV EAX,dword ptr [EDI + 0x4]
TEST EAX,EAX
JZ 0x001cdfac
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
MOV dword ptr [EDI + 0x4],0x0
ADD ESP,0x10
MOV dword ptr [EDI + 0x24],0x0
MOV EAX,dword ptr [EDI + 0x54]
TEST EAX,EAX
JZ 0x001cdfcd
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
MOV dword ptr [EDI + 0x54],0x0
ADD ESP,0x10
MOV dword ptr [EDI + 0x58],0x0
MOV EAX,dword ptr [EDI + 0x40]
TEST EAX,EAX
JZ 0x001ce00c
MOV EDX,dword ptr [EDI + 0x44]
TEST EDX,EDX
JLE 0x001cdff9
XOR ESI,ESI
LEA ESI,[ESI]
SUB ESP,0xc
PUSH dword ptr [EAX + ESI*0x4]
ADD ESI,0x1
CALL 0x00029410
ADD ESP,0x10
CMP dword ptr [EDI + 0x44],ESI
MOV EAX,dword ptr [EDI + 0x40]
JG 0x001cdfe0
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
MOV dword ptr [EDI + 0x40],0x0
ADD ESP,0x10
MOV ESI,dword ptr [EDI + 0x4c]
TEST ESI,ESI
JZ 0x001ce04f
MOV EAX,dword ptr [ESI]
TEST EAX,EAX
JZ 0x001ce03c
SUB ESP,0xc
PUSH EAX
CALL 0x00029410
MOV dword ptr [ESI + 0x4],0x0
ADD ESP,0x10
MOV dword ptr [ESI + 0x8],0x0
MOV dword ptr [ESI],0x0
MOV ESI,dword ptr [EDI + 0x4c]
SUB ESP,0xc
PUSH ESI
CALL 0x00029410
MOV dword ptr [EDI + 0x4c],0x0
ADD ESP,0x10
POP EBX
POP ESI
POP EDI
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 FUN_001cdf70(int param_1)\n\n{\n  int iVar1;\n  void *__ptr;\n  int iVar2;\n  undefined4 *__ptr_00;\n  \n  FUN_001cdf00();\n  if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }\n  __ptr = *(void **)(param_1 + 0x40);\n  if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }\n  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n  if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 FUN_001cdf70(int param_1)\n\n{\n  int iVar1;\n  void *__ptr;\n  int iVar2;\n  undefined4 *__ptr_00;\n  \n  FUN_001cdf00();\n  if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }\n  __ptr = *(void **)(param_1 + 0x40);\n  if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }\n  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n  if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_001cdf70(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  void *__ptr;\n  int iVar2;\n  undefined4 *__ptr_00;\n  \n  FUN_001cdf00();\n  if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }\n  __ptr = *(void **)(param_1 + 0x40);\n  if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }\n  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n  if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 *__ptr_00;" type_identifier (pointer_declarator "*__ptr_00" * identifier) ;) (expression_statement "FUN_001cdf00();" (call_expression "FUN_001cdf00()" identifier (argument_list "()" ( ))) ;) (if_statement "if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" if (parenthesized_expression "(*(void **)(param_1 + 4) != (void *)0x0)" ( (binary_expression "*(void **)(param_1 + 4) != (void *)0x0" (pointer_expression "*(void **)(param_1 + 4)" * (cast_expression "(void **)(param_1 + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" { (expression_statement "free(*(void **)(param_1 + 4));" (call_expression "free(*(void **)(param_1 + 4))" identifier (argument_list "(*(void **)(param_1 + 4))" ( (pointer_expression "*(void **)(param_1 + 4)" * (cast_expression "(void **)(param_1 + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined4 *)(param_1 + 4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 4) = 0" (pointer_expression "*(undefined4 *)(param_1 + 4)" * (cast_expression "(undefined4 *)(param_1 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x24) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" * (cast_expression "(undefined4 *)(param_1 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = number_literal) ;) })) (if_statement "if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }" if (parenthesized_expression "(*(void **)(param_1 + 0x54) != (void *)0x0)" ( (binary_expression "*(void **)(param_1 + 0x54) != (void *)0x0" (pointer_expression "*(void **)(param_1 + 0x54)" * (cast_expression "(void **)(param_1 + 0x54)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }" { (expression_statement "free(*(void **)(param_1 + 0x54));" (call_expression "free(*(void **)(param_1 + 0x54))" identifier (argument_list "(*(void **)(param_1 + 0x54))" ( (pointer_expression "*(void **)(param_1 + 0x54)" * (cast_expression "(void **)(param_1 + 0x54)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x54) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x54) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x54)" * (cast_expression "(undefined4 *)(param_1 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "__ptr = *(void **)(param_1 + 0x40);" (assignment_expression "__ptr = *(void **)(param_1 + 0x40)" identifier = (pointer_expression "*(void **)(param_1 + 0x40)" * (cast_expression "(void **)(param_1 + 0x40)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (if_statement "if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }" { (if_statement "if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }" if (parenthesized_expression "(0 < *(int *)(param_1 + 0x44))" ( (binary_expression "0 < *(int *)(param_1 + 0x44)" number_literal < (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) )) (compound_statement "{\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));" do (compound_statement "{\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      }" { (expression_statement "iVar1 = iVar2 * 4;" (assignment_expression "iVar1 = iVar2 * 4" identifier = (binary_expression "iVar2 * 4" identifier * number_literal)) ;) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "free(*(void **)((int)__ptr + iVar1));" (call_expression "free(*(void **)((int)__ptr + iVar1))" identifier (argument_list "(*(void **)((int)__ptr + iVar1))" ( (pointer_expression "*(void **)((int)__ptr + iVar1)" * (cast_expression "(void **)((int)__ptr + iVar1)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)__ptr + iVar1)" ( (binary_expression "(int)__ptr + iVar1" (cast_expression "(int)__ptr" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ))) ;) (expression_statement "__ptr = *(void **)(param_1 + 0x40);" (assignment_expression "__ptr = *(void **)(param_1 + 0x40)" identifier = (pointer_expression "*(void **)(param_1 + 0x40)" * (cast_expression "(void **)(param_1 + 0x40)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(iVar2 < *(int *)(param_1 + 0x44))" ( (binary_expression "iVar2 < *(int *)(param_1 + 0x44)" identifier < (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) )) ;) })) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x40) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x40) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x40)" * (cast_expression "(undefined4 *)(param_1 + 0x40)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "__ptr_00 = *(undefined4 **)(param_1 + 0x4c);" (assignment_expression "__ptr_00 = *(undefined4 **)(param_1 + 0x4c)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x4c)" * (cast_expression "(undefined4 **)(param_1 + 0x4c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) ))))) ;) (if_statement "if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }" if (parenthesized_expression "(__ptr_00 != (undefined4 *)0x0)" ( (binary_expression "__ptr_00 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }" { (if_statement "if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }" if (parenthesized_expression "((void *)*__ptr_00 != (void *)0x0)" ( (binary_expression "(void *)*__ptr_00 != (void *)0x0" (cast_expression "(void *)*__ptr_00" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*__ptr_00" * identifier)) != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }" { (expression_statement "free((void *)*__ptr_00);" (call_expression "free((void *)*__ptr_00)" identifier (argument_list "((void *)*__ptr_00)" ( (cast_expression "(void *)*__ptr_00" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*__ptr_00" * identifier)) ))) ;) (expression_statement "__ptr_00[1] = 0;" (assignment_expression "__ptr_00[1] = 0" (subscript_expression "__ptr_00[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "__ptr_00[2] = 0;" (assignment_expression "__ptr_00[2] = 0" (subscript_expression "__ptr_00[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*__ptr_00 = 0;" (assignment_expression "*__ptr_00 = 0" (pointer_expression "*__ptr_00" * identifier) = number_literal) ;) (expression_statement "__ptr_00 = *(undefined4 **)(param_1 + 0x4c);" (assignment_expression "__ptr_00 = *(undefined4 **)(param_1 + 0x4c)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x4c)" * (cast_expression "(undefined4 **)(param_1 + 0x4c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) ))))) ;) })) (expression_statement "free(__ptr_00);" (call_expression "free(__ptr_00)" identifier (argument_list "(__ptr_00)" ( identifier ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x4c) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x4c) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x4c)" * (cast_expression "(undefined4 *)(param_1 + 0x4c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) )))) = number_literal) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 delete_non_B_K_work_stuff(work_stuff *work)\n\n{\n  char **ppcVar1;\n  int iVar2;\n  string *__ptr;\n  \n  forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n  if (work->typevec != (char **)0x0) {\n    free(work->typevec);\n    work->typevec = (char **)0x0;\n    work->typevec_size = 0;\n  }\n  if (work->proctypevec != (int *)0x0) {\n    free(work->proctypevec);\n    work->proctypevec = (int *)0x0;\n    work->proctypevec_size = 0;\n  }\n  ppcVar1 = work->tmpl_argvec;\n  if (ppcVar1 != (char **)0x0) {\n    if (0 < work->ntmpl_args) {\n      iVar2 = 0;\n      do {\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      } while (iVar2 < work->ntmpl_args);\n    }\n    free(ppcVar1);\n    work->tmpl_argvec = (char **)0x0;\n  }\n  __ptr = work->previous_argument;\n  if (__ptr != (string *)0x0) {\n    if (__ptr->b != (char *)0x0) {\n      free(__ptr->b);\n      __ptr->p = (char *)0x0;\n      __ptr->e = (char *)0x0;\n      __ptr->b = (char *)0x0;\n      __ptr = work->previous_argument;\n    }\n    free(__ptr);\n    work->previous_argument = (string *)0x0;\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 delete_non_B_K_work_stuff(work_stuff *work)\n\n{\n  char **ppcVar1;\n  int iVar2;\n  string *__ptr;\n  \n  forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n  if (work->typevec != (char **)0x0) {\n    free(work->typevec);\n    work->typevec = (char **)0x0;\n    work->typevec_size = 0;\n  }\n  if (work->proctypevec != (int *)0x0) {\n    free(work->proctypevec);\n    work->proctypevec = (int *)0x0;\n    work->proctypevec_size = 0;\n  }\n  ppcVar1 = work->tmpl_argvec;\n  if (ppcVar1 != (char **)0x0) {\n    if (0 < work->ntmpl_args) {\n      iVar2 = 0;\n      do {\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      } while (iVar2 < work->ntmpl_args);\n    }\n    free(ppcVar1);\n    work->tmpl_argvec = (char **)0x0;\n  }\n  __ptr = work->previous_argument;\n  if (__ptr != (string *)0x0) {\n    if (__ptr->b != (char *)0x0) {\n      free(__ptr->b);\n      __ptr->p = (char *)0x0;\n      __ptr->e = (char *)0x0;\n      __ptr->b = (char *)0x0;\n      __ptr = work->previous_argument;\n    }\n    free(__ptr);\n    work->previous_argument = (string *)0x0;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "delete_non_B_K_work_stuff(work_stuff *work)" identifier (parameter_list "(work_stuff *work)" ( (parameter_declaration "work_stuff *work" type_identifier (pointer_declarator "*work" * identifier)) ))) (compound_statement "{\n  char **ppcVar1;\n  int iVar2;\n  string *__ptr;\n  \n  forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);\n  if (work->typevec != (char **)0x0) {\n    free(work->typevec);\n    work->typevec = (char **)0x0;\n    work->typevec_size = 0;\n  }\n  if (work->proctypevec != (int *)0x0) {\n    free(work->proctypevec);\n    work->proctypevec = (int *)0x0;\n    work->proctypevec_size = 0;\n  }\n  ppcVar1 = work->tmpl_argvec;\n  if (ppcVar1 != (char **)0x0) {\n    if (0 < work->ntmpl_args) {\n      iVar2 = 0;\n      do {\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      } while (iVar2 < work->ntmpl_args);\n    }\n    free(ppcVar1);\n    work->tmpl_argvec = (char **)0x0;\n  }\n  __ptr = work->previous_argument;\n  if (__ptr != (string *)0x0) {\n    if (__ptr->b != (char *)0x0) {\n      free(__ptr->b);\n      __ptr->p = (char *)0x0;\n      __ptr->e = (char *)0x0;\n      __ptr->b = (char *)0x0;\n      __ptr = work->previous_argument;\n    }\n    free(__ptr);\n    work->previous_argument = (string *)0x0;\n  }\n  return;\n}" { (declaration "char **ppcVar1;" primitive_type (pointer_declarator "**ppcVar1" * (pointer_declarator "*ppcVar1" * identifier)) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "string *__ptr;" type_identifier (pointer_declarator "*__ptr" * identifier) ;) (expression_statement "forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes);" (call_expression "forget_types((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes)" identifier (argument_list "((work_stuff *)&work->typevec,(work_stuff *)&work->ntypes)" ( (cast_expression "(work_stuff *)&work->typevec" ( (type_descriptor "work_stuff *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&work->typevec" & (field_expression "work->typevec" identifier -> field_identifier))) , (cast_expression "(work_stuff *)&work->ntypes" ( (type_descriptor "work_stuff *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&work->ntypes" & (field_expression "work->ntypes" identifier -> field_identifier))) ))) ;) (if_statement "if (work->typevec != (char **)0x0) {\n    free(work->typevec);\n    work->typevec = (char **)0x0;\n    work->typevec_size = 0;\n  }" if (parenthesized_expression "(work->typevec != (char **)0x0)" ( (binary_expression "work->typevec != (char **)0x0" (field_expression "work->typevec" identifier -> field_identifier) != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n    free(work->typevec);\n    work->typevec = (char **)0x0;\n    work->typevec_size = 0;\n  }" { (expression_statement "free(work->typevec);" (call_expression "free(work->typevec)" identifier (argument_list "(work->typevec)" ( (field_expression "work->typevec" identifier -> field_identifier) ))) ;) (expression_statement "work->typevec = (char **)0x0;" (assignment_expression "work->typevec = (char **)0x0" (field_expression "work->typevec" identifier -> field_identifier) = (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) (expression_statement "work->typevec_size = 0;" (assignment_expression "work->typevec_size = 0" (field_expression "work->typevec_size" identifier -> field_identifier) = number_literal) ;) })) (if_statement "if (work->proctypevec != (int *)0x0) {\n    free(work->proctypevec);\n    work->proctypevec = (int *)0x0;\n    work->proctypevec_size = 0;\n  }" if (parenthesized_expression "(work->proctypevec != (int *)0x0)" ( (binary_expression "work->proctypevec != (int *)0x0" (field_expression "work->proctypevec" identifier -> field_identifier) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(work->proctypevec);\n    work->proctypevec = (int *)0x0;\n    work->proctypevec_size = 0;\n  }" { (expression_statement "free(work->proctypevec);" (call_expression "free(work->proctypevec)" identifier (argument_list "(work->proctypevec)" ( (field_expression "work->proctypevec" identifier -> field_identifier) ))) ;) (expression_statement "work->proctypevec = (int *)0x0;" (assignment_expression "work->proctypevec = (int *)0x0" (field_expression "work->proctypevec" identifier -> field_identifier) = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "work->proctypevec_size = 0;" (assignment_expression "work->proctypevec_size = 0" (field_expression "work->proctypevec_size" identifier -> field_identifier) = number_literal) ;) })) (expression_statement "ppcVar1 = work->tmpl_argvec;" (assignment_expression "ppcVar1 = work->tmpl_argvec" identifier = (field_expression "work->tmpl_argvec" identifier -> field_identifier)) ;) (if_statement "if (ppcVar1 != (char **)0x0) {\n    if (0 < work->ntmpl_args) {\n      iVar2 = 0;\n      do {\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      } while (iVar2 < work->ntmpl_args);\n    }\n    free(ppcVar1);\n    work->tmpl_argvec = (char **)0x0;\n  }" if (parenthesized_expression "(ppcVar1 != (char **)0x0)" ( (binary_expression "ppcVar1 != (char **)0x0" identifier != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n    if (0 < work->ntmpl_args) {\n      iVar2 = 0;\n      do {\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      } while (iVar2 < work->ntmpl_args);\n    }\n    free(ppcVar1);\n    work->tmpl_argvec = (char **)0x0;\n  }" { (if_statement "if (0 < work->ntmpl_args) {\n      iVar2 = 0;\n      do {\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      } while (iVar2 < work->ntmpl_args);\n    }" if (parenthesized_expression "(0 < work->ntmpl_args)" ( (binary_expression "0 < work->ntmpl_args" number_literal < (field_expression "work->ntmpl_args" identifier -> field_identifier)) )) (compound_statement "{\n      iVar2 = 0;\n      do {\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      } while (iVar2 < work->ntmpl_args);\n    }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      } while (iVar2 < work->ntmpl_args);" do (compound_statement "{\n        ppcVar1 = ppcVar1 + iVar2;\n        iVar2 = iVar2 + 1;\n        free(*ppcVar1);\n        ppcVar1 = work->tmpl_argvec;\n      }" { (expression_statement "ppcVar1 = ppcVar1 + iVar2;" (assignment_expression "ppcVar1 = ppcVar1 + iVar2" identifier = (binary_expression "ppcVar1 + iVar2" identifier + identifier)) ;) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "free(*ppcVar1);" (call_expression "free(*ppcVar1)" identifier (argument_list "(*ppcVar1)" ( (pointer_expression "*ppcVar1" * identifier) ))) ;) (expression_statement "ppcVar1 = work->tmpl_argvec;" (assignment_expression "ppcVar1 = work->tmpl_argvec" identifier = (field_expression "work->tmpl_argvec" identifier -> field_identifier)) ;) }) while (parenthesized_expression "(iVar2 < work->ntmpl_args)" ( (binary_expression "iVar2 < work->ntmpl_args" identifier < (field_expression "work->ntmpl_args" identifier -> field_identifier)) )) ;) })) (expression_statement "free(ppcVar1);" (call_expression "free(ppcVar1)" identifier (argument_list "(ppcVar1)" ( identifier ))) ;) (expression_statement "work->tmpl_argvec = (char **)0x0;" (assignment_expression "work->tmpl_argvec = (char **)0x0" (field_expression "work->tmpl_argvec" identifier -> field_identifier) = (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ;) })) (expression_statement "__ptr = work->previous_argument;" (assignment_expression "__ptr = work->previous_argument" identifier = (field_expression "work->previous_argument" identifier -> field_identifier)) ;) (if_statement "if (__ptr != (string *)0x0) {\n    if (__ptr->b != (char *)0x0) {\n      free(__ptr->b);\n      __ptr->p = (char *)0x0;\n      __ptr->e = (char *)0x0;\n      __ptr->b = (char *)0x0;\n      __ptr = work->previous_argument;\n    }\n    free(__ptr);\n    work->previous_argument = (string *)0x0;\n  }" if (parenthesized_expression "(__ptr != (string *)0x0)" ( (binary_expression "__ptr != (string *)0x0" identifier != (cast_expression "(string *)0x0" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (__ptr->b != (char *)0x0) {\n      free(__ptr->b);\n      __ptr->p = (char *)0x0;\n      __ptr->e = (char *)0x0;\n      __ptr->b = (char *)0x0;\n      __ptr = work->previous_argument;\n    }\n    free(__ptr);\n    work->previous_argument = (string *)0x0;\n  }" { (if_statement "if (__ptr->b != (char *)0x0) {\n      free(__ptr->b);\n      __ptr->p = (char *)0x0;\n      __ptr->e = (char *)0x0;\n      __ptr->b = (char *)0x0;\n      __ptr = work->previous_argument;\n    }" if (parenthesized_expression "(__ptr->b != (char *)0x0)" ( (binary_expression "__ptr->b != (char *)0x0" (field_expression "__ptr->b" identifier -> field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(__ptr->b);\n      __ptr->p = (char *)0x0;\n      __ptr->e = (char *)0x0;\n      __ptr->b = (char *)0x0;\n      __ptr = work->previous_argument;\n    }" { (expression_statement "free(__ptr->b);" (call_expression "free(__ptr->b)" identifier (argument_list "(__ptr->b)" ( (field_expression "__ptr->b" identifier -> field_identifier) ))) ;) (expression_statement "__ptr->p = (char *)0x0;" (assignment_expression "__ptr->p = (char *)0x0" (field_expression "__ptr->p" identifier -> field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "__ptr->e = (char *)0x0;" (assignment_expression "__ptr->e = (char *)0x0" (field_expression "__ptr->e" identifier -> field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "__ptr->b = (char *)0x0;" (assignment_expression "__ptr->b = (char *)0x0" (field_expression "__ptr->b" identifier -> field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "__ptr = work->previous_argument;" (assignment_expression "__ptr = work->previous_argument" identifier = (field_expression "work->previous_argument" identifier -> field_identifier)) ;) })) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (expression_statement "work->previous_argument = (string *)0x0;" (assignment_expression "work->previous_argument = (string *)0x0" (field_expression "work->previous_argument" identifier -> field_identifier) = (cast_expression "(string *)0x0" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 FUN_001cdf70(int param_1)\n\n{\n  int iVar1;\n  void *__ptr;\n  int iVar2;\n  undefined4 *__ptr_00;\n  \n  FUN_001cdf00();\n  if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }\n  __ptr = *(void **)(param_1 + 0x40);\n  if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }\n  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n  if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_001cdf70(int param_1)\n\n{\n  int iVar1;\n  void *__ptr;\n  int iVar2;\n  undefined4 *__ptr_00;\n  \n  FUN_001cdf00();\n  if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }\n  __ptr = *(void **)(param_1 + 0x40);\n  if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }\n  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n  if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_001cdf70(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  void *__ptr;\n  int iVar2;\n  undefined4 *__ptr_00;\n  \n  FUN_001cdf00();\n  if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }\n  __ptr = *(void **)(param_1 + 0x40);\n  if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }\n  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n  if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 *__ptr_00;" type_identifier (pointer_declarator "*__ptr_00" * identifier) ;) (expression_statement "FUN_001cdf00();" (call_expression "FUN_001cdf00()" identifier (argument_list "()" ( ))) ;) (if_statement "if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" if (parenthesized_expression "(*(void **)(param_1 + 4) != (void *)0x0)" ( (binary_expression "*(void **)(param_1 + 4) != (void *)0x0" (pointer_expression "*(void **)(param_1 + 4)" * (cast_expression "(void **)(param_1 + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" { (expression_statement "free(*(void **)(param_1 + 4));" (call_expression "free(*(void **)(param_1 + 4))" identifier (argument_list "(*(void **)(param_1 + 4))" ( (pointer_expression "*(void **)(param_1 + 4)" * (cast_expression "(void **)(param_1 + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined4 *)(param_1 + 4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 4) = 0" (pointer_expression "*(undefined4 *)(param_1 + 4)" * (cast_expression "(undefined4 *)(param_1 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x24) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" * (cast_expression "(undefined4 *)(param_1 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = number_literal) ;) })) (if_statement "if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }" if (parenthesized_expression "(*(void **)(param_1 + 0x54) != (void *)0x0)" ( (binary_expression "*(void **)(param_1 + 0x54) != (void *)0x0" (pointer_expression "*(void **)(param_1 + 0x54)" * (cast_expression "(void **)(param_1 + 0x54)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }" { (expression_statement "free(*(void **)(param_1 + 0x54));" (call_expression "free(*(void **)(param_1 + 0x54))" identifier (argument_list "(*(void **)(param_1 + 0x54))" ( (pointer_expression "*(void **)(param_1 + 0x54)" * (cast_expression "(void **)(param_1 + 0x54)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x54) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x54) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x54)" * (cast_expression "(undefined4 *)(param_1 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" * (cast_expression "(undefined4 *)(param_1 + 0x58)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "__ptr = *(void **)(param_1 + 0x40);" (assignment_expression "__ptr = *(void **)(param_1 + 0x40)" identifier = (pointer_expression "*(void **)(param_1 + 0x40)" * (cast_expression "(void **)(param_1 + 0x40)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) (if_statement "if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }" { (if_statement "if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }" if (parenthesized_expression "(0 < *(int *)(param_1 + 0x44))" ( (binary_expression "0 < *(int *)(param_1 + 0x44)" number_literal < (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) )) (compound_statement "{\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (do_statement "do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));" do (compound_statement "{\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      }" { (expression_statement "iVar1 = iVar2 * 4;" (assignment_expression "iVar1 = iVar2 * 4" identifier = (binary_expression "iVar2 * 4" identifier * number_literal)) ;) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (expression_statement "free(*(void **)((int)__ptr + iVar1));" (call_expression "free(*(void **)((int)__ptr + iVar1))" identifier (argument_list "(*(void **)((int)__ptr + iVar1))" ( (pointer_expression "*(void **)((int)__ptr + iVar1)" * (cast_expression "(void **)((int)__ptr + iVar1)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)__ptr + iVar1)" ( (binary_expression "(int)__ptr + iVar1" (cast_expression "(int)__ptr" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ))) ;) (expression_statement "__ptr = *(void **)(param_1 + 0x40);" (assignment_expression "__ptr = *(void **)(param_1 + 0x40)" identifier = (pointer_expression "*(void **)(param_1 + 0x40)" * (cast_expression "(void **)(param_1 + 0x40)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(iVar2 < *(int *)(param_1 + 0x44))" ( (binary_expression "iVar2 < *(int *)(param_1 + 0x44)" identifier < (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) )) ;) })) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x40) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x40) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x40)" * (cast_expression "(undefined4 *)(param_1 + 0x40)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "__ptr_00 = *(undefined4 **)(param_1 + 0x4c);" (assignment_expression "__ptr_00 = *(undefined4 **)(param_1 + 0x4c)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x4c)" * (cast_expression "(undefined4 **)(param_1 + 0x4c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) ))))) ;) (if_statement "if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }" if (parenthesized_expression "(__ptr_00 != (undefined4 *)0x0)" ( (binary_expression "__ptr_00 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }" { (if_statement "if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }" if (parenthesized_expression "((void *)*__ptr_00 != (void *)0x0)" ( (binary_expression "(void *)*__ptr_00 != (void *)0x0" (cast_expression "(void *)*__ptr_00" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*__ptr_00" * identifier)) != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }" { (expression_statement "free((void *)*__ptr_00);" (call_expression "free((void *)*__ptr_00)" identifier (argument_list "((void *)*__ptr_00)" ( (cast_expression "(void *)*__ptr_00" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*__ptr_00" * identifier)) ))) ;) (expression_statement "__ptr_00[1] = 0;" (assignment_expression "__ptr_00[1] = 0" (subscript_expression "__ptr_00[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "__ptr_00[2] = 0;" (assignment_expression "__ptr_00[2] = 0" (subscript_expression "__ptr_00[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*__ptr_00 = 0;" (assignment_expression "*__ptr_00 = 0" (pointer_expression "*__ptr_00" * identifier) = number_literal) ;) (expression_statement "__ptr_00 = *(undefined4 **)(param_1 + 0x4c);" (assignment_expression "__ptr_00 = *(undefined4 **)(param_1 + 0x4c)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x4c)" * (cast_expression "(undefined4 **)(param_1 + 0x4c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) ))))) ;) })) (expression_statement "free(__ptr_00);" (call_expression "free(__ptr_00)" identifier (argument_list "(__ptr_00)" ( identifier ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x4c) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x4c) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x4c)" * (cast_expression "(undefined4 *)(param_1 + 0x4c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4c)" ( (binary_expression "param_1 + 0x4c" identifier + number_literal) )))) = number_literal) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (return_statement return ;) })))
(function_definition "void __regparm3 FUN_001cdf70(int param_1)\n\n{\n  int iVar1;\n  void *__ptr;\n  int iVar2;\n  undefined4 *__ptr_00;\n  \n  FUN_001cdf00();\n  if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }\n  __ptr = *(void **)(param_1 + 0x40);\n  if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }\n  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n  if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }\n  return;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_001cdf70(int param_1)" (identifier "FUN_001cdf70") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  int iVar1;\n  void *__ptr;\n  int iVar2;\n  undefined4 *__ptr_00;\n  \n  FUN_001cdf00();\n  if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }\n  if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }\n  __ptr = *(void **)(param_1 + 0x40);\n  if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }\n  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n  if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "void *__ptr;" (primitive_type "void") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "undefined4 *__ptr_00;" (type_identifier "undefined4") (pointer_declarator "*__ptr_00" (* "*") (identifier "__ptr_00")) (; ";")) (expression_statement "FUN_001cdf00();" (call_expression "FUN_001cdf00()" (identifier "FUN_001cdf00") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (*(void **)(param_1 + 4) != (void *)0x0) {\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" (if "if") (parenthesized_expression "(*(void **)(param_1 + 4) != (void *)0x0)" (( "(") (binary_expression "*(void **)(param_1 + 4) != (void *)0x0" (pointer_expression "*(void **)(param_1 + 4)" (* "*") (cast_expression "(void **)(param_1 + 4)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    free(*(void **)(param_1 + 4));\n    *(undefined4 *)(param_1 + 4) = 0;\n    *(undefined4 *)(param_1 + 0x24) = 0;\n  }" ({ "{") (expression_statement "free(*(void **)(param_1 + 4));" (call_expression "free(*(void **)(param_1 + 4))" (identifier "free") (argument_list "(*(void **)(param_1 + 4))" (( "(") (pointer_expression "*(void **)(param_1 + 4)" (* "*") (cast_expression "(void **)(param_1 + 4)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) () ")"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 4) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 4) = 0" (pointer_expression "*(undefined4 *)(param_1 + 4)" (* "*") (cast_expression "(undefined4 *)(param_1 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x24) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (if_statement "if (*(void **)(param_1 + 0x54) != (void *)0x0) {\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }" (if "if") (parenthesized_expression "(*(void **)(param_1 + 0x54) != (void *)0x0)" (( "(") (binary_expression "*(void **)(param_1 + 0x54) != (void *)0x0" (pointer_expression "*(void **)(param_1 + 0x54)" (* "*") (cast_expression "(void **)(param_1 + 0x54)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    free(*(void **)(param_1 + 0x54));\n    *(undefined4 *)(param_1 + 0x54) = 0;\n    *(undefined4 *)(param_1 + 0x58) = 0;\n  }" ({ "{") (expression_statement "free(*(void **)(param_1 + 0x54));" (call_expression "free(*(void **)(param_1 + 0x54))" (identifier "free") (argument_list "(*(void **)(param_1 + 0x54))" (( "(") (pointer_expression "*(void **)(param_1 + 0x54)" (* "*") (cast_expression "(void **)(param_1 + 0x54)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) () ")"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x54) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x54) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x54)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x54)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x58) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x58) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x58)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "__ptr = *(void **)(param_1 + 0x40);" (assignment_expression "__ptr = *(void **)(param_1 + 0x40)" (identifier "__ptr") (= "=") (pointer_expression "*(void **)(param_1 + 0x40)" (* "*") (cast_expression "(void **)(param_1 + 0x40)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (if_statement "if (__ptr != (void *)0x0) {\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }" (if "if") (parenthesized_expression "(__ptr != (void *)0x0)" (( "(") (binary_expression "__ptr != (void *)0x0" (identifier "__ptr") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }\n    free(__ptr);\n    *(undefined4 *)(param_1 + 0x40) = 0;\n  }" ({ "{") (if_statement "if (0 < *(int *)(param_1 + 0x44)) {\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }" (if "if") (parenthesized_expression "(0 < *(int *)(param_1 + 0x44))" (( "(") (binary_expression "0 < *(int *)(param_1 + 0x44)" (number_literal "0") (< "<") (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) () ")")) (compound_statement "{\n      iVar2 = 0;\n      do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));\n    }" ({ "{") (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" (identifier "iVar2") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      } while (iVar2 < *(int *)(param_1 + 0x44));" (do "do") (compound_statement "{\n        iVar1 = iVar2 * 4;\n        iVar2 = iVar2 + 1;\n        free(*(void **)((int)__ptr + iVar1));\n        __ptr = *(void **)(param_1 + 0x40);\n      }" ({ "{") (expression_statement "iVar1 = iVar2 * 4;" (assignment_expression "iVar1 = iVar2 * 4" (identifier "iVar1") (= "=") (binary_expression "iVar2 * 4" (identifier "iVar2") (* "*") (number_literal "4"))) (; ";")) (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "free(*(void **)((int)__ptr + iVar1));" (call_expression "free(*(void **)((int)__ptr + iVar1))" (identifier "free") (argument_list "(*(void **)((int)__ptr + iVar1))" (( "(") (pointer_expression "*(void **)((int)__ptr + iVar1)" (* "*") (cast_expression "(void **)((int)__ptr + iVar1)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((int)__ptr + iVar1)" (( "(") (binary_expression "(int)__ptr + iVar1" (cast_expression "(int)__ptr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__ptr")) (+ "+") (identifier "iVar1")) () ")")))) () ")"))) (; ";")) (expression_statement "__ptr = *(void **)(param_1 + 0x40);" (assignment_expression "__ptr = *(void **)(param_1 + 0x40)" (identifier "__ptr") (= "=") (pointer_expression "*(void **)(param_1 + 0x40)" (* "*") (cast_expression "(void **)(param_1 + 0x40)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar2 < *(int *)(param_1 + 0x44))" (( "(") (binary_expression "iVar2 < *(int *)(param_1 + 0x44)" (identifier "iVar2") (< "<") (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" (identifier "free") (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x40) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x40) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x40)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x40)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "__ptr_00 = *(undefined4 **)(param_1 + 0x4c);" (assignment_expression "__ptr_00 = *(undefined4 **)(param_1 + 0x4c)" (identifier "__ptr_00") (= "=") (pointer_expression "*(undefined4 **)(param_1 + 0x4c)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x4c)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x4c)" (( "(") (binary_expression "param_1 + 0x4c" (identifier "param_1") (+ "+") (number_literal "0x4c")) () ")"))))) (; ";")) (if_statement "if (__ptr_00 != (undefined4 *)0x0) {\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }" (if "if") (parenthesized_expression "(__ptr_00 != (undefined4 *)0x0)" (( "(") (binary_expression "__ptr_00 != (undefined4 *)0x0" (identifier "__ptr_00") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }\n    free(__ptr_00);\n    *(undefined4 *)(param_1 + 0x4c) = 0;\n  }" ({ "{") (if_statement "if ((void *)*__ptr_00 != (void *)0x0) {\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }" (if "if") (parenthesized_expression "((void *)*__ptr_00 != (void *)0x0)" (( "(") (binary_expression "(void *)*__ptr_00 != (void *)0x0" (cast_expression "(void *)*__ptr_00" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*__ptr_00" (* "*") (identifier "__ptr_00"))) (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      free((void *)*__ptr_00);\n      __ptr_00[1] = 0;\n      __ptr_00[2] = 0;\n      *__ptr_00 = 0;\n      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);\n    }" ({ "{") (expression_statement "free((void *)*__ptr_00);" (call_expression "free((void *)*__ptr_00)" (identifier "free") (argument_list "((void *)*__ptr_00)" (( "(") (cast_expression "(void *)*__ptr_00" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*__ptr_00" (* "*") (identifier "__ptr_00"))) () ")"))) (; ";")) (expression_statement "__ptr_00[1] = 0;" (assignment_expression "__ptr_00[1] = 0" (subscript_expression "__ptr_00[1]" (identifier "__ptr_00") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "__ptr_00[2] = 0;" (assignment_expression "__ptr_00[2] = 0" (subscript_expression "__ptr_00[2]" (identifier "__ptr_00") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*__ptr_00 = 0;" (assignment_expression "*__ptr_00 = 0" (pointer_expression "*__ptr_00" (* "*") (identifier "__ptr_00")) (= "=") (number_literal "0")) (; ";")) (expression_statement "__ptr_00 = *(undefined4 **)(param_1 + 0x4c);" (assignment_expression "__ptr_00 = *(undefined4 **)(param_1 + 0x4c)" (identifier "__ptr_00") (= "=") (pointer_expression "*(undefined4 **)(param_1 + 0x4c)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x4c)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x4c)" (( "(") (binary_expression "param_1 + 0x4c" (identifier "param_1") (+ "+") (number_literal "0x4c")) () ")"))))) (; ";")) (} "}"))) (expression_statement "free(__ptr_00);" (call_expression "free(__ptr_00)" (identifier "free") (argument_list "(__ptr_00)" (( "(") (identifier "__ptr_00") () ")"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x4c) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x4c) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x4c)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4c)" (( "(") (binary_expression "param_1 + 0x4c" (identifier "param_1") (+ "+") (number_literal "0x4c")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 function_1(type_1 *work)

{
  char **var_3;
  int var_4;
  type_2 *var_5;
  
  var_1((type_1 *)&work->typevec,(type_1 *)&work->ntypes);
  if (work->typevec != (char **)0x0) {
    var_2(work->typevec);
    work->typevec = (char **)0x0;
    work->typevec_size = 0;
  }
  if (work->proctypevec != (int *)0x0) {
    var_2(work->proctypevec);
    work->proctypevec = (int *)0x0;
    work->proctypevec_size = 0;
  }
  var_3 = work->tmpl_argvec;
  if (var_3 != (char **)0x0) {
    if (0 < work->ntmpl_args) {
      var_4 = 0;
      do {
        var_3 = var_3 + var_4;
        var_4 = var_4 + 1;
        var_2(*var_3);
        var_3 = work->tmpl_argvec;
      } while (var_4 < work->ntmpl_args);
    }
    var_2(var_3);
    work->tmpl_argvec = (char **)0x0;
  }
  var_5 = work->previous_argument;
  if (var_5 != (type_2 *)0x0) {
    if (var_5->b != (char *)0x0) {
      var_2(var_5->b);
      var_5->p = (char *)0x0;
      var_5->e = (char *)0x0;
      var_5->b = (char *)0x0;
      var_5 = work->previous_argument;
    }
    var_2(var_5);
    work->previous_argument = (type_2 *)0x0;
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 MASKED(int param_1)

{
  int iVar1;
  void *__ptr;
  int iVar2;
  undefined4 *__ptr_00;
  
  FUN_001cdf00();
  if (*(void **)(param_1 + 4) != (void *)0x0) {
    free(*(void **)(param_1 + 4));
    *(undefined4 *)(param_1 + 4) = 0;
    *(undefined4 *)(param_1 + 0x24) = 0;
  }
  if (*(void **)(param_1 + 0x54) != (void *)0x0) {
    free(*(void **)(param_1 + 0x54));
    *(undefined4 *)(param_1 + 0x54) = 0;
    *(undefined4 *)(param_1 + 0x58) = 0;
  }
  __ptr = *(void **)(param_1 + 0x40);
  if (__ptr != (void *)0x0) {
    if (0 < *(int *)(param_1 + 0x44)) {
      iVar2 = 0;
      do {
        iVar1 = iVar2 * 4;
        iVar2 = iVar2 + 1;
        free(*(void **)((int)__ptr + iVar1));
        __ptr = *(void **)(param_1 + 0x40);
      } while (iVar2 < *(int *)(param_1 + 0x44));
    }
    free(__ptr);
    *(undefined4 *)(param_1 + 0x40) = 0;
  }
  __ptr_00 = *(undefined4 **)(param_1 + 0x4c);
  if (__ptr_00 != (undefined4 *)0x0) {
    if ((void *)*__ptr_00 != (void *)0x0) {
      free((void *)*__ptr_00);
      __ptr_00[1] = 0;
      __ptr_00[2] = 0;
      *__ptr_00 = 0;
      __ptr_00 = *(undefined4 **)(param_1 + 0x4c);
    }
    free(__ptr_00);
    *(undefined4 *)(param_1 + 0x4c) = 0;
  }
  return;
}

