
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void run(Check_library * this, Workqueue * param_1) */

void __thiscall gold::Check_library::run(Check_library *this,Workqueue *param_1)

{
  bool bVar1;
  Incremental_inputs *this_00;
  Incremental_library *this_01;
  uint arg_serial;
  
  this_00 = this->layout_->incremental_inputs_;
  if (this_00 == (Incremental_inputs *)0x0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/readsyms.cc",0x2ef,"run");
  }
  this_01 = (this->ibase_->library_map_).
            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_>
            ._M_impl._M_start[this->input_file_index_];
  if (this_01 != (Incremental_library *)0x0) {
    Incremental_library::copy_unused_symbols(this_01);
    bVar1 = this_01->is_reported_;
    this_01->is_reported_ = true;
    if (bVar1 == false) {
      arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();
      Incremental_inputs::report_archive_begin
                (this_00,&this_01->super_Library_base,arg_serial,
                 (this->ibase_->script_map_).
                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl
                 ._M_start[this_01->input_file_index_]);
    }
    Incremental_inputs::report_archive_end(this_00,&this_01->super_Library_base);
    return;
  }
                    /* WARNING: Subroutine does not return */
  do_gold_unreachable("../../gold/readsyms.cc",0x2f1,"run");
}



void FUN_0023ea90(long param_1)

{
  char cVar1;
  long lVar2;
  long lVar3;
  undefined4 uVar4;
  
  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);
  if (lVar2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);
  }
  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +
                   (ulong)*(uint *)(param_1 + 0x48) * 8);
  if (lVar3 != 0) {
    FUN_00183fa0(lVar3);
    cVar1 = *(char *)(lVar3 + 0x60);
    *(undefined1 *)(lVar3 + 0x60) = 1;
    if (cVar1 == '\0') {
      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();
      FUN_001837b0(lVar2,lVar3,uVar4,
                   *(undefined8 *)
                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +
                    (ulong)*(uint *)(lVar3 + 0x38) * 8));
    }
    FUN_00183e70(lVar2,lVar3);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);
}


PUSH R12
PUSH RBP
PUSH RBX
MOV RAX,qword ptr [RDI + 0x38]
MOV R12,qword ptr [RAX + 0x378]
TEST R12,R12
JZ 0x0023eb1c
MOV RAX,qword ptr [RDI + 0x40]
MOV EDX,dword ptr [RDI + 0x48]
MOV RBP,RDI
MOV RAX,qword ptr [RAX + 0x20]
MOV RBX,qword ptr [RAX + RDX*0x8]
TEST RBX,RBX
JZ 0x0023eb04
MOV RDI,RBX
CALL 0x00183fa0
MOVZX EAX,byte ptr [RBX + 0x60]
MOV byte ptr [RBX + 0x60],0x1
TEST AL,AL
JNZ 0x0023eaf5
MOV RDI,qword ptr [RBX + 0x40]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x28]
MOV RDX,qword ptr [RBP + 0x40]
MOV ECX,dword ptr [RBX + 0x38]
MOV RSI,RBX
MOV RDI,R12
MOV RDX,qword ptr [RDX + 0x38]
MOV RCX,qword ptr [RDX + RCX*0x8]
MOV EDX,EAX
CALL 0x001837b0
MOV RSI,RBX
MOV RDI,R12
POP RBX
POP RBP
POP R12
JMP 0x00183e70
LEA RDX,[0x382cb0]
MOV ESI,0x2f1
LEA RDI,[0x382b60]
CALL 0x0017c650
LEA RDX,[0x382cb0]
MOV ESI,0x2ef
LEA RDI,[0x382b60]
CALL 0x0017c650
(translation_unit "void FUN_0023ea90(long param_1)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  undefined4 uVar4;\n  \n  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);\n  if (lVar2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }\n  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);\n  if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);\n}\n\n" (function_definition "void FUN_0023ea90(long param_1)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  undefined4 uVar4;\n  \n  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);\n  if (lVar2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }\n  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);\n  if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);\n}" primitive_type (function_declarator "FUN_0023ea90(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  undefined4 uVar4;\n  \n  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);\n  if (lVar2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }\n  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);\n  if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (expression_statement "lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);" (assignment_expression "lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378)" identifier = (pointer_expression "*(long *)(*(long *)(param_1 + 0x38) + 0x378)" * (cast_expression "(long *)(*(long *)(param_1 + 0x38) + 0x378)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x38) + 0x378)" ( (binary_expression "*(long *)(param_1 + 0x38) + 0x378" (pointer_expression "*(long *)(param_1 + 0x38)" * (cast_expression "(long *)(param_1 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (lVar2 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }" { comment (expression_statement "FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);" (call_expression "FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0)" identifier (argument_list "("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0)" ( (string_literal ""../../gold/readsyms.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00382cb0" & identifier) ))) ;) })) (expression_statement "lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);" (assignment_expression "lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" identifier = (pointer_expression "*(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" * (cast_expression "(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" ( (binary_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8" (pointer_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x20)" * (cast_expression "(long *)(*(long *)(param_1 + 0x40) + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x40) + 0x20)" ( (binary_expression "*(long *)(param_1 + 0x40) + 0x20" (pointer_expression "*(long *)(param_1 + 0x40)" * (cast_expression "(long *)(param_1 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "(ulong)*(uint *)(param_1 + 0x48) * 8" (binary_expression "(ulong)*(uint *)(param_1 + 0x48)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_1 + 0x48)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) * number_literal)) ))))) ;) (if_statement "if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }" { (expression_statement "FUN_00183fa0(lVar3);" (call_expression "FUN_00183fa0(lVar3)" identifier (argument_list "(lVar3)" ( identifier ))) ;) (expression_statement "cVar1 = *(char *)(lVar3 + 0x60);" (assignment_expression "cVar1 = *(char *)(lVar3 + 0x60)" identifier = (pointer_expression "*(char *)(lVar3 + 0x60)" * (cast_expression "(char *)(lVar3 + 0x60)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x60)" ( (binary_expression "lVar3 + 0x60" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 *)(lVar3 + 0x60) = 1;" (assignment_expression "*(undefined1 *)(lVar3 + 0x60) = 1" (pointer_expression "*(undefined1 *)(lVar3 + 0x60)" * (cast_expression "(undefined1 *)(lVar3 + 0x60)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x60)" ( (binary_expression "lVar3 + 0x60" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }" { (expression_statement "uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();" (assignment_expression "uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))()" identifier = (call_expression "(**(code **)(**(long **)(lVar3 + 0x40) + 0x28))()" (parenthesized_expression "(**(code **)(**(long **)(lVar3 + 0x40) + 0x28))" ( (pointer_expression "**(code **)(**(long **)(lVar3 + 0x40) + 0x28)" * (pointer_expression "*(code **)(**(long **)(lVar3 + 0x40) + 0x28)" * (cast_expression "(code **)(**(long **)(lVar3 + 0x40) + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(lVar3 + 0x40) + 0x28)" ( (binary_expression "**(long **)(lVar3 + 0x40) + 0x28" (pointer_expression "**(long **)(lVar3 + 0x40)" * (pointer_expression "*(long **)(lVar3 + 0x40)" * (cast_expression "(long **)(lVar3 + 0x40)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x40)" ( (binary_expression "lVar3 + 0x40" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));" (call_expression "FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8))" identifier (argument_list "(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8))" ( identifier , identifier , identifier , (pointer_expression "*(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" * (cast_expression "(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" ( (binary_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8" (pointer_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x38)" * (cast_expression "(long *)(*(long *)(param_1 + 0x40) + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x40) + 0x38)" ( (binary_expression "*(long *)(param_1 + 0x40) + 0x38" (pointer_expression "*(long *)(param_1 + 0x40)" * (cast_expression "(long *)(param_1 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "(ulong)*(uint *)(lVar3 + 0x38) * 8" (binary_expression "(ulong)*(uint *)(lVar3 + 0x38)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(lVar3 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x38)" ( (binary_expression "lVar3 + 0x38" identifier + number_literal) )))) * number_literal)) )))) ))) ;) })) (expression_statement "FUN_00183e70(lVar2,lVar3);" (call_expression "FUN_00183e70(lVar2,lVar3)" identifier (argument_list "(lVar2,lVar3)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })) comment (expression_statement "FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);" (call_expression "FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0)" identifier (argument_list "("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0)" ( (string_literal ""../../gold/readsyms.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00382cb0" & identifier) ))) ;) })))
(translation_unit "/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: void run(Check_library * this, Workqueue * param_1) */\n\nvoid __thiscall gold::Check_library::run(Check_library *this,Workqueue *param_1)\n\n{\n  bool bVar1;\n  Incremental_inputs *this_00;\n  Incremental_library *this_01;\n  uint arg_serial;\n  \n  this_00 = this->layout_->incremental_inputs_;\n  if (this_00 == (Incremental_inputs *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/readsyms.cc",0x2ef,"run");\n  }\n  this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_>\n            ._M_impl._M_start[this->input_file_index_];\n  if (this_01 != (Incremental_library *)0x0) {\n    Incremental_library::copy_unused_symbols(this_01);\n    bVar1 = this_01->is_reported_;\n    this_01->is_reported_ = true;\n    if (bVar1 == false) {\n      arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();\n      Incremental_inputs::report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);\n    }\n    Incremental_inputs::report_archive_end(this_00,&this_01->super_Library_base);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/readsyms.cc",0x2f1,"run");\n}\n\n" comment comment (function_definition "void __thiscall gold::Check_library::run(Check_library *this,Workqueue *param_1)\n\n{\n  bool bVar1;\n  Incremental_inputs *this_00;\n  Incremental_library *this_01;\n  uint arg_serial;\n  \n  this_00 = this->layout_->incremental_inputs_;\n  if (this_00 == (Incremental_inputs *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/readsyms.cc",0x2ef,"run");\n  }\n  this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_>\n            ._M_impl._M_start[this->input_file_index_];\n  if (this_01 != (Incremental_library *)0x0) {\n    Incremental_library::copy_unused_symbols(this_01);\n    bVar1 = this_01->is_reported_;\n    this_01->is_reported_ = true;\n    if (bVar1 == false) {\n      arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();\n      Incremental_inputs::report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);\n    }\n    Incremental_inputs::report_archive_end(this_00,&this_01->super_Library_base);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/readsyms.cc",0x2f1,"run");\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Check_library::" identifier : : identifier : :) (function_declarator "run(Check_library *this,Workqueue *param_1)" identifier (parameter_list "(Check_library *this,Workqueue *param_1)" ( (parameter_declaration "Check_library *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Workqueue *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  Incremental_inputs *this_00;\n  Incremental_library *this_01;\n  uint arg_serial;\n  \n  this_00 = this->layout_->incremental_inputs_;\n  if (this_00 == (Incremental_inputs *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/readsyms.cc",0x2ef,"run");\n  }\n  this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_>\n            ._M_impl._M_start[this->input_file_index_];\n  if (this_01 != (Incremental_library *)0x0) {\n    Incremental_library::copy_unused_symbols(this_01);\n    bVar1 = this_01->is_reported_;\n    this_01->is_reported_ = true;\n    if (bVar1 == false) {\n      arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();\n      Incremental_inputs::report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);\n    }\n    Incremental_inputs::report_archive_end(this_00,&this_01->super_Library_base);\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n  do_gold_unreachable("../../gold/readsyms.cc",0x2f1,"run");\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "Incremental_inputs *this_00;" type_identifier (pointer_declarator "*this_00" * identifier) ;) (declaration "Incremental_library *this_01;" type_identifier (pointer_declarator "*this_01" * identifier) ;) (declaration "uint arg_serial;" type_identifier identifier ;) (expression_statement "this_00 = this->layout_->incremental_inputs_;" (assignment_expression "this_00 = this->layout_->incremental_inputs_" identifier = (field_expression "this->layout_->incremental_inputs_" (field_expression "this->layout_" identifier -> field_identifier) -> field_identifier)) ;) (if_statement "if (this_00 == (Incremental_inputs *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/readsyms.cc",0x2ef,"run");\n  }" if (parenthesized_expression "(this_00 == (Incremental_inputs *)0x0)" ( (binary_expression "this_00 == (Incremental_inputs *)0x0" identifier == (cast_expression "(Incremental_inputs *)0x0" ( (type_descriptor "Incremental_inputs *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/readsyms.cc",0x2ef,"run");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/readsyms.cc",0x2ef,"run");" (call_expression "do_gold_unreachable("../../gold/readsyms.cc",0x2ef,"run")" identifier (argument_list "("../../gold/readsyms.cc",0x2ef,"run")" ( (string_literal ""../../gold/readsyms.cc"" " string_content ") , number_literal , (string_literal ""run"" " string_content ") ))) ;) })) (expression_statement "this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_>\n            ._M_impl._M_start[this->input_file_index_];" (subscript_expression "this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_>\n            ._M_impl._M_start[this->input_file_index_]" (field_expression "this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_>\n            ._M_impl._M_start" (field_expression "this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_>\n            ._M_impl" (binary_expression "this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold::Incremental_library*>_" (binary_expression "this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std::allocator<gold" (binary_expression "this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold::Incremental_library*,_std" (assignment_expression "this_01 = (this->ibase_->library_map_).\n            super__Vector_base<gold" identifier = (binary_expression "(this->ibase_->library_map_).\n            super__Vector_base<gold" (field_expression "(this->ibase_->library_map_).\n            super__Vector_base" (parenthesized_expression "(this->ibase_->library_map_)" ( (field_expression "this->ibase_->library_map_" (field_expression "this->ibase_" identifier -> field_identifier) -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Incremental_library" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Incremental_library" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) [ (field_expression "this->input_file_index_" identifier -> field_identifier) ]) ;) (if_statement "if (this_01 != (Incremental_library *)0x0) {\n    Incremental_library::copy_unused_symbols(this_01);\n    bVar1 = this_01->is_reported_;\n    this_01->is_reported_ = true;\n    if (bVar1 == false) {\n      arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();\n      Incremental_inputs::report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);\n    }\n    Incremental_inputs::report_archive_end(this_00,&this_01->super_Library_base);\n    return;\n  }" if (parenthesized_expression "(this_01 != (Incremental_library *)0x0)" ( (binary_expression "this_01 != (Incremental_library *)0x0" identifier != (cast_expression "(Incremental_library *)0x0" ( (type_descriptor "Incremental_library *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    Incremental_library::copy_unused_symbols(this_01);\n    bVar1 = this_01->is_reported_;\n    this_01->is_reported_ = true;\n    if (bVar1 == false) {\n      arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();\n      Incremental_inputs::report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);\n    }\n    Incremental_inputs::report_archive_end(this_00,&this_01->super_Library_base);\n    return;\n  }" { (labeled_statement "Incremental_library::copy_unused_symbols(this_01);" statement_identifier : (ERROR ":" :) (expression_statement "copy_unused_symbols(this_01);" (call_expression "copy_unused_symbols(this_01)" identifier (argument_list "(this_01)" ( identifier ))) ;)) (expression_statement "bVar1 = this_01->is_reported_;" (assignment_expression "bVar1 = this_01->is_reported_" identifier = (field_expression "this_01->is_reported_" identifier -> field_identifier)) ;) (expression_statement "this_01->is_reported_ = true;" (assignment_expression "this_01->is_reported_ = true" (field_expression "this_01->is_reported_" identifier -> field_identifier) = true) ;) (if_statement "if (bVar1 == false) {\n      arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();\n      Incremental_inputs::report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);\n    }" if (parenthesized_expression "(bVar1 == false)" ( (binary_expression "bVar1 == false" identifier == false) )) (compound_statement "{\n      arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();\n      Incremental_inputs::report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);\n    }" { (expression_statement "arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])();" (assignment_expression "arg_serial = (*this_01->input_reader_->_vptr_Input_reader[5])()" identifier = (call_expression "(*this_01->input_reader_->_vptr_Input_reader[5])()" (parenthesized_expression "(*this_01->input_reader_->_vptr_Input_reader[5])" ( (pointer_expression "*this_01->input_reader_->_vptr_Input_reader[5]" * (subscript_expression "this_01->input_reader_->_vptr_Input_reader[5]" (field_expression "this_01->input_reader_->_vptr_Input_reader" (field_expression "this_01->input_reader_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( )))) ;) (labeled_statement "Incremental_inputs::report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);" statement_identifier : (ERROR ":" :) (expression_statement "report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]);" (call_expression "report_archive_begin\n                (this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_])" identifier (argument_list "(this_00,&this_01->super_Library_base,arg_serial,\n                 (this->ibase_->script_map_).\n                 super__Vector_base<gold::Script_info*,_std::allocator<gold::Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_])" ( identifier , (pointer_expression "&this_01->super_Library_base" & (field_expression "this_01->super_Library_base" identifier -> field_identifier)) , identifier , (binary_expression "(this->ibase_->script_map_).\n                 super__Vector_base<gold" (field_expression "(this->ibase_->script_map_).\n                 super__Vector_base" (parenthesized_expression "(this->ibase_->script_map_)" ( (field_expression "this->ibase_->script_map_" (field_expression "this->ibase_" identifier -> field_identifier) -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Script_info*" : : identifier *) , (ERROR "_std::allocator<gold::" identifier : : (binary_expression "allocator<gold" identifier < identifier) : :) (subscript_expression "Script_info*>_>._M_impl\n                 ._M_start[this_01->input_file_index_]" (field_expression "Script_info*>_>._M_impl\n                 ._M_start" (field_expression "Script_info*>_>._M_impl" (binary_expression "Script_info*>_" identifier * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) [ (field_expression "this_01->input_file_index_" identifier -> field_identifier) ]) ))) ;)) })) (labeled_statement "Incremental_inputs::report_archive_end(this_00,&this_01->super_Library_base);" statement_identifier : (ERROR ":" :) (expression_statement "report_archive_end(this_00,&this_01->super_Library_base);" (call_expression "report_archive_end(this_00,&this_01->super_Library_base)" identifier (argument_list "(this_00,&this_01->super_Library_base)" ( identifier , (pointer_expression "&this_01->super_Library_base" & (field_expression "this_01->super_Library_base" identifier -> field_identifier)) ))) ;)) (return_statement "return;" return ;) })) comment (expression_statement "do_gold_unreachable("../../gold/readsyms.cc",0x2f1,"run");" (call_expression "do_gold_unreachable("../../gold/readsyms.cc",0x2f1,"run")" identifier (argument_list "("../../gold/readsyms.cc",0x2f1,"run")" ( (string_literal ""../../gold/readsyms.cc"" " string_content ") , number_literal , (string_literal ""run"" " string_content ") ))) ;) })))
(translation_unit "void FUN_0023ea90(long param_1)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  undefined4 uVar4;\n  \n  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);\n  if (lVar2 == 0) {\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }\n  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);\n  if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }\n                    \n  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);\n}\n\n" (function_definition "void FUN_0023ea90(long param_1)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  undefined4 uVar4;\n  \n  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);\n  if (lVar2 == 0) {\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }\n  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);\n  if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }\n                    \n  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);\n}" primitive_type (function_declarator "FUN_0023ea90(long param_1)" identifier (parameter_list "(long param_1)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  undefined4 uVar4;\n  \n  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);\n  if (lVar2 == 0) {\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }\n  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);\n  if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }\n                    \n  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (expression_statement "lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);" (assignment_expression "lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378)" identifier = (pointer_expression "*(long *)(*(long *)(param_1 + 0x38) + 0x378)" * (cast_expression "(long *)(*(long *)(param_1 + 0x38) + 0x378)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x38) + 0x378)" ( (binary_expression "*(long *)(param_1 + 0x38) + 0x378" (pointer_expression "*(long *)(param_1 + 0x38)" * (cast_expression "(long *)(param_1 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) + number_literal) ))))) ;) (if_statement "if (lVar2 == 0) {\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }" if (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }" { (expression_statement "FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);" (call_expression "FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0)" identifier (argument_list "("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0)" ( (string_literal ""../../gold/readsyms.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00382cb0" & identifier) ))) ;) })) (expression_statement "lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);" (assignment_expression "lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" identifier = (pointer_expression "*(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" * (cast_expression "(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" ( (binary_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8" (pointer_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x20)" * (cast_expression "(long *)(*(long *)(param_1 + 0x40) + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x40) + 0x20)" ( (binary_expression "*(long *)(param_1 + 0x40) + 0x20" (pointer_expression "*(long *)(param_1 + 0x40)" * (cast_expression "(long *)(param_1 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "(ulong)*(uint *)(param_1 + 0x48) * 8" (binary_expression "(ulong)*(uint *)(param_1 + 0x48)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(param_1 + 0x48)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) * number_literal)) ))))) ;) (if_statement "if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }" if (parenthesized_expression "(lVar3 != 0)" ( (binary_expression "lVar3 != 0" identifier != number_literal) )) (compound_statement "{\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }" { (expression_statement "FUN_00183fa0(lVar3);" (call_expression "FUN_00183fa0(lVar3)" identifier (argument_list "(lVar3)" ( identifier ))) ;) (expression_statement "cVar1 = *(char *)(lVar3 + 0x60);" (assignment_expression "cVar1 = *(char *)(lVar3 + 0x60)" identifier = (pointer_expression "*(char *)(lVar3 + 0x60)" * (cast_expression "(char *)(lVar3 + 0x60)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x60)" ( (binary_expression "lVar3 + 0x60" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 *)(lVar3 + 0x60) = 1;" (assignment_expression "*(undefined1 *)(lVar3 + 0x60) = 1" (pointer_expression "*(undefined1 *)(lVar3 + 0x60)" * (cast_expression "(undefined1 *)(lVar3 + 0x60)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x60)" ( (binary_expression "lVar3 + 0x60" identifier + number_literal) )))) = number_literal) ;) (if_statement "if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }" { (expression_statement "uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();" (assignment_expression "uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))()" identifier = (call_expression "(**(code **)(**(long **)(lVar3 + 0x40) + 0x28))()" (parenthesized_expression "(**(code **)(**(long **)(lVar3 + 0x40) + 0x28))" ( (pointer_expression "**(code **)(**(long **)(lVar3 + 0x40) + 0x28)" * (pointer_expression "*(code **)(**(long **)(lVar3 + 0x40) + 0x28)" * (cast_expression "(code **)(**(long **)(lVar3 + 0x40) + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(long **)(lVar3 + 0x40) + 0x28)" ( (binary_expression "**(long **)(lVar3 + 0x40) + 0x28" (pointer_expression "**(long **)(lVar3 + 0x40)" * (pointer_expression "*(long **)(lVar3 + 0x40)" * (cast_expression "(long **)(lVar3 + 0x40)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x40)" ( (binary_expression "lVar3 + 0x40" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));" (call_expression "FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8))" identifier (argument_list "(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8))" ( identifier , identifier , identifier , (pointer_expression "*(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" * (cast_expression "(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" ( (binary_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8" (pointer_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x38)" * (cast_expression "(long *)(*(long *)(param_1 + 0x40) + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_1 + 0x40) + 0x38)" ( (binary_expression "*(long *)(param_1 + 0x40) + 0x38" (pointer_expression "*(long *)(param_1 + 0x40)" * (cast_expression "(long *)(param_1 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "(ulong)*(uint *)(lVar3 + 0x38) * 8" (binary_expression "(ulong)*(uint *)(lVar3 + 0x38)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)(lVar3 + 0x38)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x38)" ( (binary_expression "lVar3 + 0x38" identifier + number_literal) )))) * number_literal)) )))) ))) ;) })) (expression_statement "FUN_00183e70(lVar2,lVar3);" (call_expression "FUN_00183e70(lVar2,lVar3)" identifier (argument_list "(lVar2,lVar3)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);" (call_expression "FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0)" identifier (argument_list "("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0)" ( (string_literal ""../../gold/readsyms.cc"" " string_content ") , number_literal , (pointer_expression "&DAT_00382cb0" & identifier) ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & IDENT) ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) + (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) )) (argument_list ( )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) + (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) )))) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (pointer_expression & IDENT) ))) ;) })))
(function_definition "void FUN_0023ea90(long param_1)\n\n{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  undefined4 uVar4;\n  \n  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);\n  if (lVar2 == 0) {\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }\n  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);\n  if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }\n                    \n  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);\n}" (primitive_type "void") (function_declarator "FUN_0023ea90(long param_1)" (identifier "FUN_0023ea90") (parameter_list "(long param_1)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) () ")"))) (compound_statement "{\n  char cVar1;\n  long lVar2;\n  long lVar3;\n  undefined4 uVar4;\n  \n  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);\n  if (lVar2 == 0) {\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }\n  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);\n  if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }\n                    \n  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (expression_statement "lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);" (assignment_expression "lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378)" (identifier "lVar2") (= "=") (pointer_expression "*(long *)(*(long *)(param_1 + 0x38) + 0x378)" (* "*") (cast_expression "(long *)(*(long *)(param_1 + 0x38) + 0x378)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0x38) + 0x378)" (( "(") (binary_expression "*(long *)(param_1 + 0x38) + 0x378" (pointer_expression "*(long *)(param_1 + 0x38)" (* "*") (cast_expression "(long *)(param_1 + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")")))) (+ "+") (number_literal "0x378")) () ")"))))) (; ";")) (if_statement "if (lVar2 == 0) {\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }" (if "if") (parenthesized_expression "(lVar2 == 0)" (( "(") (binary_expression "lVar2 == 0" (identifier "lVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);\n  }" ({ "{") (expression_statement "FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);" (call_expression "FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0)" (identifier "FUN_0017c650") (argument_list "("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0)" (( "(") (string_literal ""../../gold/readsyms.cc"" (" """) (string_content "../../gold/readsyms.cc") (" """)) (, ",") (number_literal "0x2ef") (, ",") (pointer_expression "&DAT_00382cb0" (& "&") (identifier "DAT_00382cb0")) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8);" (assignment_expression "lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" (* "*") (cast_expression "(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8)" (( "(") (binary_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x20) +\n                   (ulong)*(uint *)(param_1 + 0x48) * 8" (pointer_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x20)" (* "*") (cast_expression "(long *)(*(long *)(param_1 + 0x40) + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0x40) + 0x20)" (( "(") (binary_expression "*(long *)(param_1 + 0x40) + 0x20" (pointer_expression "*(long *)(param_1 + 0x40)" (* "*") (cast_expression "(long *)(param_1 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (number_literal "0x20")) () ")")))) (+ "+") (binary_expression "(ulong)*(uint *)(param_1 + 0x48) * 8" (binary_expression "(ulong)*(uint *)(param_1 + 0x48)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(param_1 + 0x48)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (* "*") (number_literal "8"))) () ")"))))) (; ";")) (if_statement "if (lVar3 != 0) {\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }" (if "if") (parenthesized_expression "(lVar3 != 0)" (( "(") (binary_expression "lVar3 != 0" (identifier "lVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00183fa0(lVar3);\n    cVar1 = *(char *)(lVar3 + 0x60);\n    *(undefined1 *)(lVar3 + 0x60) = 1;\n    if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }\n    FUN_00183e70(lVar2,lVar3);\n    return;\n  }" ({ "{") (expression_statement "FUN_00183fa0(lVar3);" (call_expression "FUN_00183fa0(lVar3)" (identifier "FUN_00183fa0") (argument_list "(lVar3)" (( "(") (identifier "lVar3") () ")"))) (; ";")) (expression_statement "cVar1 = *(char *)(lVar3 + 0x60);" (assignment_expression "cVar1 = *(char *)(lVar3 + 0x60)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(lVar3 + 0x60)" (* "*") (cast_expression "(char *)(lVar3 + 0x60)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x60)" (( "(") (binary_expression "lVar3 + 0x60" (identifier "lVar3") (+ "+") (number_literal "0x60")) () ")"))))) (; ";")) (expression_statement "*(undefined1 *)(lVar3 + 0x60) = 1;" (assignment_expression "*(undefined1 *)(lVar3 + 0x60) = 1" (pointer_expression "*(undefined1 *)(lVar3 + 0x60)" (* "*") (cast_expression "(undefined1 *)(lVar3 + 0x60)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x60)" (( "(") (binary_expression "lVar3 + 0x60" (identifier "lVar3") (+ "+") (number_literal "0x60")) () ")")))) (= "=") (number_literal "1")) (; ";")) (if_statement "if (cVar1 == '\0') {\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();\n      FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));\n    }" ({ "{") (expression_statement "uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();" (assignment_expression "uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))()" (identifier "uVar4") (= "=") (call_expression "(**(code **)(**(long **)(lVar3 + 0x40) + 0x28))()" (parenthesized_expression "(**(code **)(**(long **)(lVar3 + 0x40) + 0x28))" (( "(") (pointer_expression "**(code **)(**(long **)(lVar3 + 0x40) + 0x28)" (* "*") (pointer_expression "*(code **)(**(long **)(lVar3 + 0x40) + 0x28)" (* "*") (cast_expression "(code **)(**(long **)(lVar3 + 0x40) + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(long **)(lVar3 + 0x40) + 0x28)" (( "(") (binary_expression "**(long **)(lVar3 + 0x40) + 0x28" (pointer_expression "**(long **)(lVar3 + 0x40)" (* "*") (pointer_expression "*(long **)(lVar3 + 0x40)" (* "*") (cast_expression "(long **)(lVar3 + 0x40)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar3 + 0x40)" (( "(") (binary_expression "lVar3 + 0x40" (identifier "lVar3") (+ "+") (number_literal "0x40")) () ")"))))) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8));" (call_expression "FUN_001837b0(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8))" (identifier "FUN_001837b0") (argument_list "(lVar2,lVar3,uVar4,\n                   *(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8))" (( "(") (identifier "lVar2") (, ",") (identifier "lVar3") (, ",") (identifier "uVar4") (, ",") (pointer_expression "*(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" (* "*") (cast_expression "(undefined8 *)\n                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8)" (( "(") (binary_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x38) +\n                    (ulong)*(uint *)(lVar3 + 0x38) * 8" (pointer_expression "*(long *)(*(long *)(param_1 + 0x40) + 0x38)" (* "*") (cast_expression "(long *)(*(long *)(param_1 + 0x40) + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0x40) + 0x38)" (( "(") (binary_expression "*(long *)(param_1 + 0x40) + 0x38" (pointer_expression "*(long *)(param_1 + 0x40)" (* "*") (cast_expression "(long *)(param_1 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (+ "+") (number_literal "0x38")) () ")")))) (+ "+") (binary_expression "(ulong)*(uint *)(lVar3 + 0x38) * 8" (binary_expression "(ulong)*(uint *)(lVar3 + 0x38)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)(lVar3 + 0x38)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x38)" (( "(") (binary_expression "lVar3 + 0x38" (identifier "lVar3") (+ "+") (number_literal "0x38")) () ")")))) (* "*") (number_literal "8"))) () ")")))) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00183e70(lVar2,lVar3);" (call_expression "FUN_00183e70(lVar2,lVar3)" (identifier "FUN_00183e70") (argument_list "(lVar2,lVar3)" (( "(") (identifier "lVar2") (, ",") (identifier "lVar3") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);" (call_expression "FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0)" (identifier "FUN_0017c650") (argument_list "("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0)" (( "(") (string_literal ""../../gold/readsyms.cc"" (" """) (string_content "../../gold/readsyms.cc") (" """)) (, ",") (number_literal "0x2f1") (, ",") (pointer_expression "&DAT_00382cb0" (& "&") (identifier "DAT_00382cb0")) () ")"))) (; ";")) (} "}")))

/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void run(Check_library * this, Workqueue * param_1) */

void __thiscall var_3::type_1::function_1(type_1 *this,type_2 *param_1)

{
  bool var_8;
  type_3 *var_1;
  type_4 *var_6;
  type_5 arg_serial;
  
  var_1 = this->layout_->incremental_inputs_;
  if (var_1 == (type_3 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/readsyms.cc",0x2ef,"run");
  }
  var_6 = (this->ibase_->library_map_).
            super__Vector_base<var_3::type_4*,var_4::allocator<var_3::type_4*>var_5>
            ._M_impl._M_start[this->input_file_index_];
  if (var_6 != (type_4 *)0x0) {
    Incremental_library::var_7(var_6);
    var_8 = var_6->is_reported_;
    var_6->is_reported_ = true;
    if (var_8 == false) {
      arg_serial = (*var_6->input_reader_->_vptr_Input_reader[5])();
      Incremental_inputs::var_9
                (var_1,&var_6->super_Library_base,arg_serial,
                 (this->ibase_->script_map_).
                 super__Vector_base<var_3::var_10*,var_4::allocator<var_3::var_10*>var_5>._M_impl
                 ._M_start[var_6->input_file_index_]);
    }
    Incremental_inputs::var_11(var_1,&var_6->super_Library_base);
    return;
  }
                    /* WARNING: Subroutine does not return */
  var_2("../../gold/readsyms.cc",0x2f1,"run");
}


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

void MASKED(long param_1)

{
  char cVar1;
  long lVar2;
  long lVar3;
  undefined4 uVar4;
  
  lVar2 = *(long *)(*(long *)(param_1 + 0x38) + 0x378);
  if (lVar2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/readsyms.cc",0x2ef,&DAT_00382cb0);
  }
  lVar3 = *(long *)(*(long *)(*(long *)(param_1 + 0x40) + 0x20) +
                   (ulong)*(uint *)(param_1 + 0x48) * 8);
  if (lVar3 != 0) {
    FUN_00183fa0(lVar3);
    cVar1 = *(char *)(lVar3 + 0x60);
    *(undefined1 *)(lVar3 + 0x60) = 1;
    if (cVar1 == '\0') {
      uVar4 = (**(code **)(**(long **)(lVar3 + 0x40) + 0x28))();
      FUN_001837b0(lVar2,lVar3,uVar4,
                   *(undefined8 *)
                    (*(long *)(*(long *)(param_1 + 0x40) + 0x38) +
                    (ulong)*(uint *)(lVar3 + 0x38) * 8));
    }
    FUN_00183e70(lVar2,lVar3);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_0017c650("../../gold/readsyms.cc",0x2f1,&DAT_00382cb0);
}

