
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: uint64_t address_for_global(Output_data_plt_i386 * this, Symbol * gsym)
    */

uint64_t __thiscall
anon_unknown.dwarf_2330a8::Output_data_plt_i386::address_for_global
          (Output_data_plt_i386 *this,Symbol *gsym)

{
  uint uVar1;
  General_options *pGVar2;
  bool bVar3;
  int iVar4;
  ulong uVar5;
  bool is_global;
  
  if ((gsym->field_0x38 & 0xf) == 10) {
    if ((gsym->field_0x3a & 7) == 0) {
      if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].
                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.
                   _M_impl._M_finish & 0x100000000) == 0) &&
         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {
LAB_00160044:
        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {
          pGVar2 = gold::parameters->options_;
          if (pGVar2 == (General_options *)0x0) {
LAB_0016012d:
                    /* WARNING: Subroutine does not return */
            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");
          }
          if ((pGVar2->shared_).value != false) {
            bVar3 = gold::Version_script_info::get_symbol_version
                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,
                               (string *)0x0,&is_global);
            if ((!bVar3) || (is_global != false)) {
              pGVar2 = gold::parameters->options_;
              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;
              if (((pGVar2->Bsymbolic_).value != false) ||
                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))
                 )) goto LAB_001600d0;
            }
            goto LAB_0015ffe9;
          }
        }
LAB_001600d0:
        uVar1 = this->count_;
        iVar4 = (**(code **)(*(long *)this + 200))(this);
        uVar5 = (ulong)((uVar1 + 1) * iVar4);
        goto LAB_0015ffeb;
      }
    }
    else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;
  }
LAB_0015ffe9:
  uVar5 = 0;
LAB_0015ffeb:
  if ((this->field_0x20 & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");
  }
  if (gsym->plt_offset_ == 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    gold::do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset");
  }
  return (ulong)gsym->plt_offset_ + *(long *)&this->field_0x8 + uVar5;
}



long FUN_0015ffd0(long *param_1,undefined8 *param_2)

{
  long lVar1;
  char cVar2;
  int iVar3;
  ulong uVar4;
  char local_19;
  
  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {
    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {
      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&
         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {
LAB_00160044:
        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&
           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {
          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);
          if (lVar1 == 0) {
LAB_0016012d:
                    /* WARNING: Subroutine does not return */
            FUN_00199900("../../gold/parameters.h",0x5c,"options");
          }
          if (*(char *)(lVar1 + 0x2a61) != '\0') {
            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);
            if ((cVar2 == '\0') || (local_19 != '\0')) {
              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);
              if (lVar1 == 0) goto LAB_0016012d;
              if ((*(char *)(lVar1 + 0xd21) != '\0') ||
                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))
              goto LAB_001600d0;
            }
            goto LAB_0015ffe9;
          }
        }
LAB_001600d0:
        lVar1 = param_1[0xc];
        iVar3 = (**(code **)(*param_1 + 200))(param_1);
        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);
        goto LAB_0015ffeb;
      }
    }
    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;
  }
LAB_0015ffe9:
  uVar4 = 0;
LAB_0015ffeb:
  if ((*(byte *)(param_1 + 4) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00199900("../../gold/output.h",0xc5,"address");
  }
  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");
  }
  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;
}


PUSH R12
PUSH RBP
MOV RBP,RDI
PUSH RBX
MOV RBX,RSI
SUB RSP,0x10
MOVZX EAX,byte ptr [RSI + 0x38]
AND EAX,0xf
CMP AL,0xa
JZ 0x00160020
XOR ECX,ECX
TEST byte ptr [RBP + 0x20],0x1
JZ 0x00160115
MOV EDX,dword ptr [RBX + 0x24]
MOV RSI,qword ptr [RBP + 0x8]
CMP EDX,-0x1
JZ 0x001600fd
MOV EAX,EDX
ADD RSP,0x10
ADD RAX,RSI
POP RBX
POP RBP
ADD RAX,RCX
POP R12
RET
MOVZX EAX,byte ptr [RSI + 0x3a]
AND EAX,0x7
JNZ 0x001600f0
MOV RAX,qword ptr [RSI + 0x10]
TEST byte ptr [RAX + 0x3c],0x1
JNZ 0x0015ffe9
MOV EAX,dword ptr [RSI + 0x18]
TEST EAX,EAX
JNZ 0x00160044
TEST byte ptr [RSI + 0x3b],0x20
JNZ 0x0015ffe9
TEST byte ptr [RBX + 0x39],0x3
JNZ 0x001600d0
TEST byte ptr [RBX + 0x3b],0x10
JNZ 0x001600d0
MOV RAX,qword ptr [0x003f85c0]
MOV RAX,qword ptr [RAX + 0x10]
TEST RAX,RAX
JZ 0x0016012d
CMP byte ptr [RAX + 0x2a61],0x0
JZ 0x001600d0
MOV RSI,qword ptr [RBX]
XOR EDX,EDX
LEA RCX,[RSP + 0xf]
LEA RDI,[RAX + 0x9120]
CALL 0x00241de0
TEST AL,AL
JZ 0x00160096
CMP byte ptr [RSP + 0xf],0x0
JZ 0x0015ffe9
MOV RAX,qword ptr [0x003f85c0]
MOV RAX,qword ptr [RAX + 0x10]
TEST RAX,RAX
JZ 0x0016012d
CMP byte ptr [RAX + 0xd21],0x0
JNZ 0x001600d0
MOVZX EDX,byte ptr [RBX + 0x38]
AND EDX,0xf
CMP DL,0x1
JZ 0x0015ffe9
CMP byte ptr [RAX + 0xde9],0x0
JZ 0x0015ffe9
MOV EAX,dword ptr [RBP + 0x60]
MOV RDI,RBP
LEA R12D,[RAX + 0x1]
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0xc8]
MOV ECX,R12D
IMUL ECX,EAX
JMP 0x0015ffeb
CMP AL,0x4
JZ 0x0015ffe9
JMP 0x00160044
LEA RDX,[0x33a040]
MOV ESI,0x1ce
LEA RDI,[0x338407]
CALL 0x00199900
LEA RDX,[0x33a818]
MOV ESI,0xc5
LEA RDI,[0x338384]
CALL 0x00199900
LEA RDX,[0x33a5f8]
MOV ESI,0x5c
LEA RDI,[0x333279]
CALL 0x00199900
(translation_unit "long FUN_0015ffd0(long *param_1,undefined8 *param_2)\n\n{\n  long lVar1;\n  char cVar2;\n  int iVar3;\n  ulong uVar4;\n  char local_19;\n  \n  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar4 = 0;\nLAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }\n  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;\n}\n\n" (function_definition "long FUN_0015ffd0(long *param_1,undefined8 *param_2)\n\n{\n  long lVar1;\n  char cVar2;\n  int iVar3;\n  ulong uVar4;\n  char local_19;\n  \n  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar4 = 0;\nLAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }\n  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0015ffd0(long *param_1,undefined8 *param_2)" identifier (parameter_list "(long *param_1,undefined8 *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  char cVar2;\n  int iVar3;\n  ulong uVar4;\n  char local_19;\n  \n  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar4 = 0;\nLAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }\n  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "char local_19;" primitive_type identifier ;) (if_statement "if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 7) & 0xf) == 10)" ( (binary_expression "(*(byte *)(param_2 + 7) & 0xf) == 10" (parenthesized_expression "(*(byte *)(param_2 + 7) & 0xf)" ( (binary_expression "*(byte *)(param_2 + 7) & 0xf" (pointer_expression "*(byte *)(param_2 + 7)" * (cast_expression "(byte *)(param_2 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }" { (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" if (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" ( (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" * (cast_expression "(byte *)((long)param_2 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3a)" ( (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }" { (if_statement "if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }" if (parenthesized_expression "(((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0))))" ( (binary_expression "((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))" (parenthesized_expression "((*(byte *)(param_2[2] + 0x3c) & 1) == 0)" ( (binary_expression "(*(byte *)(param_2[2] + 0x3c) & 1) == 0" (parenthesized_expression "(*(byte *)(param_2[2] + 0x3c) & 1)" ( (binary_expression "*(byte *)(param_2[2] + 0x3c) & 1" (pointer_expression "*(byte *)(param_2[2] + 0x3c)" * (cast_expression "(byte *)(param_2[2] + 0x3c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2[2] + 0x3c)" ( (binary_expression "param_2[2] + 0x3c" (subscript_expression "param_2[2]" identifier [ number_literal ]) + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))" ( (parenthesized_expression "(*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0))" ( (binary_expression "*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)" (binary_expression "*(int *)(param_2 + 3) != 0" (pointer_expression "*(int *)(param_2 + 3)" * (cast_expression "(int *)(param_2 + 3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 3)" ( (binary_expression "param_2 + 3" identifier + number_literal) )))) != number_literal) || (parenthesized_expression "((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3b) & 0x20)" ( (binary_expression "*(byte *)((long)param_2 + 0x3b) & 0x20" (pointer_expression "*(byte *)((long)param_2 + 0x3b)" * (cast_expression "(byte *)((long)param_2 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3b)" ( (binary_expression "(long)param_2 + 0x3b" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }" { (labeled_statement "LAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" statement_identifier : (if_statement "if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" if (parenthesized_expression "(((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0))" ( (binary_expression "((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)" (parenthesized_expression "((*(byte *)((long)param_2 + 0x39) & 3) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x39) & 3) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x39) & 3)" ( (binary_expression "*(byte *)((long)param_2 + 0x39) & 3" (pointer_expression "*(byte *)((long)param_2 + 0x39)" * (cast_expression "(byte *)((long)param_2 + 0x39)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x39)" ( (binary_expression "(long)param_2 + 0x39" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3b) & 0x10) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3b) & 0x10)" ( (binary_expression "*(byte *)((long)param_2 + 0x3b) & 0x10" (pointer_expression "*(byte *)((long)param_2 + 0x3b)" * (cast_expression "(byte *)((long)param_2 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3b)" ( (binary_expression "(long)param_2 + 0x3b" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" { (expression_statement "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10)" identifier = (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (lVar1 == 0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }" if (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }" { (labeled_statement "LAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            FUN_00199900("../../gold/parameters.h",0x5c,"options");" statement_identifier : comment (expression_statement "FUN_00199900("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_00199900("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;)) })) (if_statement "if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }" if (parenthesized_expression "(*(char *)(lVar1 + 0x2a61) != '\0')" ( (binary_expression "*(char *)(lVar1 + 0x2a61) != '\0'" (pointer_expression "*(char *)(lVar1 + 0x2a61)" * (cast_expression "(char *)(lVar1 + 0x2a61)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x2a61)" ( (binary_expression "lVar1 + 0x2a61" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }" { (expression_statement "cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);" (assignment_expression "cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19)" identifier = (call_expression "FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19)" identifier (argument_list "(lVar1 + 0x9120,*param_2,0,&local_19)" ( (binary_expression "lVar1 + 0x9120" identifier + number_literal) , (pointer_expression "*param_2" * identifier) , number_literal , (pointer_expression "&local_19" & identifier) )))) ;) (if_statement "if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }" if (parenthesized_expression "((cVar2 == '\0') || (local_19 != '\0'))" ( (binary_expression "(cVar2 == '\0') || (local_19 != '\0')" (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(local_19 != '\0')" ( (binary_expression "local_19 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }" { (expression_statement "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10)" identifier = (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (lVar1 == 0) goto LAB_0016012d;" if (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0016012d;" goto statement_identifier ;)) (if_statement "if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;" if (parenthesized_expression "((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))" ( (binary_expression "(*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')))" (parenthesized_expression "(*(char *)(lVar1 + 0xd21) != '\0')" ( (binary_expression "*(char *)(lVar1 + 0xd21) != '\0'" (pointer_expression "*(char *)(lVar1 + 0xd21)" * (cast_expression "(char *)(lVar1 + 0xd21)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0xd21)" ( (binary_expression "lVar1 + 0xd21" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')))" ( (parenthesized_expression "((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))" ( (binary_expression "(*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')" (binary_expression "(*(byte *)(param_2 + 7) & 0xf) != 1" (parenthesized_expression "(*(byte *)(param_2 + 7) & 0xf)" ( (binary_expression "*(byte *)(param_2 + 7) & 0xf" (pointer_expression "*(byte *)(param_2 + 7)" * (cast_expression "(byte *)(param_2 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))) & number_literal) )) != number_literal) && (parenthesized_expression "(*(char *)(lVar1 + 0xde9) != '\0')" ( (binary_expression "*(char *)(lVar1 + 0xde9) != '\0'" (pointer_expression "*(char *)(lVar1 + 0xde9)" * (cast_expression "(char *)(lVar1 + 0xde9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0xde9)" ( (binary_expression "lVar1 + 0xde9" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) ))) )) ))) )) (goto_statement "goto LAB_001600d0;" goto statement_identifier ;)) })) (goto_statement "goto LAB_0015ffe9;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_001600d0:\n        lVar1 = param_1[0xc];" statement_identifier : (expression_statement "lVar1 = param_1[0xc];" (assignment_expression "lVar1 = param_1[0xc]" identifier = (subscript_expression "param_1[0xc]" identifier [ number_literal ])) ;)) (expression_statement "iVar3 = (**(code **)(*param_1 + 200))(param_1);" (assignment_expression "iVar3 = (**(code **)(*param_1 + 200))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 200))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 200))" ( (pointer_expression "**(code **)(*param_1 + 200)" * (pointer_expression "*(code **)(*param_1 + 200)" * (cast_expression "(code **)(*param_1 + 200)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 200)" ( (binary_expression "*param_1 + 200" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);" (assignment_expression "uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3)" identifier = (call_expression "(ulong)(uint)(((int)lVar1 + 1) * iVar3)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(((int)lVar1 + 1) * iVar3)" ( (binary_expression "((int)lVar1 + 1) * iVar3" (parenthesized_expression "((int)lVar1 + 1)" ( (binary_expression "(int)lVar1 + 1" (cast_expression "(int)lVar1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )) * identifier) )))) ;) (goto_statement "goto LAB_0015ffeb;" goto statement_identifier ;) })) }) (else_clause "else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" else (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" if (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) != 4)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) != 4" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" ( (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" * (cast_expression "(byte *)((long)param_2 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3a)" ( (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00160044;" goto statement_identifier ;)))) })) (labeled_statement "LAB_0015ffe9:\n  uVar4 = 0;" statement_identifier : (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" statement_identifier : (if_statement "if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 4) & 1) == 0)" ( (binary_expression "(*(byte *)(param_1 + 4) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 4) & 1)" ( (binary_expression "*(byte *)(param_1 + 4) & 1" (pointer_expression "*(byte *)(param_1 + 4)" * (cast_expression "(byte *)(param_1 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" { comment (expression_statement "FUN_00199900("../../gold/output.h",0xc5,"address");" (call_expression "FUN_00199900("../../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 ") ))) ;) }))) (if_statement "if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }" if (parenthesized_expression "(*(uint *)((long)param_2 + 0x24) == 0xffffffff)" ( (binary_expression "*(uint *)((long)param_2 + 0x24) == 0xffffffff" (pointer_expression "*(uint *)((long)param_2 + 0x24)" * (cast_expression "(uint *)((long)param_2 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x24)" ( (binary_expression "(long)param_2 + 0x24" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }" { comment (expression_statement "FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");" (call_expression "FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset")" identifier (argument_list "("../../gold/symtab.h",0x1ce,"plt_offset")" ( (string_literal ""../../gold/symtab.h"" " string_content ") , number_literal , (string_literal ""plt_offset"" " string_content ") ))) ;) })) (return_statement "return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;" return (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4" (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24) + param_1[1]" (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)((long)param_2 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x24)" ( (binary_expression "(long)param_2 + 0x24" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + (subscript_expression "param_1[1]" identifier [ number_literal ])) + identifier) ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* WARNING: Enum "ELFOSABI": Some values do not have unique names */\n/* DWARF original prototype: uint64_t address_for_global(Output_data_plt_i386 * this, Symbol * gsym)\n    */\n\nuint64_t __thiscall\nanon_unknown.dwarf_2330a8::Output_data_plt_i386::address_for_global\n          (Output_data_plt_i386 *this,Symbol *gsym)\n\n{\n  uint uVar1;\n  General_options *pGVar2;\n  bool bVar3;\n  int iVar4;\n  ulong uVar5;\n  bool is_global;\n  \n  if ((gsym->field_0x38 & 0xf) == 10) {\n    if ((gsym->field_0x3a & 7) == 0) {\n      if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar5 = 0;\nLAB_0015ffeb:\n  if ((this->field_0x20 & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }\n  if (gsym->plt_offset_ == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)gsym->plt_offset_ + *(long *)&this->field_0x8 + uVar5;\n}\n\n" comment comment comment (function_definition "uint64_t __thiscall\nanon_unknown.dwarf_2330a8::Output_data_plt_i386::address_for_global\n          (Output_data_plt_i386 *this,Symbol *gsym)\n\n{\n  uint uVar1;\n  General_options *pGVar2;\n  bool bVar3;\n  int iVar4;\n  ulong uVar5;\n  bool is_global;\n  \n  if ((gsym->field_0x38 & 0xf) == 10) {\n    if ((gsym->field_0x3a & 7) == 0) {\n      if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar5 = 0;\nLAB_0015ffeb:\n  if ((this->field_0x20 & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }\n  if (gsym->plt_offset_ == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)gsym->plt_offset_ + *(long *)&this->field_0x8 + uVar5;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "anon_unknown.dwarf_2330a8::Output_data_plt_i386::" identifier . identifier : : identifier : :) (function_declarator "address_for_global\n          (Output_data_plt_i386 *this,Symbol *gsym)" identifier (parameter_list "(Output_data_plt_i386 *this,Symbol *gsym)" ( (parameter_declaration "Output_data_plt_i386 *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Symbol *gsym" type_identifier (pointer_declarator "*gsym" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  General_options *pGVar2;\n  bool bVar3;\n  int iVar4;\n  ulong uVar5;\n  bool is_global;\n  \n  if ((gsym->field_0x38 & 0xf) == 10) {\n    if ((gsym->field_0x3a & 7) == 0) {\n      if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar5 = 0;\nLAB_0015ffeb:\n  if ((this->field_0x20 & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }\n  if (gsym->plt_offset_ == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)gsym->plt_offset_ + *(long *)&this->field_0x8 + uVar5;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "General_options *pGVar2;" type_identifier (pointer_declarator "*pGVar2" * identifier) ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "bool is_global;" primitive_type identifier ;) (if_statement "if ((gsym->field_0x38 & 0xf) == 10) {\n    if ((gsym->field_0x3a & 7) == 0) {\n      if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;\n  }" if (parenthesized_expression "((gsym->field_0x38 & 0xf) == 10)" ( (binary_expression "(gsym->field_0x38 & 0xf) == 10" (parenthesized_expression "(gsym->field_0x38 & 0xf)" ( (binary_expression "gsym->field_0x38 & 0xf" (field_expression "gsym->field_0x38" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((gsym->field_0x3a & 7) == 0) {\n      if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;\n  }" { (if_statement "if ((gsym->field_0x3a & 7) == 0) {\n      if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;" if (parenthesized_expression "((gsym->field_0x3a & 7) == 0)" ( (binary_expression "(gsym->field_0x3a & 7) == 0" (parenthesized_expression "(gsym->field_0x3a & 7)" ( (binary_expression "gsym->field_0x3a & 7" (field_expression "gsym->field_0x3a" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }\n    }" { (if_statement "if ((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }" if (parenthesized_expression "((((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0))))" ( (binary_expression "(((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0) &&\n         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))" (parenthesized_expression "(((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0)" ( (binary_expression "((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000) == 0" (parenthesized_expression "((ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000)" ( (binary_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish & 0x100000000" (field_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl._M_finish" (field_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_>.\n                   _M_impl" (binary_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold::Output_data*>_" (binary_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std::allocator<gold" (binary_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold::Output_data*,_std" (binary_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base<gold" (field_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2].\n                   super__Vector_base" (subscript_expression "(ulong)((gsym->u1_).output_segment)->output_lists_[2]" (field_expression "(ulong)((gsym->u1_).output_segment)->output_lists_" (call_expression "(ulong)((gsym->u1_).output_segment)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((gsym->u1_).output_segment)" ( (field_expression "(gsym->u1_).output_segment" (parenthesized_expression "(gsym->u1_)" ( (field_expression "gsym->u1_" identifier -> field_identifier) )) . field_identifier) ))) -> field_identifier) [ number_literal ]) . field_identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_data" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) & number_literal) )) == number_literal) )) && (parenthesized_expression "(((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))" ( (parenthesized_expression "((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0))" ( (binary_expression "(gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)" (binary_expression "(gsym->u2_).shndx != 0" (field_expression "(gsym->u2_).shndx" (parenthesized_expression "(gsym->u2_)" ( (field_expression "gsym->u2_" identifier -> field_identifier) )) . field_identifier) != number_literal) || (parenthesized_expression "((gsym->field_0x3b & 0x20) == 0)" ( (binary_expression "(gsym->field_0x3b & 0x20) == 0" (parenthesized_expression "(gsym->field_0x3b & 0x20)" ( (binary_expression "gsym->field_0x3b & 0x20" (field_expression "gsym->field_0x3b" identifier -> field_identifier) & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\nLAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        uVar1 = this->count_;\n        iVar4 = (**(code **)(*(long *)this + 200))(this);\n        uVar5 = (ulong)((uVar1 + 1) * iVar4);\n        goto LAB_0015ffeb;\n      }" { (labeled_statement "LAB_00160044:\n        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" statement_identifier : (if_statement "if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" if (parenthesized_expression "(((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0))" ( (binary_expression "((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)" (parenthesized_expression "((gsym->field_0x39 & 3) == 0)" ( (binary_expression "(gsym->field_0x39 & 3) == 0" (parenthesized_expression "(gsym->field_0x39 & 3)" ( (binary_expression "gsym->field_0x39 & 3" (field_expression "gsym->field_0x39" identifier -> field_identifier) & number_literal) )) == number_literal) )) && (parenthesized_expression "((gsym->field_0x3b & 0x10) == 0)" ( (binary_expression "(gsym->field_0x3b & 0x10) == 0" (parenthesized_expression "(gsym->field_0x3b & 0x10)" ( (binary_expression "gsym->field_0x3b & 0x10" (field_expression "gsym->field_0x3b" identifier -> field_identifier) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n          pGVar2 = gold::parameters->options_;\n          if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }\n          if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" { (expression_statement "pGVar2 = gold::parameters->options_;" (field_expression "pGVar2 = gold::parameters->options_" (assignment_expression "pGVar2 = gold" identifier = identifier) (ERROR "::parameters" : : identifier) -> field_identifier) ;) (if_statement "if (pGVar2 == (General_options *)0x0) {\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }" if (parenthesized_expression "(pGVar2 == (General_options *)0x0)" ( (binary_expression "pGVar2 == (General_options *)0x0" identifier == (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n          }" { (labeled_statement "LAB_0016012d:\n                    /* WARNING: Subroutine does not return */\n            gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");" statement_identifier : comment (labeled_statement "gold::do_gold_unreachable("../../gold/parameters.h",0x5c,"options");" statement_identifier : (ERROR ":" :) (expression_statement "do_gold_unreachable("../../gold/parameters.h",0x5c,"options");" (call_expression "do_gold_unreachable("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;))) })) (if_statement "if ((pGVar2->shared_).value != false) {\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }" if (parenthesized_expression "((pGVar2->shared_).value != false)" ( (binary_expression "(pGVar2->shared_).value != false" (field_expression "(pGVar2->shared_).value" (parenthesized_expression "(pGVar2->shared_)" ( (field_expression "pGVar2->shared_" identifier -> field_identifier) )) . field_identifier) != false) )) (compound_statement "{\n            bVar3 = gold::Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);\n            if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }" { (ERROR "bVar3 = gold::" (assignment_expression "bVar3 = gold" identifier = identifier) : :) (labeled_statement "Version_script_info::get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);" statement_identifier : (ERROR ":" :) (expression_statement "get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global);" (call_expression "get_symbol_version\n                              (&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global)" identifier (argument_list "(&(pGVar2->dynamic_list_).version_script_info_,gsym->name_,\n                               (string *)0x0,&is_global)" ( (pointer_expression "&(pGVar2->dynamic_list_).version_script_info_" & (field_expression "(pGVar2->dynamic_list_).version_script_info_" (parenthesized_expression "(pGVar2->dynamic_list_)" ( (field_expression "pGVar2->dynamic_list_" identifier -> field_identifier) )) . field_identifier)) , (field_expression "gsym->name_" identifier -> field_identifier) , (cast_expression "(string *)0x0" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (pointer_expression "&is_global" & identifier) ))) ;)) (if_statement "if ((!bVar3) || (is_global != false)) {\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }" if (parenthesized_expression "((!bVar3) || (is_global != false))" ( (binary_expression "(!bVar3) || (is_global != false)" (parenthesized_expression "(!bVar3)" ( (unary_expression "!bVar3" ! identifier) )) || (parenthesized_expression "(is_global != false)" ( (binary_expression "is_global != false" identifier != false) ))) )) (compound_statement "{\n              pGVar2 = gold::parameters->options_;\n              if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;\n              if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;\n            }" { (expression_statement "pGVar2 = gold::parameters->options_;" (field_expression "pGVar2 = gold::parameters->options_" (assignment_expression "pGVar2 = gold" identifier = identifier) (ERROR "::parameters" : : identifier) -> field_identifier) ;) (if_statement "if (pGVar2 == (General_options *)0x0) goto LAB_0016012d;" if (parenthesized_expression "(pGVar2 == (General_options *)0x0)" ( (binary_expression "pGVar2 == (General_options *)0x0" identifier == (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0016012d;" goto statement_identifier ;)) (if_statement "if (((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )) goto LAB_001600d0;" if (parenthesized_expression "(((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 ))" ( (binary_expression "((pGVar2->Bsymbolic_).value != false) ||\n                 (((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )" (parenthesized_expression "((pGVar2->Bsymbolic_).value != false)" ( (binary_expression "(pGVar2->Bsymbolic_).value != false" (field_expression "(pGVar2->Bsymbolic_).value" (parenthesized_expression "(pGVar2->Bsymbolic_)" ( (field_expression "pGVar2->Bsymbolic_" identifier -> field_identifier) )) . field_identifier) != false) )) || (parenthesized_expression "(((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))\n                 )" ( (parenthesized_expression "((gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false))" ( (binary_expression "(gsym->field_0x38 & 0xf) != 1 && ((pGVar2->Bsymbolic_functions_).value != false)" (binary_expression "(gsym->field_0x38 & 0xf) != 1" (parenthesized_expression "(gsym->field_0x38 & 0xf)" ( (binary_expression "gsym->field_0x38 & 0xf" (field_expression "gsym->field_0x38" identifier -> field_identifier) & number_literal) )) != number_literal) && (parenthesized_expression "((pGVar2->Bsymbolic_functions_).value != false)" ( (binary_expression "(pGVar2->Bsymbolic_functions_).value != false" (field_expression "(pGVar2->Bsymbolic_functions_).value" (parenthesized_expression "(pGVar2->Bsymbolic_functions_)" ( (field_expression "pGVar2->Bsymbolic_functions_" identifier -> field_identifier) )) . field_identifier) != false) ))) )) ))) )) (goto_statement "goto LAB_001600d0;" goto statement_identifier ;)) })) (goto_statement "goto LAB_0015ffe9;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_001600d0:\n        uVar1 = this->count_;" statement_identifier : (expression_statement "uVar1 = this->count_;" (assignment_expression "uVar1 = this->count_" identifier = (field_expression "this->count_" identifier -> field_identifier)) ;)) (expression_statement "iVar4 = (**(code **)(*(long *)this + 200))(this);" (assignment_expression "iVar4 = (**(code **)(*(long *)this + 200))(this)" identifier = (call_expression "(**(code **)(*(long *)this + 200))(this)" (parenthesized_expression "(**(code **)(*(long *)this + 200))" ( (pointer_expression "**(code **)(*(long *)this + 200)" * (pointer_expression "*(code **)(*(long *)this + 200)" * (cast_expression "(code **)(*(long *)this + 200)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)this + 200)" ( (binary_expression "*(long *)this + 200" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(this)" ( identifier )))) ;) (expression_statement "uVar5 = (ulong)((uVar1 + 1) * iVar4);" (assignment_expression "uVar5 = (ulong)((uVar1 + 1) * iVar4)" identifier = (call_expression "(ulong)((uVar1 + 1) * iVar4)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uVar1 + 1) * iVar4)" ( (binary_expression "(uVar1 + 1) * iVar4" (parenthesized_expression "(uVar1 + 1)" ( (binary_expression "uVar1 + 1" identifier + number_literal) )) * identifier) )))) ;) (goto_statement "goto LAB_0015ffeb;" goto statement_identifier ;) })) }) (else_clause "else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;" else (if_statement "if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;" if (parenthesized_expression "((gsym->field_0x3a & 7) != 4)" ( (binary_expression "(gsym->field_0x3a & 7) != 4" (parenthesized_expression "(gsym->field_0x3a & 7)" ( (binary_expression "gsym->field_0x3a & 7" (field_expression "gsym->field_0x3a" identifier -> field_identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00160044;" goto statement_identifier ;)))) })) (labeled_statement "LAB_0015ffe9:\n  uVar5 = 0;" statement_identifier : (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_0015ffeb:\n  if ((this->field_0x20 & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }" statement_identifier : (if_statement "if ((this->field_0x20 & 1) == 0) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }" if (parenthesized_expression "((this->field_0x20 & 1) == 0)" ( (binary_expression "(this->field_0x20 & 1) == 0" (parenthesized_expression "(this->field_0x20 & 1)" ( (binary_expression "this->field_0x20 & 1" (field_expression "this->field_0x20" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");\n  }" { comment (labeled_statement "gold::do_gold_unreachable("../../gold/output.h",0xc5,"address");" statement_identifier : (ERROR ":" :) (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 ") ))) ;)) }))) (if_statement "if (gsym->plt_offset_ == 0xffffffff) {\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset");\n  }" if (parenthesized_expression "(gsym->plt_offset_ == 0xffffffff)" ( (binary_expression "gsym->plt_offset_ == 0xffffffff" (field_expression "gsym->plt_offset_" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    gold::do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset");\n  }" { comment (labeled_statement "gold::do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset");" statement_identifier : (ERROR ":" :) (expression_statement "do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset");" (call_expression "do_gold_unreachable("../../gold/symtab.h",0x1ce,"plt_offset")" identifier (argument_list "("../../gold/symtab.h",0x1ce,"plt_offset")" ( (string_literal ""../../gold/symtab.h"" " string_content ") , number_literal , (string_literal ""plt_offset"" " string_content ") ))) ;)) })) (return_statement "return (ulong)gsym->plt_offset_ + *(long *)&this->field_0x8 + uVar5;" return (binary_expression "(ulong)gsym->plt_offset_ + *(long *)&this->field_0x8 + uVar5" (binary_expression "(ulong)gsym->plt_offset_ + *(long *)&this->field_0x8" (cast_expression "(ulong)gsym->plt_offset_" ( (type_descriptor "ulong" type_identifier) ) (field_expression "gsym->plt_offset_" identifier -> field_identifier)) + (pointer_expression "*(long *)&this->field_0x8" * (cast_expression "(long *)&this->field_0x8" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->field_0x8" & (field_expression "this->field_0x8" identifier -> field_identifier))))) + identifier) ;) })))
(translation_unit "long FUN_0015ffd0(long *param_1,undefined8 *param_2)\n\n{\n  long lVar1;\n  char cVar2;\n  int iVar3;\n  ulong uVar4;\n  char local_19;\n  \n  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar4 = 0;\nLAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }\n  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;\n}\n\n" (function_definition "long FUN_0015ffd0(long *param_1,undefined8 *param_2)\n\n{\n  long lVar1;\n  char cVar2;\n  int iVar3;\n  ulong uVar4;\n  char local_19;\n  \n  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar4 = 0;\nLAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }\n  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_0015ffd0(long *param_1,undefined8 *param_2)" identifier (parameter_list "(long *param_1,undefined8 *param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  char cVar2;\n  int iVar3;\n  ulong uVar4;\n  char local_19;\n  \n  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar4 = 0;\nLAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }\n  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "char local_19;" primitive_type identifier ;) (if_statement "if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }" if (parenthesized_expression "((*(byte *)(param_2 + 7) & 0xf) == 10)" ( (binary_expression "(*(byte *)(param_2 + 7) & 0xf) == 10" (parenthesized_expression "(*(byte *)(param_2 + 7) & 0xf)" ( (binary_expression "*(byte *)(param_2 + 7) & 0xf" (pointer_expression "*(byte *)(param_2 + 7)" * (cast_expression "(byte *)(param_2 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }" { (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" if (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" ( (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" * (cast_expression "(byte *)((long)param_2 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3a)" ( (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }" { (if_statement "if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }" if (parenthesized_expression "(((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0))))" ( (binary_expression "((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))" (parenthesized_expression "((*(byte *)(param_2[2] + 0x3c) & 1) == 0)" ( (binary_expression "(*(byte *)(param_2[2] + 0x3c) & 1) == 0" (parenthesized_expression "(*(byte *)(param_2[2] + 0x3c) & 1)" ( (binary_expression "*(byte *)(param_2[2] + 0x3c) & 1" (pointer_expression "*(byte *)(param_2[2] + 0x3c)" * (cast_expression "(byte *)(param_2[2] + 0x3c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2[2] + 0x3c)" ( (binary_expression "param_2[2] + 0x3c" (subscript_expression "param_2[2]" identifier [ number_literal ]) + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))" ( (parenthesized_expression "(*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0))" ( (binary_expression "*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)" (binary_expression "*(int *)(param_2 + 3) != 0" (pointer_expression "*(int *)(param_2 + 3)" * (cast_expression "(int *)(param_2 + 3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 3)" ( (binary_expression "param_2 + 3" identifier + number_literal) )))) != number_literal) || (parenthesized_expression "((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3b) & 0x20)" ( (binary_expression "*(byte *)((long)param_2 + 0x3b) & 0x20" (pointer_expression "*(byte *)((long)param_2 + 0x3b)" * (cast_expression "(byte *)((long)param_2 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3b)" ( (binary_expression "(long)param_2 + 0x3b" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }" { (labeled_statement "LAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" statement_identifier : (if_statement "if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" if (parenthesized_expression "(((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0))" ( (binary_expression "((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)" (parenthesized_expression "((*(byte *)((long)param_2 + 0x39) & 3) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x39) & 3) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x39) & 3)" ( (binary_expression "*(byte *)((long)param_2 + 0x39) & 3" (pointer_expression "*(byte *)((long)param_2 + 0x39)" * (cast_expression "(byte *)((long)param_2 + 0x39)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x39)" ( (binary_expression "(long)param_2 + 0x39" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3b) & 0x10) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3b) & 0x10)" ( (binary_expression "*(byte *)((long)param_2 + 0x3b) & 0x10" (pointer_expression "*(byte *)((long)param_2 + 0x3b)" * (cast_expression "(byte *)((long)param_2 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3b)" ( (binary_expression "(long)param_2 + 0x3b" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" { (expression_statement "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10)" identifier = (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }" if (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }" { (labeled_statement "LAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");" statement_identifier : (expression_statement "FUN_00199900("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_00199900("../../gold/parameters.h",0x5c,"options")" identifier (argument_list "("../../gold/parameters.h",0x5c,"options")" ( (string_literal ""../../gold/parameters.h"" " string_content ") , number_literal , (string_literal ""options"" " string_content ") ))) ;)) })) (if_statement "if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }" if (parenthesized_expression "(*(char *)(lVar1 + 0x2a61) != '\0')" ( (binary_expression "*(char *)(lVar1 + 0x2a61) != '\0'" (pointer_expression "*(char *)(lVar1 + 0x2a61)" * (cast_expression "(char *)(lVar1 + 0x2a61)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x2a61)" ( (binary_expression "lVar1 + 0x2a61" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }" { (expression_statement "cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);" (assignment_expression "cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19)" identifier = (call_expression "FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19)" identifier (argument_list "(lVar1 + 0x9120,*param_2,0,&local_19)" ( (binary_expression "lVar1 + 0x9120" identifier + number_literal) , (pointer_expression "*param_2" * identifier) , number_literal , (pointer_expression "&local_19" & identifier) )))) ;) (if_statement "if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }" if (parenthesized_expression "((cVar2 == '\0') || (local_19 != '\0'))" ( (binary_expression "(cVar2 == '\0') || (local_19 != '\0')" (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(local_19 != '\0')" ( (binary_expression "local_19 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }" { (expression_statement "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10)" identifier = (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" ( (binary_expression "PTR_DAT_003f85c0 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (lVar1 == 0) goto LAB_0016012d;" if (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0016012d;" goto statement_identifier ;)) (if_statement "if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;" if (parenthesized_expression "((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))" ( (binary_expression "(*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')))" (parenthesized_expression "(*(char *)(lVar1 + 0xd21) != '\0')" ( (binary_expression "*(char *)(lVar1 + 0xd21) != '\0'" (pointer_expression "*(char *)(lVar1 + 0xd21)" * (cast_expression "(char *)(lVar1 + 0xd21)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0xd21)" ( (binary_expression "lVar1 + 0xd21" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) )) || (parenthesized_expression "(((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')))" ( (parenthesized_expression "((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))" ( (binary_expression "(*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')" (binary_expression "(*(byte *)(param_2 + 7) & 0xf) != 1" (parenthesized_expression "(*(byte *)(param_2 + 7) & 0xf)" ( (binary_expression "*(byte *)(param_2 + 7) & 0xf" (pointer_expression "*(byte *)(param_2 + 7)" * (cast_expression "(byte *)(param_2 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 7)" ( (binary_expression "param_2 + 7" identifier + number_literal) )))) & number_literal) )) != number_literal) && (parenthesized_expression "(*(char *)(lVar1 + 0xde9) != '\0')" ( (binary_expression "*(char *)(lVar1 + 0xde9) != '\0'" (pointer_expression "*(char *)(lVar1 + 0xde9)" * (cast_expression "(char *)(lVar1 + 0xde9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0xde9)" ( (binary_expression "lVar1 + 0xde9" identifier + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) ))) )) ))) )) (goto_statement "goto LAB_001600d0;" goto statement_identifier ;)) })) (goto_statement "goto LAB_0015ffe9;" goto statement_identifier ;) })) }))) (labeled_statement "LAB_001600d0:\n        lVar1 = param_1[0xc];" statement_identifier : (expression_statement "lVar1 = param_1[0xc];" (assignment_expression "lVar1 = param_1[0xc]" identifier = (subscript_expression "param_1[0xc]" identifier [ number_literal ])) ;)) (expression_statement "iVar3 = (**(code **)(*param_1 + 200))(param_1);" (assignment_expression "iVar3 = (**(code **)(*param_1 + 200))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 200))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 200))" ( (pointer_expression "**(code **)(*param_1 + 200)" * (pointer_expression "*(code **)(*param_1 + 200)" * (cast_expression "(code **)(*param_1 + 200)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 200)" ( (binary_expression "*param_1 + 200" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);" (assignment_expression "uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3)" identifier = (call_expression "(ulong)(uint)(((int)lVar1 + 1) * iVar3)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(((int)lVar1 + 1) * iVar3)" ( (binary_expression "((int)lVar1 + 1) * iVar3" (parenthesized_expression "((int)lVar1 + 1)" ( (binary_expression "(int)lVar1 + 1" (cast_expression "(int)lVar1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )) * identifier) )))) ;) (goto_statement "goto LAB_0015ffeb;" goto statement_identifier ;) })) }) (else_clause "else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" else (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" if (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) != 4)" ( (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) != 4" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" ( (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" * (cast_expression "(byte *)((long)param_2 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x3a)" ( (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00160044;" goto statement_identifier ;)))) })) (labeled_statement "LAB_0015ffe9:\n  uVar4 = 0;" statement_identifier : (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;)) (labeled_statement "LAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" statement_identifier : (if_statement "if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 4) & 1) == 0)" ( (binary_expression "(*(byte *)(param_1 + 4) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 4) & 1)" ( (binary_expression "*(byte *)(param_1 + 4) & 1" (pointer_expression "*(byte *)(param_1 + 4)" * (cast_expression "(byte *)(param_1 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 4)" ( (binary_expression "param_1 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" { (expression_statement "FUN_00199900("../../gold/output.h",0xc5,"address");" (call_expression "FUN_00199900("../../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 ") ))) ;) }))) (if_statement "if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }" if (parenthesized_expression "(*(uint *)((long)param_2 + 0x24) == 0xffffffff)" ( (binary_expression "*(uint *)((long)param_2 + 0x24) == 0xffffffff" (pointer_expression "*(uint *)((long)param_2 + 0x24)" * (cast_expression "(uint *)((long)param_2 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x24)" ( (binary_expression "(long)param_2 + 0x24" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }" { (expression_statement "FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");" (call_expression "FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset")" identifier (argument_list "("../../gold/symtab.h",0x1ce,"plt_offset")" ( (string_literal ""../../gold/symtab.h"" " string_content ") , number_literal , (string_literal ""plt_offset"" " string_content ") ))) ;) })) (return_statement "return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;" return (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4" (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24) + param_1[1]" (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)((long)param_2 + 0x24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_2 + 0x24)" ( (binary_expression "(long)param_2 + 0x24" (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + (subscript_expression "param_1[1]" identifier [ number_literal ])) + identifier) ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (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 { (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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) & LIT) )) == LIT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) & LIT) )) == LIT) ))) )) ))) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) & LIT) )) == LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) & LIT) )) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression * IDENT) , LIT , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) || (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (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) )))) != (char_literal ' escape_sequence ')) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (char_literal ' escape_sequence ')) ))) )) ))) )) (goto_statement goto statement_identifier ;)) })) (goto_statement goto statement_identifier ;) })) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;)) (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 (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )) * IDENT) )))) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)))) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (labeled_statement statement_identifier : (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 ") ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (return_statement return (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) + (subscript_expression IDENT [ LIT ])) + IDENT) ;) })))
(function_definition "long FUN_0015ffd0(long *param_1,undefined8 *param_2)\n\n{\n  long lVar1;\n  char cVar2;\n  int iVar3;\n  ulong uVar4;\n  char local_19;\n  \n  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar4 = 0;\nLAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }\n  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_0015ffd0(long *param_1,undefined8 *param_2)" (identifier "FUN_0015ffd0") (parameter_list "(long *param_1,undefined8 *param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 *param_2" (type_identifier "undefined8") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  long lVar1;\n  char cVar2;\n  int iVar3;\n  ulong uVar4;\n  char local_19;\n  \n  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }\nLAB_0015ffe9:\n  uVar4 = 0;\nLAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }\n  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }\n  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "char local_19;" (primitive_type "char") (identifier "local_19") (; ";")) (if_statement "if ((*(byte *)(param_2 + 7) & 0xf) == 10) {\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_2 + 7) & 0xf) == 10)" (( "(") (binary_expression "(*(byte *)(param_2 + 7) & 0xf) == 10" (parenthesized_expression "(*(byte *)(param_2 + 7) & 0xf)" (( "(") (binary_expression "*(byte *)(param_2 + 7) & 0xf" (pointer_expression "*(byte *)(param_2 + 7)" (* "*") (cast_expression "(byte *)(param_2 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")")))) (& "&") (number_literal "0xf")) () ")")) (== "==") (number_literal "10")) () ")")) (compound_statement "{\n    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;\n  }" ({ "{") (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }\n    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" (if "if") (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) == 0)" (( "(") (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" (( "(") (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" (* "*") (cast_expression "(byte *)((long)param_2 + 0x3a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x3a)" (( "(") (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x3a")) () ")")))) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }\n    }" ({ "{") (if_statement "if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }" (if "if") (parenthesized_expression "(((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0))))" (( "(") (binary_expression "((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&\n         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))" (parenthesized_expression "((*(byte *)(param_2[2] + 0x3c) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(param_2[2] + 0x3c) & 1) == 0" (parenthesized_expression "(*(byte *)(param_2[2] + 0x3c) & 1)" (( "(") (binary_expression "*(byte *)(param_2[2] + 0x3c) & 1" (pointer_expression "*(byte *)(param_2[2] + 0x3c)" (* "*") (cast_expression "(byte *)(param_2[2] + 0x3c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2[2] + 0x3c)" (( "(") (binary_expression "param_2[2] + 0x3c" (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x3c")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))" (( "(") (parenthesized_expression "(*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0))" (( "(") (binary_expression "*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)" (binary_expression "*(int *)(param_2 + 3) != 0" (pointer_expression "*(int *)(param_2 + 3)" (* "*") (cast_expression "(int *)(param_2 + 3)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 3)" (( "(") (binary_expression "param_2 + 3" (identifier "param_2") (+ "+") (number_literal "3")) () ")")))) (!= "!=") (number_literal "0")) (|| "||") (parenthesized_expression "((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)" (( "(") (binary_expression "(*(byte *)((long)param_2 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3b) & 0x20)" (( "(") (binary_expression "*(byte *)((long)param_2 + 0x3b) & 0x20" (pointer_expression "*(byte *)((long)param_2 + 0x3b)" (* "*") (cast_expression "(byte *)((long)param_2 + 0x3b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x3b)" (( "(") (binary_expression "(long)param_2 + 0x3b" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x3b")) () ")")))) (& "&") (number_literal "0x20")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\nLAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }\nLAB_001600d0:\n        lVar1 = param_1[0xc];\n        iVar3 = (**(code **)(*param_1 + 200))(param_1);\n        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);\n        goto LAB_0015ffeb;\n      }" ({ "{") (labeled_statement "LAB_00160044:\n        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" (statement_identifier "LAB_00160044") (: ":") (if_statement "if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" (if "if") (parenthesized_expression "(((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0))" (( "(") (binary_expression "((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&\n           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)" (parenthesized_expression "((*(byte *)((long)param_2 + 0x39) & 3) == 0)" (( "(") (binary_expression "(*(byte *)((long)param_2 + 0x39) & 3) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x39) & 3)" (( "(") (binary_expression "*(byte *)((long)param_2 + 0x39) & 3" (pointer_expression "*(byte *)((long)param_2 + 0x39)" (* "*") (cast_expression "(byte *)((long)param_2 + 0x39)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x39)" (( "(") (binary_expression "(long)param_2 + 0x39" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x39")) () ")")))) (& "&") (number_literal "3")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)" (( "(") (binary_expression "(*(byte *)((long)param_2 + 0x3b) & 0x10) == 0" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3b) & 0x10)" (( "(") (binary_expression "*(byte *)((long)param_2 + 0x3b) & 0x10" (pointer_expression "*(byte *)((long)param_2 + 0x3b)" (* "*") (cast_expression "(byte *)((long)param_2 + 0x3b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x3b)" (( "(") (binary_expression "(long)param_2 + 0x3b" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x3b")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n          if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }\n          if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }\n        }" ({ "{") (expression_statement "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" (( "(") (binary_expression "PTR_DAT_003f85c0 + 0x10" (identifier "PTR_DAT_003f85c0") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if (lVar1 == 0) {\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }" (if "if") (parenthesized_expression "(lVar1 == 0)" (( "(") (binary_expression "lVar1 == 0" (identifier "lVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");\n          }" ({ "{") (labeled_statement "LAB_0016012d:\n                    \n            FUN_00199900("../../gold/parameters.h",0x5c,"options");" (statement_identifier "LAB_0016012d") (: ":") (expression_statement "FUN_00199900("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_00199900("../../gold/parameters.h",0x5c,"options")" (identifier "FUN_00199900") (argument_list "("../../gold/parameters.h",0x5c,"options")" (( "(") (string_literal ""../../gold/parameters.h"" (" """) (string_content "../../gold/parameters.h") (" """)) (, ",") (number_literal "0x5c") (, ",") (string_literal ""options"" (" """) (string_content "options") (" """)) () ")"))) (; ";"))) (} "}"))) (if_statement "if (*(char *)(lVar1 + 0x2a61) != '\0') {\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }" (if "if") (parenthesized_expression "(*(char *)(lVar1 + 0x2a61) != '\0')" (( "(") (binary_expression "*(char *)(lVar1 + 0x2a61) != '\0'" (pointer_expression "*(char *)(lVar1 + 0x2a61)" (* "*") (cast_expression "(char *)(lVar1 + 0x2a61)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x2a61)" (( "(") (binary_expression "lVar1 + 0x2a61" (identifier "lVar1") (+ "+") (number_literal "0x2a61")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);\n            if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }\n            goto LAB_0015ffe9;\n          }" ({ "{") (expression_statement "cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);" (assignment_expression "cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19)" (identifier "cVar2") (= "=") (call_expression "FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19)" (identifier "FUN_00241de0") (argument_list "(lVar1 + 0x9120,*param_2,0,&local_19)" (( "(") (binary_expression "lVar1 + 0x9120" (identifier "lVar1") (+ "+") (number_literal "0x9120")) (, ",") (pointer_expression "*param_2" (* "*") (identifier "param_2")) (, ",") (number_literal "0") (, ",") (pointer_expression "&local_19" (& "&") (identifier "local_19")) () ")")))) (; ";")) (if_statement "if ((cVar2 == '\0') || (local_19 != '\0')) {\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }" (if "if") (parenthesized_expression "((cVar2 == '\0') || (local_19 != '\0'))" (( "(") (binary_expression "(cVar2 == '\0') || (local_19 != '\0')" (parenthesized_expression "(cVar2 == '\0')" (( "(") (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (|| "||") (parenthesized_expression "(local_19 != '\0')" (( "(") (binary_expression "local_19 != '\0'" (identifier "local_19") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);\n              if (lVar1 == 0) goto LAB_0016012d;\n              if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;\n            }" ({ "{") (expression_statement "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);" (assignment_expression "lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(PTR_DAT_003f85c0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_003f85c0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_003f85c0 + 0x10)" (( "(") (binary_expression "PTR_DAT_003f85c0 + 0x10" (identifier "PTR_DAT_003f85c0") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if (lVar1 == 0) goto LAB_0016012d;" (if "if") (parenthesized_expression "(lVar1 == 0)" (( "(") (binary_expression "lVar1 == 0" (identifier "lVar1") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0016012d;" (goto "goto") (statement_identifier "LAB_0016012d") (; ";"))) (if_statement "if ((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))\n              goto LAB_001600d0;" (if "if") (parenthesized_expression "((*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))" (( "(") (binary_expression "(*(char *)(lVar1 + 0xd21) != '\0') ||\n                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')))" (parenthesized_expression "(*(char *)(lVar1 + 0xd21) != '\0')" (( "(") (binary_expression "*(char *)(lVar1 + 0xd21) != '\0'" (pointer_expression "*(char *)(lVar1 + 0xd21)" (* "*") (cast_expression "(char *)(lVar1 + 0xd21)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0xd21)" (( "(") (binary_expression "lVar1 + 0xd21" (identifier "lVar1") (+ "+") (number_literal "0xd21")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (|| "||") (parenthesized_expression "(((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')))" (( "(") (parenthesized_expression "((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))" (( "(") (binary_expression "(*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0')" (binary_expression "(*(byte *)(param_2 + 7) & 0xf) != 1" (parenthesized_expression "(*(byte *)(param_2 + 7) & 0xf)" (( "(") (binary_expression "*(byte *)(param_2 + 7) & 0xf" (pointer_expression "*(byte *)(param_2 + 7)" (* "*") (cast_expression "(byte *)(param_2 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 7)" (( "(") (binary_expression "param_2 + 7" (identifier "param_2") (+ "+") (number_literal "7")) () ")")))) (& "&") (number_literal "0xf")) () ")")) (!= "!=") (number_literal "1")) (&& "&&") (parenthesized_expression "(*(char *)(lVar1 + 0xde9) != '\0')" (( "(") (binary_expression "*(char *)(lVar1 + 0xde9) != '\0'" (pointer_expression "*(char *)(lVar1 + 0xde9)" (* "*") (cast_expression "(char *)(lVar1 + 0xde9)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0xde9)" (( "(") (binary_expression "lVar1 + 0xde9" (identifier "lVar1") (+ "+") (number_literal "0xde9")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) () ")"))) () ")")) (goto_statement "goto LAB_001600d0;" (goto "goto") (statement_identifier "LAB_001600d0") (; ";"))) (} "}"))) (goto_statement "goto LAB_0015ffe9;" (goto "goto") (statement_identifier "LAB_0015ffe9") (; ";")) (} "}"))) (} "}")))) (labeled_statement "LAB_001600d0:\n        lVar1 = param_1[0xc];" (statement_identifier "LAB_001600d0") (: ":") (expression_statement "lVar1 = param_1[0xc];" (assignment_expression "lVar1 = param_1[0xc]" (identifier "lVar1") (= "=") (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]"))) (; ";"))) (expression_statement "iVar3 = (**(code **)(*param_1 + 200))(param_1);" (assignment_expression "iVar3 = (**(code **)(*param_1 + 200))(param_1)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(*param_1 + 200))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 200))" (( "(") (pointer_expression "**(code **)(*param_1 + 200)" (* "*") (pointer_expression "*(code **)(*param_1 + 200)" (* "*") (cast_expression "(code **)(*param_1 + 200)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 200)" (( "(") (binary_expression "*param_1 + 200" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "200")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);" (assignment_expression "uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3)" (identifier "uVar4") (= "=") (call_expression "(ulong)(uint)(((int)lVar1 + 1) * iVar3)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uint)" (( "(") (identifier "uint") () ")"))) (argument_list "(((int)lVar1 + 1) * iVar3)" (( "(") (binary_expression "((int)lVar1 + 1) * iVar3" (parenthesized_expression "((int)lVar1 + 1)" (( "(") (binary_expression "(int)lVar1 + 1" (cast_expression "(int)lVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar1")) (+ "+") (number_literal "1")) () ")")) (* "*") (identifier "iVar3")) () ")")))) (; ";")) (goto_statement "goto LAB_0015ffeb;" (goto "goto") (statement_identifier "LAB_0015ffeb") (; ";")) (} "}"))) (} "}")) (else_clause "else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" (else "else") (if_statement "if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;" (if "if") (parenthesized_expression "((*(byte *)((long)param_2 + 0x3a) & 7) != 4)" (( "(") (binary_expression "(*(byte *)((long)param_2 + 0x3a) & 7) != 4" (parenthesized_expression "(*(byte *)((long)param_2 + 0x3a) & 7)" (( "(") (binary_expression "*(byte *)((long)param_2 + 0x3a) & 7" (pointer_expression "*(byte *)((long)param_2 + 0x3a)" (* "*") (cast_expression "(byte *)((long)param_2 + 0x3a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x3a)" (( "(") (binary_expression "(long)param_2 + 0x3a" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x3a")) () ")")))) (& "&") (number_literal "7")) () ")")) (!= "!=") (number_literal "4")) () ")")) (goto_statement "goto LAB_00160044;" (goto "goto") (statement_identifier "LAB_00160044") (; ";"))))) (} "}"))) (labeled_statement "LAB_0015ffe9:\n  uVar4 = 0;" (statement_identifier "LAB_0015ffe9") (: ":") (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";"))) (labeled_statement "LAB_0015ffeb:\n  if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" (statement_identifier "LAB_0015ffeb") (: ":") (if_statement "if ((*(byte *)(param_1 + 4) & 1) == 0) {\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 4) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 4) & 1) == 0" (parenthesized_expression "(*(byte *)(param_1 + 4) & 1)" (( "(") (binary_expression "*(byte *)(param_1 + 4) & 1" (pointer_expression "*(byte *)(param_1 + 4)" (* "*") (cast_expression "(byte *)(param_1 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 4)" (( "(") (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_00199900("../../gold/output.h",0xc5,"address");\n  }" ({ "{") (expression_statement "FUN_00199900("../../gold/output.h",0xc5,"address");" (call_expression "FUN_00199900("../../gold/output.h",0xc5,"address")" (identifier "FUN_00199900") (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") (" """)) () ")"))) (; ";")) (} "}")))) (if_statement "if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }" (if "if") (parenthesized_expression "(*(uint *)((long)param_2 + 0x24) == 0xffffffff)" (( "(") (binary_expression "*(uint *)((long)param_2 + 0x24) == 0xffffffff" (pointer_expression "*(uint *)((long)param_2 + 0x24)" (* "*") (cast_expression "(uint *)((long)param_2 + 0x24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x24)" (( "(") (binary_expression "(long)param_2 + 0x24" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x24")) () ")")))) (== "==") (number_literal "0xffffffff")) () ")")) (compound_statement "{\n                    \n    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");\n  }" ({ "{") (expression_statement "FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");" (call_expression "FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset")" (identifier "FUN_00199900") (argument_list "("../../gold/symtab.h",0x1ce,"plt_offset")" (( "(") (string_literal ""../../gold/symtab.h"" (" """) (string_content "../../gold/symtab.h") (" """)) (, ",") (number_literal "0x1ce") (, ",") (string_literal ""plt_offset"" (" """) (string_content "plt_offset") (" """)) () ")"))) (; ";")) (} "}"))) (return_statement "return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;" (return "return") (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4" (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24) + param_1[1]" (binary_expression "(ulong)*(uint *)((long)param_2 + 0x24)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)((long)param_2 + 0x24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_2 + 0x24)" (( "(") (binary_expression "(long)param_2 + 0x24" (cast_expression "(long)param_2" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_2")) (+ "+") (number_literal "0x24")) () ")")))) (+ "+") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (+ "+") (identifier "uVar4")) (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: uint64_t address_for_global(Output_data_plt_i386 * this, Symbol * gsym)
    */

uint64_t __thiscall
anon_unknown.dwarf_2330a8::type_1::function_1
          (type_1 *this,type_2 *gsym)

{
  type_3 var_8;
  type_4 *var_4;
  bool bVar3;
  int var_9;
  type_5 var_10;
  bool var_7;
  
  if ((gsym->field_0x38 & 0xf) == 10) {
    if ((gsym->field_0x3a & 7) == 0) {
      if ((((type_5)((gsym->u1_).output_segment)->output_lists_[2].
                   super__Vector_base<var_1::Output_data*,var_2::allocator<var_1::Output_data*>var_3>.
                   _M_impl._M_finish & 0x100000000) == 0) &&
         (((gsym->u2_).shndx != 0 || ((gsym->field_0x3b & 0x20) == 0)))) {
LAB_00160044:
        if (((gsym->field_0x39 & 3) == 0) && ((gsym->field_0x3b & 0x10) == 0)) {
          var_4 = var_1::parameters->options_;
          if (var_4 == (type_4 *)0x0) {
LAB_0016012d:
                    /* WARNING: Subroutine does not return */
            gold::var_5("../../gold/parameters.h",0x5c,"options");
          }
          if ((var_4->shared_).value != false) {
            bVar3 = var_1::Version_script_info::var_6
                              (&(var_4->dynamic_list_).version_script_info_,gsym->name_,
                               (type_6 *)0x0,&var_7);
            if ((!bVar3) || (var_7 != false)) {
              var_4 = var_1::parameters->options_;
              if (var_4 == (type_4 *)0x0) goto LAB_0016012d;
              if (((var_4->Bsymbolic_).value != false) ||
                 (((gsym->field_0x38 & 0xf) != 1 && ((var_4->Bsymbolic_functions_).value != false))
                 )) goto LAB_001600d0;
            }
            goto LAB_0015ffe9;
          }
        }
LAB_001600d0:
        var_8 = this->count_;
        var_9 = (**(type_7 **)(*(long *)this + 200))(this);
        var_10 = (type_5)((var_8 + 1) * var_9);
        goto LAB_0015ffeb;
      }
    }
    else if ((gsym->field_0x3a & 7) != 4) goto LAB_00160044;
  }
LAB_0015ffe9:
  var_10 = 0;
LAB_0015ffeb:
  if ((this->field_0x20 & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    gold::var_5("../../gold/output.h",0xc5,"address");
  }
  if (gsym->plt_offset_ == 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    gold::var_5("../../gold/symtab.h",0x1ce,"plt_offset");
  }
  return (type_5)gsym->plt_offset_ + *(long *)&this->field_0x8 + var_10;
}


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

long MASKED(long *param_1,undefined8 *param_2)

{
  long lVar1;
  char cVar2;
  int iVar3;
  ulong uVar4;
  char local_19;
  
  if ((*(byte *)(param_2 + 7) & 0xf) == 10) {
    if ((*(byte *)((long)param_2 + 0x3a) & 7) == 0) {
      if (((*(byte *)(param_2[2] + 0x3c) & 1) == 0) &&
         ((*(int *)(param_2 + 3) != 0 || ((*(byte *)((long)param_2 + 0x3b) & 0x20) == 0)))) {
LAB_00160044:
        if (((*(byte *)((long)param_2 + 0x39) & 3) == 0) &&
           ((*(byte *)((long)param_2 + 0x3b) & 0x10) == 0)) {
          lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);
          if (lVar1 == 0) {
LAB_0016012d:
                    /* WARNING: Subroutine does not return */
            FUN_00199900("../../gold/parameters.h",0x5c,"options");
          }
          if (*(char *)(lVar1 + 0x2a61) != '\0') {
            cVar2 = FUN_00241de0(lVar1 + 0x9120,*param_2,0,&local_19);
            if ((cVar2 == '\0') || (local_19 != '\0')) {
              lVar1 = *(long *)(PTR_DAT_003f85c0 + 0x10);
              if (lVar1 == 0) goto LAB_0016012d;
              if ((*(char *)(lVar1 + 0xd21) != '\0') ||
                 (((*(byte *)(param_2 + 7) & 0xf) != 1 && (*(char *)(lVar1 + 0xde9) != '\0'))))
              goto LAB_001600d0;
            }
            goto LAB_0015ffe9;
          }
        }
LAB_001600d0:
        lVar1 = param_1[0xc];
        iVar3 = (**(code **)(*param_1 + 200))(param_1);
        uVar4 = (ulong)(uint)(((int)lVar1 + 1) * iVar3);
        goto LAB_0015ffeb;
      }
    }
    else if ((*(byte *)((long)param_2 + 0x3a) & 7) != 4) goto LAB_00160044;
  }
LAB_0015ffe9:
  uVar4 = 0;
LAB_0015ffeb:
  if ((*(byte *)(param_1 + 4) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_00199900("../../gold/output.h",0xc5,"address");
  }
  if (*(uint *)((long)param_2 + 0x24) == 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_00199900("../../gold/symtab.h",0x1ce,"plt_offset");
  }
  return (ulong)*(uint *)((long)param_2 + 0x24) + param_1[1] + uVar4;
}

