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

void copy_relocations_in_section(bfd *ibfd,sec_ptr isection,void *obfdarg)

{
  reloc_cache_entry **pprVar1;
  bfd_section *pbVar2;
  bfd_symbol *pbVar3;
  bfd_boolean bVar4;
  section_list *psVar5;
  int iVar6;
  code *pcVar7;
  reloc_cache_entry **pprVar8;
  char *format;
  reloc_cache_entry **pprVar9;
  uint uVar10;
  uint local_2c;
  reloc_cache_entry **local_28;
  
  bVar4 = skip_section(ibfd,isection,0);
  if (bVar4 != 0) {
    return;
  }
  pbVar2 = isection->output_section;
  if ((((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO)) ||
     (psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0)) {
LAB_00018554:
    (**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);
    pbVar2->flags = pbVar2->flags & 0xfffffffb;
    return;
  }
  iVar6 = bfd_get_reloc_upper_bound(ibfd,isection);
  if (iVar6 < 0) {
    if ((iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5)) {
      status = 1;
      bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);
      return;
    }
    goto LAB_00018554;
  }
  if (iVar6 == 0) goto LAB_00018554;
  local_28 = isection->orelocation;
  if (local_28 == (reloc_cache_entry **)0x0) {
    local_28 = (reloc_cache_entry **)xmalloc(iVar6);
    local_2c = bfd_canonicalize_reloc(ibfd,isection,local_28,isympp);
    if ((int)local_2c < 0) {
      status = 1;
      format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);
      bfd_nonfatal_message((char *)0x0,ibfd,isection,format);
      return;
    }
  }
  else {
    local_2c = isection->reloc_count;
  }
  pprVar8 = local_28;
  if (strip_symbols == STRIP_ALL) {
    pprVar8 = (reloc_cache_entry **)xmalloc(iVar6);
    if ((int)local_2c < 1) {
      if (isection->orelocation == (reloc_cache_entry **)0x0) {
        free(local_28);
        local_2c = 0;
        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);
        local_28 = pprVar8;
      }
      else {
        local_2c = 0;
        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);
        local_28 = pprVar8;
      }
      goto LAB_000185c3;
    }
    pprVar1 = local_28 + local_2c;
    pprVar9 = local_28;
    uVar10 = 0;
    do {
      local_2c = uVar10;
      if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&
          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&
         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {
        local_2c = uVar10 + 1;
        pprVar8[uVar10] = *pprVar9;
      }
      pprVar9 = pprVar9 + 1;
      uVar10 = local_2c;
    } while (pprVar1 != pprVar9);
    if (isection->orelocation == (reloc_cache_entry **)0x0) {
      free(local_28);
    }
  }
  local_28 = pprVar8;
  pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);
  if (local_2c != 0) {
    (*pcVar7)(obfdarg,pbVar2,local_28,local_2c);
    return;
  }
LAB_000185c3:
  (*pcVar7)(obfdarg,pbVar2,0,local_2c);
  pbVar2->flags = pbVar2->flags & 0xfffffffb;
  free(local_28);
  return;
}



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

void FUN_00018500(undefined4 param_1,int param_2,int param_3)

{
  undefined4 *puVar1;
  int iVar2;
  int iVar3;
  code *pcVar4;
  undefined4 *puVar5;
  int iVar6;
  undefined4 uVar7;
  undefined4 *puVar8;
  int local_2c;
  undefined4 *local_28;
  
  iVar2 = FUN_00017fd0();
  if (iVar2 != 0) {
    return;
  }
  iVar2 = *(int *)(param_2 + 0x54);
  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||
     (iVar3 = FUN_00016a30(), iVar3 != 0)) {
LAB_00018554:
    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);
    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;
    return;
  }
  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);
  if (iVar3 < 0) {
    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {
      DAT_00040bc8 = 1;
      FUN_0002d3a0(0,param_1,param_2,0);
      return;
    }
    goto LAB_00018554;
  }
  if (iVar3 == 0) goto LAB_00018554;
  local_28 = *(undefined4 **)(param_2 + 0x60);
  if (local_28 == (undefined4 *)0x0) {
    local_28 = (undefined4 *)xmalloc(iVar3);
    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);
    if (local_2c < 0) {
      DAT_00040bc8 = 1;
      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);
      FUN_0002d3a0(0,param_1,param_2,uVar7);
      return;
    }
  }
  else {
    local_2c = *(int *)(param_2 + 100);
  }
  puVar5 = local_28;
  if (DAT_00040bb0 == 7) {
    puVar5 = (undefined4 *)xmalloc(iVar3);
    if (local_2c < 1) {
      if (*(int *)(param_2 + 0x60) == 0) {
        free(local_28);
        local_2c = 0;
        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);
        local_28 = puVar5;
      }
      else {
        local_2c = 0;
        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);
        local_28 = puVar5;
      }
      goto LAB_000185c3;
    }
    puVar1 = local_28 + local_2c;
    puVar8 = local_28;
    iVar3 = 0;
    do {
      local_2c = iVar3;
      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&
         (iVar6 = FUN_000179c0(), iVar6 != 0)) {
        local_2c = iVar3 + 1;
        puVar5[iVar3] = *puVar8;
      }
      puVar8 = puVar8 + 1;
      iVar3 = local_2c;
    } while (puVar1 != puVar8);
    if (*(int *)(param_2 + 0x60) == 0) {
      free(local_28);
    }
  }
  local_28 = puVar5;
  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);
  if (local_2c != 0) {
    (*pcVar4)(param_3,iVar2,local_28,local_2c);
    return;
  }
LAB_000185c3:
  (*pcVar4)(param_3,iVar2,0,local_2c);
  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;
  free(local_28);
  return;
}


PUSH EBP
XOR ECX,ECX
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000166c0
ADD EBX,0x27af5
SUB ESP,0x1c
MOV EDI,dword ptr [ESP + 0x34]
MOV EAX,dword ptr [ESP + 0x30]
MOV ESI,dword ptr [ESP + 0x38]
MOV EDX,EDI
CALL 0x00017fd0
TEST EAX,EAX
JNZ 0x0001856a
MOVZX EAX,byte ptr [ESI + 0x28]
MOV EBP,dword ptr [EDI + 0x54]
AND EAX,0x7
CMP AL,0x3
JZ 0x00018554
CMP dword ptr [EBX + 0xbb0],0x6
JZ 0x00018554
MOV EAX,dword ptr [EDI]
XOR EDX,EDX
MOV ECX,0x80
CALL 0x00016a30
TEST EAX,EAX
JZ 0x00018578
MOV EAX,dword ptr [ESI + 0x4]
PUSH 0x0
PUSH 0x0
PUSH EBP
PUSH ESI
CALL dword ptr [EAX + 0x148]
AND dword ptr [EBP + 0x14],0xfffffffb
ADD ESP,0x10
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x8
PUSH EDI
PUSH dword ptr [ESP + 0x3c]
CALL 0x00013830
ADD ESP,0x10
MOV EDX,EAX
TEST EAX,EAX
JS 0x000185e0
JZ 0x00018554
MOV EAX,dword ptr [EDI + 0x60]
MOV dword ptr [ESP + 0x4],EAX
TEST EAX,EAX
JZ 0x000186cc
MOV EAX,dword ptr [EDI + 0x64]
MOV dword ptr [ESP],EAX
CMP dword ptr [EBX + 0xbb0],0x7
JZ 0x00018626
MOV EAX,dword ptr [ESP]
MOV EDX,EAX
MOV EAX,dword ptr [ESI + 0x4]
MOV ECX,dword ptr [ESP]
MOV EAX,dword ptr [EAX + 0x148]
TEST ECX,ECX
JNZ 0x00018613
PUSH EDX
PUSH 0x0
PUSH EBP
PUSH ESI
CALL EAX
AND dword ptr [EBP + 0x14],0xfffffffb
POP EAX
PUSH dword ptr [ESP + 0x10]
CALL 0x00013948
ADD ESP,0x10
JMP 0x0001856a
CMP EAX,-0x1
JNZ 0x000185f3
CALL 0x000132b0
CMP EAX,0x5
JZ 0x00018554
PUSH 0x0
PUSH EDI
PUSH dword ptr [ESP + 0x38]
PUSH 0x0
MOV dword ptr [EBX + 0xbc8],0x1
CALL 0x0002d3a0
ADD ESP,0x10
JMP 0x0001856a
PUSH dword ptr [ESP]
PUSH dword ptr [ESP + 0x8]
PUSH EBP
PUSH ESI
CALL EAX
ADD ESP,0x10
JMP 0x0001856a
SUB ESP,0xc
PUSH EDX
CALL 0x000132e0
MOV dword ptr [ESP + 0x18],EAX
ADD ESP,0x10
MOV EAX,dword ptr [ESP]
TEST EAX,EAX
JLE 0x00018753
MOV EDX,dword ptr [ESP + 0x4]
MOV dword ptr [ESP + 0xc],EBP
MOV dword ptr [ESP + 0x34],EDI
MOV ECX,EDX
LEA EAX,[EDX + EAX*0x4]
XOR EDX,EDX
MOV dword ptr [ESP + 0x38],ESI
MOV EDI,EDX
MOV ESI,ECX
MOV ECX,EAX
NOP
MOV EAX,dword ptr [ESI]
MOV EBP,EDI
MOV EAX,dword ptr [EAX]
TEST EAX,EAX
JZ 0x000186a0
MOV EAX,dword ptr [EAX]
TEST EAX,EAX
JZ 0x000186a0
MOV EAX,dword ptr [EAX + 0x4]
MOV EDX,dword ptr [EBX + 0xb24]
MOV dword ptr [ESP],ECX
CALL 0x000179c0
MOV ECX,dword ptr [ESP]
TEST EAX,EAX
JZ 0x000186a0
MOV EAX,dword ptr [ESI]
MOV EDX,dword ptr [ESP + 0x8]
ADD EDI,0x1
MOV dword ptr [EDX + EBP*0x4],EAX
MOV EBP,EDI
LEA ESI,[ESI]
LEA ESI,[ESI]
ADD ESI,0x4
CMP ECX,ESI
JNZ 0x00018660
MOV dword ptr [ESP],EDI
MOV EDI,dword ptr [ESP + 0x34]
MOV EDX,EBP
MOV ESI,dword ptr [ESP + 0x38]
MOV EBP,dword ptr [ESP + 0xc]
MOV EDI,dword ptr [EDI + 0x60]
TEST EDI,EDI
JZ 0x00018731
MOV EAX,dword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0x4],EAX
JMP 0x000185b3
SUB ESP,0xc
PUSH EDX
MOV dword ptr [ESP + 0x18],EDX
CALL 0x000132e0
MOV dword ptr [ESP + 0x14],EAX
PUSH dword ptr [EBX + 0xbdc]
PUSH EAX
PUSH EDI
PUSH dword ptr [ESP + 0x4c]
CALL 0x000137c0
MOV dword ptr [ESP + 0x20],EAX
ADD ESP,0x20
TEST EAX,EAX
MOV EDX,dword ptr [ESP + 0x8]
JNS 0x000185a5
MOV dword ptr [EBX + 0xbc8],0x1
LEA EAX,[EBX + 0xfffef13b]
PUSH EBP
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x00013200
PUSH EAX
PUSH EDI
PUSH dword ptr [ESP + 0x48]
PUSH 0x0
CALL 0x0002d3a0
ADD ESP,0x20
JMP 0x0001856a
SUB ESP,0xc
PUSH dword ptr [ESP + 0x10]
CALL 0x00013948
MOV EAX,dword ptr [ESP + 0x10]
ADD ESP,0x10
MOV EDX,EAX
MOV EAX,dword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0x4],EAX
JMP 0x000185b3
CMP dword ptr [EDI + 0x60],0x0
JZ 0x00018771
MOV EAX,dword ptr [ESI + 0x4]
MOV ECX,dword ptr [ESP + 0x8]
XOR EDX,EDX
MOV EAX,dword ptr [EAX + 0x148]
MOV dword ptr [ESP + 0x4],ECX
JMP 0x000185c3
SUB ESP,0xc
PUSH dword ptr [ESP + 0x10]
CALL 0x00013948
ADD ESP,0x10
MOV EAX,dword ptr [ESI + 0x4]
MOV ECX,dword ptr [ESP + 0x8]
XOR EDX,EDX
MOV EAX,dword ptr [EAX + 0x148]
MOV dword ptr [ESP + 0x4],ECX
JMP 0x000185c3
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_00018500(undefined4 param_1,int param_2,int param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int local_2c;\n  undefined4 *local_28;\n  \n  iVar2 = FUN_00017fd0();\n  if (iVar2 != 0) {\n    return;\n  }\n  iVar2 = *(int *)(param_2 + 0x54);\n  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }\n  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);\n  if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar3 == 0) goto LAB_00018554;\n  local_28 = *(undefined4 **)(param_2 + 0x60);\n  if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }\n  puVar5 = local_28;\n  if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }\n  local_28 = puVar5;\n  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);\n  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n  free(local_28);\n  return;\n}\n\n" comment (function_definition "void FUN_00018500(undefined4 param_1,int param_2,int param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int local_2c;\n  undefined4 *local_28;\n  \n  iVar2 = FUN_00017fd0();\n  if (iVar2 != 0) {\n    return;\n  }\n  iVar2 = *(int *)(param_2 + 0x54);\n  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }\n  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);\n  if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar3 == 0) goto LAB_00018554;\n  local_28 = *(undefined4 **)(param_2 + 0x60);\n  if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }\n  puVar5 = local_28;\n  if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }\n  local_28 = puVar5;\n  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);\n  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n  free(local_28);\n  return;\n}" primitive_type (function_declarator "FUN_00018500(undefined4 param_1,int param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,int param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int local_2c;\n  undefined4 *local_28;\n  \n  iVar2 = FUN_00017fd0();\n  if (iVar2 != 0) {\n    return;\n  }\n  iVar2 = *(int *)(param_2 + 0x54);\n  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }\n  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);\n  if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar3 == 0) goto LAB_00018554;\n  local_28 = *(undefined4 **)(param_2 + 0x60);\n  if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }\n  puVar5 = local_28;\n  if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }\n  local_28 = puVar5;\n  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);\n  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n  free(local_28);\n  return;\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int local_2c;" primitive_type identifier ;) (declaration "undefined4 *local_28;" type_identifier (pointer_declarator "*local_28" * identifier) ;) (expression_statement "iVar2 = FUN_00017fd0();" (assignment_expression "iVar2 = FUN_00017fd0()" identifier = (call_expression "FUN_00017fd0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar2 != 0) {\n    return;\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "iVar2 = *(int *)(param_2 + 0x54);" (assignment_expression "iVar2 = *(int *)(param_2 + 0x54)" identifier = (pointer_expression "*(int *)(param_2 + 0x54)" * (cast_expression "(int *)(param_2 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x54)" ( (binary_expression "param_2 + 0x54" identifier + number_literal) ))))) ;) (if_statement "if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }" if (parenthesized_expression "((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0))" ( (binary_expression "(((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)" (parenthesized_expression "(((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6))" ( (binary_expression "((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)" (parenthesized_expression "((*(byte *)(param_3 + 0x28) & 7) == 3)" ( (binary_expression "(*(byte *)(param_3 + 0x28) & 7) == 3" (parenthesized_expression "(*(byte *)(param_3 + 0x28) & 7)" ( (binary_expression "*(byte *)(param_3 + 0x28) & 7" (pointer_expression "*(byte *)(param_3 + 0x28)" * (cast_expression "(byte *)(param_3 + 0x28)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x28)" ( (binary_expression "param_3 + 0x28" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(DAT_00040bb0 == 6)" ( (binary_expression "DAT_00040bb0 == 6" identifier == number_literal) ))) )) || (parenthesized_expression "(iVar3 = FUN_00016a30(), iVar3 != 0)" ( (comma_expression "iVar3 = FUN_00016a30(), iVar3 != 0" (assignment_expression "iVar3 = FUN_00016a30()" identifier = (call_expression "FUN_00016a30()" identifier (argument_list "()" ( )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }" { (labeled_statement "LAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);" statement_identifier : (expression_statement "(**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);" (call_expression "(**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0)" (parenthesized_expression "(**(code **)(*(int *)(param_3 + 4) + 0x148))" ( (pointer_expression "**(code **)(*(int *)(param_3 + 4) + 0x148)" * (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" * (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" ( (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(param_3,iVar2,0,0)" ( identifier , identifier , number_literal , number_literal ))) ;)) (expression_statement "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;" (assignment_expression "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))) & number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);" (assignment_expression "iVar3 = bfd_get_reloc_upper_bound(param_1,param_2)" identifier = (call_expression "bfd_get_reloc_upper_bound(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier )))) ;) (if_statement "if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }" { (if_statement "if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }" if (parenthesized_expression "((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5))" ( (binary_expression "(iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)" (parenthesized_expression "(iVar3 != -1)" ( (binary_expression "iVar3 != -1" identifier != number_literal) )) || (parenthesized_expression "(iVar3 = bfd_get_error(), iVar3 != 5)" ( (comma_expression "iVar3 = bfd_get_error(), iVar3 != 5" (assignment_expression "iVar3 = bfd_get_error()" identifier = (call_expression "bfd_get_error()" identifier (argument_list "()" ( )))) , (binary_expression "iVar3 != 5" identifier != number_literal)) ))) )) (compound_statement "{\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }" { (expression_statement "DAT_00040bc8 = 1;" (assignment_expression "DAT_00040bc8 = 1" identifier = number_literal) ;) (expression_statement "FUN_0002d3a0(0,param_1,param_2,0);" (call_expression "FUN_0002d3a0(0,param_1,param_2,0)" identifier (argument_list "(0,param_1,param_2,0)" ( number_literal , identifier , identifier , number_literal ))) ;) (return_statement "return;" return ;) })) (goto_statement "goto LAB_00018554;" goto statement_identifier ;) })) (if_statement "if (iVar3 == 0) goto LAB_00018554;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00018554;" goto statement_identifier ;)) (expression_statement "local_28 = *(undefined4 **)(param_2 + 0x60);" (assignment_expression "local_28 = *(undefined4 **)(param_2 + 0x60)" identifier = (pointer_expression "*(undefined4 **)(param_2 + 0x60)" * (cast_expression "(undefined4 **)(param_2 + 0x60)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) ))))) ;) (if_statement "if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }" if (parenthesized_expression "(local_28 == (undefined4 *)0x0)" ( (binary_expression "local_28 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }" { (expression_statement "local_28 = (undefined4 *)xmalloc(iVar3);" (assignment_expression "local_28 = (undefined4 *)xmalloc(iVar3)" identifier = (cast_expression "(undefined4 *)xmalloc(iVar3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(iVar3)" identifier (argument_list "(iVar3)" ( identifier ))))) ;) (expression_statement "local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);" (assignment_expression "local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc)" identifier = (call_expression "bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc)" identifier (argument_list "(param_1,param_2,local_28,DAT_00040bdc)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }" if (parenthesized_expression "(local_2c < 0)" ( (binary_expression "local_2c < 0" identifier < number_literal) )) (compound_statement "{\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }" { (expression_statement "DAT_00040bc8 = 1;" (assignment_expression "DAT_00040bc8 = 1" identifier = number_literal) ;) (expression_statement "uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);" (assignment_expression "uVar7 = dcgettext(0,"relocation count is negative",5,iVar2)" identifier = (call_expression "dcgettext(0,"relocation count is negative",5,iVar2)" identifier (argument_list "(0,"relocation count is negative",5,iVar2)" ( number_literal , (string_literal ""relocation count is negative"" " string_content ") , number_literal , identifier )))) ;) (expression_statement "FUN_0002d3a0(0,param_1,param_2,uVar7);" (call_expression "FUN_0002d3a0(0,param_1,param_2,uVar7)" identifier (argument_list "(0,param_1,param_2,uVar7)" ( number_literal , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    local_2c = *(int *)(param_2 + 100);\n  }" else (compound_statement "{\n    local_2c = *(int *)(param_2 + 100);\n  }" { (expression_statement "local_2c = *(int *)(param_2 + 100);" (assignment_expression "local_2c = *(int *)(param_2 + 100)" identifier = (pointer_expression "*(int *)(param_2 + 100)" * (cast_expression "(int *)(param_2 + 100)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 100)" ( (binary_expression "param_2 + 100" identifier + number_literal) ))))) ;) }))) (expression_statement "puVar5 = local_28;" (assignment_expression "puVar5 = local_28" identifier = identifier) ;) (if_statement "if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }" if (parenthesized_expression "(DAT_00040bb0 == 7)" ( (binary_expression "DAT_00040bb0 == 7" identifier == number_literal) )) (compound_statement "{\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }" { (expression_statement "puVar5 = (undefined4 *)xmalloc(iVar3);" (assignment_expression "puVar5 = (undefined4 *)xmalloc(iVar3)" identifier = (cast_expression "(undefined4 *)xmalloc(iVar3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(iVar3)" identifier (argument_list "(iVar3)" ( identifier ))))) ;) (if_statement "if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }" if (parenthesized_expression "(local_2c < 1)" ( (binary_expression "local_2c < 1" identifier < number_literal) )) (compound_statement "{\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }" { (if_statement "if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" if (parenthesized_expression "(*(int *)(param_2 + 0x60) == 0)" ( (binary_expression "*(int *)(param_2 + 0x60) == 0" (pointer_expression "*(int *)(param_2 + 0x60)" * (cast_expression "(int *)(param_2 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" { (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" * (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" ( (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" identifier = identifier) ;) }) (else_clause "else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" else (compound_statement "{\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" { (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" * (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" ( (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" identifier = identifier) ;) }))) (goto_statement "goto LAB_000185c3;" goto statement_identifier ;) })) (expression_statement "puVar1 = local_28 + local_2c;" (assignment_expression "puVar1 = local_28 + local_2c" identifier = (binary_expression "local_28 + local_2c" identifier + identifier)) ;) (expression_statement "puVar8 = local_28;" (assignment_expression "puVar8 = local_28" identifier = identifier) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);" do (compound_statement "{\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    }" { (expression_statement "local_2c = iVar3;" (assignment_expression "local_2c = iVar3" identifier = identifier) ;) (if_statement "if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }" if (parenthesized_expression "(((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0))" ( (binary_expression "((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)" (parenthesized_expression "((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0))" ( (binary_expression "(*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)" (parenthesized_expression "(*(int **)*puVar8 != (int *)0x0)" ( (binary_expression "*(int **)*puVar8 != (int *)0x0" (pointer_expression "*(int **)*puVar8" * (cast_expression "(int **)*puVar8" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "*puVar8" * identifier))) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(**(int **)*puVar8 != 0)" ( (binary_expression "**(int **)*puVar8 != 0" (pointer_expression "**(int **)*puVar8" * (pointer_expression "*(int **)*puVar8" * (cast_expression "(int **)*puVar8" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "*puVar8" * identifier)))) != number_literal) ))) )) && (parenthesized_expression "(iVar6 = FUN_000179c0(), iVar6 != 0)" ( (comma_expression "iVar6 = FUN_000179c0(), iVar6 != 0" (assignment_expression "iVar6 = FUN_000179c0()" identifier = (call_expression "FUN_000179c0()" identifier (argument_list "()" ( )))) , (binary_expression "iVar6 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }" { (expression_statement "local_2c = iVar3 + 1;" (assignment_expression "local_2c = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "puVar5[iVar3] = *puVar8;" (assignment_expression "puVar5[iVar3] = *puVar8" (subscript_expression "puVar5[iVar3]" identifier [ identifier ]) = (pointer_expression "*puVar8" * identifier)) ;) })) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar3 = local_2c;" (assignment_expression "iVar3 = local_2c" identifier = identifier) ;) }) while (parenthesized_expression "(puVar1 != puVar8)" ( (binary_expression "puVar1 != puVar8" identifier != identifier) )) ;) (if_statement "if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x60) == 0)" ( (binary_expression "*(int *)(param_2 + 0x60) == 0" (pointer_expression "*(int *)(param_2 + 0x60)" * (cast_expression "(int *)(param_2 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      free(local_28);\n    }" { (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) })) })) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" identifier = identifier) ;) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" * (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" ( (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }" if (parenthesized_expression "(local_2c != 0)" ( (binary_expression "local_2c != 0" identifier != number_literal) )) (compound_statement "{\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }" { (expression_statement "(*pcVar4)(param_3,iVar2,local_28,local_2c);" (call_expression "(*pcVar4)(param_3,iVar2,local_28,local_2c)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(param_3,iVar2,local_28,local_2c)" ( identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (labeled_statement "LAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);" statement_identifier : (expression_statement "(*pcVar4)(param_3,iVar2,0,local_2c);" (call_expression "(*pcVar4)(param_3,iVar2,0,local_2c)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(param_3,iVar2,0,local_2c)" ( identifier , identifier , number_literal , identifier ))) ;)) (expression_statement "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;" (assignment_expression "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid copy_relocations_in_section(bfd *ibfd,sec_ptr isection,void *obfdarg)\n\n{\n  reloc_cache_entry **pprVar1;\n  bfd_section *pbVar2;\n  bfd_symbol *pbVar3;\n  bfd_boolean bVar4;\n  section_list *psVar5;\n  int iVar6;\n  code *pcVar7;\n  reloc_cache_entry **pprVar8;\n  char *format;\n  reloc_cache_entry **pprVar9;\n  uint uVar10;\n  uint local_2c;\n  reloc_cache_entry **local_28;\n  \n  bVar4 = skip_section(ibfd,isection,0);\n  if (bVar4 != 0) {\n    return;\n  }\n  pbVar2 = isection->output_section;\n  if ((((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO)) ||\n     (psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0)) {\nLAB_00018554:\n    (**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);\n    pbVar2->flags = pbVar2->flags & 0xfffffffb;\n    return;\n  }\n  iVar6 = bfd_get_reloc_upper_bound(ibfd,isection);\n  if (iVar6 < 0) {\n    if ((iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5)) {\n      status = 1;\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar6 == 0) goto LAB_00018554;\n  local_28 = isection->orelocation;\n  if (local_28 == (reloc_cache_entry **)0x0) {\n    local_28 = (reloc_cache_entry **)xmalloc(iVar6);\n    local_2c = bfd_canonicalize_reloc(ibfd,isection,local_28,isympp);\n    if ((int)local_2c < 0) {\n      status = 1;\n      format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,format);\n      return;\n    }\n  }\n  else {\n    local_2c = isection->reloc_count;\n  }\n  pprVar8 = local_28;\n  if (strip_symbols == STRIP_ALL) {\n    pprVar8 = (reloc_cache_entry **)xmalloc(iVar6);\n    if ((int)local_2c < 1) {\n      if (isection->orelocation == (reloc_cache_entry **)0x0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      goto LAB_000185c3;\n    }\n    pprVar1 = local_28 + local_2c;\n    pprVar9 = local_28;\n    uVar10 = 0;\n    do {\n      local_2c = uVar10;\n      if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }\n      pprVar9 = pprVar9 + 1;\n      uVar10 = local_2c;\n    } while (pprVar1 != pprVar9);\n    if (isection->orelocation == (reloc_cache_entry **)0x0) {\n      free(local_28);\n    }\n  }\n  local_28 = pprVar8;\n  pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar7)(obfdarg,pbVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar7)(obfdarg,pbVar2,0,local_2c);\n  pbVar2->flags = pbVar2->flags & 0xfffffffb;\n  free(local_28);\n  return;\n}\n\n" comment (function_definition "void copy_relocations_in_section(bfd *ibfd,sec_ptr isection,void *obfdarg)\n\n{\n  reloc_cache_entry **pprVar1;\n  bfd_section *pbVar2;\n  bfd_symbol *pbVar3;\n  bfd_boolean bVar4;\n  section_list *psVar5;\n  int iVar6;\n  code *pcVar7;\n  reloc_cache_entry **pprVar8;\n  char *format;\n  reloc_cache_entry **pprVar9;\n  uint uVar10;\n  uint local_2c;\n  reloc_cache_entry **local_28;\n  \n  bVar4 = skip_section(ibfd,isection,0);\n  if (bVar4 != 0) {\n    return;\n  }\n  pbVar2 = isection->output_section;\n  if ((((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO)) ||\n     (psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0)) {\nLAB_00018554:\n    (**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);\n    pbVar2->flags = pbVar2->flags & 0xfffffffb;\n    return;\n  }\n  iVar6 = bfd_get_reloc_upper_bound(ibfd,isection);\n  if (iVar6 < 0) {\n    if ((iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5)) {\n      status = 1;\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar6 == 0) goto LAB_00018554;\n  local_28 = isection->orelocation;\n  if (local_28 == (reloc_cache_entry **)0x0) {\n    local_28 = (reloc_cache_entry **)xmalloc(iVar6);\n    local_2c = bfd_canonicalize_reloc(ibfd,isection,local_28,isympp);\n    if ((int)local_2c < 0) {\n      status = 1;\n      format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,format);\n      return;\n    }\n  }\n  else {\n    local_2c = isection->reloc_count;\n  }\n  pprVar8 = local_28;\n  if (strip_symbols == STRIP_ALL) {\n    pprVar8 = (reloc_cache_entry **)xmalloc(iVar6);\n    if ((int)local_2c < 1) {\n      if (isection->orelocation == (reloc_cache_entry **)0x0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      goto LAB_000185c3;\n    }\n    pprVar1 = local_28 + local_2c;\n    pprVar9 = local_28;\n    uVar10 = 0;\n    do {\n      local_2c = uVar10;\n      if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }\n      pprVar9 = pprVar9 + 1;\n      uVar10 = local_2c;\n    } while (pprVar1 != pprVar9);\n    if (isection->orelocation == (reloc_cache_entry **)0x0) {\n      free(local_28);\n    }\n  }\n  local_28 = pprVar8;\n  pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar7)(obfdarg,pbVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar7)(obfdarg,pbVar2,0,local_2c);\n  pbVar2->flags = pbVar2->flags & 0xfffffffb;\n  free(local_28);\n  return;\n}" primitive_type (function_declarator "copy_relocations_in_section(bfd *ibfd,sec_ptr isection,void *obfdarg)" identifier (parameter_list "(bfd *ibfd,sec_ptr isection,void *obfdarg)" ( (parameter_declaration "bfd *ibfd" type_identifier (pointer_declarator "*ibfd" * identifier)) , (parameter_declaration "sec_ptr isection" type_identifier identifier) , (parameter_declaration "void *obfdarg" primitive_type (pointer_declarator "*obfdarg" * identifier)) ))) (compound_statement "{\n  reloc_cache_entry **pprVar1;\n  bfd_section *pbVar2;\n  bfd_symbol *pbVar3;\n  bfd_boolean bVar4;\n  section_list *psVar5;\n  int iVar6;\n  code *pcVar7;\n  reloc_cache_entry **pprVar8;\n  char *format;\n  reloc_cache_entry **pprVar9;\n  uint uVar10;\n  uint local_2c;\n  reloc_cache_entry **local_28;\n  \n  bVar4 = skip_section(ibfd,isection,0);\n  if (bVar4 != 0) {\n    return;\n  }\n  pbVar2 = isection->output_section;\n  if ((((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO)) ||\n     (psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0)) {\nLAB_00018554:\n    (**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);\n    pbVar2->flags = pbVar2->flags & 0xfffffffb;\n    return;\n  }\n  iVar6 = bfd_get_reloc_upper_bound(ibfd,isection);\n  if (iVar6 < 0) {\n    if ((iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5)) {\n      status = 1;\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar6 == 0) goto LAB_00018554;\n  local_28 = isection->orelocation;\n  if (local_28 == (reloc_cache_entry **)0x0) {\n    local_28 = (reloc_cache_entry **)xmalloc(iVar6);\n    local_2c = bfd_canonicalize_reloc(ibfd,isection,local_28,isympp);\n    if ((int)local_2c < 0) {\n      status = 1;\n      format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,format);\n      return;\n    }\n  }\n  else {\n    local_2c = isection->reloc_count;\n  }\n  pprVar8 = local_28;\n  if (strip_symbols == STRIP_ALL) {\n    pprVar8 = (reloc_cache_entry **)xmalloc(iVar6);\n    if ((int)local_2c < 1) {\n      if (isection->orelocation == (reloc_cache_entry **)0x0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      goto LAB_000185c3;\n    }\n    pprVar1 = local_28 + local_2c;\n    pprVar9 = local_28;\n    uVar10 = 0;\n    do {\n      local_2c = uVar10;\n      if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }\n      pprVar9 = pprVar9 + 1;\n      uVar10 = local_2c;\n    } while (pprVar1 != pprVar9);\n    if (isection->orelocation == (reloc_cache_entry **)0x0) {\n      free(local_28);\n    }\n  }\n  local_28 = pprVar8;\n  pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar7)(obfdarg,pbVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar7)(obfdarg,pbVar2,0,local_2c);\n  pbVar2->flags = pbVar2->flags & 0xfffffffb;\n  free(local_28);\n  return;\n}" { (declaration "reloc_cache_entry **pprVar1;" type_identifier (pointer_declarator "**pprVar1" * (pointer_declarator "*pprVar1" * identifier)) ;) (declaration "bfd_section *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "bfd_symbol *pbVar3;" type_identifier (pointer_declarator "*pbVar3" * identifier) ;) (declaration "bfd_boolean bVar4;" type_identifier identifier ;) (declaration "section_list *psVar5;" type_identifier (pointer_declarator "*psVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "code *pcVar7;" type_identifier (pointer_declarator "*pcVar7" * identifier) ;) (declaration "reloc_cache_entry **pprVar8;" type_identifier (pointer_declarator "**pprVar8" * (pointer_declarator "*pprVar8" * identifier)) ;) (declaration "char *format;" primitive_type (pointer_declarator "*format" * identifier) ;) (declaration "reloc_cache_entry **pprVar9;" type_identifier (pointer_declarator "**pprVar9" * (pointer_declarator "*pprVar9" * identifier)) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint local_2c;" type_identifier identifier ;) (declaration "reloc_cache_entry **local_28;" type_identifier (pointer_declarator "**local_28" * (pointer_declarator "*local_28" * identifier)) ;) (expression_statement "bVar4 = skip_section(ibfd,isection,0);" (assignment_expression "bVar4 = skip_section(ibfd,isection,0)" identifier = (call_expression "skip_section(ibfd,isection,0)" identifier (argument_list "(ibfd,isection,0)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (bVar4 != 0) {\n    return;\n  }" if (parenthesized_expression "(bVar4 != 0)" ( (binary_expression "bVar4 != 0" identifier != number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "pbVar2 = isection->output_section;" (assignment_expression "pbVar2 = isection->output_section" identifier = (field_expression "isection->output_section" identifier -> field_identifier)) ;) (if_statement "if ((((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO)) ||\n     (psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0)) {\nLAB_00018554:\n    (**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);\n    pbVar2->flags = pbVar2->flags & 0xfffffffb;\n    return;\n  }" if (parenthesized_expression "((((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO)) ||\n     (psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0))" ( (binary_expression "(((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO)) ||\n     (psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0)" (parenthesized_expression "(((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO))" ( (binary_expression "((*(byte *)((int)obfdarg + 0x28) & 7) == 3) || (strip_symbols == STRIP_NONDWO)" (parenthesized_expression "((*(byte *)((int)obfdarg + 0x28) & 7) == 3)" ( (binary_expression "(*(byte *)((int)obfdarg + 0x28) & 7) == 3" (parenthesized_expression "(*(byte *)((int)obfdarg + 0x28) & 7)" ( (binary_expression "*(byte *)((int)obfdarg + 0x28) & 7" (pointer_expression "*(byte *)((int)obfdarg + 0x28)" * (cast_expression "(byte *)((int)obfdarg + 0x28)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)obfdarg + 0x28)" ( (binary_expression "(int)obfdarg + 0x28" (cast_expression "(int)obfdarg" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(strip_symbols == STRIP_NONDWO)" ( (binary_expression "strip_symbols == STRIP_NONDWO" identifier == identifier) ))) )) || (parenthesized_expression "(psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0)" ( (comma_expression "psVar5 = find_section_list(isection->name,0,0x80), psVar5 != (section_list *)0x0" (assignment_expression "psVar5 = find_section_list(isection->name,0,0x80)" identifier = (call_expression "find_section_list(isection->name,0,0x80)" identifier (argument_list "(isection->name,0,0x80)" ( (field_expression "isection->name" identifier -> field_identifier) , number_literal , number_literal )))) , (binary_expression "psVar5 != (section_list *)0x0" identifier != (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (compound_statement "{\nLAB_00018554:\n    (**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);\n    pbVar2->flags = pbVar2->flags & 0xfffffffb;\n    return;\n  }" { (labeled_statement "LAB_00018554:\n    (**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);" statement_identifier : (expression_statement "(**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);" (call_expression "(**(code **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0)" (parenthesized_expression "(**(code **)(*(int *)((int)obfdarg + 4) + 0x148))" ( (pointer_expression "**(code **)(*(int *)((int)obfdarg + 4) + 0x148)" * (pointer_expression "*(code **)(*(int *)((int)obfdarg + 4) + 0x148)" * (cast_expression "(code **)(*(int *)((int)obfdarg + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)((int)obfdarg + 4) + 0x148)" ( (binary_expression "*(int *)((int)obfdarg + 4) + 0x148" (pointer_expression "*(int *)((int)obfdarg + 4)" * (cast_expression "(int *)((int)obfdarg + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)obfdarg + 4)" ( (binary_expression "(int)obfdarg + 4" (cast_expression "(int)obfdarg" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) + number_literal) ))))) )) (argument_list "(obfdarg,pbVar2,0,0)" ( identifier , identifier , number_literal , number_literal ))) ;)) (expression_statement "pbVar2->flags = pbVar2->flags & 0xfffffffb;" (assignment_expression "pbVar2->flags = pbVar2->flags & 0xfffffffb" (field_expression "pbVar2->flags" identifier -> field_identifier) = (binary_expression "pbVar2->flags & 0xfffffffb" (field_expression "pbVar2->flags" identifier -> field_identifier) & number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "iVar6 = bfd_get_reloc_upper_bound(ibfd,isection);" (assignment_expression "iVar6 = bfd_get_reloc_upper_bound(ibfd,isection)" identifier = (call_expression "bfd_get_reloc_upper_bound(ibfd,isection)" identifier (argument_list "(ibfd,isection)" ( identifier , identifier )))) ;) (if_statement "if (iVar6 < 0) {\n    if ((iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5)) {\n      status = 1;\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);\n      return;\n    }\n    goto LAB_00018554;\n  }" if (parenthesized_expression "(iVar6 < 0)" ( (binary_expression "iVar6 < 0" identifier < number_literal) )) (compound_statement "{\n    if ((iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5)) {\n      status = 1;\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);\n      return;\n    }\n    goto LAB_00018554;\n  }" { (if_statement "if ((iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5)) {\n      status = 1;\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);\n      return;\n    }" if (parenthesized_expression "((iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5))" ( (binary_expression "(iVar6 != -1) || (iVar6 = bfd_get_error(), iVar6 != 5)" (parenthesized_expression "(iVar6 != -1)" ( (binary_expression "iVar6 != -1" identifier != number_literal) )) || (parenthesized_expression "(iVar6 = bfd_get_error(), iVar6 != 5)" ( (comma_expression "iVar6 = bfd_get_error(), iVar6 != 5" (assignment_expression "iVar6 = bfd_get_error()" identifier = (call_expression "bfd_get_error()" identifier (argument_list "()" ( )))) , (binary_expression "iVar6 != 5" identifier != number_literal)) ))) )) (compound_statement "{\n      status = 1;\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);\n      return;\n    }" { (expression_statement "status = 1;" (assignment_expression "status = 1" identifier = number_literal) ;) (expression_statement "bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0);" (call_expression "bfd_nonfatal_message((char *)0x0,ibfd,isection,(char *)0x0)" identifier (argument_list "((char *)0x0,ibfd,isection,(char *)0x0)" ( (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier , identifier , (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (return_statement "return;" return ;) })) (goto_statement "goto LAB_00018554;" goto statement_identifier ;) })) (if_statement "if (iVar6 == 0) goto LAB_00018554;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00018554;" goto statement_identifier ;)) (expression_statement "local_28 = isection->orelocation;" (assignment_expression "local_28 = isection->orelocation" identifier = (field_expression "isection->orelocation" identifier -> field_identifier)) ;) (if_statement "if (local_28 == (reloc_cache_entry **)0x0) {\n    local_28 = (reloc_cache_entry **)xmalloc(iVar6);\n    local_2c = bfd_canonicalize_reloc(ibfd,isection,local_28,isympp);\n    if ((int)local_2c < 0) {\n      status = 1;\n      format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,format);\n      return;\n    }\n  }\n  else {\n    local_2c = isection->reloc_count;\n  }" if (parenthesized_expression "(local_28 == (reloc_cache_entry **)0x0)" ( (binary_expression "local_28 == (reloc_cache_entry **)0x0" identifier == (cast_expression "(reloc_cache_entry **)0x0" ( (type_descriptor "reloc_cache_entry **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n    local_28 = (reloc_cache_entry **)xmalloc(iVar6);\n    local_2c = bfd_canonicalize_reloc(ibfd,isection,local_28,isympp);\n    if ((int)local_2c < 0) {\n      status = 1;\n      format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,format);\n      return;\n    }\n  }" { (expression_statement "local_28 = (reloc_cache_entry **)xmalloc(iVar6);" (assignment_expression "local_28 = (reloc_cache_entry **)xmalloc(iVar6)" identifier = (cast_expression "(reloc_cache_entry **)xmalloc(iVar6)" ( (type_descriptor "reloc_cache_entry **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "xmalloc(iVar6)" identifier (argument_list "(iVar6)" ( identifier ))))) ;) (expression_statement "local_2c = bfd_canonicalize_reloc(ibfd,isection,local_28,isympp);" (assignment_expression "local_2c = bfd_canonicalize_reloc(ibfd,isection,local_28,isympp)" identifier = (call_expression "bfd_canonicalize_reloc(ibfd,isection,local_28,isympp)" identifier (argument_list "(ibfd,isection,local_28,isympp)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if ((int)local_2c < 0) {\n      status = 1;\n      format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,format);\n      return;\n    }" if (parenthesized_expression "((int)local_2c < 0)" ( (binary_expression "(int)local_2c < 0" (cast_expression "(int)local_2c" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      status = 1;\n      format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);\n      bfd_nonfatal_message((char *)0x0,ibfd,isection,format);\n      return;\n    }" { (expression_statement "status = 1;" (assignment_expression "status = 1" identifier = number_literal) ;) (expression_statement "format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2);" (assignment_expression "format = (char *)dcgettext(0,"relocation count is negative",5,pbVar2)" identifier = (cast_expression "(char *)dcgettext(0,"relocation count is negative",5,pbVar2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"relocation count is negative",5,pbVar2)" identifier (argument_list "(0,"relocation count is negative",5,pbVar2)" ( number_literal , (string_literal ""relocation count is negative"" " string_content ") , number_literal , identifier ))))) ;) (expression_statement "bfd_nonfatal_message((char *)0x0,ibfd,isection,format);" (call_expression "bfd_nonfatal_message((char *)0x0,ibfd,isection,format)" identifier (argument_list "((char *)0x0,ibfd,isection,format)" ( (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    local_2c = isection->reloc_count;\n  }" else (compound_statement "{\n    local_2c = isection->reloc_count;\n  }" { (expression_statement "local_2c = isection->reloc_count;" (assignment_expression "local_2c = isection->reloc_count" identifier = (field_expression "isection->reloc_count" identifier -> field_identifier)) ;) }))) (expression_statement "pprVar8 = local_28;" (assignment_expression "pprVar8 = local_28" identifier = identifier) ;) (if_statement "if (strip_symbols == STRIP_ALL) {\n    pprVar8 = (reloc_cache_entry **)xmalloc(iVar6);\n    if ((int)local_2c < 1) {\n      if (isection->orelocation == (reloc_cache_entry **)0x0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      goto LAB_000185c3;\n    }\n    pprVar1 = local_28 + local_2c;\n    pprVar9 = local_28;\n    uVar10 = 0;\n    do {\n      local_2c = uVar10;\n      if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }\n      pprVar9 = pprVar9 + 1;\n      uVar10 = local_2c;\n    } while (pprVar1 != pprVar9);\n    if (isection->orelocation == (reloc_cache_entry **)0x0) {\n      free(local_28);\n    }\n  }" if (parenthesized_expression "(strip_symbols == STRIP_ALL)" ( (binary_expression "strip_symbols == STRIP_ALL" identifier == identifier) )) (compound_statement "{\n    pprVar8 = (reloc_cache_entry **)xmalloc(iVar6);\n    if ((int)local_2c < 1) {\n      if (isection->orelocation == (reloc_cache_entry **)0x0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      goto LAB_000185c3;\n    }\n    pprVar1 = local_28 + local_2c;\n    pprVar9 = local_28;\n    uVar10 = 0;\n    do {\n      local_2c = uVar10;\n      if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }\n      pprVar9 = pprVar9 + 1;\n      uVar10 = local_2c;\n    } while (pprVar1 != pprVar9);\n    if (isection->orelocation == (reloc_cache_entry **)0x0) {\n      free(local_28);\n    }\n  }" { (expression_statement "pprVar8 = (reloc_cache_entry **)xmalloc(iVar6);" (assignment_expression "pprVar8 = (reloc_cache_entry **)xmalloc(iVar6)" identifier = (cast_expression "(reloc_cache_entry **)xmalloc(iVar6)" ( (type_descriptor "reloc_cache_entry **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "xmalloc(iVar6)" identifier (argument_list "(iVar6)" ( identifier ))))) ;) (if_statement "if ((int)local_2c < 1) {\n      if (isection->orelocation == (reloc_cache_entry **)0x0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      goto LAB_000185c3;\n    }" if (parenthesized_expression "((int)local_2c < 1)" ( (binary_expression "(int)local_2c < 1" (cast_expression "(int)local_2c" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n      if (isection->orelocation == (reloc_cache_entry **)0x0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      goto LAB_000185c3;\n    }" { (if_statement "if (isection->orelocation == (reloc_cache_entry **)0x0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }\n      else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }" if (parenthesized_expression "(isection->orelocation == (reloc_cache_entry **)0x0)" ( (binary_expression "isection->orelocation == (reloc_cache_entry **)0x0" (field_expression "isection->orelocation" identifier -> field_identifier) == (cast_expression "(reloc_cache_entry **)0x0" ( (type_descriptor "reloc_cache_entry **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n        free(local_28);\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }" { (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);" (assignment_expression "pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)((int)obfdarg + 4) + 0x148)" * (cast_expression "(code **)(*(int *)((int)obfdarg + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)((int)obfdarg + 4) + 0x148)" ( (binary_expression "*(int *)((int)obfdarg + 4) + 0x148" (pointer_expression "*(int *)((int)obfdarg + 4)" * (cast_expression "(int *)((int)obfdarg + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)obfdarg + 4)" ( (binary_expression "(int)obfdarg + 4" (cast_expression "(int)obfdarg" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) + number_literal) ))))) ;) (expression_statement "local_28 = pprVar8;" (assignment_expression "local_28 = pprVar8" identifier = identifier) ;) }) (else_clause "else {\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }" else (compound_statement "{\n        local_2c = 0;\n        pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);\n        local_28 = pprVar8;\n      }" { (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);" (assignment_expression "pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)((int)obfdarg + 4) + 0x148)" * (cast_expression "(code **)(*(int *)((int)obfdarg + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)((int)obfdarg + 4) + 0x148)" ( (binary_expression "*(int *)((int)obfdarg + 4) + 0x148" (pointer_expression "*(int *)((int)obfdarg + 4)" * (cast_expression "(int *)((int)obfdarg + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)obfdarg + 4)" ( (binary_expression "(int)obfdarg + 4" (cast_expression "(int)obfdarg" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) + number_literal) ))))) ;) (expression_statement "local_28 = pprVar8;" (assignment_expression "local_28 = pprVar8" identifier = identifier) ;) }))) (goto_statement "goto LAB_000185c3;" goto statement_identifier ;) })) (expression_statement "pprVar1 = local_28 + local_2c;" (assignment_expression "pprVar1 = local_28 + local_2c" identifier = (binary_expression "local_28 + local_2c" identifier + identifier)) ;) (expression_statement "pprVar9 = local_28;" (assignment_expression "pprVar9 = local_28" identifier = identifier) ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_2c = uVar10;\n      if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }\n      pprVar9 = pprVar9 + 1;\n      uVar10 = local_2c;\n    } while (pprVar1 != pprVar9);" do (compound_statement "{\n      local_2c = uVar10;\n      if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }\n      pprVar9 = pprVar9 + 1;\n      uVar10 = local_2c;\n    }" { (expression_statement "local_2c = uVar10;" (assignment_expression "local_2c = uVar10" identifier = identifier) ;) (if_statement "if ((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)) {\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }" if (parenthesized_expression "((((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0))" ( (binary_expression "(((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)) &&\n         (bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)" (parenthesized_expression "(((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0))" ( (binary_expression "((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0) &&\n          (pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)" (parenthesized_expression "((*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0)" ( (binary_expression "(*pprVar9)->sym_ptr_ptr != (bfd_symbol **)0x0" (field_expression "(*pprVar9)->sym_ptr_ptr" (parenthesized_expression "(*pprVar9)" ( (pointer_expression "*pprVar9" * identifier) )) -> field_identifier) != (cast_expression "(bfd_symbol **)0x0" ( (type_descriptor "bfd_symbol **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) && (parenthesized_expression "(pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0)" ( (comma_expression "pbVar3 = *(*pprVar9)->sym_ptr_ptr, pbVar3 != (bfd_symbol *)0x0" (assignment_expression "pbVar3 = *(*pprVar9)->sym_ptr_ptr" identifier = (pointer_expression "*(*pprVar9)->sym_ptr_ptr" * (field_expression "(*pprVar9)->sym_ptr_ptr" (parenthesized_expression "(*pprVar9)" ( (pointer_expression "*pprVar9" * identifier) )) -> field_identifier))) , (binary_expression "pbVar3 != (bfd_symbol *)0x0" identifier != (cast_expression "(bfd_symbol *)0x0" ( (type_descriptor "bfd_symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) && (parenthesized_expression "(bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0)" ( (comma_expression "bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab), bVar4 != 0" (assignment_expression "bVar4 = is_specified_symbol(pbVar3->name,keep_specific_htab)" identifier = (call_expression "is_specified_symbol(pbVar3->name,keep_specific_htab)" identifier (argument_list "(pbVar3->name,keep_specific_htab)" ( (field_expression "pbVar3->name" identifier -> field_identifier) , identifier )))) , (binary_expression "bVar4 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n        local_2c = uVar10 + 1;\n        pprVar8[uVar10] = *pprVar9;\n      }" { (expression_statement "local_2c = uVar10 + 1;" (assignment_expression "local_2c = uVar10 + 1" identifier = (binary_expression "uVar10 + 1" identifier + number_literal)) ;) (expression_statement "pprVar8[uVar10] = *pprVar9;" (assignment_expression "pprVar8[uVar10] = *pprVar9" (subscript_expression "pprVar8[uVar10]" identifier [ identifier ]) = (pointer_expression "*pprVar9" * identifier)) ;) })) (expression_statement "pprVar9 = pprVar9 + 1;" (assignment_expression "pprVar9 = pprVar9 + 1" identifier = (binary_expression "pprVar9 + 1" identifier + number_literal)) ;) (expression_statement "uVar10 = local_2c;" (assignment_expression "uVar10 = local_2c" identifier = identifier) ;) }) while (parenthesized_expression "(pprVar1 != pprVar9)" ( (binary_expression "pprVar1 != pprVar9" identifier != identifier) )) ;) (if_statement "if (isection->orelocation == (reloc_cache_entry **)0x0) {\n      free(local_28);\n    }" if (parenthesized_expression "(isection->orelocation == (reloc_cache_entry **)0x0)" ( (binary_expression "isection->orelocation == (reloc_cache_entry **)0x0" (field_expression "isection->orelocation" identifier -> field_identifier) == (cast_expression "(reloc_cache_entry **)0x0" ( (type_descriptor "reloc_cache_entry **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      free(local_28);\n    }" { (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) })) })) (expression_statement "local_28 = pprVar8;" (assignment_expression "local_28 = pprVar8" identifier = identifier) ;) (expression_statement "pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148);" (assignment_expression "pcVar7 = *(code **)(*(int *)((int)obfdarg + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)((int)obfdarg + 4) + 0x148)" * (cast_expression "(code **)(*(int *)((int)obfdarg + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)((int)obfdarg + 4) + 0x148)" ( (binary_expression "*(int *)((int)obfdarg + 4) + 0x148" (pointer_expression "*(int *)((int)obfdarg + 4)" * (cast_expression "(int *)((int)obfdarg + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)obfdarg + 4)" ( (binary_expression "(int)obfdarg + 4" (cast_expression "(int)obfdarg" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (local_2c != 0) {\n    (*pcVar7)(obfdarg,pbVar2,local_28,local_2c);\n    return;\n  }" if (parenthesized_expression "(local_2c != 0)" ( (binary_expression "local_2c != 0" identifier != number_literal) )) (compound_statement "{\n    (*pcVar7)(obfdarg,pbVar2,local_28,local_2c);\n    return;\n  }" { (expression_statement "(*pcVar7)(obfdarg,pbVar2,local_28,local_2c);" (call_expression "(*pcVar7)(obfdarg,pbVar2,local_28,local_2c)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(obfdarg,pbVar2,local_28,local_2c)" ( identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (labeled_statement "LAB_000185c3:\n  (*pcVar7)(obfdarg,pbVar2,0,local_2c);" statement_identifier : (expression_statement "(*pcVar7)(obfdarg,pbVar2,0,local_2c);" (call_expression "(*pcVar7)(obfdarg,pbVar2,0,local_2c)" (parenthesized_expression "(*pcVar7)" ( (pointer_expression "*pcVar7" * identifier) )) (argument_list "(obfdarg,pbVar2,0,local_2c)" ( identifier , identifier , number_literal , identifier ))) ;)) (expression_statement "pbVar2->flags = pbVar2->flags & 0xfffffffb;" (assignment_expression "pbVar2->flags = pbVar2->flags & 0xfffffffb" (field_expression "pbVar2->flags" identifier -> field_identifier) = (binary_expression "pbVar2->flags & 0xfffffffb" (field_expression "pbVar2->flags" identifier -> field_identifier) & number_literal)) ;) (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00018500(undefined4 param_1,int param_2,int param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int local_2c;\n  undefined4 *local_28;\n  \n  iVar2 = FUN_00017fd0();\n  if (iVar2 != 0) {\n    return;\n  }\n  iVar2 = *(int *)(param_2 + 0x54);\n  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }\n  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);\n  if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar3 == 0) goto LAB_00018554;\n  local_28 = *(undefined4 **)(param_2 + 0x60);\n  if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }\n  puVar5 = local_28;\n  if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }\n  local_28 = puVar5;\n  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);\n  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n  free(local_28);\n  return;\n}\n\n" (function_definition "void FUN_00018500(undefined4 param_1,int param_2,int param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int local_2c;\n  undefined4 *local_28;\n  \n  iVar2 = FUN_00017fd0();\n  if (iVar2 != 0) {\n    return;\n  }\n  iVar2 = *(int *)(param_2 + 0x54);\n  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }\n  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);\n  if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar3 == 0) goto LAB_00018554;\n  local_28 = *(undefined4 **)(param_2 + 0x60);\n  if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }\n  puVar5 = local_28;\n  if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }\n  local_28 = puVar5;\n  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);\n  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n  free(local_28);\n  return;\n}" primitive_type (function_declarator "FUN_00018500(undefined4 param_1,int param_2,int param_3)" identifier (parameter_list "(undefined4 param_1,int param_2,int param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int local_2c;\n  undefined4 *local_28;\n  \n  iVar2 = FUN_00017fd0();\n  if (iVar2 != 0) {\n    return;\n  }\n  iVar2 = *(int *)(param_2 + 0x54);\n  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }\n  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);\n  if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar3 == 0) goto LAB_00018554;\n  local_28 = *(undefined4 **)(param_2 + 0x60);\n  if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }\n  puVar5 = local_28;\n  if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }\n  local_28 = puVar5;\n  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);\n  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n  free(local_28);\n  return;\n}" { (declaration "undefined4 *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined4 uVar7;" type_identifier identifier ;) (declaration "undefined4 *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int local_2c;" primitive_type identifier ;) (declaration "undefined4 *local_28;" type_identifier (pointer_declarator "*local_28" * identifier) ;) (expression_statement "iVar2 = FUN_00017fd0();" (assignment_expression "iVar2 = FUN_00017fd0()" identifier = (call_expression "FUN_00017fd0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar2 != 0) {\n    return;\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "iVar2 = *(int *)(param_2 + 0x54);" (assignment_expression "iVar2 = *(int *)(param_2 + 0x54)" identifier = (pointer_expression "*(int *)(param_2 + 0x54)" * (cast_expression "(int *)(param_2 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x54)" ( (binary_expression "param_2 + 0x54" identifier + number_literal) ))))) ;) (if_statement "if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }" if (parenthesized_expression "((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0))" ( (binary_expression "(((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)" (parenthesized_expression "(((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6))" ( (binary_expression "((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)" (parenthesized_expression "((*(byte *)(param_3 + 0x28) & 7) == 3)" ( (binary_expression "(*(byte *)(param_3 + 0x28) & 7) == 3" (parenthesized_expression "(*(byte *)(param_3 + 0x28) & 7)" ( (binary_expression "*(byte *)(param_3 + 0x28) & 7" (pointer_expression "*(byte *)(param_3 + 0x28)" * (cast_expression "(byte *)(param_3 + 0x28)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 0x28)" ( (binary_expression "param_3 + 0x28" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(DAT_00040bb0 == 6)" ( (binary_expression "DAT_00040bb0 == 6" identifier == number_literal) ))) )) || (parenthesized_expression "(iVar3 = FUN_00016a30(), iVar3 != 0)" ( (comma_expression "iVar3 = FUN_00016a30(), iVar3 != 0" (assignment_expression "iVar3 = FUN_00016a30()" identifier = (call_expression "FUN_00016a30()" identifier (argument_list "()" ( )))) , (binary_expression "iVar3 != 0" identifier != number_literal)) ))) )) (compound_statement "{\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }" { (labeled_statement "LAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);" statement_identifier : (expression_statement "(**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);" (call_expression "(**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0)" (parenthesized_expression "(**(code **)(*(int *)(param_3 + 4) + 0x148))" ( (pointer_expression "**(code **)(*(int *)(param_3 + 4) + 0x148)" * (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" * (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" ( (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(param_3,iVar2,0,0)" ( identifier , identifier , number_literal , number_literal ))) ;)) (expression_statement "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;" (assignment_expression "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))) & number_literal)) ;) (return_statement "return;" return ;) })) (expression_statement "iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);" (assignment_expression "iVar3 = bfd_get_reloc_upper_bound(param_1,param_2)" identifier = (call_expression "bfd_get_reloc_upper_bound(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier )))) ;) (if_statement "if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }" { (if_statement "if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }" if (parenthesized_expression "((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5))" ( (binary_expression "(iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)" (parenthesized_expression "(iVar3 != -1)" ( (binary_expression "iVar3 != -1" identifier != number_literal) )) || (parenthesized_expression "(iVar3 = bfd_get_error(), iVar3 != 5)" ( (comma_expression "iVar3 = bfd_get_error(), iVar3 != 5" (assignment_expression "iVar3 = bfd_get_error()" identifier = (call_expression "bfd_get_error()" identifier (argument_list "()" ( )))) , (binary_expression "iVar3 != 5" identifier != number_literal)) ))) )) (compound_statement "{\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }" { (expression_statement "DAT_00040bc8 = 1;" (assignment_expression "DAT_00040bc8 = 1" identifier = number_literal) ;) (expression_statement "FUN_0002d3a0(0,param_1,param_2,0);" (call_expression "FUN_0002d3a0(0,param_1,param_2,0)" identifier (argument_list "(0,param_1,param_2,0)" ( number_literal , identifier , identifier , number_literal ))) ;) (return_statement "return;" return ;) })) (goto_statement "goto LAB_00018554;" goto statement_identifier ;) })) (if_statement "if (iVar3 == 0) goto LAB_00018554;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00018554;" goto statement_identifier ;)) (expression_statement "local_28 = *(undefined4 **)(param_2 + 0x60);" (assignment_expression "local_28 = *(undefined4 **)(param_2 + 0x60)" identifier = (pointer_expression "*(undefined4 **)(param_2 + 0x60)" * (cast_expression "(undefined4 **)(param_2 + 0x60)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) ))))) ;) (if_statement "if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }" if (parenthesized_expression "(local_28 == (undefined4 *)0x0)" ( (binary_expression "local_28 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }" { (expression_statement "local_28 = (undefined4 *)xmalloc(iVar3);" (assignment_expression "local_28 = (undefined4 *)xmalloc(iVar3)" identifier = (cast_expression "(undefined4 *)xmalloc(iVar3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(iVar3)" identifier (argument_list "(iVar3)" ( identifier ))))) ;) (expression_statement "local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);" (assignment_expression "local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc)" identifier = (call_expression "bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc)" identifier (argument_list "(param_1,param_2,local_28,DAT_00040bdc)" ( identifier , identifier , identifier , identifier )))) ;) (if_statement "if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }" if (parenthesized_expression "(local_2c < 0)" ( (binary_expression "local_2c < 0" identifier < number_literal) )) (compound_statement "{\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }" { (expression_statement "DAT_00040bc8 = 1;" (assignment_expression "DAT_00040bc8 = 1" identifier = number_literal) ;) (expression_statement "uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);" (assignment_expression "uVar7 = dcgettext(0,"relocation count is negative",5,iVar2)" identifier = (call_expression "dcgettext(0,"relocation count is negative",5,iVar2)" identifier (argument_list "(0,"relocation count is negative",5,iVar2)" ( number_literal , (string_literal ""relocation count is negative"" " string_content ") , number_literal , identifier )))) ;) (expression_statement "FUN_0002d3a0(0,param_1,param_2,uVar7);" (call_expression "FUN_0002d3a0(0,param_1,param_2,uVar7)" identifier (argument_list "(0,param_1,param_2,uVar7)" ( number_literal , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) }) (else_clause "else {\n    local_2c = *(int *)(param_2 + 100);\n  }" else (compound_statement "{\n    local_2c = *(int *)(param_2 + 100);\n  }" { (expression_statement "local_2c = *(int *)(param_2 + 100);" (assignment_expression "local_2c = *(int *)(param_2 + 100)" identifier = (pointer_expression "*(int *)(param_2 + 100)" * (cast_expression "(int *)(param_2 + 100)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 100)" ( (binary_expression "param_2 + 100" identifier + number_literal) ))))) ;) }))) (expression_statement "puVar5 = local_28;" (assignment_expression "puVar5 = local_28" identifier = identifier) ;) (if_statement "if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }" if (parenthesized_expression "(DAT_00040bb0 == 7)" ( (binary_expression "DAT_00040bb0 == 7" identifier == number_literal) )) (compound_statement "{\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }" { (expression_statement "puVar5 = (undefined4 *)xmalloc(iVar3);" (assignment_expression "puVar5 = (undefined4 *)xmalloc(iVar3)" identifier = (cast_expression "(undefined4 *)xmalloc(iVar3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(iVar3)" identifier (argument_list "(iVar3)" ( identifier ))))) ;) (if_statement "if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }" if (parenthesized_expression "(local_2c < 1)" ( (binary_expression "local_2c < 1" identifier < number_literal) )) (compound_statement "{\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }" { (if_statement "if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" if (parenthesized_expression "(*(int *)(param_2 + 0x60) == 0)" ( (binary_expression "*(int *)(param_2 + 0x60) == 0" (pointer_expression "*(int *)(param_2 + 0x60)" * (cast_expression "(int *)(param_2 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" { (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" * (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" ( (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" identifier = identifier) ;) }) (else_clause "else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" else (compound_statement "{\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" { (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" identifier = number_literal) ;) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" * (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" ( (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" identifier = identifier) ;) }))) (goto_statement "goto LAB_000185c3;" goto statement_identifier ;) })) (expression_statement "puVar1 = local_28 + local_2c;" (assignment_expression "puVar1 = local_28 + local_2c" identifier = (binary_expression "local_28 + local_2c" identifier + identifier)) ;) (expression_statement "puVar8 = local_28;" (assignment_expression "puVar8 = local_28" identifier = identifier) ;) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);" do (compound_statement "{\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    }" { (expression_statement "local_2c = iVar3;" (assignment_expression "local_2c = iVar3" identifier = identifier) ;) (if_statement "if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }" if (parenthesized_expression "(((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0))" ( (binary_expression "((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)" (parenthesized_expression "((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0))" ( (binary_expression "(*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)" (parenthesized_expression "(*(int **)*puVar8 != (int *)0x0)" ( (binary_expression "*(int **)*puVar8 != (int *)0x0" (pointer_expression "*(int **)*puVar8" * (cast_expression "(int **)*puVar8" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "*puVar8" * identifier))) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(**(int **)*puVar8 != 0)" ( (binary_expression "**(int **)*puVar8 != 0" (pointer_expression "**(int **)*puVar8" * (pointer_expression "*(int **)*puVar8" * (cast_expression "(int **)*puVar8" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "*puVar8" * identifier)))) != number_literal) ))) )) && (parenthesized_expression "(iVar6 = FUN_000179c0(), iVar6 != 0)" ( (comma_expression "iVar6 = FUN_000179c0(), iVar6 != 0" (assignment_expression "iVar6 = FUN_000179c0()" identifier = (call_expression "FUN_000179c0()" identifier (argument_list "()" ( )))) , (binary_expression "iVar6 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }" { (expression_statement "local_2c = iVar3 + 1;" (assignment_expression "local_2c = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "puVar5[iVar3] = *puVar8;" (assignment_expression "puVar5[iVar3] = *puVar8" (subscript_expression "puVar5[iVar3]" identifier [ identifier ]) = (pointer_expression "*puVar8" * identifier)) ;) })) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar3 = local_2c;" (assignment_expression "iVar3 = local_2c" identifier = identifier) ;) }) while (parenthesized_expression "(puVar1 != puVar8)" ( (binary_expression "puVar1 != puVar8" identifier != identifier) )) ;) (if_statement "if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }" if (parenthesized_expression "(*(int *)(param_2 + 0x60) == 0)" ( (binary_expression "*(int *)(param_2 + 0x60) == 0" (pointer_expression "*(int *)(param_2 + 0x60)" * (cast_expression "(int *)(param_2 + 0x60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      free(local_28);\n    }" { (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) })) })) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" identifier = identifier) ;) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" identifier = (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" * (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" ( (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }" if (parenthesized_expression "(local_2c != 0)" ( (binary_expression "local_2c != 0" identifier != number_literal) )) (compound_statement "{\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }" { (expression_statement "(*pcVar4)(param_3,iVar2,local_28,local_2c);" (call_expression "(*pcVar4)(param_3,iVar2,local_28,local_2c)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(param_3,iVar2,local_28,local_2c)" ( identifier , identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (labeled_statement "LAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);" statement_identifier : (expression_statement "(*pcVar4)(param_3,iVar2,0,local_2c);" (call_expression "(*pcVar4)(param_3,iVar2,0,local_2c)" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "(param_3,iVar2,0,local_2c)" ( identifier , identifier , number_literal , identifier ))) ;)) (expression_statement "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;" (assignment_expression "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))) = (binary_expression "*(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "free(local_28);" (call_expression "free(local_28)" identifier (argument_list "(local_28)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return ;) })) (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 (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) )) (argument_list ( IDENT , IDENT , LIT , LIT ))) ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , IDENT , IDENT , LIT ))) ;) (return_statement return ;) })) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( LIT , IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (pointer_expression * IDENT))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (pointer_expression * IDENT)))) != LIT) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (pointer_expression * IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , LIT , IDENT ))) ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return ;) })))
(function_definition "void FUN_00018500(undefined4 param_1,int param_2,int param_3)\n\n{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int local_2c;\n  undefined4 *local_28;\n  \n  iVar2 = FUN_00017fd0();\n  if (iVar2 != 0) {\n    return;\n  }\n  iVar2 = *(int *)(param_2 + 0x54);\n  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }\n  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);\n  if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar3 == 0) goto LAB_00018554;\n  local_28 = *(undefined4 **)(param_2 + 0x60);\n  if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }\n  puVar5 = local_28;\n  if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }\n  local_28 = puVar5;\n  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);\n  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n  free(local_28);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00018500(undefined4 param_1,int param_2,int param_3)" (identifier "FUN_00018500") (parameter_list "(undefined4 param_1,int param_2,int param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined4 *puVar1;\n  int iVar2;\n  int iVar3;\n  code *pcVar4;\n  undefined4 *puVar5;\n  int iVar6;\n  undefined4 uVar7;\n  undefined4 *puVar8;\n  int local_2c;\n  undefined4 *local_28;\n  \n  iVar2 = FUN_00017fd0();\n  if (iVar2 != 0) {\n    return;\n  }\n  iVar2 = *(int *)(param_2 + 0x54);\n  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }\n  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);\n  if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }\n  if (iVar3 == 0) goto LAB_00018554;\n  local_28 = *(undefined4 **)(param_2 + 0x60);\n  if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }\n  puVar5 = local_28;\n  if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }\n  local_28 = puVar5;\n  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n  if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }\nLAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);\n  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n  free(local_28);\n  return;\n}" ({ "{") (declaration "undefined4 *puVar1;" (type_identifier "undefined4") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "code *pcVar4;" (type_identifier "code") (pointer_declarator "*pcVar4" (* "*") (identifier "pcVar4")) (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined4 uVar7;" (type_identifier "undefined4") (identifier "uVar7") (; ";")) (declaration "undefined4 *puVar8;" (type_identifier "undefined4") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "int local_2c;" (primitive_type "int") (identifier "local_2c") (; ";")) (declaration "undefined4 *local_28;" (type_identifier "undefined4") (pointer_declarator "*local_28" (* "*") (identifier "local_28")) (; ";")) (expression_statement "iVar2 = FUN_00017fd0();" (assignment_expression "iVar2 = FUN_00017fd0()" (identifier "iVar2") (= "=") (call_expression "FUN_00017fd0()" (identifier "FUN_00017fd0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar2 != 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "iVar2 = *(int *)(param_2 + 0x54);" (assignment_expression "iVar2 = *(int *)(param_2 + 0x54)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_2 + 0x54)" (* "*") (cast_expression "(int *)(param_2 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x54)" (( "(") (binary_expression "param_2 + 0x54" (identifier "param_2") (+ "+") (number_literal "0x54")) () ")"))))) (; ";")) (if_statement "if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)) {\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }" (if "if") (parenthesized_expression "((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0))" (( "(") (binary_expression "(((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||\n     (iVar3 = FUN_00016a30(), iVar3 != 0)" (parenthesized_expression "(((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6))" (( "(") (binary_expression "((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)" (parenthesized_expression "((*(byte *)(param_3 + 0x28) & 7) == 3)" (( "(") (binary_expression "(*(byte *)(param_3 + 0x28) & 7) == 3" (parenthesized_expression "(*(byte *)(param_3 + 0x28) & 7)" (( "(") (binary_expression "*(byte *)(param_3 + 0x28) & 7" (pointer_expression "*(byte *)(param_3 + 0x28)" (* "*") (cast_expression "(byte *)(param_3 + 0x28)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 0x28)" (( "(") (binary_expression "param_3 + 0x28" (identifier "param_3") (+ "+") (number_literal "0x28")) () ")")))) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "3")) () ")")) (|| "||") (parenthesized_expression "(DAT_00040bb0 == 6)" (( "(") (binary_expression "DAT_00040bb0 == 6" (identifier "DAT_00040bb0") (== "==") (number_literal "6")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(iVar3 = FUN_00016a30(), iVar3 != 0)" (( "(") (comma_expression "iVar3 = FUN_00016a30(), iVar3 != 0" (assignment_expression "iVar3 = FUN_00016a30()" (identifier "iVar3") (= "=") (call_expression "FUN_00016a30()" (identifier "FUN_00016a30") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\nLAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);\n    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;\n    return;\n  }" ({ "{") (labeled_statement "LAB_00018554:\n    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);" (statement_identifier "LAB_00018554") (: ":") (expression_statement "(**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);" (call_expression "(**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0)" (parenthesized_expression "(**(code **)(*(int *)(param_3 + 4) + 0x148))" (( "(") (pointer_expression "**(code **)(*(int *)(param_3 + 4) + 0x148)" (* "*") (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" (* "*") (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" (( "(") (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "0x148")) () ")"))))) () ")")) (argument_list "(param_3,iVar2,0,0)" (( "(") (identifier "param_3") (, ",") (identifier "iVar2") (, ",") (number_literal "0") (, ",") (number_literal "0") () ")"))) (; ";"))) (expression_statement "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;" (assignment_expression "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" (* "*") (cast_expression "(uint *)(iVar2 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x14)" (( "(") (binary_expression "iVar2 + 0x14" (identifier "iVar2") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "*(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" (* "*") (cast_expression "(uint *)(iVar2 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x14)" (( "(") (binary_expression "iVar2 + 0x14" (identifier "iVar2") (+ "+") (number_literal "0x14")) () ")")))) (& "&") (number_literal "0xfffffffb"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);" (assignment_expression "iVar3 = bfd_get_reloc_upper_bound(param_1,param_2)" (identifier "iVar3") (= "=") (call_expression "bfd_get_reloc_upper_bound(param_1,param_2)" (identifier "bfd_get_reloc_upper_bound") (argument_list "(param_1,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar3 < 0) {\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }" (if "if") (parenthesized_expression "(iVar3 < 0)" (( "(") (binary_expression "iVar3 < 0" (identifier "iVar3") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }\n    goto LAB_00018554;\n  }" ({ "{") (if_statement "if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }" (if "if") (parenthesized_expression "((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5))" (( "(") (binary_expression "(iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)" (parenthesized_expression "(iVar3 != -1)" (( "(") (binary_expression "iVar3 != -1" (identifier "iVar3") (!= "!=") (number_literal "-1")) () ")")) (|| "||") (parenthesized_expression "(iVar3 = bfd_get_error(), iVar3 != 5)" (( "(") (comma_expression "iVar3 = bfd_get_error(), iVar3 != 5" (assignment_expression "iVar3 = bfd_get_error()" (identifier "iVar3") (= "=") (call_expression "bfd_get_error()" (identifier "bfd_get_error") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar3 != 5" (identifier "iVar3") (!= "!=") (number_literal "5"))) () ")"))) () ")")) (compound_statement "{\n      DAT_00040bc8 = 1;\n      FUN_0002d3a0(0,param_1,param_2,0);\n      return;\n    }" ({ "{") (expression_statement "DAT_00040bc8 = 1;" (assignment_expression "DAT_00040bc8 = 1" (identifier "DAT_00040bc8") (= "=") (number_literal "1")) (; ";")) (expression_statement "FUN_0002d3a0(0,param_1,param_2,0);" (call_expression "FUN_0002d3a0(0,param_1,param_2,0)" (identifier "FUN_0002d3a0") (argument_list "(0,param_1,param_2,0)" (( "(") (number_literal "0") (, ",") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (number_literal "0") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (goto_statement "goto LAB_00018554;" (goto "goto") (statement_identifier "LAB_00018554") (; ";")) (} "}"))) (if_statement "if (iVar3 == 0) goto LAB_00018554;" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00018554;" (goto "goto") (statement_identifier "LAB_00018554") (; ";"))) (expression_statement "local_28 = *(undefined4 **)(param_2 + 0x60);" (assignment_expression "local_28 = *(undefined4 **)(param_2 + 0x60)" (identifier "local_28") (= "=") (pointer_expression "*(undefined4 **)(param_2 + 0x60)" (* "*") (cast_expression "(undefined4 **)(param_2 + 0x60)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x60)" (( "(") (binary_expression "param_2 + 0x60" (identifier "param_2") (+ "+") (number_literal "0x60")) () ")"))))) (; ";")) (if_statement "if (local_28 == (undefined4 *)0x0) {\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }\n  else {\n    local_2c = *(int *)(param_2 + 100);\n  }" (if "if") (parenthesized_expression "(local_28 == (undefined4 *)0x0)" (( "(") (binary_expression "local_28 == (undefined4 *)0x0" (identifier "local_28") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    local_28 = (undefined4 *)xmalloc(iVar3);\n    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);\n    if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }\n  }" ({ "{") (expression_statement "local_28 = (undefined4 *)xmalloc(iVar3);" (assignment_expression "local_28 = (undefined4 *)xmalloc(iVar3)" (identifier "local_28") (= "=") (cast_expression "(undefined4 *)xmalloc(iVar3)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "xmalloc(iVar3)" (identifier "xmalloc") (argument_list "(iVar3)" (( "(") (identifier "iVar3") () ")"))))) (; ";")) (expression_statement "local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);" (assignment_expression "local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc)" (identifier "local_2c") (= "=") (call_expression "bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc)" (identifier "bfd_canonicalize_reloc") (argument_list "(param_1,param_2,local_28,DAT_00040bdc)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "local_28") (, ",") (identifier "DAT_00040bdc") () ")")))) (; ";")) (if_statement "if (local_2c < 0) {\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }" (if "if") (parenthesized_expression "(local_2c < 0)" (( "(") (binary_expression "local_2c < 0" (identifier "local_2c") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      DAT_00040bc8 = 1;\n      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);\n      FUN_0002d3a0(0,param_1,param_2,uVar7);\n      return;\n    }" ({ "{") (expression_statement "DAT_00040bc8 = 1;" (assignment_expression "DAT_00040bc8 = 1" (identifier "DAT_00040bc8") (= "=") (number_literal "1")) (; ";")) (expression_statement "uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);" (assignment_expression "uVar7 = dcgettext(0,"relocation count is negative",5,iVar2)" (identifier "uVar7") (= "=") (call_expression "dcgettext(0,"relocation count is negative",5,iVar2)" (identifier "dcgettext") (argument_list "(0,"relocation count is negative",5,iVar2)" (( "(") (number_literal "0") (, ",") (string_literal ""relocation count is negative"" (" """) (string_content "relocation count is negative") (" """)) (, ",") (number_literal "5") (, ",") (identifier "iVar2") () ")")))) (; ";")) (expression_statement "FUN_0002d3a0(0,param_1,param_2,uVar7);" (call_expression "FUN_0002d3a0(0,param_1,param_2,uVar7)" (identifier "FUN_0002d3a0") (argument_list "(0,param_1,param_2,uVar7)" (( "(") (number_literal "0") (, ",") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "uVar7") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    local_2c = *(int *)(param_2 + 100);\n  }" (else "else") (compound_statement "{\n    local_2c = *(int *)(param_2 + 100);\n  }" ({ "{") (expression_statement "local_2c = *(int *)(param_2 + 100);" (assignment_expression "local_2c = *(int *)(param_2 + 100)" (identifier "local_2c") (= "=") (pointer_expression "*(int *)(param_2 + 100)" (* "*") (cast_expression "(int *)(param_2 + 100)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 100)" (( "(") (binary_expression "param_2 + 100" (identifier "param_2") (+ "+") (number_literal "100")) () ")"))))) (; ";")) (} "}")))) (expression_statement "puVar5 = local_28;" (assignment_expression "puVar5 = local_28" (identifier "puVar5") (= "=") (identifier "local_28")) (; ";")) (if_statement "if (DAT_00040bb0 == 7) {\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }" (if "if") (parenthesized_expression "(DAT_00040bb0 == 7)" (( "(") (binary_expression "DAT_00040bb0 == 7" (identifier "DAT_00040bb0") (== "==") (number_literal "7")) () ")")) (compound_statement "{\n    puVar5 = (undefined4 *)xmalloc(iVar3);\n    if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }\n    puVar1 = local_28 + local_2c;\n    puVar8 = local_28;\n    iVar3 = 0;\n    do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);\n    if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }\n  }" ({ "{") (expression_statement "puVar5 = (undefined4 *)xmalloc(iVar3);" (assignment_expression "puVar5 = (undefined4 *)xmalloc(iVar3)" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)xmalloc(iVar3)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "xmalloc(iVar3)" (identifier "xmalloc") (argument_list "(iVar3)" (( "(") (identifier "iVar3") () ")"))))) (; ";")) (if_statement "if (local_2c < 1) {\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }" (if "if") (parenthesized_expression "(local_2c < 1)" (( "(") (binary_expression "local_2c < 1" (identifier "local_2c") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      goto LAB_000185c3;\n    }" ({ "{") (if_statement "if (*(int *)(param_2 + 0x60) == 0) {\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }\n      else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0x60) == 0)" (( "(") (binary_expression "*(int *)(param_2 + 0x60) == 0" (pointer_expression "*(int *)(param_2 + 0x60)" (* "*") (cast_expression "(int *)(param_2 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x60)" (( "(") (binary_expression "param_2 + 0x60" (identifier "param_2") (+ "+") (number_literal "0x60")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        free(local_28);\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" ({ "{") (expression_statement "free(local_28);" (call_expression "free(local_28)" (identifier "free") (argument_list "(local_28)" (( "(") (identifier "local_28") () ")"))) (; ";")) (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" (identifier "local_2c") (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" (identifier "pcVar4") (= "=") (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" (* "*") (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" (( "(") (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "0x148")) () ")"))))) (; ";")) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" (identifier "local_28") (= "=") (identifier "puVar5")) (; ";")) (} "}")) (else_clause "else {\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" (else "else") (compound_statement "{\n        local_2c = 0;\n        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);\n        local_28 = puVar5;\n      }" ({ "{") (expression_statement "local_2c = 0;" (assignment_expression "local_2c = 0" (identifier "local_2c") (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" (identifier "pcVar4") (= "=") (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" (* "*") (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" (( "(") (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "0x148")) () ")"))))) (; ";")) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" (identifier "local_28") (= "=") (identifier "puVar5")) (; ";")) (} "}")))) (goto_statement "goto LAB_000185c3;" (goto "goto") (statement_identifier "LAB_000185c3") (; ";")) (} "}"))) (expression_statement "puVar1 = local_28 + local_2c;" (assignment_expression "puVar1 = local_28 + local_2c" (identifier "puVar1") (= "=") (binary_expression "local_28 + local_2c" (identifier "local_28") (+ "+") (identifier "local_2c"))) (; ";")) (expression_statement "puVar8 = local_28;" (assignment_expression "puVar8 = local_28" (identifier "puVar8") (= "=") (identifier "local_28")) (; ";")) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    } while (puVar1 != puVar8);" (do "do") (compound_statement "{\n      local_2c = iVar3;\n      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }\n      puVar8 = puVar8 + 1;\n      iVar3 = local_2c;\n    }" ({ "{") (expression_statement "local_2c = iVar3;" (assignment_expression "local_2c = iVar3" (identifier "local_2c") (= "=") (identifier "iVar3")) (; ";")) (if_statement "if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)) {\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }" (if "if") (parenthesized_expression "(((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0))" (( "(") (binary_expression "((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&\n         (iVar6 = FUN_000179c0(), iVar6 != 0)" (parenthesized_expression "((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0))" (( "(") (binary_expression "(*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)" (parenthesized_expression "(*(int **)*puVar8 != (int *)0x0)" (( "(") (binary_expression "*(int **)*puVar8 != (int *)0x0" (pointer_expression "*(int **)*puVar8" (* "*") (cast_expression "(int **)*puVar8" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (pointer_expression "*puVar8" (* "*") (identifier "puVar8")))) (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(**(int **)*puVar8 != 0)" (( "(") (binary_expression "**(int **)*puVar8 != 0" (pointer_expression "**(int **)*puVar8" (* "*") (pointer_expression "*(int **)*puVar8" (* "*") (cast_expression "(int **)*puVar8" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))))) (!= "!=") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(iVar6 = FUN_000179c0(), iVar6 != 0)" (( "(") (comma_expression "iVar6 = FUN_000179c0(), iVar6 != 0" (assignment_expression "iVar6 = FUN_000179c0()" (identifier "iVar6") (= "=") (call_expression "FUN_000179c0()" (identifier "FUN_000179c0") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar6 != 0" (identifier "iVar6") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n        local_2c = iVar3 + 1;\n        puVar5[iVar3] = *puVar8;\n      }" ({ "{") (expression_statement "local_2c = iVar3 + 1;" (assignment_expression "local_2c = iVar3 + 1" (identifier "local_2c") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar5[iVar3] = *puVar8;" (assignment_expression "puVar5[iVar3] = *puVar8" (subscript_expression "puVar5[iVar3]" (identifier "puVar5") ([ "[") (identifier "iVar3") (] "]")) (= "=") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))) (; ";")) (} "}"))) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar3 = local_2c;" (assignment_expression "iVar3 = local_2c" (identifier "iVar3") (= "=") (identifier "local_2c")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar1 != puVar8)" (( "(") (binary_expression "puVar1 != puVar8" (identifier "puVar1") (!= "!=") (identifier "puVar8")) () ")")) (; ";")) (if_statement "if (*(int *)(param_2 + 0x60) == 0) {\n      free(local_28);\n    }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0x60) == 0)" (( "(") (binary_expression "*(int *)(param_2 + 0x60) == 0" (pointer_expression "*(int *)(param_2 + 0x60)" (* "*") (cast_expression "(int *)(param_2 + 0x60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x60)" (( "(") (binary_expression "param_2 + 0x60" (identifier "param_2") (+ "+") (number_literal "0x60")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      free(local_28);\n    }" ({ "{") (expression_statement "free(local_28);" (call_expression "free(local_28)" (identifier "free") (argument_list "(local_28)" (( "(") (identifier "local_28") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "local_28 = puVar5;" (assignment_expression "local_28 = puVar5" (identifier "local_28") (= "=") (identifier "puVar5")) (; ";")) (expression_statement "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);" (assignment_expression "pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148)" (identifier "pcVar4") (= "=") (pointer_expression "*(code **)(*(int *)(param_3 + 4) + 0x148)" (* "*") (cast_expression "(code **)(*(int *)(param_3 + 4) + 0x148)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(param_3 + 4) + 0x148)" (( "(") (binary_expression "*(int *)(param_3 + 4) + 0x148" (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")")))) (+ "+") (number_literal "0x148")) () ")"))))) (; ";")) (if_statement "if (local_2c != 0) {\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }" (if "if") (parenthesized_expression "(local_2c != 0)" (( "(") (binary_expression "local_2c != 0" (identifier "local_2c") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    (*pcVar4)(param_3,iVar2,local_28,local_2c);\n    return;\n  }" ({ "{") (expression_statement "(*pcVar4)(param_3,iVar2,local_28,local_2c);" (call_expression "(*pcVar4)(param_3,iVar2,local_28,local_2c)" (parenthesized_expression "(*pcVar4)" (( "(") (pointer_expression "*pcVar4" (* "*") (identifier "pcVar4")) () ")")) (argument_list "(param_3,iVar2,local_28,local_2c)" (( "(") (identifier "param_3") (, ",") (identifier "iVar2") (, ",") (identifier "local_28") (, ",") (identifier "local_2c") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (labeled_statement "LAB_000185c3:\n  (*pcVar4)(param_3,iVar2,0,local_2c);" (statement_identifier "LAB_000185c3") (: ":") (expression_statement "(*pcVar4)(param_3,iVar2,0,local_2c);" (call_expression "(*pcVar4)(param_3,iVar2,0,local_2c)" (parenthesized_expression "(*pcVar4)" (( "(") (pointer_expression "*pcVar4" (* "*") (identifier "pcVar4")) () ")")) (argument_list "(param_3,iVar2,0,local_2c)" (( "(") (identifier "param_3") (, ",") (identifier "iVar2") (, ",") (number_literal "0") (, ",") (identifier "local_2c") () ")"))) (; ";"))) (expression_statement "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;" (assignment_expression "*(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" (* "*") (cast_expression "(uint *)(iVar2 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x14)" (( "(") (binary_expression "iVar2 + 0x14" (identifier "iVar2") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "*(uint *)(iVar2 + 0x14) & 0xfffffffb" (pointer_expression "*(uint *)(iVar2 + 0x14)" (* "*") (cast_expression "(uint *)(iVar2 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x14)" (( "(") (binary_expression "iVar2 + 0x14" (identifier "iVar2") (+ "+") (number_literal "0x14")) () ")")))) (& "&") (number_literal "0xfffffffb"))) (; ";")) (expression_statement "free(local_28);" (call_expression "free(local_28)" (identifier "free") (argument_list "(local_28)" (( "(") (identifier "local_28") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

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

void function_1(type_1 *ibfd,type_2 isection,void *obfdarg)

{
  type_3 **var_22;
  type_4 *pbVar2;
  type_5 *var_18;
  type_6 var_2;
  type_7 *var_6;
  int var_8;
  type_8 *pcVar7;
  type_3 **pprVar8;
  char *format;
  type_3 **var_21;
  type_9 var_20;
  type_9 var_17;
  type_3 **var_11;
  
  var_2 = var_1(ibfd,isection,0);
  if (var_2 != 0) {
    return;
  }
  pbVar2 = isection->output_section;
  if ((((*(type_10 *)((int)obfdarg + 0x28) & 7) == 3) || (var_3 == var_4)) ||
     (var_6 = var_5(isection->name,0,0x80), var_6 != (type_7 *)0x0)) {
LAB_00018554:
    (**(type_8 **)(*(int *)((int)obfdarg + 4) + 0x148))(obfdarg,pbVar2,0,0);
    pbVar2->flags = pbVar2->flags & 0xfffffffb;
    return;
  }
  var_8 = var_7(ibfd,isection);
  if (var_8 < 0) {
    if ((var_8 != -1) || (var_8 = var_9(), var_8 != 5)) {
      status = 1;
      var_10((char *)0x0,ibfd,isection,(char *)0x0);
      return;
    }
    goto LAB_00018554;
  }
  if (var_8 == 0) goto LAB_00018554;
  var_11 = isection->orelocation;
  if (var_11 == (type_3 **)0x0) {
    var_11 = (type_3 **)var_12(var_8);
    var_17 = var_13(ibfd,isection,var_11,isympp);
    if ((int)var_17 < 0) {
      status = 1;
      format = (char *)var_14(0,"relocation count is negative",5,pbVar2);
      var_10((char *)0x0,ibfd,isection,format);
      return;
    }
  }
  else {
    var_17 = isection->reloc_count;
  }
  pprVar8 = var_11;
  if (var_3 == var_15) {
    pprVar8 = (type_3 **)var_12(var_8);
    if ((int)var_17 < 1) {
      if (isection->orelocation == (type_3 **)0x0) {
        var_16(var_11);
        var_17 = 0;
        pcVar7 = *(type_8 **)(*(int *)((int)obfdarg + 4) + 0x148);
        var_11 = pprVar8;
      }
      else {
        var_17 = 0;
        pcVar7 = *(type_8 **)(*(int *)((int)obfdarg + 4) + 0x148);
        var_11 = pprVar8;
      }
      goto LAB_000185c3;
    }
    var_22 = var_11 + var_17;
    var_21 = var_11;
    var_20 = 0;
    do {
      var_17 = var_20;
      if ((((*var_21)->sym_ptr_ptr != (type_5 **)0x0) &&
          (var_18 = *(*var_21)->sym_ptr_ptr, var_18 != (type_5 *)0x0)) &&
         (var_2 = var_19(var_18->name,keep_specific_htab), var_2 != 0)) {
        var_17 = var_20 + 1;
        pprVar8[var_20] = *var_21;
      }
      var_21 = var_21 + 1;
      var_20 = var_17;
    } while (var_22 != var_21);
    if (isection->orelocation == (type_3 **)0x0) {
      var_16(var_11);
    }
  }
  var_11 = pprVar8;
  pcVar7 = *(type_8 **)(*(int *)((int)obfdarg + 4) + 0x148);
  if (var_17 != 0) {
    (*pcVar7)(obfdarg,pbVar2,var_11,var_17);
    return;
  }
LAB_000185c3:
  (*pcVar7)(obfdarg,pbVar2,0,var_17);
  pbVar2->flags = pbVar2->flags & 0xfffffffb;
  var_16(var_11);
  return;
}


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

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

void MASKED(undefined4 param_1,int param_2,int param_3)

{
  undefined4 *puVar1;
  int iVar2;
  int iVar3;
  code *pcVar4;
  undefined4 *puVar5;
  int iVar6;
  undefined4 uVar7;
  undefined4 *puVar8;
  int local_2c;
  undefined4 *local_28;
  
  iVar2 = FUN_00017fd0();
  if (iVar2 != 0) {
    return;
  }
  iVar2 = *(int *)(param_2 + 0x54);
  if ((((*(byte *)(param_3 + 0x28) & 7) == 3) || (DAT_00040bb0 == 6)) ||
     (iVar3 = FUN_00016a30(), iVar3 != 0)) {
LAB_00018554:
    (**(code **)(*(int *)(param_3 + 4) + 0x148))(param_3,iVar2,0,0);
    *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;
    return;
  }
  iVar3 = bfd_get_reloc_upper_bound(param_1,param_2);
  if (iVar3 < 0) {
    if ((iVar3 != -1) || (iVar3 = bfd_get_error(), iVar3 != 5)) {
      DAT_00040bc8 = 1;
      FUN_0002d3a0(0,param_1,param_2,0);
      return;
    }
    goto LAB_00018554;
  }
  if (iVar3 == 0) goto LAB_00018554;
  local_28 = *(undefined4 **)(param_2 + 0x60);
  if (local_28 == (undefined4 *)0x0) {
    local_28 = (undefined4 *)xmalloc(iVar3);
    local_2c = bfd_canonicalize_reloc(param_1,param_2,local_28,DAT_00040bdc);
    if (local_2c < 0) {
      DAT_00040bc8 = 1;
      uVar7 = dcgettext(0,"relocation count is negative",5,iVar2);
      FUN_0002d3a0(0,param_1,param_2,uVar7);
      return;
    }
  }
  else {
    local_2c = *(int *)(param_2 + 100);
  }
  puVar5 = local_28;
  if (DAT_00040bb0 == 7) {
    puVar5 = (undefined4 *)xmalloc(iVar3);
    if (local_2c < 1) {
      if (*(int *)(param_2 + 0x60) == 0) {
        free(local_28);
        local_2c = 0;
        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);
        local_28 = puVar5;
      }
      else {
        local_2c = 0;
        pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);
        local_28 = puVar5;
      }
      goto LAB_000185c3;
    }
    puVar1 = local_28 + local_2c;
    puVar8 = local_28;
    iVar3 = 0;
    do {
      local_2c = iVar3;
      if (((*(int **)*puVar8 != (int *)0x0) && (**(int **)*puVar8 != 0)) &&
         (iVar6 = FUN_000179c0(), iVar6 != 0)) {
        local_2c = iVar3 + 1;
        puVar5[iVar3] = *puVar8;
      }
      puVar8 = puVar8 + 1;
      iVar3 = local_2c;
    } while (puVar1 != puVar8);
    if (*(int *)(param_2 + 0x60) == 0) {
      free(local_28);
    }
  }
  local_28 = puVar5;
  pcVar4 = *(code **)(*(int *)(param_3 + 4) + 0x148);
  if (local_2c != 0) {
    (*pcVar4)(param_3,iVar2,local_28,local_2c);
    return;
  }
LAB_000185c3:
  (*pcVar4)(param_3,iVar2,0,local_2c);
  *(uint *)(iVar2 + 0x14) = *(uint *)(iVar2 + 0x14) & 0xfffffffb;
  free(local_28);
  return;
}

