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

void store_array(int var_name)

{
  estack_rec *num;
  char cVar1;
  uint idx;
  bc_num *num_00;
  bc_num pbVar2;
  
  cVar1 = check_stack(2);
  if (cVar1 != '\0') {
    idx = bc_num2long(ex_stack->s_next->s_num);
    if (0xffffff < idx) {
LAB_0001848b:
      rt_error("Array %s subscript out of bounds.",a_names[var_name]);
      return;
    }
    if (idx == 0) {
      cVar1 = bc_is_zero(ex_stack->s_next->s_num);
      if (cVar1 == '\0') goto LAB_0001848b;
    }
    num_00 = get_array_num(var_name,idx);
    if (num_00 != (bc_num *)0x0) {
      bc_free_num(num_00);
      pbVar2 = bc_copy_num(ex_stack->s_num);
      *num_00 = pbVar2;
      bc_free_num(&ex_stack->s_next->s_num);
      num = ex_stack;
      ex_stack->s_next->s_num = ex_stack->s_num;
      bc_init_num(&num->s_num);
      pop();
      return;
    }
  }
  return;
}



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

void FUN_00018420(int param_1)

{
  char cVar1;
  uint uVar2;
  undefined4 *puVar3;
  undefined4 uVar4;
  
  cVar1 = FUN_00017de0(2);
  if (cVar1 != '\0') {
    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);
    if (0xffffff < uVar2) {
LAB_0001848b:
      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));
      return;
    }
    if (uVar2 == 0) {
      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);
      if (cVar1 == '\0') goto LAB_0001848b;
    }
    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);
    if (puVar3 != (undefined4 *)0x0) {
      FUN_0001a9d0(puVar3);
      uVar4 = FUN_0001aa90(*DAT_000292bc);
      *puVar3 = uVar4;
      FUN_0001a9d0(DAT_000292bc[1]);
      puVar3 = DAT_000292bc;
      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;
      FUN_0001aaa0(puVar3);
      FUN_00017d30();
      return;
    }
  }
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00011650
ADD EBX,0x10adb
SUB ESP,0x18
MOV ESI,dword ptr [ESP + 0x2c]
PUSH 0x2
CALL 0x00017de0
ADD ESP,0x10
TEST AL,AL
JNZ 0x00018450
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
LEA EDI,[EBX + 0x3b8]
SUB ESP,0xc
MOV EAX,dword ptr [EDI]
MOV EAX,dword ptr [EAX + 0x4]
PUSH dword ptr [EAX]
CALL 0x0001c330
ADD ESP,0x10
MOV EBP,EAX
CMP EAX,0xffffff
JA 0x0001848b
TEST EAX,EAX
JNZ 0x000184b0
MOV EAX,dword ptr [EDI]
SUB ESP,0xc
MOV EAX,dword ptr [EAX + 0x4]
PUSH dword ptr [EAX]
CALL 0x0001ab00
ADD ESP,0x10
TEST AL,AL
JNZ 0x000184b0
LEA EAX,[EBX + 0x354]
SUB ESP,0x8
MOV EAX,dword ptr [EAX]
PUSH dword ptr [EAX + ESI*0x4]
LEA EAX,[EBX + 0xffff8c48]
PUSH EAX
CALL 0x00019f10
ADD ESP,0x10
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x8
PUSH EBP
PUSH ESI
CALL 0x00017eb0
ADD ESP,0x10
MOV ESI,EAX
TEST EAX,EAX
JZ 0x00018444
SUB ESP,0xc
PUSH EAX
CALL 0x0001a9d0
POP EAX
MOV EAX,dword ptr [EDI]
PUSH dword ptr [EAX]
CALL 0x0001aa90
MOV dword ptr [ESI],EAX
MOV EAX,dword ptr [EDI]
POP EDX
PUSH dword ptr [EAX + 0x4]
CALL 0x0001a9d0
MOV EAX,dword ptr [EDI]
MOV ECX,dword ptr [EAX]
MOV EDX,dword ptr [EAX + 0x4]
MOV dword ptr [EDX],ECX
MOV dword ptr [ESP],EAX
CALL 0x0001aaa0
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00017d30
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_00018420(int param_1)\n\n{\n  char cVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  undefined4 uVar4;\n  \n  cVar1 = FUN_00017de0(2);\n  if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }\n  return;\n}\n\n" comment (function_definition "void FUN_00018420(int param_1)\n\n{\n  char cVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  undefined4 uVar4;\n  \n  cVar1 = FUN_00017de0(2);\n  if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00018420(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  undefined4 uVar4;\n  \n  cVar1 = FUN_00017de0(2);\n  if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (expression_statement "cVar1 = FUN_00017de0(2);" (assignment_expression "cVar1 = FUN_00017de0(2)" identifier = (call_expression "FUN_00017de0(2)" identifier (argument_list "(2)" ( number_literal )))) ;) (if_statement "if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }" { (expression_statement "uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);" (assignment_expression "uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1])" identifier = (call_expression "FUN_0001c330(*(undefined4 *)DAT_000292bc[1])" identifier (argument_list "(*(undefined4 *)DAT_000292bc[1])" ( (pointer_expression "*(undefined4 *)DAT_000292bc[1]" * (cast_expression "(undefined4 *)DAT_000292bc[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "DAT_000292bc[1]" identifier [ number_literal ]))) )))) ;) (if_statement "if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }" if (parenthesized_expression "(0xffffff < uVar2)" ( (binary_expression "0xffffff < uVar2" number_literal < identifier) )) (compound_statement "{\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }" { (labeled_statement "LAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));" statement_identifier : (expression_statement "FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));" (call_expression "FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4))" identifier (argument_list "("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4))" ( (string_literal ""Array %s subscript out of bounds."" " string_content ") , (pointer_expression "*(undefined4 *)(DAT_00029258 + param_1 * 4)" * (cast_expression "(undefined4 *)(DAT_00029258 + param_1 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00029258 + param_1 * 4)" ( (binary_expression "DAT_00029258 + param_1 * 4" identifier + (binary_expression "param_1 * 4" identifier * number_literal)) )))) ))) ;)) (return_statement "return;" return ;) })) (if_statement "if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }" { (expression_statement "cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);" (assignment_expression "cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1])" identifier = (call_expression "FUN_0001ab00(*(undefined4 *)DAT_000292bc[1])" identifier (argument_list "(*(undefined4 *)DAT_000292bc[1])" ( (pointer_expression "*(undefined4 *)DAT_000292bc[1]" * (cast_expression "(undefined4 *)DAT_000292bc[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "DAT_000292bc[1]" identifier [ number_literal ]))) )))) ;) (if_statement "if (cVar1 == '\0') goto LAB_0001848b;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_0001848b;" goto statement_identifier ;)) })) (expression_statement "puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);" (assignment_expression "puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2)" identifier = (cast_expression "(undefined4 *)FUN_00017eb0(param_1,uVar2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00017eb0(param_1,uVar2)" identifier (argument_list "(param_1,uVar2)" ( identifier , identifier ))))) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }" { (expression_statement "FUN_0001a9d0(puVar3);" (call_expression "FUN_0001a9d0(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "uVar4 = FUN_0001aa90(*DAT_000292bc);" (assignment_expression "uVar4 = FUN_0001aa90(*DAT_000292bc)" identifier = (call_expression "FUN_0001aa90(*DAT_000292bc)" identifier (argument_list "(*DAT_000292bc)" ( (pointer_expression "*DAT_000292bc" * identifier) )))) ;) (expression_statement "*puVar3 = uVar4;" (assignment_expression "*puVar3 = uVar4" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "FUN_0001a9d0(DAT_000292bc[1]);" (call_expression "FUN_0001a9d0(DAT_000292bc[1])" identifier (argument_list "(DAT_000292bc[1])" ( (subscript_expression "DAT_000292bc[1]" identifier [ number_literal ]) ))) ;) (expression_statement "puVar3 = DAT_000292bc;" (assignment_expression "puVar3 = DAT_000292bc" identifier = identifier) ;) (expression_statement "*(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;" (assignment_expression "*(undefined4 *)DAT_000292bc[1] = *DAT_000292bc" (pointer_expression "*(undefined4 *)DAT_000292bc[1]" * (cast_expression "(undefined4 *)DAT_000292bc[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "DAT_000292bc[1]" identifier [ number_literal ]))) = (pointer_expression "*DAT_000292bc" * identifier)) ;) (expression_statement "FUN_0001aaa0(puVar3);" (call_expression "FUN_0001aaa0(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "FUN_00017d30();" (call_expression "FUN_00017d30()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Unknown calling convention */\n\nvoid store_array(int var_name)\n\n{\n  estack_rec *num;\n  char cVar1;\n  uint idx;\n  bc_num *num_00;\n  bc_num pbVar2;\n  \n  cVar1 = check_stack(2);\n  if (cVar1 != '\0') {\n    idx = bc_num2long(ex_stack->s_next->s_num);\n    if (0xffffff < idx) {\nLAB_0001848b:\n      rt_error("Array %s subscript out of bounds.",a_names[var_name]);\n      return;\n    }\n    if (idx == 0) {\n      cVar1 = bc_is_zero(ex_stack->s_next->s_num);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    num_00 = get_array_num(var_name,idx);\n    if (num_00 != (bc_num *)0x0) {\n      bc_free_num(num_00);\n      pbVar2 = bc_copy_num(ex_stack->s_num);\n      *num_00 = pbVar2;\n      bc_free_num(&ex_stack->s_next->s_num);\n      num = ex_stack;\n      ex_stack->s_next->s_num = ex_stack->s_num;\n      bc_init_num(&num->s_num);\n      pop();\n      return;\n    }\n  }\n  return;\n}\n\n" comment comment (function_definition "void store_array(int var_name)\n\n{\n  estack_rec *num;\n  char cVar1;\n  uint idx;\n  bc_num *num_00;\n  bc_num pbVar2;\n  \n  cVar1 = check_stack(2);\n  if (cVar1 != '\0') {\n    idx = bc_num2long(ex_stack->s_next->s_num);\n    if (0xffffff < idx) {\nLAB_0001848b:\n      rt_error("Array %s subscript out of bounds.",a_names[var_name]);\n      return;\n    }\n    if (idx == 0) {\n      cVar1 = bc_is_zero(ex_stack->s_next->s_num);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    num_00 = get_array_num(var_name,idx);\n    if (num_00 != (bc_num *)0x0) {\n      bc_free_num(num_00);\n      pbVar2 = bc_copy_num(ex_stack->s_num);\n      *num_00 = pbVar2;\n      bc_free_num(&ex_stack->s_next->s_num);\n      num = ex_stack;\n      ex_stack->s_next->s_num = ex_stack->s_num;\n      bc_init_num(&num->s_num);\n      pop();\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "store_array(int var_name)" identifier (parameter_list "(int var_name)" ( (parameter_declaration "int var_name" primitive_type identifier) ))) (compound_statement "{\n  estack_rec *num;\n  char cVar1;\n  uint idx;\n  bc_num *num_00;\n  bc_num pbVar2;\n  \n  cVar1 = check_stack(2);\n  if (cVar1 != '\0') {\n    idx = bc_num2long(ex_stack->s_next->s_num);\n    if (0xffffff < idx) {\nLAB_0001848b:\n      rt_error("Array %s subscript out of bounds.",a_names[var_name]);\n      return;\n    }\n    if (idx == 0) {\n      cVar1 = bc_is_zero(ex_stack->s_next->s_num);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    num_00 = get_array_num(var_name,idx);\n    if (num_00 != (bc_num *)0x0) {\n      bc_free_num(num_00);\n      pbVar2 = bc_copy_num(ex_stack->s_num);\n      *num_00 = pbVar2;\n      bc_free_num(&ex_stack->s_next->s_num);\n      num = ex_stack;\n      ex_stack->s_next->s_num = ex_stack->s_num;\n      bc_init_num(&num->s_num);\n      pop();\n      return;\n    }\n  }\n  return;\n}" { (declaration "estack_rec *num;" type_identifier (pointer_declarator "*num" * identifier) ;) (declaration "char cVar1;" primitive_type identifier ;) (declaration "uint idx;" type_identifier identifier ;) (declaration "bc_num *num_00;" type_identifier (pointer_declarator "*num_00" * identifier) ;) (declaration "bc_num pbVar2;" type_identifier identifier ;) (expression_statement "cVar1 = check_stack(2);" (assignment_expression "cVar1 = check_stack(2)" identifier = (call_expression "check_stack(2)" identifier (argument_list "(2)" ( number_literal )))) ;) (if_statement "if (cVar1 != '\0') {\n    idx = bc_num2long(ex_stack->s_next->s_num);\n    if (0xffffff < idx) {\nLAB_0001848b:\n      rt_error("Array %s subscript out of bounds.",a_names[var_name]);\n      return;\n    }\n    if (idx == 0) {\n      cVar1 = bc_is_zero(ex_stack->s_next->s_num);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    num_00 = get_array_num(var_name,idx);\n    if (num_00 != (bc_num *)0x0) {\n      bc_free_num(num_00);\n      pbVar2 = bc_copy_num(ex_stack->s_num);\n      *num_00 = pbVar2;\n      bc_free_num(&ex_stack->s_next->s_num);\n      num = ex_stack;\n      ex_stack->s_next->s_num = ex_stack->s_num;\n      bc_init_num(&num->s_num);\n      pop();\n      return;\n    }\n  }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    idx = bc_num2long(ex_stack->s_next->s_num);\n    if (0xffffff < idx) {\nLAB_0001848b:\n      rt_error("Array %s subscript out of bounds.",a_names[var_name]);\n      return;\n    }\n    if (idx == 0) {\n      cVar1 = bc_is_zero(ex_stack->s_next->s_num);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    num_00 = get_array_num(var_name,idx);\n    if (num_00 != (bc_num *)0x0) {\n      bc_free_num(num_00);\n      pbVar2 = bc_copy_num(ex_stack->s_num);\n      *num_00 = pbVar2;\n      bc_free_num(&ex_stack->s_next->s_num);\n      num = ex_stack;\n      ex_stack->s_next->s_num = ex_stack->s_num;\n      bc_init_num(&num->s_num);\n      pop();\n      return;\n    }\n  }" { (expression_statement "idx = bc_num2long(ex_stack->s_next->s_num);" (assignment_expression "idx = bc_num2long(ex_stack->s_next->s_num)" identifier = (call_expression "bc_num2long(ex_stack->s_next->s_num)" identifier (argument_list "(ex_stack->s_next->s_num)" ( (field_expression "ex_stack->s_next->s_num" (field_expression "ex_stack->s_next" identifier -> field_identifier) -> field_identifier) )))) ;) (if_statement "if (0xffffff < idx) {\nLAB_0001848b:\n      rt_error("Array %s subscript out of bounds.",a_names[var_name]);\n      return;\n    }" if (parenthesized_expression "(0xffffff < idx)" ( (binary_expression "0xffffff < idx" number_literal < identifier) )) (compound_statement "{\nLAB_0001848b:\n      rt_error("Array %s subscript out of bounds.",a_names[var_name]);\n      return;\n    }" { (labeled_statement "LAB_0001848b:\n      rt_error("Array %s subscript out of bounds.",a_names[var_name]);" statement_identifier : (expression_statement "rt_error("Array %s subscript out of bounds.",a_names[var_name]);" (call_expression "rt_error("Array %s subscript out of bounds.",a_names[var_name])" identifier (argument_list "("Array %s subscript out of bounds.",a_names[var_name])" ( (string_literal ""Array %s subscript out of bounds."" " string_content ") , (subscript_expression "a_names[var_name]" identifier [ identifier ]) ))) ;)) (return_statement "return;" return ;) })) (if_statement "if (idx == 0) {\n      cVar1 = bc_is_zero(ex_stack->s_next->s_num);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }" if (parenthesized_expression "(idx == 0)" ( (binary_expression "idx == 0" identifier == number_literal) )) (compound_statement "{\n      cVar1 = bc_is_zero(ex_stack->s_next->s_num);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }" { (expression_statement "cVar1 = bc_is_zero(ex_stack->s_next->s_num);" (assignment_expression "cVar1 = bc_is_zero(ex_stack->s_next->s_num)" identifier = (call_expression "bc_is_zero(ex_stack->s_next->s_num)" identifier (argument_list "(ex_stack->s_next->s_num)" ( (field_expression "ex_stack->s_next->s_num" (field_expression "ex_stack->s_next" identifier -> field_identifier) -> field_identifier) )))) ;) (if_statement "if (cVar1 == '\0') goto LAB_0001848b;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_0001848b;" goto statement_identifier ;)) })) (expression_statement "num_00 = get_array_num(var_name,idx);" (assignment_expression "num_00 = get_array_num(var_name,idx)" identifier = (call_expression "get_array_num(var_name,idx)" identifier (argument_list "(var_name,idx)" ( identifier , identifier )))) ;) (if_statement "if (num_00 != (bc_num *)0x0) {\n      bc_free_num(num_00);\n      pbVar2 = bc_copy_num(ex_stack->s_num);\n      *num_00 = pbVar2;\n      bc_free_num(&ex_stack->s_next->s_num);\n      num = ex_stack;\n      ex_stack->s_next->s_num = ex_stack->s_num;\n      bc_init_num(&num->s_num);\n      pop();\n      return;\n    }" if (parenthesized_expression "(num_00 != (bc_num *)0x0)" ( (binary_expression "num_00 != (bc_num *)0x0" identifier != (cast_expression "(bc_num *)0x0" ( (type_descriptor "bc_num *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      bc_free_num(num_00);\n      pbVar2 = bc_copy_num(ex_stack->s_num);\n      *num_00 = pbVar2;\n      bc_free_num(&ex_stack->s_next->s_num);\n      num = ex_stack;\n      ex_stack->s_next->s_num = ex_stack->s_num;\n      bc_init_num(&num->s_num);\n      pop();\n      return;\n    }" { (expression_statement "bc_free_num(num_00);" (call_expression "bc_free_num(num_00)" identifier (argument_list "(num_00)" ( identifier ))) ;) (expression_statement "pbVar2 = bc_copy_num(ex_stack->s_num);" (assignment_expression "pbVar2 = bc_copy_num(ex_stack->s_num)" identifier = (call_expression "bc_copy_num(ex_stack->s_num)" identifier (argument_list "(ex_stack->s_num)" ( (field_expression "ex_stack->s_num" identifier -> field_identifier) )))) ;) (expression_statement "*num_00 = pbVar2;" (assignment_expression "*num_00 = pbVar2" (pointer_expression "*num_00" * identifier) = identifier) ;) (expression_statement "bc_free_num(&ex_stack->s_next->s_num);" (call_expression "bc_free_num(&ex_stack->s_next->s_num)" identifier (argument_list "(&ex_stack->s_next->s_num)" ( (pointer_expression "&ex_stack->s_next->s_num" & (field_expression "ex_stack->s_next->s_num" (field_expression "ex_stack->s_next" identifier -> field_identifier) -> field_identifier)) ))) ;) (expression_statement "num = ex_stack;" (assignment_expression "num = ex_stack" identifier = identifier) ;) (expression_statement "ex_stack->s_next->s_num = ex_stack->s_num;" (assignment_expression "ex_stack->s_next->s_num = ex_stack->s_num" (field_expression "ex_stack->s_next->s_num" (field_expression "ex_stack->s_next" identifier -> field_identifier) -> field_identifier) = (field_expression "ex_stack->s_num" identifier -> field_identifier)) ;) (expression_statement "bc_init_num(&num->s_num);" (call_expression "bc_init_num(&num->s_num)" identifier (argument_list "(&num->s_num)" ( (pointer_expression "&num->s_num" & (field_expression "num->s_num" identifier -> field_identifier)) ))) ;) (expression_statement "pop();" (call_expression "pop()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00018420(int param_1)\n\n{\n  char cVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  undefined4 uVar4;\n  \n  cVar1 = FUN_00017de0(2);\n  if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_00018420(int param_1)\n\n{\n  char cVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  undefined4 uVar4;\n  \n  cVar1 = FUN_00017de0(2);\n  if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00018420(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  undefined4 uVar4;\n  \n  cVar1 = FUN_00017de0(2);\n  if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (expression_statement "cVar1 = FUN_00017de0(2);" (assignment_expression "cVar1 = FUN_00017de0(2)" identifier = (call_expression "FUN_00017de0(2)" identifier (argument_list "(2)" ( number_literal )))) ;) (if_statement "if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }" if (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }" { (expression_statement "uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);" (assignment_expression "uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1])" identifier = (call_expression "FUN_0001c330(*(undefined4 *)DAT_000292bc[1])" identifier (argument_list "(*(undefined4 *)DAT_000292bc[1])" ( (pointer_expression "*(undefined4 *)DAT_000292bc[1]" * (cast_expression "(undefined4 *)DAT_000292bc[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "DAT_000292bc[1]" identifier [ number_literal ]))) )))) ;) (if_statement "if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }" if (parenthesized_expression "(0xffffff < uVar2)" ( (binary_expression "0xffffff < uVar2" number_literal < identifier) )) (compound_statement "{\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }" { (labeled_statement "LAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));" statement_identifier : (expression_statement "FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));" (call_expression "FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4))" identifier (argument_list "("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4))" ( (string_literal ""Array %s subscript out of bounds."" " string_content ") , (pointer_expression "*(undefined4 *)(DAT_00029258 + param_1 * 4)" * (cast_expression "(undefined4 *)(DAT_00029258 + param_1 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_00029258 + param_1 * 4)" ( (binary_expression "DAT_00029258 + param_1 * 4" identifier + (binary_expression "param_1 * 4" identifier * number_literal)) )))) ))) ;)) (return_statement "return;" return ;) })) (if_statement "if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }" { (expression_statement "cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);" (assignment_expression "cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1])" identifier = (call_expression "FUN_0001ab00(*(undefined4 *)DAT_000292bc[1])" identifier (argument_list "(*(undefined4 *)DAT_000292bc[1])" ( (pointer_expression "*(undefined4 *)DAT_000292bc[1]" * (cast_expression "(undefined4 *)DAT_000292bc[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "DAT_000292bc[1]" identifier [ number_literal ]))) )))) ;) (if_statement "if (cVar1 == '\0') goto LAB_0001848b;" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_0001848b;" goto statement_identifier ;)) })) (expression_statement "puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);" (assignment_expression "puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2)" identifier = (cast_expression "(undefined4 *)FUN_00017eb0(param_1,uVar2)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00017eb0(param_1,uVar2)" identifier (argument_list "(param_1,uVar2)" ( identifier , identifier ))))) ;) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }" if (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" ( (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }" { (expression_statement "FUN_0001a9d0(puVar3);" (call_expression "FUN_0001a9d0(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "uVar4 = FUN_0001aa90(*DAT_000292bc);" (assignment_expression "uVar4 = FUN_0001aa90(*DAT_000292bc)" identifier = (call_expression "FUN_0001aa90(*DAT_000292bc)" identifier (argument_list "(*DAT_000292bc)" ( (pointer_expression "*DAT_000292bc" * identifier) )))) ;) (expression_statement "*puVar3 = uVar4;" (assignment_expression "*puVar3 = uVar4" (pointer_expression "*puVar3" * identifier) = identifier) ;) (expression_statement "FUN_0001a9d0(DAT_000292bc[1]);" (call_expression "FUN_0001a9d0(DAT_000292bc[1])" identifier (argument_list "(DAT_000292bc[1])" ( (subscript_expression "DAT_000292bc[1]" identifier [ number_literal ]) ))) ;) (expression_statement "puVar3 = DAT_000292bc;" (assignment_expression "puVar3 = DAT_000292bc" identifier = identifier) ;) (expression_statement "*(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;" (assignment_expression "*(undefined4 *)DAT_000292bc[1] = *DAT_000292bc" (pointer_expression "*(undefined4 *)DAT_000292bc[1]" * (cast_expression "(undefined4 *)DAT_000292bc[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "DAT_000292bc[1]" identifier [ number_literal ]))) = (pointer_expression "*DAT_000292bc" * identifier)) ;) (expression_statement "FUN_0001aaa0(puVar3);" (call_expression "FUN_0001aaa0(puVar3)" identifier (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "FUN_00017d30();" (call_expression "FUN_00017d30()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ))) ;)) (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * IDENT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) = (pointer_expression * IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) })) })) (return_statement return ;) })))
(function_definition "void FUN_00018420(int param_1)\n\n{\n  char cVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  undefined4 uVar4;\n  \n  cVar1 = FUN_00017de0(2);\n  if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00018420(int param_1)" (identifier "FUN_00018420") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  char cVar1;\n  uint uVar2;\n  undefined4 *puVar3;\n  undefined4 uVar4;\n  \n  cVar1 = FUN_00017de0(2);\n  if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }\n  return;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (expression_statement "cVar1 = FUN_00017de0(2);" (assignment_expression "cVar1 = FUN_00017de0(2)" (identifier "cVar1") (= "=") (call_expression "FUN_00017de0(2)" (identifier "FUN_00017de0") (argument_list "(2)" (( "(") (number_literal "2") () ")")))) (; ";")) (if_statement "if (cVar1 != '\0') {\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }" (if "if") (parenthesized_expression "(cVar1 != '\0')" (( "(") (binary_expression "cVar1 != '\0'" (identifier "cVar1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);\n    if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }\n    if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }\n    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);\n    if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }\n  }" ({ "{") (expression_statement "uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);" (assignment_expression "uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1])" (identifier "uVar2") (= "=") (call_expression "FUN_0001c330(*(undefined4 *)DAT_000292bc[1])" (identifier "FUN_0001c330") (argument_list "(*(undefined4 *)DAT_000292bc[1])" (( "(") (pointer_expression "*(undefined4 *)DAT_000292bc[1]" (* "*") (cast_expression "(undefined4 *)DAT_000292bc[1]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "DAT_000292bc[1]" (identifier "DAT_000292bc") ([ "[") (number_literal "1") (] "]")))) () ")")))) (; ";")) (if_statement "if (0xffffff < uVar2) {\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }" (if "if") (parenthesized_expression "(0xffffff < uVar2)" (( "(") (binary_expression "0xffffff < uVar2" (number_literal "0xffffff") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\nLAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));\n      return;\n    }" ({ "{") (labeled_statement "LAB_0001848b:\n      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));" (statement_identifier "LAB_0001848b") (: ":") (expression_statement "FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));" (call_expression "FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4))" (identifier "FUN_00019f10") (argument_list "("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4))" (( "(") (string_literal ""Array %s subscript out of bounds."" (" """) (string_content "Array %s subscript out of bounds.") (" """)) (, ",") (pointer_expression "*(undefined4 *)(DAT_00029258 + param_1 * 4)" (* "*") (cast_expression "(undefined4 *)(DAT_00029258 + param_1 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_00029258 + param_1 * 4)" (( "(") (binary_expression "DAT_00029258 + param_1 * 4" (identifier "DAT_00029258") (+ "+") (binary_expression "param_1 * 4" (identifier "param_1") (* "*") (number_literal "4"))) () ")")))) () ")"))) (; ";"))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (uVar2 == 0) {\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);\n      if (cVar1 == '\0') goto LAB_0001848b;\n    }" ({ "{") (expression_statement "cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);" (assignment_expression "cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1])" (identifier "cVar1") (= "=") (call_expression "FUN_0001ab00(*(undefined4 *)DAT_000292bc[1])" (identifier "FUN_0001ab00") (argument_list "(*(undefined4 *)DAT_000292bc[1])" (( "(") (pointer_expression "*(undefined4 *)DAT_000292bc[1]" (* "*") (cast_expression "(undefined4 *)DAT_000292bc[1]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "DAT_000292bc[1]" (identifier "DAT_000292bc") ([ "[") (number_literal "1") (] "]")))) () ")")))) (; ";")) (if_statement "if (cVar1 == '\0') goto LAB_0001848b;" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_0001848b;" (goto "goto") (statement_identifier "LAB_0001848b") (; ";"))) (} "}"))) (expression_statement "puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);" (assignment_expression "puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2)" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)FUN_00017eb0(param_1,uVar2)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00017eb0(param_1,uVar2)" (identifier "FUN_00017eb0") (argument_list "(param_1,uVar2)" (( "(") (identifier "param_1") (, ",") (identifier "uVar2") () ")"))))) (; ";")) (if_statement "if (puVar3 != (undefined4 *)0x0) {\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }" (if "if") (parenthesized_expression "(puVar3 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar3 != (undefined4 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      FUN_0001a9d0(puVar3);\n      uVar4 = FUN_0001aa90(*DAT_000292bc);\n      *puVar3 = uVar4;\n      FUN_0001a9d0(DAT_000292bc[1]);\n      puVar3 = DAT_000292bc;\n      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;\n      FUN_0001aaa0(puVar3);\n      FUN_00017d30();\n      return;\n    }" ({ "{") (expression_statement "FUN_0001a9d0(puVar3);" (call_expression "FUN_0001a9d0(puVar3)" (identifier "FUN_0001a9d0") (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (expression_statement "uVar4 = FUN_0001aa90(*DAT_000292bc);" (assignment_expression "uVar4 = FUN_0001aa90(*DAT_000292bc)" (identifier "uVar4") (= "=") (call_expression "FUN_0001aa90(*DAT_000292bc)" (identifier "FUN_0001aa90") (argument_list "(*DAT_000292bc)" (( "(") (pointer_expression "*DAT_000292bc" (* "*") (identifier "DAT_000292bc")) () ")")))) (; ";")) (expression_statement "*puVar3 = uVar4;" (assignment_expression "*puVar3 = uVar4" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "FUN_0001a9d0(DAT_000292bc[1]);" (call_expression "FUN_0001a9d0(DAT_000292bc[1])" (identifier "FUN_0001a9d0") (argument_list "(DAT_000292bc[1])" (( "(") (subscript_expression "DAT_000292bc[1]" (identifier "DAT_000292bc") ([ "[") (number_literal "1") (] "]")) () ")"))) (; ";")) (expression_statement "puVar3 = DAT_000292bc;" (assignment_expression "puVar3 = DAT_000292bc" (identifier "puVar3") (= "=") (identifier "DAT_000292bc")) (; ";")) (expression_statement "*(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;" (assignment_expression "*(undefined4 *)DAT_000292bc[1] = *DAT_000292bc" (pointer_expression "*(undefined4 *)DAT_000292bc[1]" (* "*") (cast_expression "(undefined4 *)DAT_000292bc[1]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "DAT_000292bc[1]" (identifier "DAT_000292bc") ([ "[") (number_literal "1") (] "]")))) (= "=") (pointer_expression "*DAT_000292bc" (* "*") (identifier "DAT_000292bc"))) (; ";")) (expression_statement "FUN_0001aaa0(puVar3);" (call_expression "FUN_0001aaa0(puVar3)" (identifier "FUN_0001aaa0") (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (expression_statement "FUN_00017d30();" (call_expression "FUN_00017d30()" (identifier "FUN_00017d30") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

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

void function_1(int var_name)

{
  type_1 *num;
  char var_2;
  type_2 var_4;
  type_3 *var_8;
  type_3 pbVar2;
  
  var_2 = var_1(2);
  if (var_2 != '\0') {
    var_4 = var_3(ex_stack->s_next->s_num);
    if (0xffffff < var_4) {
LAB_0001848b:
      var_5("Array %s subscript out of bounds.",a_names[var_name]);
      return;
    }
    if (var_4 == 0) {
      var_2 = var_6(ex_stack->s_next->s_num);
      if (var_2 == '\0') goto LAB_0001848b;
    }
    var_8 = var_7(var_name,var_4);
    if (var_8 != (type_3 *)0x0) {
      var_9(var_8);
      pbVar2 = var_10(ex_stack->s_num);
      *var_8 = pbVar2;
      var_9(&ex_stack->s_next->s_num);
      num = ex_stack;
      ex_stack->s_next->s_num = ex_stack->s_num;
      var_11(&num->s_num);
      var_12();
      return;
    }
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) 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: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))))) (return_statement))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (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 (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal)))) right: (pointer_expression argument: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (return_statement))))) (return_statement))))

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

void MASKED(int param_1)

{
  char cVar1;
  uint uVar2;
  undefined4 *puVar3;
  undefined4 uVar4;
  
  cVar1 = FUN_00017de0(2);
  if (cVar1 != '\0') {
    uVar2 = FUN_0001c330(*(undefined4 *)DAT_000292bc[1]);
    if (0xffffff < uVar2) {
LAB_0001848b:
      FUN_00019f10("Array %s subscript out of bounds.",*(undefined4 *)(DAT_00029258 + param_1 * 4));
      return;
    }
    if (uVar2 == 0) {
      cVar1 = FUN_0001ab00(*(undefined4 *)DAT_000292bc[1]);
      if (cVar1 == '\0') goto LAB_0001848b;
    }
    puVar3 = (undefined4 *)FUN_00017eb0(param_1,uVar2);
    if (puVar3 != (undefined4 *)0x0) {
      FUN_0001a9d0(puVar3);
      uVar4 = FUN_0001aa90(*DAT_000292bc);
      *puVar3 = uVar4;
      FUN_0001a9d0(DAT_000292bc[1]);
      puVar3 = DAT_000292bc;
      *(undefined4 *)DAT_000292bc[1] = *DAT_000292bc;
      FUN_0001aaa0(puVar3);
      FUN_00017d30();
      return;
    }
  }
  return;
}

