
reg_errcode_t
get_subexp_sub(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,
              Idx bkref_node,Idx bkref_str)

{
  undefined *puVar1;
  reg_errcode_t rVar2;
  int iVar3;
  re_backref_cache_entry *prVar4;
  Idx IVar5;
  int iVar6;
  int iVar7;
  
  rVar2 = check_arrival(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,bkref_str,8
                       );
  if (rVar2 != _REG_NOERROR) {
    return rVar2;
  }
  iVar3 = mctx->nbkref_ents;
  iVar7 = sub_top->str_idx;
  iVar6 = sub_last->str_idx;
  prVar4 = mctx->bkref_ents;
  IVar5 = iVar6;
  if (mctx->abkref_ents <= iVar3) {
    prVar4 = (re_backref_cache_entry *)
             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28);
    puVar1 = PTR_memset_00053430;
    if (prVar4 == (re_backref_cache_entry *)0x0) {
      (*(code *)PTR_free_000534fc)(mctx->bkref_ents);
      return _REG_ESPACE;
    }
    mctx->bkref_ents = prVar4;
    (*(code *)puVar1)(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14);
    IVar5 = sub_last->str_idx;
    iVar3 = mctx->nbkref_ents;
    prVar4 = mctx->bkref_ents;
    mctx->abkref_ents = mctx->abkref_ents << 1;
  }
  if ((0 < iVar3) && (bkref_str == prVar4[iVar3 + -1].str_idx)) {
    prVar4[iVar3 + -1].more = '\x01';
  }
  prVar4 = prVar4 + iVar3;
  prVar4->node = bkref_node;
  prVar4->str_idx = bkref_str;
  prVar4->subexp_from = iVar7;
  prVar4->subexp_to = iVar6;
  prVar4->eps_reachable_subexps_map = -(ushort)(iVar7 == iVar6);
  mctx->nbkref_ents = iVar3 + 1;
  prVar4->more = '\0';
  if (mctx->max_mb_elem_len < iVar6 - iVar7) {
    mctx->max_mb_elem_len = iVar6 - iVar7;
  }
  rVar2 = clean_state_log_if_needed(mctx,(bkref_str + IVar5) - sub_top->str_idx);
  return rVar2;
}



int FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)

{
  undefined *puVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  
  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);
  if (iVar2 != 0) {
    return iVar2;
  }
  iVar3 = *(int *)(param_1 + 0x6c);
  iVar8 = *param_2;
  iVar7 = param_3[1];
  iVar4 = *(int *)(param_1 + 0x74);
  iVar2 = iVar7;
  if (*(int *)(param_1 + 0x70) <= iVar3) {
    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);
    puVar1 = PTR_memset_00053430;
    if (iVar2 == 0) {
      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));
      return 0xc;
    }
    *(int *)(param_1 + 0x74) = iVar2;
    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);
    iVar2 = param_3[1];
    iVar3 = *(int *)(param_1 + 0x6c);
    iVar4 = *(int *)(param_1 + 0x74);
    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;
  }
  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {
    *(undefined1 *)(iVar6 + 0x10) = 1;
  }
  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);
  *puVar5 = param_4;
  puVar5[1] = param_5;
  puVar5[2] = iVar8;
  puVar5[3] = iVar7;
  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);
  *(int *)(param_1 + 0x6c) = iVar3 + 1;
  *(undefined1 *)(puVar5 + 4) = 0;
  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {
    *(int *)(param_1 + 0x78) = iVar7 - iVar8;
  }
  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);
  return iVar2;
}


lui gp,0x3
addiu gp,gp,-0x7a60
addu gp,gp,t9
addiu sp,sp,-0x48
lw t9,-0x7db4(gp)
li v0,0x8
sw s2,0x30(sp)
addiu t9,t9,0x1b40
sw s3,0x34(sp)
or s3,a3,zero
sw s1,0x2c(sp)
or s1,a2,zero
sw s4,0x38(sp)
or s4,a1,zero
sw gp,0x20(sp)
addiu a1,s1,0x8
sw s0,0x28(sp)
or s0,a0,zero
sw ra,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
lw s2,0x58(sp)
lw a3,0x4(a2)
lw a2,0x0(a2)
sw v0,0x18(sp)
sw s2,0x14(sp)
bal 0x00031b40
_sw s3,0x10(sp)
beq v0,zero,0x00032be0
_lw gp,0x20(sp)
lw ra,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x48
lw v0,0x6c(s0)
lw a1,0x70(s0)
lw s6,0x0(s4)
lw s5,0x4(s1)
slt v1,v0,a1
beq v1,zero,0x00032cb4
_lw a0,0x74(s0)
or a3,s5,zero
sll v1,v0,0x2
addu v1,v1,v0
blez v0,0x00032c24
_sll v1,v1,0x2
addiu a2,v1,-0x14
addu a2,a0,a2
lw a1,0x4(a2)
beq s2,a1,0x00032cac
_li a1,0x1
xor a2,s6,s5
addu a0,a0,v1
sltiu a2,a2,0x1
addiu v0,v0,0x1
subu a2,zero,a2
sw s3,0x0(a0)
sw s2,0x4(a0)
subu v1,s5,s6
sw s6,0x8(a0)
sw s5,0xc(a0)
sh a2,0x12(a0)
sw v0,0x6c(s0)
sb zero,0x10(a0)
lw v0,0x78(s0)
slt v0,v0,v1
beq v0,zero,0x00032c6c
_nop
sw v1,0x78(s0)
lw a1,0x0(s4)
addu s2,s2,a3
lw t9,-0x7db4(gp)
or a0,s0,zero
lw ra,0x44(sp)
lw s6,0x40(sp)
subu a1,s2,a1
lw s5,0x3c(sp)
addiu t9,t9,-0x55a0
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
b 0x0002aa60
_addiu sp,sp,0x48
b 0x00032c24
_sb a1,0x10(a2)
sll v0,a1,0x2
lw t9,-0x7c68(gp)
addu a1,v0,a1
jalr t9
_sll a1,a1,0x3
beq v0,zero,0x00032d24
_lw gp,0x20(sp)
lw a0,0x6c(s0)
or a1,zero,zero
lw a3,0x70(s0)
lw t9,-0x7cb0(gp)
sll v1,a0,0x2
sw v0,0x74(s0)
sll a2,a3,0x2
addu v1,v1,a0
addu a2,a2,a3
sll v1,v1,0x2
sll a2,a2,0x2
jalr t9
_addu a0,v0,v1
lw v1,0x70(s0)
lw gp,0x20(sp)
lw a3,0x4(s1)
sll v1,v1,0x1
lw v0,0x6c(s0)
lw a0,0x74(s0)
b 0x00032c00
_sw v1,0x70(s0)
lw t9,-0x7be4(gp)
jalr t9
_lw a0,0x74(s0)
b 0x00032bb8
_li v0,0xc
(translation_unit "int FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar3 = *(int *)(param_1 + 0x6c);\n  iVar8 = *param_2;\n  iVar7 = param_3[1];\n  iVar4 = *(int *)(param_1 + 0x74);\n  iVar2 = iVar7;\n  if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }\n  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }\n  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);\n  *puVar5 = param_4;\n  puVar5[1] = param_5;\n  puVar5[2] = iVar8;\n  puVar5[3] = iVar7;\n  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);\n  *(int *)(param_1 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }\n  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);\n  return iVar2;\n}\n\n" (function_definition "int FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar3 = *(int *)(param_1 + 0x6c);\n  iVar8 = *param_2;\n  iVar7 = param_3[1];\n  iVar4 = *(int *)(param_1 + 0x74);\n  iVar2 = iVar7;\n  if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }\n  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }\n  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);\n  *puVar5 = param_4;\n  puVar5[1] = param_5;\n  puVar5[2] = iVar8;\n  puVar5[3] = iVar7;\n  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);\n  *(int *)(param_1 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }\n  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);\n  return iVar2;\n}" primitive_type (function_declarator "FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)" identifier (parameter_list "(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar3 = *(int *)(param_1 + 0x6c);\n  iVar8 = *param_2;\n  iVar7 = param_3[1];\n  iVar4 = *(int *)(param_1 + 0x74);\n  iVar2 = iVar7;\n  if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }\n  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }\n  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);\n  *puVar5 = param_4;\n  puVar5[1] = param_5;\n  puVar5[2] = iVar8;\n  puVar5[3] = iVar7;\n  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);\n  *(int *)(param_1 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }\n  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);\n  return iVar2;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);" (assignment_expression "iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" identifier = (call_expression "FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" identifier (argument_list "(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" ( identifier , (binary_expression "param_3 + 2" identifier + number_literal) , (pointer_expression "*param_3" * identifier) , (subscript_expression "param_3[1]" identifier [ number_literal ]) , identifier , identifier , number_literal )))) ;) (if_statement "if (iVar2 != 0) {\n    return iVar2;\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    return iVar2;\n  }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" identifier = (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) ;) (expression_statement "iVar8 = *param_2;" (assignment_expression "iVar8 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar7 = param_3[1];" (assignment_expression "iVar7 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "iVar4 = *(int *)(param_1 + 0x74);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x74)" identifier = (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = iVar7;" (assignment_expression "iVar2 = iVar7" identifier = identifier) ;) (if_statement "if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x70) <= iVar3)" ( (binary_expression "*(int *)(param_1 + 0x70) <= iVar3" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }" { (expression_statement "iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);" (assignment_expression "iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28)" identifier = (call_expression "(*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28)" (parenthesized_expression "(*(code *)PTR_realloc_00053478)" ( (pointer_expression "*(code *)PTR_realloc_00053478" * (cast_expression "(code *)PTR_realloc_00053478" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar4,*(int *)(param_1 + 0x70) * 0x28)" ( identifier , (binary_expression "*(int *)(param_1 + 0x70) * 0x28" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) * number_literal) )))) ;) (expression_statement "puVar1 = PTR_memset_00053430;" (assignment_expression "puVar1 = PTR_memset_00053430" identifier = identifier) ;) (if_statement "if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }" { (expression_statement "(*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));" (call_expression "(*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74))" (parenthesized_expression "(*(code *)PTR_free_000534fc)" ( (pointer_expression "*(code *)PTR_free_000534fc" * (cast_expression "(code *)PTR_free_000534fc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)(param_1 + 0x74))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x74)" * (cast_expression "(undefined4 *)(param_1 + 0x74)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) ))) ;) (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "*(int *)(param_1 + 0x74) = iVar2;" (assignment_expression "*(int *)(param_1 + 0x74) = iVar2" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) = identifier) ;) (expression_statement "(*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);" (call_expression "(*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14)" ( (binary_expression "iVar2 + *(int *)(param_1 + 0x6c) * 0x14" identifier + (binary_expression "*(int *)(param_1 + 0x6c) * 0x14" (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) )))) * number_literal)) , number_literal , (binary_expression "*(int *)(param_1 + 0x70) * 0x14" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) * number_literal) ))) ;) (expression_statement "iVar2 = param_3[1];" (assignment_expression "iVar2 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" identifier = (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) ;) (expression_statement "iVar4 = *(int *)(param_1 + 0x74);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x74)" identifier = (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;" (assignment_expression "*(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x70) << 1" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) << number_literal)) ;) })) (if_statement "if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }" if (parenthesized_expression "((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4)))" ( (binary_expression "(0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))" (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) && (parenthesized_expression "(iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))" ( (comma_expression "iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4)" (assignment_expression "iVar6 = iVar4 + iVar3 * 0x14 + -0x14" identifier = (binary_expression "iVar4 + iVar3 * 0x14 + -0x14" (binary_expression "iVar4 + iVar3 * 0x14" identifier + (binary_expression "iVar3 * 0x14" identifier * number_literal)) + number_literal)) , (binary_expression "param_5 == *(int *)(iVar6 + 4)" identifier == (pointer_expression "*(int *)(iVar6 + 4)" * (cast_expression "(int *)(iVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) )))))) ))) )) (compound_statement "{\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }" { (expression_statement "*(undefined1 *)(iVar6 + 0x10) = 1;" (assignment_expression "*(undefined1 *)(iVar6 + 0x10) = 1" (pointer_expression "*(undefined1 *)(iVar6 + 0x10)" * (cast_expression "(undefined1 *)(iVar6 + 0x10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x10)" ( (binary_expression "iVar6 + 0x10" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);" (assignment_expression "puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14)" identifier = (cast_expression "(undefined4 *)(iVar4 + iVar3 * 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + iVar3 * 0x14)" ( (binary_expression "iVar4 + iVar3 * 0x14" identifier + (binary_expression "iVar3 * 0x14" identifier * number_literal)) )))) ;) (expression_statement "*puVar5 = param_4;" (assignment_expression "*puVar5 = param_4" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "puVar5[1] = param_5;" (assignment_expression "puVar5[1] = param_5" (subscript_expression "puVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[2] = iVar8;" (assignment_expression "puVar5[2] = iVar8" (subscript_expression "puVar5[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[3] = iVar7;" (assignment_expression "puVar5[3] = iVar7" (subscript_expression "puVar5[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);" (assignment_expression "*(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7)" (pointer_expression "*(ushort *)((int)puVar5 + 0x12)" * (cast_expression "(ushort *)((int)puVar5 + 0x12)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar5 + 0x12)" ( (binary_expression "(int)puVar5 + 0x12" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (unary_expression "-(ushort)(iVar8 == iVar7)" - (call_expression "(ushort)(iVar8 == iVar7)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(iVar8 == iVar7)" ( (binary_expression "iVar8 == iVar7" identifier == identifier) ))))) ;) (expression_statement "*(int *)(param_1 + 0x6c) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + 0x6c) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined1 *)(puVar5 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 4)" * (cast_expression "(undefined1 *)(puVar5 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x78) < iVar7 - iVar8)" ( (binary_expression "*(int *)(param_1 + 0x78) < iVar7 - iVar8" (pointer_expression "*(int *)(param_1 + 0x78)" * (cast_expression "(int *)(param_1 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x78)" ( (binary_expression "param_1 + 0x78" identifier + number_literal) )))) < (binary_expression "iVar7 - iVar8" identifier - identifier)) )) (compound_statement "{\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }" { (expression_statement "*(int *)(param_1 + 0x78) = iVar7 - iVar8;" (assignment_expression "*(int *)(param_1 + 0x78) = iVar7 - iVar8" (pointer_expression "*(int *)(param_1 + 0x78)" * (cast_expression "(int *)(param_1 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x78)" ( (binary_expression "param_1 + 0x78" identifier + number_literal) )))) = (binary_expression "iVar7 - iVar8" identifier - identifier)) ;) })) (expression_statement "iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);" (assignment_expression "iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2)" identifier = (call_expression "FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2)" identifier (argument_list "(param_1,(param_5 + iVar2) - *param_2)" ( identifier , (binary_expression "(param_5 + iVar2) - *param_2" (parenthesized_expression "(param_5 + iVar2)" ( (binary_expression "param_5 + iVar2" identifier + identifier) )) - (pointer_expression "*param_2" * identifier)) )))) ;) (return_statement "return iVar2;" return identifier ;) })))
(translation_unit "reg_errcode_t\nget_subexp_sub(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,\n              Idx bkref_node,Idx bkref_str)\n\n{\n  undefined *puVar1;\n  reg_errcode_t rVar2;\n  int iVar3;\n  re_backref_cache_entry *prVar4;\n  Idx IVar5;\n  int iVar6;\n  int iVar7;\n  \n  rVar2 = check_arrival(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,bkref_str,8\n                       );\n  if (rVar2 != _REG_NOERROR) {\n    return rVar2;\n  }\n  iVar3 = mctx->nbkref_ents;\n  iVar7 = sub_top->str_idx;\n  iVar6 = sub_last->str_idx;\n  prVar4 = mctx->bkref_ents;\n  IVar5 = iVar6;\n  if (mctx->abkref_ents <= iVar3) {\n    prVar4 = (re_backref_cache_entry *)\n             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (prVar4 == (re_backref_cache_entry *)0x0) {\n      (*(code *)PTR_free_000534fc)(mctx->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx->bkref_ents = prVar4;\n    (*(code *)puVar1)(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14);\n    IVar5 = sub_last->str_idx;\n    iVar3 = mctx->nbkref_ents;\n    prVar4 = mctx->bkref_ents;\n    mctx->abkref_ents = mctx->abkref_ents << 1;\n  }\n  if ((0 < iVar3) && (bkref_str == prVar4[iVar3 + -1].str_idx)) {\n    prVar4[iVar3 + -1].more = '\x01';\n  }\n  prVar4 = prVar4 + iVar3;\n  prVar4->node = bkref_node;\n  prVar4->str_idx = bkref_str;\n  prVar4->subexp_from = iVar7;\n  prVar4->subexp_to = iVar6;\n  prVar4->eps_reachable_subexps_map = -(ushort)(iVar7 == iVar6);\n  mctx->nbkref_ents = iVar3 + 1;\n  prVar4->more = '\0';\n  if (mctx->max_mb_elem_len < iVar6 - iVar7) {\n    mctx->max_mb_elem_len = iVar6 - iVar7;\n  }\n  rVar2 = clean_state_log_if_needed(mctx,(bkref_str + IVar5) - sub_top->str_idx);\n  return rVar2;\n}\n\n" (function_definition "reg_errcode_t\nget_subexp_sub(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,\n              Idx bkref_node,Idx bkref_str)\n\n{\n  undefined *puVar1;\n  reg_errcode_t rVar2;\n  int iVar3;\n  re_backref_cache_entry *prVar4;\n  Idx IVar5;\n  int iVar6;\n  int iVar7;\n  \n  rVar2 = check_arrival(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,bkref_str,8\n                       );\n  if (rVar2 != _REG_NOERROR) {\n    return rVar2;\n  }\n  iVar3 = mctx->nbkref_ents;\n  iVar7 = sub_top->str_idx;\n  iVar6 = sub_last->str_idx;\n  prVar4 = mctx->bkref_ents;\n  IVar5 = iVar6;\n  if (mctx->abkref_ents <= iVar3) {\n    prVar4 = (re_backref_cache_entry *)\n             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (prVar4 == (re_backref_cache_entry *)0x0) {\n      (*(code *)PTR_free_000534fc)(mctx->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx->bkref_ents = prVar4;\n    (*(code *)puVar1)(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14);\n    IVar5 = sub_last->str_idx;\n    iVar3 = mctx->nbkref_ents;\n    prVar4 = mctx->bkref_ents;\n    mctx->abkref_ents = mctx->abkref_ents << 1;\n  }\n  if ((0 < iVar3) && (bkref_str == prVar4[iVar3 + -1].str_idx)) {\n    prVar4[iVar3 + -1].more = '\x01';\n  }\n  prVar4 = prVar4 + iVar3;\n  prVar4->node = bkref_node;\n  prVar4->str_idx = bkref_str;\n  prVar4->subexp_from = iVar7;\n  prVar4->subexp_to = iVar6;\n  prVar4->eps_reachable_subexps_map = -(ushort)(iVar7 == iVar6);\n  mctx->nbkref_ents = iVar3 + 1;\n  prVar4->more = '\0';\n  if (mctx->max_mb_elem_len < iVar6 - iVar7) {\n    mctx->max_mb_elem_len = iVar6 - iVar7;\n  }\n  rVar2 = clean_state_log_if_needed(mctx,(bkref_str + IVar5) - sub_top->str_idx);\n  return rVar2;\n}" type_identifier (function_declarator "get_subexp_sub(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,\n              Idx bkref_node,Idx bkref_str)" identifier (parameter_list "(re_match_context_t *mctx,re_sub_match_top_t *sub_top,re_sub_match_last_t *sub_last,\n              Idx bkref_node,Idx bkref_str)" ( (parameter_declaration "re_match_context_t *mctx" type_identifier (pointer_declarator "*mctx" * identifier)) , (parameter_declaration "re_sub_match_top_t *sub_top" type_identifier (pointer_declarator "*sub_top" * identifier)) , (parameter_declaration "re_sub_match_last_t *sub_last" type_identifier (pointer_declarator "*sub_last" * identifier)) , (parameter_declaration "Idx bkref_node" type_identifier identifier) , (parameter_declaration "Idx bkref_str" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  reg_errcode_t rVar2;\n  int iVar3;\n  re_backref_cache_entry *prVar4;\n  Idx IVar5;\n  int iVar6;\n  int iVar7;\n  \n  rVar2 = check_arrival(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,bkref_str,8\n                       );\n  if (rVar2 != _REG_NOERROR) {\n    return rVar2;\n  }\n  iVar3 = mctx->nbkref_ents;\n  iVar7 = sub_top->str_idx;\n  iVar6 = sub_last->str_idx;\n  prVar4 = mctx->bkref_ents;\n  IVar5 = iVar6;\n  if (mctx->abkref_ents <= iVar3) {\n    prVar4 = (re_backref_cache_entry *)\n             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (prVar4 == (re_backref_cache_entry *)0x0) {\n      (*(code *)PTR_free_000534fc)(mctx->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx->bkref_ents = prVar4;\n    (*(code *)puVar1)(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14);\n    IVar5 = sub_last->str_idx;\n    iVar3 = mctx->nbkref_ents;\n    prVar4 = mctx->bkref_ents;\n    mctx->abkref_ents = mctx->abkref_ents << 1;\n  }\n  if ((0 < iVar3) && (bkref_str == prVar4[iVar3 + -1].str_idx)) {\n    prVar4[iVar3 + -1].more = '\x01';\n  }\n  prVar4 = prVar4 + iVar3;\n  prVar4->node = bkref_node;\n  prVar4->str_idx = bkref_str;\n  prVar4->subexp_from = iVar7;\n  prVar4->subexp_to = iVar6;\n  prVar4->eps_reachable_subexps_map = -(ushort)(iVar7 == iVar6);\n  mctx->nbkref_ents = iVar3 + 1;\n  prVar4->more = '\0';\n  if (mctx->max_mb_elem_len < iVar6 - iVar7) {\n    mctx->max_mb_elem_len = iVar6 - iVar7;\n  }\n  rVar2 = clean_state_log_if_needed(mctx,(bkref_str + IVar5) - sub_top->str_idx);\n  return rVar2;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "reg_errcode_t rVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "re_backref_cache_entry *prVar4;" type_identifier (pointer_declarator "*prVar4" * identifier) ;) (declaration "Idx IVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (expression_statement "rVar2 = check_arrival(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,bkref_str,8\n                       );" (assignment_expression "rVar2 = check_arrival(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,bkref_str,8\n                       )" identifier = (call_expression "check_arrival(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,bkref_str,8\n                       )" identifier (argument_list "(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,bkref_str,8\n                       )" ( identifier , (pointer_expression "&sub_last->path" & (field_expression "sub_last->path" identifier -> field_identifier)) , (field_expression "sub_last->node" identifier -> field_identifier) , (field_expression "sub_last->str_idx" identifier -> field_identifier) , identifier , identifier , number_literal )))) ;) (if_statement "if (rVar2 != _REG_NOERROR) {\n    return rVar2;\n  }" if (parenthesized_expression "(rVar2 != _REG_NOERROR)" ( (binary_expression "rVar2 != _REG_NOERROR" identifier != identifier) )) (compound_statement "{\n    return rVar2;\n  }" { (return_statement "return rVar2;" return identifier ;) })) (expression_statement "iVar3 = mctx->nbkref_ents;" (assignment_expression "iVar3 = mctx->nbkref_ents" identifier = (field_expression "mctx->nbkref_ents" identifier -> field_identifier)) ;) (expression_statement "iVar7 = sub_top->str_idx;" (assignment_expression "iVar7 = sub_top->str_idx" identifier = (field_expression "sub_top->str_idx" identifier -> field_identifier)) ;) (expression_statement "iVar6 = sub_last->str_idx;" (assignment_expression "iVar6 = sub_last->str_idx" identifier = (field_expression "sub_last->str_idx" identifier -> field_identifier)) ;) (expression_statement "prVar4 = mctx->bkref_ents;" (assignment_expression "prVar4 = mctx->bkref_ents" identifier = (field_expression "mctx->bkref_ents" identifier -> field_identifier)) ;) (expression_statement "IVar5 = iVar6;" (assignment_expression "IVar5 = iVar6" identifier = identifier) ;) (if_statement "if (mctx->abkref_ents <= iVar3) {\n    prVar4 = (re_backref_cache_entry *)\n             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (prVar4 == (re_backref_cache_entry *)0x0) {\n      (*(code *)PTR_free_000534fc)(mctx->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx->bkref_ents = prVar4;\n    (*(code *)puVar1)(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14);\n    IVar5 = sub_last->str_idx;\n    iVar3 = mctx->nbkref_ents;\n    prVar4 = mctx->bkref_ents;\n    mctx->abkref_ents = mctx->abkref_ents << 1;\n  }" if (parenthesized_expression "(mctx->abkref_ents <= iVar3)" ( (binary_expression "mctx->abkref_ents <= iVar3" (field_expression "mctx->abkref_ents" identifier -> field_identifier) <= identifier) )) (compound_statement "{\n    prVar4 = (re_backref_cache_entry *)\n             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (prVar4 == (re_backref_cache_entry *)0x0) {\n      (*(code *)PTR_free_000534fc)(mctx->bkref_ents);\n      return _REG_ESPACE;\n    }\n    mctx->bkref_ents = prVar4;\n    (*(code *)puVar1)(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14);\n    IVar5 = sub_last->str_idx;\n    iVar3 = mctx->nbkref_ents;\n    prVar4 = mctx->bkref_ents;\n    mctx->abkref_ents = mctx->abkref_ents << 1;\n  }" { (expression_statement "prVar4 = (re_backref_cache_entry *)\n             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28);" (assignment_expression "prVar4 = (re_backref_cache_entry *)\n             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28)" identifier = (cast_expression "(re_backref_cache_entry *)\n             (*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28)" ( (type_descriptor "re_backref_cache_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_realloc_00053478)(prVar4,mctx->abkref_ents * 0x28)" (parenthesized_expression "(*(code *)PTR_realloc_00053478)" ( (pointer_expression "*(code *)PTR_realloc_00053478" * (cast_expression "(code *)PTR_realloc_00053478" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(prVar4,mctx->abkref_ents * 0x28)" ( identifier , (binary_expression "mctx->abkref_ents * 0x28" (field_expression "mctx->abkref_ents" identifier -> field_identifier) * number_literal) ))))) ;) (expression_statement "puVar1 = PTR_memset_00053430;" (assignment_expression "puVar1 = PTR_memset_00053430" identifier = identifier) ;) (if_statement "if (prVar4 == (re_backref_cache_entry *)0x0) {\n      (*(code *)PTR_free_000534fc)(mctx->bkref_ents);\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(prVar4 == (re_backref_cache_entry *)0x0)" ( (binary_expression "prVar4 == (re_backref_cache_entry *)0x0" identifier == (cast_expression "(re_backref_cache_entry *)0x0" ( (type_descriptor "re_backref_cache_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*(code *)PTR_free_000534fc)(mctx->bkref_ents);\n      return _REG_ESPACE;\n    }" { (expression_statement "(*(code *)PTR_free_000534fc)(mctx->bkref_ents);" (call_expression "(*(code *)PTR_free_000534fc)(mctx->bkref_ents)" (parenthesized_expression "(*(code *)PTR_free_000534fc)" ( (pointer_expression "*(code *)PTR_free_000534fc" * (cast_expression "(code *)PTR_free_000534fc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(mctx->bkref_ents)" ( (field_expression "mctx->bkref_ents" identifier -> field_identifier) ))) ;) (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "mctx->bkref_ents = prVar4;" (assignment_expression "mctx->bkref_ents = prVar4" (field_expression "mctx->bkref_ents" identifier -> field_identifier) = identifier) ;) (expression_statement "(*(code *)puVar1)(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14);" (call_expression "(*(code *)puVar1)(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(prVar4 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14)" ( (binary_expression "prVar4 + mctx->nbkref_ents" identifier + (field_expression "mctx->nbkref_ents" identifier -> field_identifier)) , number_literal , (binary_expression "mctx->abkref_ents * 0x14" (field_expression "mctx->abkref_ents" identifier -> field_identifier) * number_literal) ))) ;) (expression_statement "IVar5 = sub_last->str_idx;" (assignment_expression "IVar5 = sub_last->str_idx" identifier = (field_expression "sub_last->str_idx" identifier -> field_identifier)) ;) (expression_statement "iVar3 = mctx->nbkref_ents;" (assignment_expression "iVar3 = mctx->nbkref_ents" identifier = (field_expression "mctx->nbkref_ents" identifier -> field_identifier)) ;) (expression_statement "prVar4 = mctx->bkref_ents;" (assignment_expression "prVar4 = mctx->bkref_ents" identifier = (field_expression "mctx->bkref_ents" identifier -> field_identifier)) ;) (expression_statement "mctx->abkref_ents = mctx->abkref_ents << 1;" (assignment_expression "mctx->abkref_ents = mctx->abkref_ents << 1" (field_expression "mctx->abkref_ents" identifier -> field_identifier) = (binary_expression "mctx->abkref_ents << 1" (field_expression "mctx->abkref_ents" identifier -> field_identifier) << number_literal)) ;) })) (if_statement "if ((0 < iVar3) && (bkref_str == prVar4[iVar3 + -1].str_idx)) {\n    prVar4[iVar3 + -1].more = '\x01';\n  }" if (parenthesized_expression "((0 < iVar3) && (bkref_str == prVar4[iVar3 + -1].str_idx))" ( (binary_expression "(0 < iVar3) && (bkref_str == prVar4[iVar3 + -1].str_idx)" (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) && (parenthesized_expression "(bkref_str == prVar4[iVar3 + -1].str_idx)" ( (binary_expression "bkref_str == prVar4[iVar3 + -1].str_idx" identifier == (field_expression "prVar4[iVar3 + -1].str_idx" (subscript_expression "prVar4[iVar3 + -1]" identifier [ (binary_expression "iVar3 + -1" identifier + number_literal) ]) . field_identifier)) ))) )) (compound_statement "{\n    prVar4[iVar3 + -1].more = '\x01';\n  }" { (expression_statement "prVar4[iVar3 + -1].more = '\x01';" (assignment_expression "prVar4[iVar3 + -1].more = '\x01'" (field_expression "prVar4[iVar3 + -1].more" (subscript_expression "prVar4[iVar3 + -1]" identifier [ (binary_expression "iVar3 + -1" identifier + number_literal) ]) . field_identifier) = (char_literal "'\x01'" ' escape_sequence ')) ;) })) (expression_statement "prVar4 = prVar4 + iVar3;" (assignment_expression "prVar4 = prVar4 + iVar3" identifier = (binary_expression "prVar4 + iVar3" identifier + identifier)) ;) (expression_statement "prVar4->node = bkref_node;" (assignment_expression "prVar4->node = bkref_node" (field_expression "prVar4->node" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar4->str_idx = bkref_str;" (assignment_expression "prVar4->str_idx = bkref_str" (field_expression "prVar4->str_idx" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar4->subexp_from = iVar7;" (assignment_expression "prVar4->subexp_from = iVar7" (field_expression "prVar4->subexp_from" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar4->subexp_to = iVar6;" (assignment_expression "prVar4->subexp_to = iVar6" (field_expression "prVar4->subexp_to" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar4->eps_reachable_subexps_map = -(ushort)(iVar7 == iVar6);" (assignment_expression "prVar4->eps_reachable_subexps_map = -(ushort)(iVar7 == iVar6)" (field_expression "prVar4->eps_reachable_subexps_map" identifier -> field_identifier) = (unary_expression "-(ushort)(iVar7 == iVar6)" - (call_expression "(ushort)(iVar7 == iVar6)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(iVar7 == iVar6)" ( (binary_expression "iVar7 == iVar6" identifier == identifier) ))))) ;) (expression_statement "mctx->nbkref_ents = iVar3 + 1;" (assignment_expression "mctx->nbkref_ents = iVar3 + 1" (field_expression "mctx->nbkref_ents" identifier -> field_identifier) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "prVar4->more = '\0';" (assignment_expression "prVar4->more = '\0'" (field_expression "prVar4->more" identifier -> field_identifier) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (mctx->max_mb_elem_len < iVar6 - iVar7) {\n    mctx->max_mb_elem_len = iVar6 - iVar7;\n  }" if (parenthesized_expression "(mctx->max_mb_elem_len < iVar6 - iVar7)" ( (binary_expression "mctx->max_mb_elem_len < iVar6 - iVar7" (field_expression "mctx->max_mb_elem_len" identifier -> field_identifier) < (binary_expression "iVar6 - iVar7" identifier - identifier)) )) (compound_statement "{\n    mctx->max_mb_elem_len = iVar6 - iVar7;\n  }" { (expression_statement "mctx->max_mb_elem_len = iVar6 - iVar7;" (assignment_expression "mctx->max_mb_elem_len = iVar6 - iVar7" (field_expression "mctx->max_mb_elem_len" identifier -> field_identifier) = (binary_expression "iVar6 - iVar7" identifier - identifier)) ;) })) (expression_statement "rVar2 = clean_state_log_if_needed(mctx,(bkref_str + IVar5) - sub_top->str_idx);" (assignment_expression "rVar2 = clean_state_log_if_needed(mctx,(bkref_str + IVar5) - sub_top->str_idx)" identifier = (call_expression "clean_state_log_if_needed(mctx,(bkref_str + IVar5) - sub_top->str_idx)" identifier (argument_list "(mctx,(bkref_str + IVar5) - sub_top->str_idx)" ( identifier , (binary_expression "(bkref_str + IVar5) - sub_top->str_idx" (parenthesized_expression "(bkref_str + IVar5)" ( (binary_expression "bkref_str + IVar5" identifier + identifier) )) - (field_expression "sub_top->str_idx" identifier -> field_identifier)) )))) ;) (return_statement "return rVar2;" return identifier ;) })))
(translation_unit "int FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar3 = *(int *)(param_1 + 0x6c);\n  iVar8 = *param_2;\n  iVar7 = param_3[1];\n  iVar4 = *(int *)(param_1 + 0x74);\n  iVar2 = iVar7;\n  if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }\n  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }\n  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);\n  *puVar5 = param_4;\n  puVar5[1] = param_5;\n  puVar5[2] = iVar8;\n  puVar5[3] = iVar7;\n  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);\n  *(int *)(param_1 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }\n  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);\n  return iVar2;\n}\n\n" (function_definition "int FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar3 = *(int *)(param_1 + 0x6c);\n  iVar8 = *param_2;\n  iVar7 = param_3[1];\n  iVar4 = *(int *)(param_1 + 0x74);\n  iVar2 = iVar7;\n  if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }\n  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }\n  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);\n  *puVar5 = param_4;\n  puVar5[1] = param_5;\n  puVar5[2] = iVar8;\n  puVar5[3] = iVar7;\n  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);\n  *(int *)(param_1 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }\n  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);\n  return iVar2;\n}" primitive_type (function_declarator "FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)" identifier (parameter_list "(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined4 *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar3 = *(int *)(param_1 + 0x6c);\n  iVar8 = *param_2;\n  iVar7 = param_3[1];\n  iVar4 = *(int *)(param_1 + 0x74);\n  iVar2 = iVar7;\n  if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }\n  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }\n  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);\n  *puVar5 = param_4;\n  puVar5[1] = param_5;\n  puVar5[2] = iVar8;\n  puVar5[3] = iVar7;\n  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);\n  *(int *)(param_1 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }\n  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);\n  return iVar2;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);" (assignment_expression "iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" identifier = (call_expression "FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" identifier (argument_list "(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" ( identifier , (binary_expression "param_3 + 2" identifier + number_literal) , (pointer_expression "*param_3" * identifier) , (subscript_expression "param_3[1]" identifier [ number_literal ]) , identifier , identifier , number_literal )))) ;) (if_statement "if (iVar2 != 0) {\n    return iVar2;\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    return iVar2;\n  }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" identifier = (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) ;) (expression_statement "iVar8 = *param_2;" (assignment_expression "iVar8 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "iVar7 = param_3[1];" (assignment_expression "iVar7 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "iVar4 = *(int *)(param_1 + 0x74);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x74)" identifier = (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = iVar7;" (assignment_expression "iVar2 = iVar7" identifier = identifier) ;) (if_statement "if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x70) <= iVar3)" ( (binary_expression "*(int *)(param_1 + 0x70) <= iVar3" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) <= identifier) )) (compound_statement "{\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }" { (expression_statement "iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);" (assignment_expression "iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28)" identifier = (call_expression "(*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28)" (parenthesized_expression "(*(code *)PTR_realloc_00053478)" ( (pointer_expression "*(code *)PTR_realloc_00053478" * (cast_expression "(code *)PTR_realloc_00053478" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar4,*(int *)(param_1 + 0x70) * 0x28)" ( identifier , (binary_expression "*(int *)(param_1 + 0x70) * 0x28" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) * number_literal) )))) ;) (expression_statement "puVar1 = PTR_memset_00053430;" (assignment_expression "puVar1 = PTR_memset_00053430" identifier = identifier) ;) (if_statement "if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }" if (parenthesized_expression "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) )) (compound_statement "{\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }" { (expression_statement "(*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));" (call_expression "(*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74))" (parenthesized_expression "(*(code *)PTR_free_000534fc)" ( (pointer_expression "*(code *)PTR_free_000534fc" * (cast_expression "(code *)PTR_free_000534fc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(*(undefined4 *)(param_1 + 0x74))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x74)" * (cast_expression "(undefined4 *)(param_1 + 0x74)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) ))) ;) (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "*(int *)(param_1 + 0x74) = iVar2;" (assignment_expression "*(int *)(param_1 + 0x74) = iVar2" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) = identifier) ;) (expression_statement "(*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);" (call_expression "(*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14)" ( (binary_expression "iVar2 + *(int *)(param_1 + 0x6c) * 0x14" identifier + (binary_expression "*(int *)(param_1 + 0x6c) * 0x14" (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) )))) * number_literal)) , number_literal , (binary_expression "*(int *)(param_1 + 0x70) * 0x14" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) * number_literal) ))) ;) (expression_statement "iVar2 = param_3[1];" (assignment_expression "iVar2 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" identifier = (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) ))))) ;) (expression_statement "iVar4 = *(int *)(param_1 + 0x74);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x74)" identifier = (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;" (assignment_expression "*(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x70) << 1" (pointer_expression "*(int *)(param_1 + 0x70)" * (cast_expression "(int *)(param_1 + 0x70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x70)" ( (binary_expression "param_1 + 0x70" identifier + number_literal) )))) << number_literal)) ;) })) (if_statement "if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }" if (parenthesized_expression "((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4)))" ( (binary_expression "(0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))" (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) && (parenthesized_expression "(iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))" ( (comma_expression "iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4)" (assignment_expression "iVar6 = iVar4 + iVar3 * 0x14 + -0x14" identifier = (binary_expression "iVar4 + iVar3 * 0x14 + -0x14" (binary_expression "iVar4 + iVar3 * 0x14" identifier + (binary_expression "iVar3 * 0x14" identifier * number_literal)) + number_literal)) , (binary_expression "param_5 == *(int *)(iVar6 + 4)" identifier == (pointer_expression "*(int *)(iVar6 + 4)" * (cast_expression "(int *)(iVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) )))))) ))) )) (compound_statement "{\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }" { (expression_statement "*(undefined1 *)(iVar6 + 0x10) = 1;" (assignment_expression "*(undefined1 *)(iVar6 + 0x10) = 1" (pointer_expression "*(undefined1 *)(iVar6 + 0x10)" * (cast_expression "(undefined1 *)(iVar6 + 0x10)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x10)" ( (binary_expression "iVar6 + 0x10" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);" (assignment_expression "puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14)" identifier = (cast_expression "(undefined4 *)(iVar4 + iVar3 * 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + iVar3 * 0x14)" ( (binary_expression "iVar4 + iVar3 * 0x14" identifier + (binary_expression "iVar3 * 0x14" identifier * number_literal)) )))) ;) (expression_statement "*puVar5 = param_4;" (assignment_expression "*puVar5 = param_4" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "puVar5[1] = param_5;" (assignment_expression "puVar5[1] = param_5" (subscript_expression "puVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[2] = iVar8;" (assignment_expression "puVar5[2] = iVar8" (subscript_expression "puVar5[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[3] = iVar7;" (assignment_expression "puVar5[3] = iVar7" (subscript_expression "puVar5[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);" (assignment_expression "*(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7)" (pointer_expression "*(ushort *)((int)puVar5 + 0x12)" * (cast_expression "(ushort *)((int)puVar5 + 0x12)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar5 + 0x12)" ( (binary_expression "(int)puVar5 + 0x12" (cast_expression "(int)puVar5" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (unary_expression "-(ushort)(iVar8 == iVar7)" - (call_expression "(ushort)(iVar8 == iVar7)" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(iVar8 == iVar7)" ( (binary_expression "iVar8 == iVar7" identifier == identifier) ))))) ;) (expression_statement "*(int *)(param_1 + 0x6c) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + 0x6c) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + 0x6c)" * (cast_expression "(int *)(param_1 + 0x6c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x6c)" ( (binary_expression "param_1 + 0x6c" identifier + number_literal) )))) = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined1 *)(puVar5 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 4)" * (cast_expression "(undefined1 *)(puVar5 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x78) < iVar7 - iVar8)" ( (binary_expression "*(int *)(param_1 + 0x78) < iVar7 - iVar8" (pointer_expression "*(int *)(param_1 + 0x78)" * (cast_expression "(int *)(param_1 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x78)" ( (binary_expression "param_1 + 0x78" identifier + number_literal) )))) < (binary_expression "iVar7 - iVar8" identifier - identifier)) )) (compound_statement "{\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }" { (expression_statement "*(int *)(param_1 + 0x78) = iVar7 - iVar8;" (assignment_expression "*(int *)(param_1 + 0x78) = iVar7 - iVar8" (pointer_expression "*(int *)(param_1 + 0x78)" * (cast_expression "(int *)(param_1 + 0x78)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x78)" ( (binary_expression "param_1 + 0x78" identifier + number_literal) )))) = (binary_expression "iVar7 - iVar8" identifier - identifier)) ;) })) (expression_statement "iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);" (assignment_expression "iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2)" identifier = (call_expression "FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2)" identifier (argument_list "(param_1,(param_5 + iVar2) - *param_2)" ( identifier , (binary_expression "(param_5 + iVar2) - *param_2" (parenthesized_expression "(param_5 + iVar2)" ( (binary_expression "param_5 + iVar2" identifier + identifier) )) - (pointer_expression "*param_2" * identifier)) )))) ;) (return_statement "return iVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , (pointer_expression * IDENT) , (subscript_expression IDENT [ LIT ]) , IDENT , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) , LIT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (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) )))) = (binary_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 (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT)) , (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ))) )) (compound_statement { (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 = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == IDENT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (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) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (binary_expression IDENT - IDENT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) - (pointer_expression * IDENT)) )))) ;) (return_statement return IDENT ;) })))
(function_definition "int FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar3 = *(int *)(param_1 + 0x6c);\n  iVar8 = *param_2;\n  iVar7 = param_3[1];\n  iVar4 = *(int *)(param_1 + 0x74);\n  iVar2 = iVar7;\n  if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }\n  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }\n  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);\n  *puVar5 = param_4;\n  puVar5[1] = param_5;\n  puVar5[2] = iVar8;\n  puVar5[3] = iVar7;\n  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);\n  *(int *)(param_1 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }\n  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);\n  return iVar2;\n}" (primitive_type "int") (function_declarator "FUN_00032b40(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)" (identifier "FUN_00032b40") (parameter_list "(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined4 *param_3" (type_identifier "undefined4") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")"))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  int iVar3;\n  int iVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  int iVar7;\n  int iVar8;\n  \n  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);\n  if (iVar2 != 0) {\n    return iVar2;\n  }\n  iVar3 = *(int *)(param_1 + 0x6c);\n  iVar8 = *param_2;\n  iVar7 = param_3[1];\n  iVar4 = *(int *)(param_1 + 0x74);\n  iVar2 = iVar7;\n  if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }\n  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }\n  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);\n  *puVar5 = param_4;\n  puVar5[1] = param_5;\n  puVar5[2] = iVar8;\n  puVar5[3] = iVar7;\n  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);\n  *(int *)(param_1 + 0x6c) = iVar3 + 1;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }\n  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);\n  return iVar2;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (expression_statement "iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);" (assignment_expression "iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" (identifier "iVar2") (= "=") (call_expression "FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" (identifier "FUN_00031b40") (argument_list "(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) (, ",") (pointer_expression "*param_3" (* "*") (identifier "param_3")) (, ",") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (, ",") (identifier "param_4") (, ",") (identifier "param_5") (, ",") (number_literal "8") () ")")))) (; ";")) (if_statement "if (iVar2 != 0) {\n    return iVar2;\n  }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    return iVar2;\n  }" ({ "{") (return_statement "return iVar2;" (return "return") (identifier "iVar2") (; ";")) (} "}"))) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x6c)" (* "*") (cast_expression "(int *)(param_1 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")"))))) (; ";")) (expression_statement "iVar8 = *param_2;" (assignment_expression "iVar8 = *param_2" (identifier "iVar8") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "iVar7 = param_3[1];" (assignment_expression "iVar7 = param_3[1]" (identifier "iVar7") (= "=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "iVar4 = *(int *)(param_1 + 0x74);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x74)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")"))))) (; ";")) (expression_statement "iVar2 = iVar7;" (assignment_expression "iVar2 = iVar7" (identifier "iVar2") (= "=") (identifier "iVar7")) (; ";")) (if_statement "if (*(int *)(param_1 + 0x70) <= iVar3) {\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x70) <= iVar3)" (( "(") (binary_expression "*(int *)(param_1 + 0x70) <= iVar3" (pointer_expression "*(int *)(param_1 + 0x70)" (* "*") (cast_expression "(int *)(param_1 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")")))) (<= "<=") (identifier "iVar3")) () ")")) (compound_statement "{\n    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);\n    puVar1 = PTR_memset_00053430;\n    if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }\n    *(int *)(param_1 + 0x74) = iVar2;\n    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);\n    iVar2 = param_3[1];\n    iVar3 = *(int *)(param_1 + 0x6c);\n    iVar4 = *(int *)(param_1 + 0x74);\n    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;\n  }" ({ "{") (expression_statement "iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);" (assignment_expression "iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28)" (identifier "iVar2") (= "=") (call_expression "(*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28)" (parenthesized_expression "(*(code *)PTR_realloc_00053478)" (( "(") (pointer_expression "*(code *)PTR_realloc_00053478" (* "*") (cast_expression "(code *)PTR_realloc_00053478" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_realloc_00053478"))) () ")")) (argument_list "(iVar4,*(int *)(param_1 + 0x70) * 0x28)" (( "(") (identifier "iVar4") (, ",") (binary_expression "*(int *)(param_1 + 0x70) * 0x28" (pointer_expression "*(int *)(param_1 + 0x70)" (* "*") (cast_expression "(int *)(param_1 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")")))) (* "*") (number_literal "0x28")) () ")")))) (; ";")) (expression_statement "puVar1 = PTR_memset_00053430;" (assignment_expression "puVar1 = PTR_memset_00053430" (identifier "puVar1") (= "=") (identifier "PTR_memset_00053430")) (; ";")) (if_statement "if (iVar2 == 0) {\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));\n      return 0xc;\n    }" ({ "{") (expression_statement "(*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));" (call_expression "(*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74))" (parenthesized_expression "(*(code *)PTR_free_000534fc)" (( "(") (pointer_expression "*(code *)PTR_free_000534fc" (* "*") (cast_expression "(code *)PTR_free_000534fc" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_000534fc"))) () ")")) (argument_list "(*(undefined4 *)(param_1 + 0x74))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x74)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x74)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) () ")"))) (; ";")) (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "*(int *)(param_1 + 0x74) = iVar2;" (assignment_expression "*(int *)(param_1 + 0x74) = iVar2" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "(*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);" (call_expression "(*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14)" (parenthesized_expression "(*(code *)puVar1)" (( "(") (pointer_expression "*(code *)puVar1" (* "*") (cast_expression "(code *)puVar1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1"))) () ")")) (argument_list "(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14)" (( "(") (binary_expression "iVar2 + *(int *)(param_1 + 0x6c) * 0x14" (identifier "iVar2") (+ "+") (binary_expression "*(int *)(param_1 + 0x6c) * 0x14" (pointer_expression "*(int *)(param_1 + 0x6c)" (* "*") (cast_expression "(int *)(param_1 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")")))) (* "*") (number_literal "0x14"))) (, ",") (number_literal "0") (, ",") (binary_expression "*(int *)(param_1 + 0x70) * 0x14" (pointer_expression "*(int *)(param_1 + 0x70)" (* "*") (cast_expression "(int *)(param_1 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")")))) (* "*") (number_literal "0x14")) () ")"))) (; ";")) (expression_statement "iVar2 = param_3[1];" (assignment_expression "iVar2 = param_3[1]" (identifier "iVar2") (= "=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x6c);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x6c)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x6c)" (* "*") (cast_expression "(int *)(param_1 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")"))))) (; ";")) (expression_statement "iVar4 = *(int *)(param_1 + 0x74);" (assignment_expression "iVar4 = *(int *)(param_1 + 0x74)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;" (assignment_expression "*(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1" (pointer_expression "*(int *)(param_1 + 0x70)" (* "*") (cast_expression "(int *)(param_1 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x70) << 1" (pointer_expression "*(int *)(param_1 + 0x70)" (* "*") (cast_expression "(int *)(param_1 + 0x70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x70)" (( "(") (binary_expression "param_1 + 0x70" (identifier "param_1") (+ "+") (number_literal "0x70")) () ")")))) (<< "<<") (number_literal "1"))) (; ";")) (} "}"))) (if_statement "if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }" (if "if") (parenthesized_expression "((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4)))" (( "(") (binary_expression "(0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))" (parenthesized_expression "(0 < iVar3)" (( "(") (binary_expression "0 < iVar3" (number_literal "0") (< "<") (identifier "iVar3")) () ")")) (&& "&&") (parenthesized_expression "(iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))" (( "(") (comma_expression "iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4)" (assignment_expression "iVar6 = iVar4 + iVar3 * 0x14 + -0x14" (identifier "iVar6") (= "=") (binary_expression "iVar4 + iVar3 * 0x14 + -0x14" (binary_expression "iVar4 + iVar3 * 0x14" (identifier "iVar4") (+ "+") (binary_expression "iVar3 * 0x14" (identifier "iVar3") (* "*") (number_literal "0x14"))) (+ "+") (number_literal "-0x14"))) (, ",") (binary_expression "param_5 == *(int *)(iVar6 + 4)" (identifier "param_5") (== "==") (pointer_expression "*(int *)(iVar6 + 4)" (* "*") (cast_expression "(int *)(iVar6 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")")))))) () ")"))) () ")")) (compound_statement "{\n    *(undefined1 *)(iVar6 + 0x10) = 1;\n  }" ({ "{") (expression_statement "*(undefined1 *)(iVar6 + 0x10) = 1;" (assignment_expression "*(undefined1 *)(iVar6 + 0x10) = 1" (pointer_expression "*(undefined1 *)(iVar6 + 0x10)" (* "*") (cast_expression "(undefined1 *)(iVar6 + 0x10)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x10)" (( "(") (binary_expression "iVar6 + 0x10" (identifier "iVar6") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "1")) (; ";")) (} "}"))) (expression_statement "puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);" (assignment_expression "puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14)" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)(iVar4 + iVar3 * 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + iVar3 * 0x14)" (( "(") (binary_expression "iVar4 + iVar3 * 0x14" (identifier "iVar4") (+ "+") (binary_expression "iVar3 * 0x14" (identifier "iVar3") (* "*") (number_literal "0x14"))) () ")")))) (; ";")) (expression_statement "*puVar5 = param_4;" (assignment_expression "*puVar5 = param_4" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (identifier "param_4")) (; ";")) (expression_statement "puVar5[1] = param_5;" (assignment_expression "puVar5[1] = param_5" (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "param_5")) (; ";")) (expression_statement "puVar5[2] = iVar8;" (assignment_expression "puVar5[2] = iVar8" (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar8")) (; ";")) (expression_statement "puVar5[3] = iVar7;" (assignment_expression "puVar5[3] = iVar7" (subscript_expression "puVar5[3]" (identifier "puVar5") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "iVar7")) (; ";")) (expression_statement "*(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);" (assignment_expression "*(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7)" (pointer_expression "*(ushort *)((int)puVar5 + 0x12)" (* "*") (cast_expression "(ushort *)((int)puVar5 + 0x12)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar5 + 0x12)" (( "(") (binary_expression "(int)puVar5 + 0x12" (cast_expression "(int)puVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar5")) (+ "+") (number_literal "0x12")) () ")")))) (= "=") (unary_expression "-(ushort)(iVar8 == iVar7)" (- "-") (call_expression "(ushort)(iVar8 == iVar7)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(iVar8 == iVar7)" (( "(") (binary_expression "iVar8 == iVar7" (identifier "iVar8") (== "==") (identifier "iVar7")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x6c) = iVar3 + 1;" (assignment_expression "*(int *)(param_1 + 0x6c) = iVar3 + 1" (pointer_expression "*(int *)(param_1 + 0x6c)" (* "*") (cast_expression "(int *)(param_1 + 0x6c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x6c)" (( "(") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")")))) (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined1 *)(puVar5 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 4)" (* "*") (cast_expression "(undefined1 *)(puVar5 + 4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar5 + 4)" (( "(") (binary_expression "puVar5 + 4" (identifier "puVar5") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (if_statement "if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x78) < iVar7 - iVar8)" (( "(") (binary_expression "*(int *)(param_1 + 0x78) < iVar7 - iVar8" (pointer_expression "*(int *)(param_1 + 0x78)" (* "*") (cast_expression "(int *)(param_1 + 0x78)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x78)" (( "(") (binary_expression "param_1 + 0x78" (identifier "param_1") (+ "+") (number_literal "0x78")) () ")")))) (< "<") (binary_expression "iVar7 - iVar8" (identifier "iVar7") (- "-") (identifier "iVar8"))) () ")")) (compound_statement "{\n    *(int *)(param_1 + 0x78) = iVar7 - iVar8;\n  }" ({ "{") (expression_statement "*(int *)(param_1 + 0x78) = iVar7 - iVar8;" (assignment_expression "*(int *)(param_1 + 0x78) = iVar7 - iVar8" (pointer_expression "*(int *)(param_1 + 0x78)" (* "*") (cast_expression "(int *)(param_1 + 0x78)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x78)" (( "(") (binary_expression "param_1 + 0x78" (identifier "param_1") (+ "+") (number_literal "0x78")) () ")")))) (= "=") (binary_expression "iVar7 - iVar8" (identifier "iVar7") (- "-") (identifier "iVar8"))) (; ";")) (} "}"))) (expression_statement "iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);" (assignment_expression "iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2)" (identifier "iVar2") (= "=") (call_expression "FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2)" (identifier "FUN_0002aa60") (argument_list "(param_1,(param_5 + iVar2) - *param_2)" (( "(") (identifier "param_1") (, ",") (binary_expression "(param_5 + iVar2) - *param_2" (parenthesized_expression "(param_5 + iVar2)" (( "(") (binary_expression "param_5 + iVar2" (identifier "param_5") (+ "+") (identifier "iVar2")) () ")")) (- "-") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")))) (; ";")) (return_statement "return iVar2;" (return "return") (identifier "iVar2") (; ";")) (} "}")))

type_1
function_1(type_2 *mctx,type_3 *sub_top,type_4 *sub_last,
              type_5 bkref_node,type_5 var_6)

{
  type_6 *puVar1;
  type_1 var_2;
  int var_4;
  type_7 *var_5;
  type_5 var_10;
  int var_8;
  int var_7;
  
  var_2 = var_1(mctx,&sub_last->path,sub_last->node,sub_last->str_idx,bkref_node,var_6,8
                       );
  if (var_2 != var_3) {
    return var_2;
  }
  var_4 = mctx->nbkref_ents;
  var_7 = sub_top->str_idx;
  var_8 = sub_last->str_idx;
  var_5 = mctx->bkref_ents;
  var_10 = var_8;
  if (mctx->abkref_ents <= var_4) {
    var_5 = (type_7 *)
             (*(type_8 *)PTR_realloc_00053478)(var_5,mctx->abkref_ents * 0x28);
    puVar1 = PTR_memset_00053430;
    if (var_5 == (type_7 *)0x0) {
      (*(type_8 *)PTR_free_000534fc)(mctx->bkref_ents);
      return _REG_ESPACE;
    }
    mctx->bkref_ents = var_5;
    (*(type_8 *)puVar1)(var_5 + mctx->nbkref_ents,0,mctx->abkref_ents * 0x14);
    var_10 = sub_last->str_idx;
    var_4 = mctx->nbkref_ents;
    var_5 = mctx->bkref_ents;
    mctx->abkref_ents = mctx->abkref_ents << 1;
  }
  if ((0 < var_4) && (var_6 == var_5[var_4 + -1].str_idx)) {
    var_5[var_4 + -1].more = '\x01';
  }
  var_5 = var_5 + var_4;
  var_5->node = bkref_node;
  var_5->str_idx = var_6;
  var_5->subexp_from = var_7;
  var_5->subexp_to = var_8;
  var_5->eps_reachable_subexps_map = -(ushort)(var_7 == var_8);
  mctx->nbkref_ents = var_4 + 1;
  var_5->more = '\0';
  if (mctx->max_mb_elem_len < var_8 - var_7) {
    mctx->max_mb_elem_len = var_8 - var_7;
  }
  var_2 = var_9(mctx,(var_6 + var_10) - sub_top->str_idx);
  return var_2;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier)) (subscript_expression argument: (identifier) index: (number_literal)) (identifier) (identifier) (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_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 (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_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 (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (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))))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (binary_expression left: (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))))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (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)))))))) (return_statement (number_literal)))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (binary_expression left: (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))))) right: (number_literal))) (number_literal) (binary_expression left: (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))))) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_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 (assignment_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 (assignment_expression left: (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))))) right: (binary_expression left: (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))))) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (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)))))))))) consequence: (compound_statement (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: (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))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (unary_expression argument: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (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))))) right: (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))) (if_statement condition: (parenthesized_expression (binary_expression left: (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))))) right: (binary_expression left: (identifier) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (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))))) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (pointer_expression argument: (identifier))))))) (return_statement (identifier)))))

int MASKED(int param_1,int *param_2,undefined4 *param_3,undefined4 param_4,int param_5)

{
  undefined *puVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  undefined4 *puVar5;
  int iVar6;
  int iVar7;
  int iVar8;
  
  iVar2 = FUN_00031b40(param_1,param_3 + 2,*param_3,param_3[1],param_4,param_5,8);
  if (iVar2 != 0) {
    return iVar2;
  }
  iVar3 = *(int *)(param_1 + 0x6c);
  iVar8 = *param_2;
  iVar7 = param_3[1];
  iVar4 = *(int *)(param_1 + 0x74);
  iVar2 = iVar7;
  if (*(int *)(param_1 + 0x70) <= iVar3) {
    iVar2 = (*(code *)PTR_realloc_00053478)(iVar4,*(int *)(param_1 + 0x70) * 0x28);
    puVar1 = PTR_memset_00053430;
    if (iVar2 == 0) {
      (*(code *)PTR_free_000534fc)(*(undefined4 *)(param_1 + 0x74));
      return 0xc;
    }
    *(int *)(param_1 + 0x74) = iVar2;
    (*(code *)puVar1)(iVar2 + *(int *)(param_1 + 0x6c) * 0x14,0,*(int *)(param_1 + 0x70) * 0x14);
    iVar2 = param_3[1];
    iVar3 = *(int *)(param_1 + 0x6c);
    iVar4 = *(int *)(param_1 + 0x74);
    *(int *)(param_1 + 0x70) = *(int *)(param_1 + 0x70) << 1;
  }
  if ((0 < iVar3) && (iVar6 = iVar4 + iVar3 * 0x14 + -0x14, param_5 == *(int *)(iVar6 + 4))) {
    *(undefined1 *)(iVar6 + 0x10) = 1;
  }
  puVar5 = (undefined4 *)(iVar4 + iVar3 * 0x14);
  *puVar5 = param_4;
  puVar5[1] = param_5;
  puVar5[2] = iVar8;
  puVar5[3] = iVar7;
  *(ushort *)((int)puVar5 + 0x12) = -(ushort)(iVar8 == iVar7);
  *(int *)(param_1 + 0x6c) = iVar3 + 1;
  *(undefined1 *)(puVar5 + 4) = 0;
  if (*(int *)(param_1 + 0x78) < iVar7 - iVar8) {
    *(int *)(param_1 + 0x78) = iVar7 - iVar8;
  }
  iVar2 = FUN_0002aa60(param_1,(param_5 + iVar2) - *param_2);
  return iVar2;
}

