
char * hash_insert(hash_control *table,char *key,void *val)

{
  hash_entry ***plist;
  char *pcVar1;
  hash_entry *phVar2;
  hash_entry *phVar3;
  _obstack_chunk *p_Var4;
  uint uVar5;
  char *pcVar6;
  ulong hash;
  hash_entry **list;
  hash_entry *phStack_18;
  
  plist = (hash_entry ***)(*(code *)PTR_strlen_000b6678)(key);
  phStack_18 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,
                           (hash_control *)&hash);
  if (phStack_18 != (hash_entry *)0x0) {
    return PTR_LAB_000b5cb8 + 0x68f0;
  }
  pcVar6 = (table->memory).chunk_limit;
  pcVar1 = (table->memory).next_free;
  if ((uint)((int)pcVar6 - (int)pcVar1) < 0x10) {
    (*(code *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10);
    pcVar1 = (table->memory).next_free;
    pcVar6 = (table->memory).chunk_limit;
  }
  phVar3 = (hash_entry *)(table->memory).object_base;
  phVar2 = (hash_entry *)(pcVar1 + 0x10);
  (table->memory).next_free = (char *)phVar2;
  if (phVar2 == phVar3) {
    (table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40;
  }
  uVar5 = (table->memory).alignment_mask;
  p_Var4 = (table->memory).chunk;
  pcVar1 = (char *)((uint)((int)&phVar2->next + uVar5) & ~uVar5);
  (table->memory).next_free = pcVar1;
  if ((uint)((int)pcVar6 - (int)p_Var4) < (uint)((int)pcVar1 - (int)p_Var4)) {
    (table->memory).next_free = pcVar6;
    pcVar1 = pcVar6;
  }
  (table->memory).object_base = pcVar1;
  phVar3->data = val;
  phVar3->hash = hash;
  phVar3->string = key;
  phVar3->next = *list;
  *list = phVar3;
  return (char *)phStack_18;
}



undefined * hash_insert(int param_1,undefined4 param_2,undefined4 param_3)

{
  undefined4 uVar1;
  int iVar2;
  undefined4 *puVar3;
  uint uVar4;
  undefined4 *puVar5;
  uint uVar6;
  undefined4 local_20;
  undefined4 *local_1c;
  undefined *local_18;
  
  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);
  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);
  if (local_18 != (undefined *)0x0) {
    return PTR_LAB_000b5cb8 + 0x68f0;
  }
  uVar6 = *(uint *)(param_1 + 0x18);
  iVar2 = *(int *)(param_1 + 0x14);
  if (uVar6 - iVar2 < 0x10) {
    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);
    iVar2 = *(int *)(param_1 + 0x14);
    uVar6 = *(uint *)(param_1 + 0x18);
  }
  puVar5 = *(undefined4 **)(param_1 + 0x10);
  puVar3 = (undefined4 *)(iVar2 + 0x10);
  *(undefined4 **)(param_1 + 0x14) = puVar3;
  if (puVar3 == puVar5) {
    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;
  }
  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);
  *(uint *)(param_1 + 0x14) = uVar4;
  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {
    *(uint *)(param_1 + 0x14) = uVar6;
    uVar4 = uVar6;
  }
  *(uint *)(param_1 + 0x10) = uVar4;
  puVar5[3] = param_3;
  puVar5[2] = local_20;
  puVar5[1] = param_2;
  *puVar5 = *local_1c;
  *local_1c = puVar5;
  return local_18;
}


lui gp,0x9
addiu gp,gp,-0x7fa4
addu gp,gp,t9
addiu sp,sp,-0x40
lw t9,-0x7608(gp)
sw gp,0x18(sp)
sw ra,0x3c(sp)
sw s2,0x38(sp)
or s2,a2,zero
sw s1,0x34(sp)
or s1,a1,zero
sw s0,0x30(sp)
or s0,a0,zero
jalr t9
_or a0,a1,zero
addiu v1,sp,0x20
lw gp,0x18(sp)
addiu a1,s0,0x4
sw v1,0x14(sp)
addiu v1,sp,0x24
or a3,v0,zero
sw v1,0x10(sp)
or a2,s1,zero
lw t9,-0x7c80(gp)
addiu t9,t9,0x58e0
bal 0x000358e0
_or a0,s0,zero
beq v0,zero,0x00035cb8
_lw gp,0x18(sp)
lw ra,0x3c(sp)
lw v0,-0x7fc8(gp)
lw s2,0x38(sp)
lw s1,0x34(sp)
lw s0,0x30(sp)
addiu v0,v0,0x68f0
jr ra
_addiu sp,sp,0x40
lw a3,0x18(s0)
lw v1,0x14(s0)
subu a0,a3,v1
sltiu a0,a0,0x10
bne a0,zero,0x00035d4c
_lw t9,-0x7528(gp)
lw a0,0x10(s0)
addiu v1,v1,0x10
beq v1,a0,0x00035d6c
_sw v1,0x14(s0)
lw a2,0x20(s0)
lw a1,0xc(s0)
addu v1,v1,a2
nor a2,zero,a2
and v1,v1,a2
subu a2,v1,a1
subu a1,a3,a1
sltu a1,a1,a2
beq a1,zero,0x00035d10
_sw v1,0x14(s0)
sw a3,0x14(s0)
or v1,a3,zero
lw a1,0x24(sp)
lw ra,0x3c(sp)
sw v1,0x10(s0)
sw s2,0xc(a0)
lw v1,0x20(sp)
lw s2,0x38(sp)
lw s0,0x30(sp)
sw v1,0x8(a0)
sw s1,0x4(a0)
lw v1,0x0(a1)
lw s1,0x34(sp)
sw v1,0x0(a0)
sw a0,0x0(a1)
jr ra
_addiu sp,sp,0x40
li a1,0x10
addiu a0,s0,0x8
jalr t9
_sw v0,0x28(sp)
lw v1,0x14(s0)
lw a3,0x18(s0)
b 0x00035cd0
_lw v0,0x28(sp)
lbu a1,0x30(s0)
li a2,0x1
ins a1,a2,0x6,0x1
b 0x00035ce0
_sb a1,0x30(s0)
(translation_unit "undefined * hash_insert(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  uint uVar6;\n  undefined4 local_20;\n  undefined4 *local_1c;\n  undefined *local_18;\n  \n  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);\n  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);\n  if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  uVar6 = *(uint *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x14);\n  if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }\n  puVar5 = *(undefined4 **)(param_1 + 0x10);\n  puVar3 = (undefined4 *)(iVar2 + 0x10);\n  *(undefined4 **)(param_1 + 0x14) = puVar3;\n  if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }\n  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);\n  *(uint *)(param_1 + 0x14) = uVar4;\n  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }\n  *(uint *)(param_1 + 0x10) = uVar4;\n  puVar5[3] = param_3;\n  puVar5[2] = local_20;\n  puVar5[1] = param_2;\n  *puVar5 = *local_1c;\n  *local_1c = puVar5;\n  return local_18;\n}\n\n" (function_definition "undefined * hash_insert(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  uint uVar6;\n  undefined4 local_20;\n  undefined4 *local_1c;\n  undefined *local_18;\n  \n  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);\n  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);\n  if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  uVar6 = *(uint *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x14);\n  if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }\n  puVar5 = *(undefined4 **)(param_1 + 0x10);\n  puVar3 = (undefined4 *)(iVar2 + 0x10);\n  *(undefined4 **)(param_1 + 0x14) = puVar3;\n  if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }\n  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);\n  *(uint *)(param_1 + 0x14) = uVar4;\n  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }\n  *(uint *)(param_1 + 0x10) = uVar4;\n  puVar5[3] = param_3;\n  puVar5[2] = local_20;\n  puVar5[1] = param_2;\n  *puVar5 = *local_1c;\n  *local_1c = puVar5;\n  return local_18;\n}" type_identifier (pointer_declarator "* hash_insert(int param_1,undefined4 param_2,undefined4 param_3)" * (function_declarator "hash_insert(int param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) )))) (compound_statement "{\n  undefined4 uVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  uint uVar6;\n  undefined4 local_20;\n  undefined4 *local_1c;\n  undefined *local_18;\n  \n  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);\n  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);\n  if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  uVar6 = *(uint *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x14);\n  if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }\n  puVar5 = *(undefined4 **)(param_1 + 0x10);\n  puVar3 = (undefined4 *)(iVar2 + 0x10);\n  *(undefined4 **)(param_1 + 0x14) = puVar3;\n  if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }\n  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);\n  *(uint *)(param_1 + 0x14) = uVar4;\n  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }\n  *(uint *)(param_1 + 0x10) = uVar4;\n  puVar5[3] = param_3;\n  puVar5[2] = local_20;\n  puVar5[1] = param_2;\n  *puVar5 = *local_1c;\n  *local_1c = puVar5;\n  return local_18;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "undefined4 local_20;" type_identifier identifier ;) (declaration "undefined4 *local_1c;" type_identifier (pointer_declarator "*local_1c" * identifier) ;) (declaration "undefined *local_18;" type_identifier (pointer_declarator "*local_18" * identifier) ;) (expression_statement "uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);" (assignment_expression "uVar1 = (*(code *)PTR_strlen_000b6678)(param_2)" identifier = (call_expression "(*(code *)PTR_strlen_000b6678)(param_2)" (parenthesized_expression "(*(code *)PTR_strlen_000b6678)" ( (pointer_expression "*(code *)PTR_strlen_000b6678" * (cast_expression "(code *)PTR_strlen_000b6678" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);" (assignment_expression "local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" identifier = (cast_expression "(undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" identifier (argument_list "(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" ( identifier , (binary_expression "param_1 + 4" identifier + number_literal) , identifier , identifier , (pointer_expression "&local_1c" & identifier) , (pointer_expression "&local_20" & identifier) ))))) ;) (if_statement "if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }" if (parenthesized_expression "(local_18 != (undefined *)0x0)" ( (binary_expression "local_18 != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }" { (return_statement "return PTR_LAB_000b5cb8 + 0x68f0;" return (binary_expression "PTR_LAB_000b5cb8 + 0x68f0" identifier + number_literal) ;) })) (expression_statement "uVar6 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar6 = *(uint *)(param_1 + 0x18)" identifier = (pointer_expression "*(uint *)(param_1 + 0x18)" * (cast_expression "(uint *)(param_1 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (if_statement "if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }" if (parenthesized_expression "(uVar6 - iVar2 < 0x10)" ( (binary_expression "uVar6 - iVar2 < 0x10" (binary_expression "uVar6 - iVar2" identifier - identifier) < number_literal) )) (compound_statement "{\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }" { (expression_statement "(*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);" (call_expression "(*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10)" (parenthesized_expression "(*(code *)PTR__obstack_newchunk_000b6758)" ( (pointer_expression "*(code *)PTR__obstack_newchunk_000b6758" * (cast_expression "(code *)PTR__obstack_newchunk_000b6758" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1 + 8,0x10)" ( (binary_expression "param_1 + 8" identifier + number_literal) , number_literal ))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar6 = *(uint *)(param_1 + 0x18)" identifier = (pointer_expression "*(uint *)(param_1 + 0x18)" * (cast_expression "(uint *)(param_1 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) })) (expression_statement "puVar5 = *(undefined4 **)(param_1 + 0x10);" (assignment_expression "puVar5 = *(undefined4 **)(param_1 + 0x10)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x10)" * (cast_expression "(undefined4 **)(param_1 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "puVar3 = (undefined4 *)(iVar2 + 0x10);" (assignment_expression "puVar3 = (undefined4 *)(iVar2 + 0x10)" identifier = (cast_expression "(undefined4 *)(iVar2 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) ;) (expression_statement "*(undefined4 **)(param_1 + 0x14) = puVar3;" (assignment_expression "*(undefined4 **)(param_1 + 0x14) = puVar3" (pointer_expression "*(undefined4 **)(param_1 + 0x14)" * (cast_expression "(undefined4 **)(param_1 + 0x14)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = identifier) ;) (if_statement "if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }" if (parenthesized_expression "(puVar3 == puVar5)" ( (binary_expression "puVar3 == puVar5" identifier == identifier) )) (compound_statement "{\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }" { (expression_statement "*(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;" (assignment_expression "*(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40" (pointer_expression "*(byte *)(param_1 + 0x30)" * (cast_expression "(byte *)(param_1 + 0x30)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 0x30) & 0xbf | 0x40" (binary_expression "*(byte *)(param_1 + 0x30) & 0xbf" (pointer_expression "*(byte *)(param_1 + 0x30)" * (cast_expression "(byte *)(param_1 + 0x30)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) & number_literal) | number_literal)) ;) })) (expression_statement "uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);" (assignment_expression "uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20)" identifier = (binary_expression "(int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20)" (binary_expression "(int)puVar3 + *(uint *)(param_1 + 0x20)" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(uint *)(param_1 + 0x20)" * (cast_expression "(uint *)(param_1 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) & (unary_expression "~*(uint *)(param_1 + 0x20)" ~ (pointer_expression "*(uint *)(param_1 + 0x20)" * (cast_expression "(uint *)(param_1 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))))) ;) (expression_statement "*(uint *)(param_1 + 0x14) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }" if (parenthesized_expression "(uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc))" ( (binary_expression "uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)" (binary_expression "uVar6 - *(int *)(param_1 + 0xc)" identifier - (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) < (binary_expression "uVar4 - *(int *)(param_1 + 0xc)" identifier - (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))))) )) (compound_statement "{\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }" { (expression_statement "*(uint *)(param_1 + 0x14) = uVar6;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar6" (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = uVar6;" (assignment_expression "uVar4 = uVar6" identifier = identifier) ;) })) (expression_statement "*(uint *)(param_1 + 0x10) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x10) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x10)" * (cast_expression "(uint *)(param_1 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar5[3] = param_3;" (assignment_expression "puVar5[3] = param_3" (subscript_expression "puVar5[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[2] = local_20;" (assignment_expression "puVar5[2] = local_20" (subscript_expression "puVar5[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[1] = param_2;" (assignment_expression "puVar5[1] = param_2" (subscript_expression "puVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*puVar5 = *local_1c;" (assignment_expression "*puVar5 = *local_1c" (pointer_expression "*puVar5" * identifier) = (pointer_expression "*local_1c" * identifier)) ;) (expression_statement "*local_1c = puVar5;" (assignment_expression "*local_1c = puVar5" (pointer_expression "*local_1c" * identifier) = identifier) ;) (return_statement "return local_18;" return identifier ;) })))
(translation_unit "char * hash_insert(hash_control *table,char *key,void *val)\n\n{\n  hash_entry ***plist;\n  char *pcVar1;\n  hash_entry *phVar2;\n  hash_entry *phVar3;\n  _obstack_chunk *p_Var4;\n  uint uVar5;\n  char *pcVar6;\n  ulong hash;\n  hash_entry **list;\n  hash_entry *phStack_18;\n  \n  plist = (hash_entry ***)(*(code *)PTR_strlen_000b6678)(key);\n  phStack_18 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                           (hash_control *)&hash);\n  if (phStack_18 != (hash_entry *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  pcVar6 = (table->memory).chunk_limit;\n  pcVar1 = (table->memory).next_free;\n  if ((uint)((int)pcVar6 - (int)pcVar1) < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10);\n    pcVar1 = (table->memory).next_free;\n    pcVar6 = (table->memory).chunk_limit;\n  }\n  phVar3 = (hash_entry *)(table->memory).object_base;\n  phVar2 = (hash_entry *)(pcVar1 + 0x10);\n  (table->memory).next_free = (char *)phVar2;\n  if (phVar2 == phVar3) {\n    (table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40;\n  }\n  uVar5 = (table->memory).alignment_mask;\n  p_Var4 = (table->memory).chunk;\n  pcVar1 = (char *)((uint)((int)&phVar2->next + uVar5) & ~uVar5);\n  (table->memory).next_free = pcVar1;\n  if ((uint)((int)pcVar6 - (int)p_Var4) < (uint)((int)pcVar1 - (int)p_Var4)) {\n    (table->memory).next_free = pcVar6;\n    pcVar1 = pcVar6;\n  }\n  (table->memory).object_base = pcVar1;\n  phVar3->data = val;\n  phVar3->hash = hash;\n  phVar3->string = key;\n  phVar3->next = *list;\n  *list = phVar3;\n  return (char *)phStack_18;\n}\n\n" (function_definition "char * hash_insert(hash_control *table,char *key,void *val)\n\n{\n  hash_entry ***plist;\n  char *pcVar1;\n  hash_entry *phVar2;\n  hash_entry *phVar3;\n  _obstack_chunk *p_Var4;\n  uint uVar5;\n  char *pcVar6;\n  ulong hash;\n  hash_entry **list;\n  hash_entry *phStack_18;\n  \n  plist = (hash_entry ***)(*(code *)PTR_strlen_000b6678)(key);\n  phStack_18 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                           (hash_control *)&hash);\n  if (phStack_18 != (hash_entry *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  pcVar6 = (table->memory).chunk_limit;\n  pcVar1 = (table->memory).next_free;\n  if ((uint)((int)pcVar6 - (int)pcVar1) < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10);\n    pcVar1 = (table->memory).next_free;\n    pcVar6 = (table->memory).chunk_limit;\n  }\n  phVar3 = (hash_entry *)(table->memory).object_base;\n  phVar2 = (hash_entry *)(pcVar1 + 0x10);\n  (table->memory).next_free = (char *)phVar2;\n  if (phVar2 == phVar3) {\n    (table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40;\n  }\n  uVar5 = (table->memory).alignment_mask;\n  p_Var4 = (table->memory).chunk;\n  pcVar1 = (char *)((uint)((int)&phVar2->next + uVar5) & ~uVar5);\n  (table->memory).next_free = pcVar1;\n  if ((uint)((int)pcVar6 - (int)p_Var4) < (uint)((int)pcVar1 - (int)p_Var4)) {\n    (table->memory).next_free = pcVar6;\n    pcVar1 = pcVar6;\n  }\n  (table->memory).object_base = pcVar1;\n  phVar3->data = val;\n  phVar3->hash = hash;\n  phVar3->string = key;\n  phVar3->next = *list;\n  *list = phVar3;\n  return (char *)phStack_18;\n}" primitive_type (pointer_declarator "* hash_insert(hash_control *table,char *key,void *val)" * (function_declarator "hash_insert(hash_control *table,char *key,void *val)" identifier (parameter_list "(hash_control *table,char *key,void *val)" ( (parameter_declaration "hash_control *table" type_identifier (pointer_declarator "*table" * identifier)) , (parameter_declaration "char *key" primitive_type (pointer_declarator "*key" * identifier)) , (parameter_declaration "void *val" primitive_type (pointer_declarator "*val" * identifier)) )))) (compound_statement "{\n  hash_entry ***plist;\n  char *pcVar1;\n  hash_entry *phVar2;\n  hash_entry *phVar3;\n  _obstack_chunk *p_Var4;\n  uint uVar5;\n  char *pcVar6;\n  ulong hash;\n  hash_entry **list;\n  hash_entry *phStack_18;\n  \n  plist = (hash_entry ***)(*(code *)PTR_strlen_000b6678)(key);\n  phStack_18 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                           (hash_control *)&hash);\n  if (phStack_18 != (hash_entry *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  pcVar6 = (table->memory).chunk_limit;\n  pcVar1 = (table->memory).next_free;\n  if ((uint)((int)pcVar6 - (int)pcVar1) < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10);\n    pcVar1 = (table->memory).next_free;\n    pcVar6 = (table->memory).chunk_limit;\n  }\n  phVar3 = (hash_entry *)(table->memory).object_base;\n  phVar2 = (hash_entry *)(pcVar1 + 0x10);\n  (table->memory).next_free = (char *)phVar2;\n  if (phVar2 == phVar3) {\n    (table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40;\n  }\n  uVar5 = (table->memory).alignment_mask;\n  p_Var4 = (table->memory).chunk;\n  pcVar1 = (char *)((uint)((int)&phVar2->next + uVar5) & ~uVar5);\n  (table->memory).next_free = pcVar1;\n  if ((uint)((int)pcVar6 - (int)p_Var4) < (uint)((int)pcVar1 - (int)p_Var4)) {\n    (table->memory).next_free = pcVar6;\n    pcVar1 = pcVar6;\n  }\n  (table->memory).object_base = pcVar1;\n  phVar3->data = val;\n  phVar3->hash = hash;\n  phVar3->string = key;\n  phVar3->next = *list;\n  *list = phVar3;\n  return (char *)phStack_18;\n}" { (declaration "hash_entry ***plist;" type_identifier (pointer_declarator "***plist" * (pointer_declarator "**plist" * (pointer_declarator "*plist" * identifier))) ;) (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "hash_entry *phVar2;" type_identifier (pointer_declarator "*phVar2" * identifier) ;) (declaration "hash_entry *phVar3;" type_identifier (pointer_declarator "*phVar3" * identifier) ;) (declaration "_obstack_chunk *p_Var4;" type_identifier (pointer_declarator "*p_Var4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "ulong hash;" type_identifier identifier ;) (declaration "hash_entry **list;" type_identifier (pointer_declarator "**list" * (pointer_declarator "*list" * identifier)) ;) (declaration "hash_entry *phStack_18;" type_identifier (pointer_declarator "*phStack_18" * identifier) ;) (expression_statement "plist = (hash_entry ***)(*(code *)PTR_strlen_000b6678)(key);" (assignment_expression "plist = (hash_entry ***)(*(code *)PTR_strlen_000b6678)(key)" identifier = (cast_expression "(hash_entry ***)(*(code *)PTR_strlen_000b6678)(key)" ( (type_descriptor "hash_entry ***" type_identifier (abstract_pointer_declarator "***" * (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *)))) ) (call_expression "(*(code *)PTR_strlen_000b6678)(key)" (parenthesized_expression "(*(code *)PTR_strlen_000b6678)" ( (pointer_expression "*(code *)PTR_strlen_000b6678" * (cast_expression "(code *)PTR_strlen_000b6678" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(key)" ( identifier ))))) ;) (expression_statement "phStack_18 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                           (hash_control *)&hash);" (assignment_expression "phStack_18 = hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                           (hash_control *)&hash)" identifier = (call_expression "hash_lookup(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                           (hash_control *)&hash)" identifier (argument_list "(table,(char *)&table->size,(size_t)key,plist,(ulong *)&list,\n                           (hash_control *)&hash)" ( identifier , (cast_expression "(char *)&table->size" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&table->size" & (field_expression "table->size" identifier -> field_identifier))) , (cast_expression "(size_t)key" ( (type_descriptor "size_t" primitive_type) ) identifier) , identifier , (cast_expression "(ulong *)&list" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&list" & identifier)) , (cast_expression "(hash_control *)&hash" ( (type_descriptor "hash_control *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&hash" & identifier)) )))) ;) (if_statement "if (phStack_18 != (hash_entry *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }" if (parenthesized_expression "(phStack_18 != (hash_entry *)0x0)" ( (binary_expression "phStack_18 != (hash_entry *)0x0" identifier != (cast_expression "(hash_entry *)0x0" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }" { (return_statement "return PTR_LAB_000b5cb8 + 0x68f0;" return (binary_expression "PTR_LAB_000b5cb8 + 0x68f0" identifier + number_literal) ;) })) (expression_statement "pcVar6 = (table->memory).chunk_limit;" (assignment_expression "pcVar6 = (table->memory).chunk_limit" identifier = (field_expression "(table->memory).chunk_limit" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar1 = (table->memory).next_free;" (assignment_expression "pcVar1 = (table->memory).next_free" identifier = (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if ((uint)((int)pcVar6 - (int)pcVar1) < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10);\n    pcVar1 = (table->memory).next_free;\n    pcVar6 = (table->memory).chunk_limit;\n  }" if (parenthesized_expression "((uint)((int)pcVar6 - (int)pcVar1) < 0x10)" ( (binary_expression "(uint)((int)pcVar6 - (int)pcVar1) < 0x10" (call_expression "(uint)((int)pcVar6 - (int)pcVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)pcVar6 - (int)pcVar1)" ( (binary_expression "(int)pcVar6 - (int)pcVar1" (cast_expression "(int)pcVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < number_literal) )) (compound_statement "{\n    (*(code *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10);\n    pcVar1 = (table->memory).next_free;\n    pcVar6 = (table->memory).chunk_limit;\n  }" { (expression_statement "(*(code *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10);" (call_expression "(*(code *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10)" (parenthesized_expression "(*(code *)PTR__obstack_newchunk_000b6758)" ( (pointer_expression "*(code *)PTR__obstack_newchunk_000b6758" * (cast_expression "(code *)PTR__obstack_newchunk_000b6758" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(&table->memory,0x10)" ( (pointer_expression "&table->memory" & (field_expression "table->memory" identifier -> field_identifier)) , number_literal ))) ;) (expression_statement "pcVar1 = (table->memory).next_free;" (assignment_expression "pcVar1 = (table->memory).next_free" identifier = (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar6 = (table->memory).chunk_limit;" (assignment_expression "pcVar6 = (table->memory).chunk_limit" identifier = (field_expression "(table->memory).chunk_limit" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) })) (expression_statement "phVar3 = (hash_entry *)(table->memory).object_base;" (assignment_expression "phVar3 = (hash_entry *)(table->memory).object_base" identifier = (cast_expression "(hash_entry *)(table->memory).object_base" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(table->memory).object_base" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "phVar2 = (hash_entry *)(pcVar1 + 0x10);" (assignment_expression "phVar2 = (hash_entry *)(pcVar1 + 0x10)" identifier = (cast_expression "(hash_entry *)(pcVar1 + 0x10)" ( (type_descriptor "hash_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x10)" ( (binary_expression "pcVar1 + 0x10" identifier + number_literal) )))) ;) (expression_statement "(table->memory).next_free = (char *)phVar2;" (assignment_expression "(table->memory).next_free = (char *)phVar2" (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(char *)phVar2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (phVar2 == phVar3) {\n    (table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40;\n  }" if (parenthesized_expression "(phVar2 == phVar3)" ( (binary_expression "phVar2 == phVar3" identifier == identifier) )) (compound_statement "{\n    (table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40;\n  }" { (expression_statement "(table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40;" (assignment_expression "(table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40" (field_expression "(table->memory).field_0x28" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = (binary_expression "(table->memory).field_0x28 & 0xbf | 0x40" (binary_expression "(table->memory).field_0x28 & 0xbf" (field_expression "(table->memory).field_0x28" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) & number_literal) | number_literal)) ;) })) (expression_statement "uVar5 = (table->memory).alignment_mask;" (assignment_expression "uVar5 = (table->memory).alignment_mask" identifier = (field_expression "(table->memory).alignment_mask" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "p_Var4 = (table->memory).chunk;" (assignment_expression "p_Var4 = (table->memory).chunk" identifier = (field_expression "(table->memory).chunk" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "pcVar1 = (char *)((uint)((int)&phVar2->next + uVar5) & ~uVar5);" (assignment_expression "pcVar1 = (char *)((uint)((int)&phVar2->next + uVar5) & ~uVar5)" identifier = (cast_expression "(char *)((uint)((int)&phVar2->next + uVar5) & ~uVar5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)((int)&phVar2->next + uVar5) & ~uVar5)" ( (binary_expression "(uint)((int)&phVar2->next + uVar5) & ~uVar5" (call_expression "(uint)((int)&phVar2->next + uVar5)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)&phVar2->next + uVar5)" ( (binary_expression "(int)&phVar2->next + uVar5" (cast_expression "(int)&phVar2->next" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&phVar2->next" & (field_expression "phVar2->next" identifier -> field_identifier))) + identifier) ))) & (unary_expression "~uVar5" ~ identifier)) )))) ;) (expression_statement "(table->memory).next_free = pcVar1;" (assignment_expression "(table->memory).next_free = pcVar1" (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (if_statement "if ((uint)((int)pcVar6 - (int)p_Var4) < (uint)((int)pcVar1 - (int)p_Var4)) {\n    (table->memory).next_free = pcVar6;\n    pcVar1 = pcVar6;\n  }" if (parenthesized_expression "((uint)((int)pcVar6 - (int)p_Var4) < (uint)((int)pcVar1 - (int)p_Var4))" ( (binary_expression "(uint)((int)pcVar6 - (int)p_Var4) < (uint)((int)pcVar1 - (int)p_Var4)" (call_expression "(uint)((int)pcVar6 - (int)p_Var4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)pcVar6 - (int)p_Var4)" ( (binary_expression "(int)pcVar6 - (int)p_Var4" (cast_expression "(int)pcVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)p_Var4" ( (type_descriptor "int" primitive_type) ) identifier)) ))) < (call_expression "(uint)((int)pcVar1 - (int)p_Var4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)pcVar1 - (int)p_Var4)" ( (binary_expression "(int)pcVar1 - (int)p_Var4" (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)p_Var4" ( (type_descriptor "int" primitive_type) ) identifier)) )))) )) (compound_statement "{\n    (table->memory).next_free = pcVar6;\n    pcVar1 = pcVar6;\n  }" { (expression_statement "(table->memory).next_free = pcVar6;" (assignment_expression "(table->memory).next_free = pcVar6" (field_expression "(table->memory).next_free" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "pcVar1 = pcVar6;" (assignment_expression "pcVar1 = pcVar6" identifier = identifier) ;) })) (expression_statement "(table->memory).object_base = pcVar1;" (assignment_expression "(table->memory).object_base = pcVar1" (field_expression "(table->memory).object_base" (parenthesized_expression "(table->memory)" ( (field_expression "table->memory" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "phVar3->data = val;" (assignment_expression "phVar3->data = val" (field_expression "phVar3->data" identifier -> field_identifier) = identifier) ;) (expression_statement "phVar3->hash = hash;" (assignment_expression "phVar3->hash = hash" (field_expression "phVar3->hash" identifier -> field_identifier) = identifier) ;) (expression_statement "phVar3->string = key;" (assignment_expression "phVar3->string = key" (field_expression "phVar3->string" identifier -> field_identifier) = identifier) ;) (expression_statement "phVar3->next = *list;" (assignment_expression "phVar3->next = *list" (field_expression "phVar3->next" identifier -> field_identifier) = (pointer_expression "*list" * identifier)) ;) (expression_statement "*list = phVar3;" (assignment_expression "*list = phVar3" (pointer_expression "*list" * identifier) = identifier) ;) (return_statement "return (char *)phStack_18;" return (cast_expression "(char *)phStack_18" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) ;) })))
(translation_unit "undefined * hash_insert(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  uint uVar6;\n  undefined4 local_20;\n  undefined4 *local_1c;\n  undefined *local_18;\n  \n  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);\n  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);\n  if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  uVar6 = *(uint *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x14);\n  if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }\n  puVar5 = *(undefined4 **)(param_1 + 0x10);\n  puVar3 = (undefined4 *)(iVar2 + 0x10);\n  *(undefined4 **)(param_1 + 0x14) = puVar3;\n  if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }\n  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);\n  *(uint *)(param_1 + 0x14) = uVar4;\n  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }\n  *(uint *)(param_1 + 0x10) = uVar4;\n  puVar5[3] = param_3;\n  puVar5[2] = local_20;\n  puVar5[1] = param_2;\n  *puVar5 = *local_1c;\n  *local_1c = puVar5;\n  return local_18;\n}\n\n" (function_definition "undefined * hash_insert(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  uint uVar6;\n  undefined4 local_20;\n  undefined4 *local_1c;\n  undefined *local_18;\n  \n  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);\n  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);\n  if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  uVar6 = *(uint *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x14);\n  if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }\n  puVar5 = *(undefined4 **)(param_1 + 0x10);\n  puVar3 = (undefined4 *)(iVar2 + 0x10);\n  *(undefined4 **)(param_1 + 0x14) = puVar3;\n  if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }\n  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);\n  *(uint *)(param_1 + 0x14) = uVar4;\n  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }\n  *(uint *)(param_1 + 0x10) = uVar4;\n  puVar5[3] = param_3;\n  puVar5[2] = local_20;\n  puVar5[1] = param_2;\n  *puVar5 = *local_1c;\n  *local_1c = puVar5;\n  return local_18;\n}" type_identifier (pointer_declarator "* hash_insert(int param_1,undefined4 param_2,undefined4 param_3)" * (function_declarator "hash_insert(int param_1,undefined4 param_2,undefined4 param_3)" identifier (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) )))) (compound_statement "{\n  undefined4 uVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  uint uVar6;\n  undefined4 local_20;\n  undefined4 *local_1c;\n  undefined *local_18;\n  \n  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);\n  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);\n  if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  uVar6 = *(uint *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x14);\n  if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }\n  puVar5 = *(undefined4 **)(param_1 + 0x10);\n  puVar3 = (undefined4 *)(iVar2 + 0x10);\n  *(undefined4 **)(param_1 + 0x14) = puVar3;\n  if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }\n  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);\n  *(uint *)(param_1 + 0x14) = uVar4;\n  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }\n  *(uint *)(param_1 + 0x10) = uVar4;\n  puVar5[3] = param_3;\n  puVar5[2] = local_20;\n  puVar5[1] = param_2;\n  *puVar5 = *local_1c;\n  *local_1c = puVar5;\n  return local_18;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "undefined4 local_20;" type_identifier identifier ;) (declaration "undefined4 *local_1c;" type_identifier (pointer_declarator "*local_1c" * identifier) ;) (declaration "undefined *local_18;" type_identifier (pointer_declarator "*local_18" * identifier) ;) (expression_statement "uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);" (assignment_expression "uVar1 = (*(code *)PTR_strlen_000b6678)(param_2)" identifier = (call_expression "(*(code *)PTR_strlen_000b6678)(param_2)" (parenthesized_expression "(*(code *)PTR_strlen_000b6678)" ( (pointer_expression "*(code *)PTR_strlen_000b6678" * (cast_expression "(code *)PTR_strlen_000b6678" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);" (assignment_expression "local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" identifier = (cast_expression "(undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" identifier (argument_list "(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" ( identifier , (binary_expression "param_1 + 4" identifier + number_literal) , identifier , identifier , (pointer_expression "&local_1c" & identifier) , (pointer_expression "&local_20" & identifier) ))))) ;) (if_statement "if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }" if (parenthesized_expression "(local_18 != (undefined *)0x0)" ( (binary_expression "local_18 != (undefined *)0x0" identifier != (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }" { (return_statement "return PTR_LAB_000b5cb8 + 0x68f0;" return (binary_expression "PTR_LAB_000b5cb8 + 0x68f0" identifier + number_literal) ;) })) (expression_statement "uVar6 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar6 = *(uint *)(param_1 + 0x18)" identifier = (pointer_expression "*(uint *)(param_1 + 0x18)" * (cast_expression "(uint *)(param_1 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (if_statement "if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }" if (parenthesized_expression "(uVar6 - iVar2 < 0x10)" ( (binary_expression "uVar6 - iVar2 < 0x10" (binary_expression "uVar6 - iVar2" identifier - identifier) < number_literal) )) (compound_statement "{\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }" { (expression_statement "(*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);" (call_expression "(*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10)" (parenthesized_expression "(*(code *)PTR__obstack_newchunk_000b6758)" ( (pointer_expression "*(code *)PTR__obstack_newchunk_000b6758" * (cast_expression "(code *)PTR__obstack_newchunk_000b6758" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1 + 8,0x10)" ( (binary_expression "param_1 + 8" identifier + number_literal) , number_literal ))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar6 = *(uint *)(param_1 + 0x18)" identifier = (pointer_expression "*(uint *)(param_1 + 0x18)" * (cast_expression "(uint *)(param_1 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) })) (expression_statement "puVar5 = *(undefined4 **)(param_1 + 0x10);" (assignment_expression "puVar5 = *(undefined4 **)(param_1 + 0x10)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x10)" * (cast_expression "(undefined4 **)(param_1 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "puVar3 = (undefined4 *)(iVar2 + 0x10);" (assignment_expression "puVar3 = (undefined4 *)(iVar2 + 0x10)" identifier = (cast_expression "(undefined4 *)(iVar2 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) ;) (expression_statement "*(undefined4 **)(param_1 + 0x14) = puVar3;" (assignment_expression "*(undefined4 **)(param_1 + 0x14) = puVar3" (pointer_expression "*(undefined4 **)(param_1 + 0x14)" * (cast_expression "(undefined4 **)(param_1 + 0x14)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = identifier) ;) (if_statement "if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }" if (parenthesized_expression "(puVar3 == puVar5)" ( (binary_expression "puVar3 == puVar5" identifier == identifier) )) (compound_statement "{\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }" { (expression_statement "*(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;" (assignment_expression "*(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40" (pointer_expression "*(byte *)(param_1 + 0x30)" * (cast_expression "(byte *)(param_1 + 0x30)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 0x30) & 0xbf | 0x40" (binary_expression "*(byte *)(param_1 + 0x30) & 0xbf" (pointer_expression "*(byte *)(param_1 + 0x30)" * (cast_expression "(byte *)(param_1 + 0x30)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) & number_literal) | number_literal)) ;) })) (expression_statement "uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);" (assignment_expression "uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20)" identifier = (binary_expression "(int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20)" (binary_expression "(int)puVar3 + *(uint *)(param_1 + 0x20)" (cast_expression "(int)puVar3" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(uint *)(param_1 + 0x20)" * (cast_expression "(uint *)(param_1 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))) & (unary_expression "~*(uint *)(param_1 + 0x20)" ~ (pointer_expression "*(uint *)(param_1 + 0x20)" * (cast_expression "(uint *)(param_1 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) ))))))) ;) (expression_statement "*(uint *)(param_1 + 0x14) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }" if (parenthesized_expression "(uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc))" ( (binary_expression "uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)" (binary_expression "uVar6 - *(int *)(param_1 + 0xc)" identifier - (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) < (binary_expression "uVar4 - *(int *)(param_1 + 0xc)" identifier - (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))))) )) (compound_statement "{\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }" { (expression_statement "*(uint *)(param_1 + 0x14) = uVar6;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar6" (pointer_expression "*(uint *)(param_1 + 0x14)" * (cast_expression "(uint *)(param_1 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = uVar6;" (assignment_expression "uVar4 = uVar6" identifier = identifier) ;) })) (expression_statement "*(uint *)(param_1 + 0x10) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x10) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x10)" * (cast_expression "(uint *)(param_1 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "puVar5[3] = param_3;" (assignment_expression "puVar5[3] = param_3" (subscript_expression "puVar5[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[2] = local_20;" (assignment_expression "puVar5[2] = local_20" (subscript_expression "puVar5[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[1] = param_2;" (assignment_expression "puVar5[1] = param_2" (subscript_expression "puVar5[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*puVar5 = *local_1c;" (assignment_expression "*puVar5 = *local_1c" (pointer_expression "*puVar5" * identifier) = (pointer_expression "*local_1c" * identifier)) ;) (expression_statement "*local_1c = puVar5;" (assignment_expression "*local_1c = puVar5" (pointer_expression "*local_1c" * identifier) = identifier) ;) (return_statement "return local_18;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , IDENT , IDENT , (pointer_expression & IDENT) , (pointer_expression & IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (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 IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) < LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) , 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 IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (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 * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (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 (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) & (unary_expression ~ (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) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + 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) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_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 (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return IDENT ;) })))
(function_definition "undefined * hash_insert(int param_1,undefined4 param_2,undefined4 param_3)\n\n{\n  undefined4 uVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  uint uVar6;\n  undefined4 local_20;\n  undefined4 *local_1c;\n  undefined *local_18;\n  \n  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);\n  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);\n  if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  uVar6 = *(uint *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x14);\n  if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }\n  puVar5 = *(undefined4 **)(param_1 + 0x10);\n  puVar3 = (undefined4 *)(iVar2 + 0x10);\n  *(undefined4 **)(param_1 + 0x14) = puVar3;\n  if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }\n  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);\n  *(uint *)(param_1 + 0x14) = uVar4;\n  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }\n  *(uint *)(param_1 + 0x10) = uVar4;\n  puVar5[3] = param_3;\n  puVar5[2] = local_20;\n  puVar5[1] = param_2;\n  *puVar5 = *local_1c;\n  *local_1c = puVar5;\n  return local_18;\n}" (type_identifier "undefined") (pointer_declarator "* hash_insert(int param_1,undefined4 param_2,undefined4 param_3)" (* "*") (function_declarator "hash_insert(int param_1,undefined4 param_2,undefined4 param_3)" (identifier "hash_insert") (parameter_list "(int param_1,undefined4 param_2,undefined4 param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) () ")")))) (compound_statement "{\n  undefined4 uVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  uint uVar6;\n  undefined4 local_20;\n  undefined4 *local_1c;\n  undefined *local_18;\n  \n  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);\n  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);\n  if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }\n  uVar6 = *(uint *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x14);\n  if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }\n  puVar5 = *(undefined4 **)(param_1 + 0x10);\n  puVar3 = (undefined4 *)(iVar2 + 0x10);\n  *(undefined4 **)(param_1 + 0x14) = puVar3;\n  if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }\n  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);\n  *(uint *)(param_1 + 0x14) = uVar4;\n  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }\n  *(uint *)(param_1 + 0x10) = uVar4;\n  puVar5[3] = param_3;\n  puVar5[2] = local_20;\n  puVar5[1] = param_2;\n  *puVar5 = *local_1c;\n  *local_1c = puVar5;\n  return local_18;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "undefined4 local_20;" (type_identifier "undefined4") (identifier "local_20") (; ";")) (declaration "undefined4 *local_1c;" (type_identifier "undefined4") (pointer_declarator "*local_1c" (* "*") (identifier "local_1c")) (; ";")) (declaration "undefined *local_18;" (type_identifier "undefined") (pointer_declarator "*local_18" (* "*") (identifier "local_18")) (; ";")) (expression_statement "uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);" (assignment_expression "uVar1 = (*(code *)PTR_strlen_000b6678)(param_2)" (identifier "uVar1") (= "=") (call_expression "(*(code *)PTR_strlen_000b6678)(param_2)" (parenthesized_expression "(*(code *)PTR_strlen_000b6678)" (( "(") (pointer_expression "*(code *)PTR_strlen_000b6678" (* "*") (cast_expression "(code *)PTR_strlen_000b6678" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_strlen_000b6678"))) () ")")) (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (expression_statement "local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);" (assignment_expression "local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" (identifier "local_18") (= "=") (cast_expression "(undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" (identifier "FUN_000358e0") (argument_list "(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) (, ",") (identifier "param_2") (, ",") (identifier "uVar1") (, ",") (pointer_expression "&local_1c" (& "&") (identifier "local_1c")) (, ",") (pointer_expression "&local_20" (& "&") (identifier "local_20")) () ")"))))) (; ";")) (if_statement "if (local_18 != (undefined *)0x0) {\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }" (if "if") (parenthesized_expression "(local_18 != (undefined *)0x0)" (( "(") (binary_expression "local_18 != (undefined *)0x0" (identifier "local_18") (!= "!=") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return PTR_LAB_000b5cb8 + 0x68f0;\n  }" ({ "{") (return_statement "return PTR_LAB_000b5cb8 + 0x68f0;" (return "return") (binary_expression "PTR_LAB_000b5cb8 + 0x68f0" (identifier "PTR_LAB_000b5cb8") (+ "+") (number_literal "0x68f0")) (; ";")) (} "}"))) (expression_statement "uVar6 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar6 = *(uint *)(param_1 + 0x18)" (identifier "uVar6") (= "=") (pointer_expression "*(uint *)(param_1 + 0x18)" (* "*") (cast_expression "(uint *)(param_1 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x14)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (if_statement "if (uVar6 - iVar2 < 0x10) {\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }" (if "if") (parenthesized_expression "(uVar6 - iVar2 < 0x10)" (( "(") (binary_expression "uVar6 - iVar2 < 0x10" (binary_expression "uVar6 - iVar2" (identifier "uVar6") (- "-") (identifier "iVar2")) (< "<") (number_literal "0x10")) () ")")) (compound_statement "{\n    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);\n    iVar2 = *(int *)(param_1 + 0x14);\n    uVar6 = *(uint *)(param_1 + 0x18);\n  }" ({ "{") (expression_statement "(*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);" (call_expression "(*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10)" (parenthesized_expression "(*(code *)PTR__obstack_newchunk_000b6758)" (( "(") (pointer_expression "*(code *)PTR__obstack_newchunk_000b6758" (* "*") (cast_expression "(code *)PTR__obstack_newchunk_000b6758" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR__obstack_newchunk_000b6758"))) () ")")) (argument_list "(param_1 + 8,0x10)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) (, ",") (number_literal "0x10") () ")"))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar2 = *(int *)(param_1 + 0x14)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "uVar6 = *(uint *)(param_1 + 0x18);" (assignment_expression "uVar6 = *(uint *)(param_1 + 0x18)" (identifier "uVar6") (= "=") (pointer_expression "*(uint *)(param_1 + 0x18)" (* "*") (cast_expression "(uint *)(param_1 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}"))) (expression_statement "puVar5 = *(undefined4 **)(param_1 + 0x10);" (assignment_expression "puVar5 = *(undefined4 **)(param_1 + 0x10)" (identifier "puVar5") (= "=") (pointer_expression "*(undefined4 **)(param_1 + 0x10)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x10)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "puVar3 = (undefined4 *)(iVar2 + 0x10);" (assignment_expression "puVar3 = (undefined4 *)(iVar2 + 0x10)" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)(iVar2 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x10)" (( "(") (binary_expression "iVar2 + 0x10" (identifier "iVar2") (+ "+") (number_literal "0x10")) () ")")))) (; ";")) (expression_statement "*(undefined4 **)(param_1 + 0x14) = puVar3;" (assignment_expression "*(undefined4 **)(param_1 + 0x14) = puVar3" (pointer_expression "*(undefined4 **)(param_1 + 0x14)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x14)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "puVar3")) (; ";")) (if_statement "if (puVar3 == puVar5) {\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }" (if "if") (parenthesized_expression "(puVar3 == puVar5)" (( "(") (binary_expression "puVar3 == puVar5" (identifier "puVar3") (== "==") (identifier "puVar5")) () ")")) (compound_statement "{\n    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;\n  }" ({ "{") (expression_statement "*(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;" (assignment_expression "*(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40" (pointer_expression "*(byte *)(param_1 + 0x30)" (* "*") (cast_expression "(byte *)(param_1 + 0x30)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (binary_expression "*(byte *)(param_1 + 0x30) & 0xbf | 0x40" (binary_expression "*(byte *)(param_1 + 0x30) & 0xbf" (pointer_expression "*(byte *)(param_1 + 0x30)" (* "*") (cast_expression "(byte *)(param_1 + 0x30)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (& "&") (number_literal "0xbf")) (| "|") (number_literal "0x40"))) (; ";")) (} "}"))) (expression_statement "uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);" (assignment_expression "uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20)" (identifier "uVar4") (= "=") (binary_expression "(int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20)" (binary_expression "(int)puVar3 + *(uint *)(param_1 + 0x20)" (cast_expression "(int)puVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar3")) (+ "+") (pointer_expression "*(uint *)(param_1 + 0x20)" (* "*") (cast_expression "(uint *)(param_1 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))) (& "&") (unary_expression "~*(uint *)(param_1 + 0x20)" (~ "~") (pointer_expression "*(uint *)(param_1 + 0x20)" (* "*") (cast_expression "(uint *)(param_1 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")"))))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x14) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x14)" (* "*") (cast_expression "(uint *)(param_1 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }" (if "if") (parenthesized_expression "(uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc))" (( "(") (binary_expression "uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)" (binary_expression "uVar6 - *(int *)(param_1 + 0xc)" (identifier "uVar6") (- "-") (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (< "<") (binary_expression "uVar4 - *(int *)(param_1 + 0xc)" (identifier "uVar4") (- "-") (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))))) () ")")) (compound_statement "{\n    *(uint *)(param_1 + 0x14) = uVar6;\n    uVar4 = uVar6;\n  }" ({ "{") (expression_statement "*(uint *)(param_1 + 0x14) = uVar6;" (assignment_expression "*(uint *)(param_1 + 0x14) = uVar6" (pointer_expression "*(uint *)(param_1 + 0x14)" (* "*") (cast_expression "(uint *)(param_1 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar4 = uVar6;" (assignment_expression "uVar4 = uVar6" (identifier "uVar4") (= "=") (identifier "uVar6")) (; ";")) (} "}"))) (expression_statement "*(uint *)(param_1 + 0x10) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x10) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x10)" (* "*") (cast_expression "(uint *)(param_1 + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar5[3] = param_3;" (assignment_expression "puVar5[3] = param_3" (subscript_expression "puVar5[3]" (identifier "puVar5") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "puVar5[2] = local_20;" (assignment_expression "puVar5[2] = local_20" (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "local_20")) (; ";")) (expression_statement "puVar5[1] = param_2;" (assignment_expression "puVar5[1] = param_2" (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "*puVar5 = *local_1c;" (assignment_expression "*puVar5 = *local_1c" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (pointer_expression "*local_1c" (* "*") (identifier "local_1c"))) (; ";")) (expression_statement "*local_1c = puVar5;" (assignment_expression "*local_1c = puVar5" (pointer_expression "*local_1c" (* "*") (identifier "local_1c")) (= "=") (identifier "puVar5")) (; ";")) (return_statement "return local_18;" (return "return") (identifier "local_18") (; ";")) (} "}")))

char * function_1(type_1 *table,char *key,void *val)

{
  type_2 ***plist;
  char *var_4;
  type_2 *var_5;
  type_2 *var_6;
  type_3 *p_Var4;
  type_4 var_7;
  char *pcVar6;
  type_5 hash;
  type_2 **list;
  type_2 *var_2;
  
  plist = (type_2 ***)(*(type_6 *)PTR_strlen_000b6678)(key);
  var_2 = var_1(table,(char *)&table->size,(size_t)key,plist,(type_5 *)&list,
                           (type_1 *)&hash);
  if (var_2 != (type_2 *)0x0) {
    return var_3 + 0x68f0;
  }
  pcVar6 = (table->memory).chunk_limit;
  var_4 = (table->memory).next_free;
  if ((type_4)((int)pcVar6 - (int)var_4) < 0x10) {
    (*(type_6 *)PTR__obstack_newchunk_000b6758)(&table->memory,0x10);
    var_4 = (table->memory).next_free;
    pcVar6 = (table->memory).chunk_limit;
  }
  var_6 = (type_2 *)(table->memory).object_base;
  var_5 = (type_2 *)(var_4 + 0x10);
  (table->memory).next_free = (char *)var_5;
  if (var_5 == var_6) {
    (table->memory).field_0x28 = (table->memory).field_0x28 & 0xbf | 0x40;
  }
  var_7 = (table->memory).alignment_mask;
  p_Var4 = (table->memory).chunk;
  var_4 = (char *)((type_4)((int)&var_5->next + var_7) & ~var_7);
  (table->memory).next_free = var_4;
  if ((type_4)((int)pcVar6 - (int)p_Var4) < (type_4)((int)var_4 - (int)p_Var4)) {
    (table->memory).next_free = pcVar6;
    var_4 = pcVar6;
  }
  (table->memory).object_base = var_4;
  var_6->data = val;
  var_6->hash = hash;
  var_6->string = key;
  var_6->next = *list;
  *list = var_6;
  return (char *)var_2;
}


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

undefined * MASKED(int param_1,undefined4 param_2,undefined4 param_3)

{
  undefined4 uVar1;
  int iVar2;
  undefined4 *puVar3;
  uint uVar4;
  undefined4 *puVar5;
  uint uVar6;
  undefined4 local_20;
  undefined4 *local_1c;
  undefined *local_18;
  
  uVar1 = (*(code *)PTR_strlen_000b6678)(param_2);
  local_18 = (undefined *)FUN_000358e0(param_1,param_1 + 4,param_2,uVar1,&local_1c,&local_20);
  if (local_18 != (undefined *)0x0) {
    return PTR_LAB_000b5cb8 + 0x68f0;
  }
  uVar6 = *(uint *)(param_1 + 0x18);
  iVar2 = *(int *)(param_1 + 0x14);
  if (uVar6 - iVar2 < 0x10) {
    (*(code *)PTR__obstack_newchunk_000b6758)(param_1 + 8,0x10);
    iVar2 = *(int *)(param_1 + 0x14);
    uVar6 = *(uint *)(param_1 + 0x18);
  }
  puVar5 = *(undefined4 **)(param_1 + 0x10);
  puVar3 = (undefined4 *)(iVar2 + 0x10);
  *(undefined4 **)(param_1 + 0x14) = puVar3;
  if (puVar3 == puVar5) {
    *(byte *)(param_1 + 0x30) = *(byte *)(param_1 + 0x30) & 0xbf | 0x40;
  }
  uVar4 = (int)puVar3 + *(uint *)(param_1 + 0x20) & ~*(uint *)(param_1 + 0x20);
  *(uint *)(param_1 + 0x14) = uVar4;
  if (uVar6 - *(int *)(param_1 + 0xc) < uVar4 - *(int *)(param_1 + 0xc)) {
    *(uint *)(param_1 + 0x14) = uVar6;
    uVar4 = uVar6;
  }
  *(uint *)(param_1 + 0x10) = uVar4;
  puVar5[3] = param_3;
  puVar5[2] = local_20;
  puVar5[1] = param_2;
  *puVar5 = *local_1c;
  *local_1c = puVar5;
  return local_18;
}

