
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* DWARF original prototype: void lowest_load_address_in_list(Output_segment * this,
   Output_data_list * pdl, Output_section * * found, uint64_t * found_lma) */

void __thiscall
gold::Output_segment::lowest_load_address_in_list
          (Output_segment *this,Output_data_list *pdl,Output_section **found,uint64_t *found_lma)

{
  Output_section *pOVar1;
  _func_int_varargs *p_Var2;
  byte bVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  uint extraout_EDX;
  pointer ppOVar7;
  
  ppOVar7 = (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).
            _M_impl._M_start;
  if (ppOVar7 !=
      (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl.
      _M_finish) {
    do {
      iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);
      if ((char)iVar4 != '\0') {
        pOVar1 = (Output_section *)*ppOVar7;
        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];
        if (p_Var2 == Output_section::do_has_load_address) {
          bVar3 = (byte)pOVar1->field_0x90 >> 7;
        }
        else {
          iVar4 = (*p_Var2)(pOVar1);
          bVar3 = (byte)iVar4;
        }
        if (bVar3 == 0) {
          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {
                    /* WARNING: Subroutine does not return */
            do_gold_unreachable("../../gold/output.h",0xc5,"address");
          }
          uVar5 = (uint)(pOVar1->super_Output_data).address_;
          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);
        }
        else {
          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];
          if (p_Var2 == Output_section::do_load_address) {
            if (-1 < (char)pOVar1->field_0x90) {
                    /* WARNING: Subroutine does not return */
              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");
            }
            uVar5 = (uint)pOVar1->load_address_;
            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);
          }
          else {
            uVar5 = (*p_Var2)(pOVar1);
            uVar6 = extraout_EDX;
          }
        }
        if ((*found == (Output_section *)0x0) ||
           (uVar6 < *(uint *)((int)found_lma + 4) ||
            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {
          *found = pOVar1;
          *(uint *)found_lma = uVar5;
          *(uint *)((int)found_lma + 4) = uVar6;
        }
      }
      ppOVar7 = ppOVar7 + 1;
    } while ((pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).
             _M_impl._M_finish != ppOVar7);
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)

{
  int *piVar1;
  char cVar2;
  byte bVar3;
  uint uVar4;
  undefined4 *puVar5;
  undefined8 uVar6;
  
  puVar5 = (undefined4 *)*param_2;
  if (puVar5 != (undefined4 *)param_2[1]) {
    do {
      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);
      if (cVar2 != '\0') {
        piVar1 = (int *)*puVar5;
        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {
          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;
        }
        else {
          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);
        }
        if (bVar3 == 0) {
          if ((*(byte *)(piVar1 + 7) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
            FUN_0007d010("../../gold/output.h",0xc5,"address");
          }
          uVar6 = *(undefined8 *)(piVar1 + 1);
        }
        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {
          if (-1 < (char)piVar1[0x24]) {
                    /* WARNING: Subroutine does not return */
            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");
          }
          uVar6 = *(undefined8 *)(piVar1 + 0xd);
        }
        else {
          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);
        }
        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);
        if ((*param_3 == 0) ||
           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {
          *param_3 = (int)piVar1;
          *(undefined8 *)param_4 = uVar6;
        }
      }
      puVar5 = puVar5 + 1;
    } while ((undefined4 *)param_2[1] != puVar5);
  }
  return;
}


CALL 0x000644b6
ADD EAX,0x2a7f8b
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV EDI,dword ptr [ESP + 0x34]
MOV EBP,dword ptr [ESP + 0x38]
MOV dword ptr [ESP + 0xc],EAX
MOV ESI,dword ptr [ESP + 0x3c]
MOV EBX,dword ptr [EDI]
CMP EBX,dword ptr [EDI + 0x4]
JZ 0x00107170
LEA EDX,[EAX + 0xffd0a670]
LEA EAX,[EAX + 0xffd0a8f0]
MOV dword ptr [ESP],EDX
MOV dword ptr [ESP + 0x4],EAX
JMP 0x001070fe
MOV EAX,dword ptr [ECX]
MOV EAX,dword ptr [EAX + 0x14]
CMP EAX,dword ptr [ESP + 0x4]
JNZ 0x00107158
CMP byte ptr [ECX + 0x90],0x0
JNS 0x00107178
MOV EAX,dword ptr [ECX + 0x34]
MOV EDX,dword ptr [ECX + 0x38]
MOV EDI,dword ptr [EBP]
TEST EDI,EDI
JZ 0x001070ea
CMP EAX,dword ptr [ESI]
MOV EDI,EDX
SBB EDI,dword ptr [ESI + 0x4]
JNC 0x001070f2
MOV dword ptr [EBP],ECX
MOV dword ptr [ESI],EAX
MOV dword ptr [ESI + 0x4],EDX
MOV EAX,dword ptr [ESP + 0x34]
ADD EBX,0x4
CMP dword ptr [EAX + 0x4],EBX
JZ 0x00107170
MOV EAX,dword ptr [EBX]
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0x18]
ADD ESP,0x10
TEST AL,AL
JZ 0x001070f2
MOV ECX,dword ptr [EBX]
MOV EAX,dword ptr [ECX]
MOV EAX,dword ptr [EAX + 0x10]
CMP EAX,dword ptr [ESP]
JNZ 0x00107140
MOVZX EAX,byte ptr [ECX + 0x90]
SHR AL,0x7
TEST AL,AL
JNZ 0x001070b8
TEST byte ptr [ECX + 0x1c],0x1
JZ 0x00107197
MOV EAX,dword ptr [ECX + 0x4]
MOV EDX,dword ptr [ECX + 0x8]
JMP 0x001070da
SUB ESP,0xc
PUSH ECX
MOV dword ptr [ESP + 0x18],ECX
CALL EAX
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x8]
JMP 0x00107126
SUB ESP,0xc
PUSH ECX
MOV dword ptr [ESP + 0x18],ECX
CALL EAX
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x8]
JMP 0x001070da
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
MOV EBX,dword ptr [ESP + 0x10]
LEA EAX,[EBX + 0xfff00754]
PUSH EAX
LEA EAX,[EBX + 0xffeee371]
PUSH 0x107b
PUSH EAX
CALL 0x0007d010
SUB ESP,0x4
MOV EBX,dword ptr [ESP + 0x10]
LEA EAX,[EBX + 0xfff00ffc]
PUSH EAX
LEA EAX,[EBX + 0xffeee371]
PUSH 0xc5
PUSH EAX
CALL 0x0007d010
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nvoid FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)\n\n{\n  int *piVar1;\n  char cVar2;\n  byte bVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined8 uVar6;\n  \n  puVar5 = (undefined4 *)*param_2;\n  if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }\n  return;\n}\n\n" comment (function_definition "void FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)\n\n{\n  int *piVar1;\n  char cVar2;\n  byte bVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined8 uVar6;\n  \n  puVar5 = (undefined4 *)*param_2;\n  if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3,uint *param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  byte bVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined8 uVar6;\n  \n  puVar5 = (undefined4 *)*param_2;\n  if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (expression_statement "puVar5 = (undefined4 *)*param_2;" (assignment_expression "puVar5 = (undefined4 *)*param_2" identifier = (cast_expression "(undefined4 *)*param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }" if (parenthesized_expression "(puVar5 != (undefined4 *)param_2[1])" ( (binary_expression "puVar5 != (undefined4 *)param_2[1]" identifier != (cast_expression "(undefined4 *)param_2[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )) (compound_statement "{\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }" { (do_statement "do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);" do (compound_statement "{\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);" (assignment_expression "cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5)" identifier = (call_expression "(**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5)" (parenthesized_expression "(**(code **)(*(int *)*puVar5 + 0x18))" ( (pointer_expression "**(code **)(*(int *)*puVar5 + 0x18)" * (pointer_expression "*(code **)(*(int *)*puVar5 + 0x18)" * (cast_expression "(code **)(*(int *)*puVar5 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar5 + 0x18)" ( (binary_expression "*(int *)*puVar5 + 0x18" (pointer_expression "*(int *)*puVar5" * (cast_expression "(int *)*puVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar5)" ( (cast_expression "(int *)*puVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier)) )))) ;) (if_statement "if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }" { (expression_statement "piVar1 = (int *)*puVar5;" (assignment_expression "piVar1 = (int *)*puVar5" identifier = (cast_expression "(int *)*puVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) ;) (if_statement "if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" if (parenthesized_expression "(*(code **)(*piVar1 + 0x10) == FUN_000b9670)" ( (binary_expression "*(code **)(*piVar1 + 0x10) == FUN_000b9670" (pointer_expression "*(code **)(*piVar1 + 0x10)" * (cast_expression "(code **)(*piVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x10)" ( (binary_expression "*piVar1 + 0x10" (pointer_expression "*piVar1" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }" { (expression_statement "bVar3 = *(byte *)(piVar1 + 0x24) >> 7;" (assignment_expression "bVar3 = *(byte *)(piVar1 + 0x24) >> 7" identifier = (binary_expression "*(byte *)(piVar1 + 0x24) >> 7" (pointer_expression "*(byte *)(piVar1 + 0x24)" * (cast_expression "(byte *)(piVar1 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1 + 0x24)" ( (binary_expression "piVar1 + 0x24" identifier + number_literal) )))) >> number_literal)) ;) }) (else_clause "else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" else (compound_statement "{\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" { (expression_statement "bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);" (assignment_expression "bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x10))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x10))" ( (pointer_expression "**(code **)(*piVar1 + 0x10)" * (pointer_expression "*(code **)(*piVar1 + 0x10)" * (cast_expression "(code **)(*piVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x10)" ( (binary_expression "*piVar1 + 0x10" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }))) (if_statement "if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" if (parenthesized_expression "(bVar3 == 0)" ( (binary_expression "bVar3 == 0" identifier == number_literal) )) (compound_statement "{\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }" { (if_statement "if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }" if (parenthesized_expression "((*(byte *)(piVar1 + 7) & 1) == 0)" ( (binary_expression "(*(byte *)(piVar1 + 7) & 1) == 0" (parenthesized_expression "(*(byte *)(piVar1 + 7) & 1)" ( (binary_expression "*(byte *)(piVar1 + 7) & 1" (pointer_expression "*(byte *)(piVar1 + 7)" * (cast_expression "(byte *)(piVar1 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1 + 7)" ( (binary_expression "piVar1 + 7" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }" { comment (expression_statement "FUN_0007d010("../../gold/output.h",0xc5,"address");" (call_expression "FUN_0007d010("../../gold/output.h",0xc5,"address")" identifier (argument_list "("../../gold/output.h",0xc5,"address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") ))) ;) })) (expression_statement "uVar6 = *(undefined8 *)(piVar1 + 1);" (assignment_expression "uVar6 = *(undefined8 *)(piVar1 + 1)" identifier = (pointer_expression "*(undefined8 *)(piVar1 + 1)" * (cast_expression "(undefined8 *)(piVar1 + 1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1 + 1)" ( (binary_expression "piVar1 + 1" identifier + number_literal) ))))) ;) }) (else_clause "else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" else (if_statement "if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" if (parenthesized_expression "(*(code **)(*piVar1 + 0x14) == FUN_000b98f0)" ( (binary_expression "*(code **)(*piVar1 + 0x14) == FUN_000b98f0" (pointer_expression "*(code **)(*piVar1 + 0x14)" * (cast_expression "(code **)(*piVar1 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x14)" ( (binary_expression "*piVar1 + 0x14" (pointer_expression "*piVar1" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n          if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }" { (if_statement "if (-1 < (char)piVar1[0x24]) {\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }" if (parenthesized_expression "(-1 < (char)piVar1[0x24])" ( (binary_expression "-1 < (char)piVar1[0x24]" number_literal < (cast_expression "(char)piVar1[0x24]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "piVar1[0x24]" identifier [ number_literal ]))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }" { comment (expression_statement "FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");" (call_expression "FUN_0007d010("../../gold/output.h",0x107b,"do_load_address")" identifier (argument_list "("../../gold/output.h",0x107b,"do_load_address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""do_load_address"" " string_content ") ))) ;) })) (expression_statement "uVar6 = *(undefined8 *)(piVar1 + 0xd);" (assignment_expression "uVar6 = *(undefined8 *)(piVar1 + 0xd)" identifier = (pointer_expression "*(undefined8 *)(piVar1 + 0xd)" * (cast_expression "(undefined8 *)(piVar1 + 0xd)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1 + 0xd)" ( (binary_expression "piVar1 + 0xd" identifier + number_literal) ))))) ;) }) (else_clause "else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" else (compound_statement "{\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" { (expression_statement "uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);" (assignment_expression "uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x14))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x14))" ( (pointer_expression "**(code **)(*piVar1 + 0x14)" * (pointer_expression "*(code **)(*piVar1 + 0x14)" * (cast_expression "(code **)(*piVar1 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x14)" ( (binary_expression "*piVar1 + 0x14" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }))))) (expression_statement "uVar4 = (uint)((ulonglong)uVar6 >> 0x20);" (assignment_expression "uVar4 = (uint)((ulonglong)uVar6 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar6 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar6 >> 0x20)" ( (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }" if (parenthesized_expression "((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)))" ( (binary_expression "(*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))" (parenthesized_expression "(*param_3 == 0)" ( (binary_expression "*param_3 == 0" (pointer_expression "*param_3" * identifier) == number_literal) )) || (parenthesized_expression "(uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))" ( (binary_expression "uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)" (binary_expression "uVar4 < param_4[1]" identifier < (subscript_expression "param_4[1]" identifier [ number_literal ])) || (binary_expression "uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)" (binary_expression "uVar4 - param_4[1]" identifier - (subscript_expression "param_4[1]" identifier [ number_literal ])) < (call_expression "(uint)((uint)uVar6 < *param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)uVar6 < *param_4)" ( (binary_expression "(uint)uVar6 < *param_4" (cast_expression "(uint)uVar6" ( (type_descriptor "uint" type_identifier) ) identifier) < (pointer_expression "*param_4" * identifier)) ))))) ))) )) (compound_statement "{\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }" { (expression_statement "*param_3 = (int)piVar1;" (assignment_expression "*param_3 = (int)piVar1" (pointer_expression "*param_3" * identifier) = (cast_expression "(int)piVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "*(undefined8 *)param_4 = uVar6;" (assignment_expression "*(undefined8 *)param_4 = uVar6" (pointer_expression "*(undefined8 *)param_4" * (cast_expression "(undefined8 *)param_4" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) })) })) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)param_2[1] != puVar5)" ( (binary_expression "(undefined4 *)param_2[1] != puVar5" (cast_expression "(undefined4 *)param_2[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* DWARF original prototype: void lowest_load_address_in_list(Output_segment * this,\n   Output_data_list * pdl, Output_section * * found, uint64_t * found_lma) */\n\nvoid __thiscall\ngold::Output_segment::lowest_load_address_in_list\n          (Output_segment *this,Output_data_list *pdl,Output_section **found,uint64_t *found_lma)\n\n{\n  Output_section *pOVar1;\n  _func_int_varargs *p_Var2;\n  byte bVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  uint extraout_EDX;\n  pointer ppOVar7;\n  \n  ppOVar7 = (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n            _M_impl._M_start;\n  if (ppOVar7 !=\n      (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl.\n      _M_finish) {\n    do {\n      iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);\n      if ((char)iVar4 != '\0') {\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }\n      ppOVar7 = ppOVar7 + 1;\n    } while ((pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish != ppOVar7);\n  }\n  return;\n}\n\n" comment comment (function_definition "void __thiscall\ngold::Output_segment::lowest_load_address_in_list\n          (Output_segment *this,Output_data_list *pdl,Output_section **found,uint64_t *found_lma)\n\n{\n  Output_section *pOVar1;\n  _func_int_varargs *p_Var2;\n  byte bVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  uint extraout_EDX;\n  pointer ppOVar7;\n  \n  ppOVar7 = (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n            _M_impl._M_start;\n  if (ppOVar7 !=\n      (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl.\n      _M_finish) {\n    do {\n      iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);\n      if ((char)iVar4 != '\0') {\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }\n      ppOVar7 = ppOVar7 + 1;\n    } while ((pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish != ppOVar7);\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Output_segment::" identifier : : identifier : :) (function_declarator "lowest_load_address_in_list\n          (Output_segment *this,Output_data_list *pdl,Output_section **found,uint64_t *found_lma)" identifier (parameter_list "(Output_segment *this,Output_data_list *pdl,Output_section **found,uint64_t *found_lma)" ( (parameter_declaration "Output_segment *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Output_data_list *pdl" type_identifier (pointer_declarator "*pdl" * identifier)) , (parameter_declaration "Output_section **found" type_identifier (pointer_declarator "**found" * (pointer_declarator "*found" * identifier))) , (parameter_declaration "uint64_t *found_lma" primitive_type (pointer_declarator "*found_lma" * identifier)) ))) (compound_statement "{\n  Output_section *pOVar1;\n  _func_int_varargs *p_Var2;\n  byte bVar3;\n  int iVar4;\n  uint uVar5;\n  uint uVar6;\n  uint extraout_EDX;\n  pointer ppOVar7;\n  \n  ppOVar7 = (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n            _M_impl._M_start;\n  if (ppOVar7 !=\n      (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl.\n      _M_finish) {\n    do {\n      iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);\n      if ((char)iVar4 != '\0') {\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }\n      ppOVar7 = ppOVar7 + 1;\n    } while ((pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish != ppOVar7);\n  }\n  return;\n}" { (declaration "Output_section *pOVar1;" type_identifier (pointer_declarator "*pOVar1" * identifier) ;) (declaration "_func_int_varargs *p_Var2;" type_identifier (pointer_declarator "*p_Var2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint extraout_EDX;" type_identifier identifier ;) (declaration "pointer ppOVar7;" type_identifier identifier ;) (expression_statement "ppOVar7 = (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n            _M_impl._M_start;" (assignment_expression "ppOVar7 = (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n            _M_impl._M_start" identifier = (field_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n            _M_impl._M_start" (field_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n            _M_impl" (parenthesized_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)" ( (ERROR "pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::" (comma_expression "pdl->super__Vector_base<gold::Output_data*,_std" (binary_expression "pdl->super__Vector_base<gold::Output_data*" (binary_expression "pdl->super__Vector_base<gold" (field_expression "pdl->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_data" : : identifier) * identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (binary_expression "Output_data*>_>" (binary_expression "Output_data*>_" identifier * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if (ppOVar7 !=\n      (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl.\n      _M_finish) {\n    do {\n      iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);\n      if ((char)iVar4 != '\0') {\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }\n      ppOVar7 = ppOVar7 + 1;\n    } while ((pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish != ppOVar7);\n  }" if (parenthesized_expression "(ppOVar7 !=\n      (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl.\n      _M_finish)" ( (binary_expression "ppOVar7 !=\n      (pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl.\n      _M_finish" identifier != (field_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl.\n      _M_finish" (field_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)._M_impl" (parenthesized_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)" ( (binary_expression "pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>" (binary_expression "pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "pdl->super__Vector_base<gold::Output_data*,_std" (binary_expression "pdl->super__Vector_base<gold" (field_expression "pdl->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier)) )) (compound_statement "{\n    do {\n      iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);\n      if ((char)iVar4 != '\0') {\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }\n      ppOVar7 = ppOVar7 + 1;\n    } while ((pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish != ppOVar7);\n  }" { (do_statement "do {\n      iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);\n      if ((char)iVar4 != '\0') {\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }\n      ppOVar7 = ppOVar7 + 1;\n    } while ((pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish != ppOVar7);" do (compound_statement "{\n      iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);\n      if ((char)iVar4 != '\0') {\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }\n      ppOVar7 = ppOVar7 + 1;\n    }" { (expression_statement "iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7);" (assignment_expression "iVar4 = (*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7)" identifier = (call_expression "(*(*ppOVar7)->_vptr_Output_data[6])(*ppOVar7)" (parenthesized_expression "(*(*ppOVar7)->_vptr_Output_data[6])" ( (pointer_expression "*(*ppOVar7)->_vptr_Output_data[6]" * (subscript_expression "(*ppOVar7)->_vptr_Output_data[6]" (field_expression "(*ppOVar7)->_vptr_Output_data" (parenthesized_expression "(*ppOVar7)" ( (pointer_expression "*ppOVar7" * identifier) )) -> field_identifier) [ number_literal ])) )) (argument_list "(*ppOVar7)" ( (pointer_expression "*ppOVar7" * identifier) )))) ;) (if_statement "if ((char)iVar4 != '\0') {\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }" if (parenthesized_expression "((char)iVar4 != '\0')" ( (binary_expression "(char)iVar4 != '\0'" (cast_expression "(char)iVar4" ( (type_descriptor "char" primitive_type) ) identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        pOVar1 = (Output_section *)*ppOVar7;\n        p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];\n        if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }\n        if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }\n        if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }\n      }" { (expression_statement "pOVar1 = (Output_section *)*ppOVar7;" (assignment_expression "pOVar1 = (Output_section *)*ppOVar7" identifier = (cast_expression "(Output_section *)*ppOVar7" ( (type_descriptor "Output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*ppOVar7" * identifier))) ;) (expression_statement "p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4];" (assignment_expression "p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[4]" identifier = (subscript_expression "(pOVar1->super_Output_data)._vptr_Output_data[4]" (field_expression "(pOVar1->super_Output_data)._vptr_Output_data" (parenthesized_expression "(pOVar1->super_Output_data)" ( (field_expression "pOVar1->super_Output_data" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (if_statement "if (p_Var2 == Output_section::do_has_load_address) {\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }\n        else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }" if (parenthesized_expression "(p_Var2 == Output_section::do_has_load_address)" ( (binary_expression "p_Var2 == Output_section" identifier == identifier) (ERROR "::do_has_load_address" : : identifier) )) (compound_statement "{\n          bVar3 = (byte)pOVar1->field_0x90 >> 7;\n        }" { (expression_statement "bVar3 = (byte)pOVar1->field_0x90 >> 7;" (assignment_expression "bVar3 = (byte)pOVar1->field_0x90 >> 7" identifier = (binary_expression "(byte)pOVar1->field_0x90 >> 7" (cast_expression "(byte)pOVar1->field_0x90" ( (type_descriptor "byte" type_identifier) ) (field_expression "pOVar1->field_0x90" identifier -> field_identifier)) >> number_literal)) ;) }) (else_clause "else {\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }" else (compound_statement "{\n          iVar4 = (*p_Var2)(pOVar1);\n          bVar3 = (byte)iVar4;\n        }" { (expression_statement "iVar4 = (*p_Var2)(pOVar1);" (assignment_expression "iVar4 = (*p_Var2)(pOVar1)" identifier = (call_expression "(*p_Var2)(pOVar1)" (parenthesized_expression "(*p_Var2)" ( (pointer_expression "*p_Var2" * identifier) )) (argument_list "(pOVar1)" ( identifier )))) ;) (expression_statement "bVar3 = (byte)iVar4;" (assignment_expression "bVar3 = (byte)iVar4" identifier = (cast_expression "(byte)iVar4" ( (type_descriptor "byte" type_identifier) ) identifier)) ;) }))) (if_statement "if (bVar3 == 0) {\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }\n        else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }" if (parenthesized_expression "(bVar3 == 0)" ( (binary_expression "bVar3 == 0" identifier == number_literal) )) (compound_statement "{\n          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }\n          uVar5 = (uint)(pOVar1->super_Output_data).address_;\n          uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);\n        }" { (if_statement "if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }" if (parenthesized_expression "(((pOVar1->super_Output_data).field_0x1c & 1) == 0)" ( (binary_expression "((pOVar1->super_Output_data).field_0x1c & 1) == 0" (parenthesized_expression "((pOVar1->super_Output_data).field_0x1c & 1)" ( (binary_expression "(pOVar1->super_Output_data).field_0x1c & 1" (field_expression "(pOVar1->super_Output_data).field_0x1c" (parenthesized_expression "(pOVar1->super_Output_data)" ( (field_expression "pOVar1->super_Output_data" identifier -> field_identifier) )) . field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            do_gold_unreachable("../../gold/output.h",0xc5,"address");\n          }" { comment (expression_statement "do_gold_unreachable("../../gold/output.h",0xc5,"address");" (call_expression "do_gold_unreachable("../../gold/output.h",0xc5,"address")" identifier (argument_list "("../../gold/output.h",0xc5,"address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") ))) ;) })) (expression_statement "uVar5 = (uint)(pOVar1->super_Output_data).address_;" (assignment_expression "uVar5 = (uint)(pOVar1->super_Output_data).address_" identifier = (field_expression "(uint)(pOVar1->super_Output_data).address_" (call_expression "(uint)(pOVar1->super_Output_data)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pOVar1->super_Output_data)" ( (field_expression "pOVar1->super_Output_data" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4);" (assignment_expression "uVar6 = *(uint *)((int)&(pOVar1->super_Output_data).address_ + 4)" identifier = (pointer_expression "*(uint *)((int)&(pOVar1->super_Output_data).address_ + 4)" * (cast_expression "(uint *)((int)&(pOVar1->super_Output_data).address_ + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&(pOVar1->super_Output_data).address_ + 4)" ( (binary_expression "(int)&(pOVar1->super_Output_data).address_ + 4" (cast_expression "(int)&(pOVar1->super_Output_data).address_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&(pOVar1->super_Output_data).address_" & (field_expression "(pOVar1->super_Output_data).address_" (parenthesized_expression "(pOVar1->super_Output_data)" ( (field_expression "pOVar1->super_Output_data" identifier -> field_identifier) )) . field_identifier))) + number_literal) ))))) ;) }) (else_clause "else {\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }" else (compound_statement "{\n          p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];\n          if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }\n        }" { (expression_statement "p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5];" (assignment_expression "p_Var2 = (pOVar1->super_Output_data)._vptr_Output_data[5]" identifier = (subscript_expression "(pOVar1->super_Output_data)._vptr_Output_data[5]" (field_expression "(pOVar1->super_Output_data)._vptr_Output_data" (parenthesized_expression "(pOVar1->super_Output_data)" ( (field_expression "pOVar1->super_Output_data" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (if_statement "if (p_Var2 == Output_section::do_load_address) {\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }\n          else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }" if (parenthesized_expression "(p_Var2 == Output_section::do_load_address)" ( (binary_expression "p_Var2 == Output_section" identifier == identifier) (ERROR "::do_load_address" : : identifier) )) (compound_statement "{\n            if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }\n            uVar5 = (uint)pOVar1->load_address_;\n            uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);\n          }" { (if_statement "if (-1 < (char)pOVar1->field_0x90) {\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }" if (parenthesized_expression "(-1 < (char)pOVar1->field_0x90)" ( (binary_expression "-1 < (char)pOVar1->field_0x90" number_literal < (cast_expression "(char)pOVar1->field_0x90" ( (type_descriptor "char" primitive_type) ) (field_expression "pOVar1->field_0x90" identifier -> field_identifier))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n              do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");\n            }" { comment (expression_statement "do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address");" (call_expression "do_gold_unreachable("../../gold/output.h",0x107b,"do_load_address")" identifier (argument_list "("../../gold/output.h",0x107b,"do_load_address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""do_load_address"" " string_content ") ))) ;) })) (expression_statement "uVar5 = (uint)pOVar1->load_address_;" (assignment_expression "uVar5 = (uint)pOVar1->load_address_" identifier = (cast_expression "(uint)pOVar1->load_address_" ( (type_descriptor "uint" type_identifier) ) (field_expression "pOVar1->load_address_" identifier -> field_identifier))) ;) (expression_statement "uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4);" (assignment_expression "uVar6 = *(uint *)((int)&pOVar1->load_address_ + 4)" identifier = (pointer_expression "*(uint *)((int)&pOVar1->load_address_ + 4)" * (cast_expression "(uint *)((int)&pOVar1->load_address_ + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&pOVar1->load_address_ + 4)" ( (binary_expression "(int)&pOVar1->load_address_ + 4" (cast_expression "(int)&pOVar1->load_address_" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&pOVar1->load_address_" & (field_expression "pOVar1->load_address_" identifier -> field_identifier))) + number_literal) ))))) ;) }) (else_clause "else {\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }" else (compound_statement "{\n            uVar5 = (*p_Var2)(pOVar1);\n            uVar6 = extraout_EDX;\n          }" { (expression_statement "uVar5 = (*p_Var2)(pOVar1);" (assignment_expression "uVar5 = (*p_Var2)(pOVar1)" identifier = (call_expression "(*p_Var2)(pOVar1)" (parenthesized_expression "(*p_Var2)" ( (pointer_expression "*p_Var2" * identifier) )) (argument_list "(pOVar1)" ( identifier )))) ;) (expression_statement "uVar6 = extraout_EDX;" (assignment_expression "uVar6 = extraout_EDX" identifier = identifier) ;) }))) }))) (if_statement "if ((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))) {\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }" if (parenthesized_expression "((*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma)))" ( (binary_expression "(*found == (Output_section *)0x0) ||\n           (uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))" (parenthesized_expression "(*found == (Output_section *)0x0)" ( (binary_expression "*found == (Output_section *)0x0" (pointer_expression "*found" * identifier) == (cast_expression "(Output_section *)0x0" ( (type_descriptor "Output_section *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma))" ( (binary_expression "uVar6 < *(uint *)((int)found_lma + 4) ||\n            uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma)" (binary_expression "uVar6 < *(uint *)((int)found_lma + 4)" identifier < (pointer_expression "*(uint *)((int)found_lma + 4)" * (cast_expression "(uint *)((int)found_lma + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)found_lma + 4)" ( (binary_expression "(int)found_lma + 4" (cast_expression "(int)found_lma" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) || (binary_expression "uVar6 - *(uint *)((int)found_lma + 4) < (uint)(uVar5 < (uint)*found_lma)" (binary_expression "uVar6 - *(uint *)((int)found_lma + 4)" identifier - (pointer_expression "*(uint *)((int)found_lma + 4)" * (cast_expression "(uint *)((int)found_lma + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)found_lma + 4)" ( (binary_expression "(int)found_lma + 4" (cast_expression "(int)found_lma" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) < (call_expression "(uint)(uVar5 < (uint)*found_lma)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar5 < (uint)*found_lma)" ( (binary_expression "uVar5 < (uint)*found_lma" identifier < (binary_expression "(uint)*found_lma" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ))))) ))) )) (compound_statement "{\n          *found = pOVar1;\n          *(uint *)found_lma = uVar5;\n          *(uint *)((int)found_lma + 4) = uVar6;\n        }" { (expression_statement "*found = pOVar1;" (assignment_expression "*found = pOVar1" (pointer_expression "*found" * identifier) = identifier) ;) (expression_statement "*(uint *)found_lma = uVar5;" (assignment_expression "*(uint *)found_lma = uVar5" (pointer_expression "*(uint *)found_lma" * (cast_expression "(uint *)found_lma" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(uint *)((int)found_lma + 4) = uVar6;" (assignment_expression "*(uint *)((int)found_lma + 4) = uVar6" (pointer_expression "*(uint *)((int)found_lma + 4)" * (cast_expression "(uint *)((int)found_lma + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)found_lma + 4)" ( (binary_expression "(int)found_lma + 4" (cast_expression "(int)found_lma" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = identifier) ;) })) })) (expression_statement "ppOVar7 = ppOVar7 + 1;" (assignment_expression "ppOVar7 = ppOVar7 + 1" identifier = (binary_expression "ppOVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish != ppOVar7)" ( (binary_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish != ppOVar7" (field_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl._M_finish" (field_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>).\n             _M_impl" (parenthesized_expression "(pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>)" ( (binary_expression "pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>" (binary_expression "pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "pdl->super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "pdl->super__Vector_base<gold::Output_data*,_std" (binary_expression "pdl->super__Vector_base<gold" (field_expression "pdl->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)\n\n{\n  int *piVar1;\n  char cVar2;\n  byte bVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined8 uVar6;\n  \n  puVar5 = (undefined4 *)*param_2;\n  if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)\n\n{\n  int *piVar1;\n  char cVar2;\n  byte bVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined8 uVar6;\n  \n  puVar5 = (undefined4 *)*param_2;\n  if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)" identifier (parameter_list "(undefined4 param_1,int *param_2,int *param_3,uint *param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  byte bVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined8 uVar6;\n  \n  puVar5 = (undefined4 *)*param_2;\n  if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (expression_statement "puVar5 = (undefined4 *)*param_2;" (assignment_expression "puVar5 = (undefined4 *)*param_2" identifier = (cast_expression "(undefined4 *)*param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }" if (parenthesized_expression "(puVar5 != (undefined4 *)param_2[1])" ( (binary_expression "puVar5 != (undefined4 *)param_2[1]" identifier != (cast_expression "(undefined4 *)param_2[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )) (compound_statement "{\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }" { (do_statement "do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);" do (compound_statement "{\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);" (assignment_expression "cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5)" identifier = (call_expression "(**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5)" (parenthesized_expression "(**(code **)(*(int *)*puVar5 + 0x18))" ( (pointer_expression "**(code **)(*(int *)*puVar5 + 0x18)" * (pointer_expression "*(code **)(*(int *)*puVar5 + 0x18)" * (cast_expression "(code **)(*(int *)*puVar5 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)*puVar5 + 0x18)" ( (binary_expression "*(int *)*puVar5 + 0x18" (pointer_expression "*(int *)*puVar5" * (cast_expression "(int *)*puVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) + number_literal) ))))) )) (argument_list "((int *)*puVar5)" ( (cast_expression "(int *)*puVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier)) )))) ;) (if_statement "if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }" if (parenthesized_expression "(cVar2 != '\0')" ( (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }" { (expression_statement "piVar1 = (int *)*puVar5;" (assignment_expression "piVar1 = (int *)*puVar5" identifier = (cast_expression "(int *)*puVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) ;) (if_statement "if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" if (parenthesized_expression "(*(code **)(*piVar1 + 0x10) == FUN_000b9670)" ( (binary_expression "*(code **)(*piVar1 + 0x10) == FUN_000b9670" (pointer_expression "*(code **)(*piVar1 + 0x10)" * (cast_expression "(code **)(*piVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x10)" ( (binary_expression "*piVar1 + 0x10" (pointer_expression "*piVar1" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }" { (expression_statement "bVar3 = *(byte *)(piVar1 + 0x24) >> 7;" (assignment_expression "bVar3 = *(byte *)(piVar1 + 0x24) >> 7" identifier = (binary_expression "*(byte *)(piVar1 + 0x24) >> 7" (pointer_expression "*(byte *)(piVar1 + 0x24)" * (cast_expression "(byte *)(piVar1 + 0x24)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1 + 0x24)" ( (binary_expression "piVar1 + 0x24" identifier + number_literal) )))) >> number_literal)) ;) }) (else_clause "else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" else (compound_statement "{\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" { (expression_statement "bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);" (assignment_expression "bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x10))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x10))" ( (pointer_expression "**(code **)(*piVar1 + 0x10)" * (pointer_expression "*(code **)(*piVar1 + 0x10)" * (cast_expression "(code **)(*piVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x10)" ( (binary_expression "*piVar1 + 0x10" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }))) (if_statement "if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" if (parenthesized_expression "(bVar3 == 0)" ( (binary_expression "bVar3 == 0" identifier == number_literal) )) (compound_statement "{\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }" { (if_statement "if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }" if (parenthesized_expression "((*(byte *)(piVar1 + 7) & 1) == 0)" ( (binary_expression "(*(byte *)(piVar1 + 7) & 1) == 0" (parenthesized_expression "(*(byte *)(piVar1 + 7) & 1)" ( (binary_expression "*(byte *)(piVar1 + 7) & 1" (pointer_expression "*(byte *)(piVar1 + 7)" * (cast_expression "(byte *)(piVar1 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1 + 7)" ( (binary_expression "piVar1 + 7" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }" { (expression_statement "FUN_0007d010("../../gold/output.h",0xc5,"address");" (call_expression "FUN_0007d010("../../gold/output.h",0xc5,"address")" identifier (argument_list "("../../gold/output.h",0xc5,"address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""address"" " string_content ") ))) ;) })) (expression_statement "uVar6 = *(undefined8 *)(piVar1 + 1);" (assignment_expression "uVar6 = *(undefined8 *)(piVar1 + 1)" identifier = (pointer_expression "*(undefined8 *)(piVar1 + 1)" * (cast_expression "(undefined8 *)(piVar1 + 1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1 + 1)" ( (binary_expression "piVar1 + 1" identifier + number_literal) ))))) ;) }) (else_clause "else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" else (if_statement "if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" if (parenthesized_expression "(*(code **)(*piVar1 + 0x14) == FUN_000b98f0)" ( (binary_expression "*(code **)(*piVar1 + 0x14) == FUN_000b98f0" (pointer_expression "*(code **)(*piVar1 + 0x14)" * (cast_expression "(code **)(*piVar1 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x14)" ( (binary_expression "*piVar1 + 0x14" (pointer_expression "*piVar1" * identifier) + number_literal) )))) == identifier) )) (compound_statement "{\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }" { (if_statement "if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }" if (parenthesized_expression "(-1 < (char)piVar1[0x24])" ( (binary_expression "-1 < (char)piVar1[0x24]" number_literal < (cast_expression "(char)piVar1[0x24]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "piVar1[0x24]" identifier [ number_literal ]))) )) (compound_statement "{\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }" { (expression_statement "FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");" (call_expression "FUN_0007d010("../../gold/output.h",0x107b,"do_load_address")" identifier (argument_list "("../../gold/output.h",0x107b,"do_load_address")" ( (string_literal ""../../gold/output.h"" " string_content ") , number_literal , (string_literal ""do_load_address"" " string_content ") ))) ;) })) (expression_statement "uVar6 = *(undefined8 *)(piVar1 + 0xd);" (assignment_expression "uVar6 = *(undefined8 *)(piVar1 + 0xd)" identifier = (pointer_expression "*(undefined8 *)(piVar1 + 0xd)" * (cast_expression "(undefined8 *)(piVar1 + 0xd)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1 + 0xd)" ( (binary_expression "piVar1 + 0xd" identifier + number_literal) ))))) ;) }) (else_clause "else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" else (compound_statement "{\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" { (expression_statement "uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);" (assignment_expression "uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x14))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x14))" ( (pointer_expression "**(code **)(*piVar1 + 0x14)" * (pointer_expression "*(code **)(*piVar1 + 0x14)" * (cast_expression "(code **)(*piVar1 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x14)" ( (binary_expression "*piVar1 + 0x14" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }))))) (expression_statement "uVar4 = (uint)((ulonglong)uVar6 >> 0x20);" (assignment_expression "uVar4 = (uint)((ulonglong)uVar6 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)uVar6 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)uVar6 >> 0x20)" ( (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (if_statement "if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }" if (parenthesized_expression "((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)))" ( (binary_expression "(*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))" (parenthesized_expression "(*param_3 == 0)" ( (binary_expression "*param_3 == 0" (pointer_expression "*param_3" * identifier) == number_literal) )) || (parenthesized_expression "(uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))" ( (binary_expression "uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)" (binary_expression "uVar4 < param_4[1]" identifier < (subscript_expression "param_4[1]" identifier [ number_literal ])) || (binary_expression "uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)" (binary_expression "uVar4 - param_4[1]" identifier - (subscript_expression "param_4[1]" identifier [ number_literal ])) < (call_expression "(uint)((uint)uVar6 < *param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)uVar6 < *param_4)" ( (binary_expression "(uint)uVar6 < *param_4" (cast_expression "(uint)uVar6" ( (type_descriptor "uint" type_identifier) ) identifier) < (pointer_expression "*param_4" * identifier)) ))))) ))) )) (compound_statement "{\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }" { (expression_statement "*param_3 = (int)piVar1;" (assignment_expression "*param_3 = (int)piVar1" (pointer_expression "*param_3" * identifier) = (cast_expression "(int)piVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "*(undefined8 *)param_4 = uVar6;" (assignment_expression "*(undefined8 *)param_4 = uVar6" (pointer_expression "*(undefined8 *)param_4" * (cast_expression "(undefined8 *)param_4" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) })) })) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)param_2[1] != puVar5)" ( (binary_expression "(undefined4 *)param_2[1] != puVar5" (cast_expression "(undefined4 *)param_2[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (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 *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (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 * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (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) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (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 * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))))) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) || (parenthesized_expression ( (binary_expression (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) || (binary_expression (binary_expression IDENT - (subscript_expression IDENT [ LIT ])) < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (pointer_expression * IDENT)) ))))) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = IDENT) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != IDENT) )) ;) })) (return_statement return ;) })))
(function_definition "void FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)\n\n{\n  int *piVar1;\n  char cVar2;\n  byte bVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined8 uVar6;\n  \n  puVar5 = (undefined4 *)*param_2;\n  if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00107070(undefined4 param_1,int *param_2,int *param_3,uint *param_4)" (identifier "FUN_00107070") (parameter_list "(undefined4 param_1,int *param_2,int *param_3,uint *param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "uint *param_4" (type_identifier "uint") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  byte bVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined8 uVar6;\n  \n  puVar5 = (undefined4 *)*param_2;\n  if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }\n  return;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (expression_statement "puVar5 = (undefined4 *)*param_2;" (assignment_expression "puVar5 = (undefined4 *)*param_2" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)*param_2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (if_statement "if (puVar5 != (undefined4 *)param_2[1]) {\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }" (if "if") (parenthesized_expression "(puVar5 != (undefined4 *)param_2[1])" (( "(") (binary_expression "puVar5 != (undefined4 *)param_2[1]" (identifier "puVar5") (!= "!=") (cast_expression "(undefined4 *)param_2[1]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")))) () ")")) (compound_statement "{\n    do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);\n  }" ({ "{") (do_statement "do {\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    } while ((undefined4 *)param_2[1] != puVar5);" (do "do") (compound_statement "{\n      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);\n      if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }\n      puVar5 = puVar5 + 1;\n    }" ({ "{") (expression_statement "cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);" (assignment_expression "cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5)" (identifier "cVar2") (= "=") (call_expression "(**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5)" (parenthesized_expression "(**(code **)(*(int *)*puVar5 + 0x18))" (( "(") (pointer_expression "**(code **)(*(int *)*puVar5 + 0x18)" (* "*") (pointer_expression "*(code **)(*(int *)*puVar5 + 0x18)" (* "*") (cast_expression "(code **)(*(int *)*puVar5 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)*puVar5 + 0x18)" (( "(") (binary_expression "*(int *)*puVar5 + 0x18" (pointer_expression "*(int *)*puVar5" (* "*") (cast_expression "(int *)*puVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar5" (* "*") (identifier "puVar5")))) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "((int *)*puVar5)" (( "(") (cast_expression "(int *)*puVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) () ")")))) (; ";")) (if_statement "if (cVar2 != '\0') {\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }" (if "if") (parenthesized_expression "(cVar2 != '\0')" (( "(") (binary_expression "cVar2 != '\0'" (identifier "cVar2") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        piVar1 = (int *)*puVar5;\n        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }\n        if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }\n        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);\n        if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }\n      }" ({ "{") (expression_statement "piVar1 = (int *)*puVar5;" (assignment_expression "piVar1 = (int *)*puVar5" (identifier "piVar1") (= "=") (cast_expression "(int *)*puVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar5" (* "*") (identifier "puVar5")))) (; ";")) (if_statement "if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }\n        else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" (if "if") (parenthesized_expression "(*(code **)(*piVar1 + 0x10) == FUN_000b9670)" (( "(") (binary_expression "*(code **)(*piVar1 + 0x10) == FUN_000b9670" (pointer_expression "*(code **)(*piVar1 + 0x10)" (* "*") (cast_expression "(code **)(*piVar1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x10)" (( "(") (binary_expression "*piVar1 + 0x10" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x10")) () ")")))) (== "==") (identifier "FUN_000b9670")) () ")")) (compound_statement "{\n          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;\n        }" ({ "{") (expression_statement "bVar3 = *(byte *)(piVar1 + 0x24) >> 7;" (assignment_expression "bVar3 = *(byte *)(piVar1 + 0x24) >> 7" (identifier "bVar3") (= "=") (binary_expression "*(byte *)(piVar1 + 0x24) >> 7" (pointer_expression "*(byte *)(piVar1 + 0x24)" (* "*") (cast_expression "(byte *)(piVar1 + 0x24)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar1 + 0x24)" (( "(") (binary_expression "piVar1 + 0x24" (identifier "piVar1") (+ "+") (number_literal "0x24")) () ")")))) (>> ">>") (number_literal "7"))) (; ";")) (} "}")) (else_clause "else {\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" (else "else") (compound_statement "{\n          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);\n        }" ({ "{") (expression_statement "bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);" (assignment_expression "bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1)" (identifier "bVar3") (= "=") (call_expression "(**(code **)(*piVar1 + 0x10))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x10))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0x10)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0x10)" (* "*") (cast_expression "(code **)(*piVar1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x10)" (( "(") (binary_expression "*piVar1 + 0x10" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")")))) (; ";")) (} "}")))) (if_statement "if (bVar3 == 0) {\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }\n        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" (if "if") (parenthesized_expression "(bVar3 == 0)" (( "(") (binary_expression "bVar3 == 0" (identifier "bVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 1);\n        }" ({ "{") (if_statement "if ((*(byte *)(piVar1 + 7) & 1) == 0) {\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }" (if "if") (parenthesized_expression "((*(byte *)(piVar1 + 7) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(piVar1 + 7) & 1) == 0" (parenthesized_expression "(*(byte *)(piVar1 + 7) & 1)" (( "(") (binary_expression "*(byte *)(piVar1 + 7) & 1" (pointer_expression "*(byte *)(piVar1 + 7)" (* "*") (cast_expression "(byte *)(piVar1 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar1 + 7)" (( "(") (binary_expression "piVar1 + 7" (identifier "piVar1") (+ "+") (number_literal "7")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n            FUN_0007d010("../../gold/output.h",0xc5,"address");\n          }" ({ "{") (expression_statement "FUN_0007d010("../../gold/output.h",0xc5,"address");" (call_expression "FUN_0007d010("../../gold/output.h",0xc5,"address")" (identifier "FUN_0007d010") (argument_list "("../../gold/output.h",0xc5,"address")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0xc5") (, ",") (string_literal ""address"" (" """) (string_content "address") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = *(undefined8 *)(piVar1 + 1);" (assignment_expression "uVar6 = *(undefined8 *)(piVar1 + 1)" (identifier "uVar6") (= "=") (pointer_expression "*(undefined8 *)(piVar1 + 1)" (* "*") (cast_expression "(undefined8 *)(piVar1 + 1)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar1 + 1)" (( "(") (binary_expression "piVar1 + 1" (identifier "piVar1") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (} "}")) (else_clause "else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" (else "else") (if_statement "if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }\n        else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" (if "if") (parenthesized_expression "(*(code **)(*piVar1 + 0x14) == FUN_000b98f0)" (( "(") (binary_expression "*(code **)(*piVar1 + 0x14) == FUN_000b98f0" (pointer_expression "*(code **)(*piVar1 + 0x14)" (* "*") (cast_expression "(code **)(*piVar1 + 0x14)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x14)" (( "(") (binary_expression "*piVar1 + 0x14" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x14")) () ")")))) (== "==") (identifier "FUN_000b98f0")) () ")")) (compound_statement "{\n          if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }\n          uVar6 = *(undefined8 *)(piVar1 + 0xd);\n        }" ({ "{") (if_statement "if (-1 < (char)piVar1[0x24]) {\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }" (if "if") (parenthesized_expression "(-1 < (char)piVar1[0x24])" (( "(") (binary_expression "-1 < (char)piVar1[0x24]" (number_literal "-1") (< "<") (cast_expression "(char)piVar1[0x24]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "piVar1[0x24]" (identifier "piVar1") ([ "[") (number_literal "0x24") (] "]")))) () ")")) (compound_statement "{\n                    \n            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");\n          }" ({ "{") (expression_statement "FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");" (call_expression "FUN_0007d010("../../gold/output.h",0x107b,"do_load_address")" (identifier "FUN_0007d010") (argument_list "("../../gold/output.h",0x107b,"do_load_address")" (( "(") (string_literal ""../../gold/output.h"" (" """) (string_content "../../gold/output.h") (" """)) (, ",") (number_literal "0x107b") (, ",") (string_literal ""do_load_address"" (" """) (string_content "do_load_address") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = *(undefined8 *)(piVar1 + 0xd);" (assignment_expression "uVar6 = *(undefined8 *)(piVar1 + 0xd)" (identifier "uVar6") (= "=") (pointer_expression "*(undefined8 *)(piVar1 + 0xd)" (* "*") (cast_expression "(undefined8 *)(piVar1 + 0xd)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar1 + 0xd)" (( "(") (binary_expression "piVar1 + 0xd" (identifier "piVar1") (+ "+") (number_literal "0xd")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" (else "else") (compound_statement "{\n          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);\n        }" ({ "{") (expression_statement "uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);" (assignment_expression "uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1)" (identifier "uVar6") (= "=") (call_expression "(**(code **)(*piVar1 + 0x14))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x14))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0x14)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0x14)" (* "*") (cast_expression "(code **)(*piVar1 + 0x14)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x14)" (( "(") (binary_expression "*piVar1 + 0x14" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")")))) (; ";")) (} "}")))))) (expression_statement "uVar4 = (uint)((ulonglong)uVar6 >> 0x20);" (assignment_expression "uVar4 = (uint)((ulonglong)uVar6 >> 0x20)" (identifier "uVar4") (= "=") (call_expression "(uint)((ulonglong)uVar6 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)uVar6 >> 0x20)" (( "(") (binary_expression "(ulonglong)uVar6 >> 0x20" (cast_expression "(ulonglong)uVar6" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar6")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (if_statement "if ((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }" (if "if") (parenthesized_expression "((*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)))" (( "(") (binary_expression "(*param_3 == 0) ||\n           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))" (parenthesized_expression "(*param_3 == 0)" (( "(") (binary_expression "*param_3 == 0" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))" (( "(") (binary_expression "uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)" (binary_expression "uVar4 < param_4[1]" (identifier "uVar4") (< "<") (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]"))) (|| "||") (binary_expression "uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4)" (binary_expression "uVar4 - param_4[1]" (identifier "uVar4") (- "-") (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]"))) (< "<") (call_expression "(uint)((uint)uVar6 < *param_4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((uint)uVar6 < *param_4)" (( "(") (binary_expression "(uint)uVar6 < *param_4" (cast_expression "(uint)uVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar6")) (< "<") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) () ")"))))) () ")"))) () ")")) (compound_statement "{\n          *param_3 = (int)piVar1;\n          *(undefined8 *)param_4 = uVar6;\n        }" ({ "{") (expression_statement "*param_3 = (int)piVar1;" (assignment_expression "*param_3 = (int)piVar1" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (cast_expression "(int)piVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar1"))) (; ";")) (expression_statement "*(undefined8 *)param_4 = uVar6;" (assignment_expression "*(undefined8 *)param_4 = uVar6" (pointer_expression "*(undefined8 *)param_4" (* "*") (cast_expression "(undefined8 *)param_4" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_4"))) (= "=") (identifier "uVar6")) (; ";")) (} "}"))) (} "}"))) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((undefined4 *)param_2[1] != puVar5)" (( "(") (binary_expression "(undefined4 *)param_2[1] != puVar5" (cast_expression "(undefined4 *)param_2[1]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (identifier "puVar5")) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* DWARF original prototype: void lowest_load_address_in_list(Output_segment * this,
   Output_data_list * pdl, Output_section * * found, uint64_t * found_lma) */

void __thiscall
var_5::type_1::function_1
          (type_1 *this,type_2 *pdl,type_3 **found,uint64_t *var_12)

{
  type_3 *pOVar1;
  type_4 *var_7;
  type_5 var_8;
  int iVar4;
  type_6 var_11;
  type_6 var_10;
  type_6 extraout_EDX;
  type_7 var_4;
  
  var_4 = (pdl->super__Vector_base<var_5::var_1*var_3,var_6::allocator<var_5::var_1*>var_2>var_3).
            _M_impl._M_start;
  if (var_4 !=
      (pdl->super__Vector_base<var_5::var_1*,var_6::allocator<var_5::var_1*>var_2>var_3)._M_impl.
      _M_finish) {
    do {
      iVar4 = (*(*var_4)->_vptr_Output_data[6])(*var_4);
      if ((char)iVar4 != '\0') {
        pOVar1 = (type_3 *)*var_4;
        var_7 = (pOVar1->super_Output_data)._vptr_Output_data[4];
        if (var_7 == type_3::do_has_load_address) {
          var_8 = (type_5)pOVar1->field_0x90 >> 7;
        }
        else {
          iVar4 = (*var_7)(pOVar1);
          var_8 = (type_5)iVar4;
        }
        if (var_8 == 0) {
          if (((pOVar1->super_Output_data).field_0x1c & 1) == 0) {
                    /* WARNING: Subroutine does not return */
            var_9("../../gold/output.h",0xc5,"address");
          }
          var_11 = (type_6)(pOVar1->super_Output_data).address_;
          var_10 = *(type_6 *)((int)&(pOVar1->super_Output_data).address_ + 4);
        }
        else {
          var_7 = (pOVar1->super_Output_data)._vptr_Output_data[5];
          if (var_7 == type_3::do_load_address) {
            if (-1 < (char)pOVar1->field_0x90) {
                    /* WARNING: Subroutine does not return */
              var_9("../../gold/output.h",0x107b,"do_load_address");
            }
            var_11 = (type_6)pOVar1->load_address_;
            var_10 = *(type_6 *)((int)&pOVar1->load_address_ + 4);
          }
          else {
            var_11 = (*var_7)(pOVar1);
            var_10 = extraout_EDX;
          }
        }
        if ((*found == (type_3 *)0x0) ||
           (var_10 < *(type_6 *)((int)var_12 + 4) ||
            var_10 - *(type_6 *)((int)var_12 + 4) < (type_6)(var_11 < (type_6)*var_12))) {
          *found = pOVar1;
          *(type_6 *)var_12 = var_11;
          *(type_6 *)((int)var_12 + 4) = var_10;
        }
      }
      var_4 = var_4 + 1;
    } while ((pdl->super__Vector_base<var_5::var_1*,var_6::allocator<var_5::var_1*>var_2>var_3).
             _M_impl._M_finish != var_4);
  }
  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: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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: (pointer_expression argument: (identifier)))) right: (number_literal))))))) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) 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))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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: (identifier)) right: (number_literal))))))) 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: (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))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier)))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (binary_expression left: (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (pointer_expression argument: (identifier)))))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier)))))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

void MASKED(undefined4 param_1,int *param_2,int *param_3,uint *param_4)

{
  int *piVar1;
  char cVar2;
  byte bVar3;
  uint uVar4;
  undefined4 *puVar5;
  undefined8 uVar6;
  
  puVar5 = (undefined4 *)*param_2;
  if (puVar5 != (undefined4 *)param_2[1]) {
    do {
      cVar2 = (**(code **)(*(int *)*puVar5 + 0x18))((int *)*puVar5);
      if (cVar2 != '\0') {
        piVar1 = (int *)*puVar5;
        if (*(code **)(*piVar1 + 0x10) == FUN_000b9670) {
          bVar3 = *(byte *)(piVar1 + 0x24) >> 7;
        }
        else {
          bVar3 = (**(code **)(*piVar1 + 0x10))(piVar1);
        }
        if (bVar3 == 0) {
          if ((*(byte *)(piVar1 + 7) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
            FUN_0007d010("../../gold/output.h",0xc5,"address");
          }
          uVar6 = *(undefined8 *)(piVar1 + 1);
        }
        else if (*(code **)(*piVar1 + 0x14) == FUN_000b98f0) {
          if (-1 < (char)piVar1[0x24]) {
                    /* WARNING: Subroutine does not return */
            FUN_0007d010("../../gold/output.h",0x107b,"do_load_address");
          }
          uVar6 = *(undefined8 *)(piVar1 + 0xd);
        }
        else {
          uVar6 = (**(code **)(*piVar1 + 0x14))(piVar1);
        }
        uVar4 = (uint)((ulonglong)uVar6 >> 0x20);
        if ((*param_3 == 0) ||
           (uVar4 < param_4[1] || uVar4 - param_4[1] < (uint)((uint)uVar6 < *param_4))) {
          *param_3 = (int)piVar1;
          *(undefined8 *)param_4 = uVar6;
        }
      }
      puVar5 = puVar5 + 1;
    } while ((undefined4 *)param_2[1] != puVar5);
  }
  return;
}

