
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: void all_symbols_read(Plugin_manager * this, Workqueue * workqueue,
   Task * task, Input_objects * input_objects, Symbol_table * symtab, Dirsearch * dirpath, Mapfile *
   mapfile, Task_token * * last_blocker) */

void __thiscall
gold::Plugin_manager::all_symbols_read
          (Plugin_manager *this,Workqueue *workqueue,Task *task,Input_objects *input_objects,
          Symbol_table *symtab,Dirsearch *dirpath,Mapfile *mapfile,Task_token **last_blocker)

{
  General_options *pGVar1;
  Layout *pLVar2;
  Plugin_manager *pPVar3;
  code *pcVar4;
  Task_token *pTVar5;
  Parameters *pPVar6;
  Task *pTVar7;
  Task *t;
  
  this->in_replacement_phase_ = true;
  this->mapfile_ = mapfile;
  pPVar6 = parameters;
  this->workqueue_ = workqueue;
  pGVar1 = pPVar6->options_;
  this->task_ = task;
  this->input_objects_ = input_objects;
  this->symtab_ = symtab;
  this->dirpath_ = dirpath;
  this->this_blocker_ = (Task_token *)0x0;
  if (pGVar1 == (General_options *)0x0) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");
  }
  pLVar2 = pGVar1->plugins_->layout_;
  Script_options::set_defsym_uses_in_real_elf(pLVar2->script_options_,symtab);
  Script_options::find_defsym_defs(pLVar2->script_options_,&this->defsym_defines_set_);
  pPVar3 = (Plugin_manager *)
           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.
           _M_node.super__List_node_base._M_next;
  (this->current_)._M_node = (_List_node_base *)pPVar3;
  while (pPVar3 != this) {
    pcVar4 = *(code **)((pPVar3->plugins_).
                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.
                        _M_node._M_size + 0x48);
    if (pcVar4 != (code *)0x0) {
      (*pcVar4)();
    }
    pPVar3 = (Plugin_manager *)((this->current_)._M_node)->_M_next;
    (this->current_)._M_node = (_List_node_base *)pPVar3;
  }
  if (this->any_added_ == false) {
    *last_blocker = this->this_blocker_;
    return;
  }
  pTVar7 = (Task *)operator_new(0x20);
  *(undefined1 *)&pTVar7->_vptr_Task = 1;
  pTVar7->list_next_ = (Task *)0x0;
  (pTVar7->name_)._M_dataplus._M_p = (pointer)0x0;
  (pTVar7->name_)._M_string_length = 0;
  *(undefined4 *)((long)&pTVar7->_vptr_Task + 4) = 1;
  t = (Task *)operator_new(0x48);
  pTVar5 = this->this_blocker_;
  t[1].list_next_ = pTVar7;
  (t->name_)._M_dataplus._M_p = (pointer)&(t->name_).field_2;
  t->list_next_ = (Task *)0x0;
  (t->name_)._M_string_length = 0;
  (t->name_).field_2._M_local_buf[0] = '\0';
  t->should_run_soon_ = false;
  t->_vptr_Task = (_func_int_varargs **)&PTR__Plugin_rescan_004437c0;
  t[1]._vptr_Task = (_func_int_varargs **)pTVar5;
  Workqueue::queue(workqueue,t);
  this->this_blocker_ = (Task_token *)pTVar7;
  *last_blocker = (Task_token *)pTVar7;
  return;
}



void FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)

{
  long lVar1;
  undefined8 uVar2;
  undefined *puVar3;
  undefined1 *puVar4;
  undefined8 *puVar5;
  
  *(undefined1 *)((long)param_1 + 0xb1) = 1;
  param_1[0x1e] = param_7;
  puVar3 = PTR_DAT_004586c8;
  param_1[0x18] = param_2;
  lVar1 = *(long *)(puVar3 + 0x10);
  param_1[0x19] = param_3;
  param_1[0x1a] = param_4;
  param_1[0x1b] = param_5;
  param_1[0x1d] = param_6;
  param_1[0x1f] = 0;
  if (lVar1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");
  }
  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);
  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);
  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);
  puVar5 = (undefined8 *)*param_1;
  param_1[3] = puVar5;
  while (puVar5 != param_1) {
    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {
      (**(code **)(puVar5[2] + 0x48))();
    }
    puVar5 = *(undefined8 **)param_1[3];
    param_1[3] = puVar5;
  }
  if (*(char *)((long)param_1 + 0xb2) == '\0') {
    *param_8 = param_1[0x1f];
    return;
  }
  puVar4 = (undefined1 *)FUN_002ee780(0x20);
  *puVar4 = 1;
  *(undefined8 *)(puVar4 + 8) = 0;
  *(undefined8 *)(puVar4 + 0x10) = 0;
  *(undefined8 *)(puVar4 + 0x18) = 0;
  *(undefined4 *)(puVar4 + 4) = 1;
  puVar5 = (undefined8 *)FUN_002ee780(0x48);
  uVar2 = param_1[0x1f];
  puVar5[8] = puVar4;
  puVar5[2] = puVar5 + 4;
  puVar5[1] = 0;
  puVar5[3] = 0;
  *(undefined1 *)(puVar5 + 4) = 0;
  *(undefined1 *)(puVar5 + 6) = 0;
  *puVar5 = &PTR_FUN_004437c0;
  puVar5[7] = uVar2;
  FUN_0029bb40(param_2,puVar5);
  param_1[0x1f] = puVar4;
  *param_8 = puVar4;
  return;
}


PUSH R12
PUSH RBP
PUSH RBX
MOV RAX,qword ptr [RSP + 0x20]
MOV RBX,RDI
MOV byte ptr [RDI + 0xb1],0x1
MOV qword ptr [RDI + 0xf0],RAX
MOV RAX,qword ptr [0x004586c8]
MOV qword ptr [RDI + 0xc0],RSI
MOV RAX,qword ptr [RAX + 0x10]
MOV qword ptr [RDI + 0xc8],RDX
MOV qword ptr [RDI + 0xd0],RCX
MOV qword ptr [RDI + 0xd8],R8
MOV qword ptr [RDI + 0xe8],R9
MOV qword ptr [RDI + 0xf8],0x0
TEST RAX,RAX
JZ 0x0024ac61
MOV RAX,qword ptr [RAX + 0x9058]
MOV RBP,RSI
MOV RSI,R8
MOV R12,qword ptr [RAX + 0xe0]
MOV RDI,qword ptr [R12 + 0x8]
CALL 0x00276180
MOV RDI,qword ptr [R12 + 0x8]
LEA RSI,[RBX + 0x148]
CALL 0x0027a090
MOV RAX,qword ptr [RBX]
MOV qword ptr [RBX + 0x18],RAX
CMP RAX,RBX
JZ 0x0024abaf
NOP word ptr [RAX + RAX*0x1]
MOV RAX,qword ptr [RAX + 0x10]
MOV RAX,qword ptr [RAX + 0x48]
TEST RAX,RAX
JZ 0x0024ab9f
CALL RAX
MOV RAX,qword ptr [RBX + 0x18]
MOV RAX,qword ptr [RAX]
MOV qword ptr [RBX + 0x18],RAX
CMP RAX,RBX
JNZ 0x0024ab90
CMP byte ptr [RBX + 0xb2],0x0
JNZ 0x0024abd0
MOV RAX,qword ptr [RSP + 0x28]
MOV R12,qword ptr [RBX + 0xf8]
MOV qword ptr [RAX],R12
POP RBX
POP RBP
POP R12
RET
MOV EDI,0x20
CALL 0x002ee780
MOV EDI,0x48
MOV byte ptr [RAX],0x1
MOV R12,RAX
MOV qword ptr [RAX + 0x8],0x0
MOV qword ptr [RAX + 0x10],0x0
MOV qword ptr [RAX + 0x18],0x0
MOV dword ptr [RAX + 0x4],0x1
CALL 0x002ee780
MOV RDX,qword ptr [RBX + 0xf8]
MOV RDI,RBP
LEA RCX,[RAX + 0x20]
MOV qword ptr [RAX + 0x40],R12
MOV RSI,RAX
MOV qword ptr [RAX + 0x10],RCX
LEA RCX,[0x4437c0]
MOV qword ptr [RAX + 0x8],0x0
MOV qword ptr [RAX + 0x18],0x0
MOV byte ptr [RAX + 0x20],0x0
MOV byte ptr [RAX + 0x30],0x0
MOV qword ptr [RAX],RCX
MOV qword ptr [RAX + 0x38],RDX
CALL 0x0029bb40
MOV RAX,qword ptr [RSP + 0x28]
MOV qword ptr [RBX + 0xf8],R12
MOV qword ptr [RAX],R12
POP RBX
POP RBP
POP R12
RET
LEA RDX,[0x399428]
MOV ESI,0x5c
LEA RDI,[0x380279]
CALL 0x0018dcf0
(translation_unit "void FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined *puVar3;\n  undefined1 *puVar4;\n  undefined8 *puVar5;\n  \n  *(undefined1 *)((long)param_1 + 0xb1) = 1;\n  param_1[0x1e] = param_7;\n  puVar3 = PTR_DAT_004586c8;\n  param_1[0x18] = param_2;\n  lVar1 = *(long *)(puVar3 + 0x10);\n  param_1[0x19] = param_3;\n  param_1[0x1a] = param_4;\n  param_1[0x1b] = param_5;\n  param_1[0x1d] = param_6;\n  param_1[0x1f] = 0;\n  if (lVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);\n  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);\n  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);\n  puVar5 = (undefined8 *)*param_1;\n  param_1[3] = puVar5;\n  while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }\n  if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }\n  puVar4 = (undefined1 *)FUN_002ee780(0x20);\n  *puVar4 = 1;\n  *(undefined8 *)(puVar4 + 8) = 0;\n  *(undefined8 *)(puVar4 + 0x10) = 0;\n  *(undefined8 *)(puVar4 + 0x18) = 0;\n  *(undefined4 *)(puVar4 + 4) = 1;\n  puVar5 = (undefined8 *)FUN_002ee780(0x48);\n  uVar2 = param_1[0x1f];\n  puVar5[8] = puVar4;\n  puVar5[2] = puVar5 + 4;\n  puVar5[1] = 0;\n  puVar5[3] = 0;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  *(undefined1 *)(puVar5 + 6) = 0;\n  *puVar5 = &PTR_FUN_004437c0;\n  puVar5[7] = uVar2;\n  FUN_0029bb40(param_2,puVar5);\n  param_1[0x1f] = puVar4;\n  *param_8 = puVar4;\n  return;\n}\n\n" (function_definition "void FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined *puVar3;\n  undefined1 *puVar4;\n  undefined8 *puVar5;\n  \n  *(undefined1 *)((long)param_1 + 0xb1) = 1;\n  param_1[0x1e] = param_7;\n  puVar3 = PTR_DAT_004586c8;\n  param_1[0x18] = param_2;\n  lVar1 = *(long *)(puVar3 + 0x10);\n  param_1[0x19] = param_3;\n  param_1[0x1a] = param_4;\n  param_1[0x1b] = param_5;\n  param_1[0x1d] = param_6;\n  param_1[0x1f] = 0;\n  if (lVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);\n  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);\n  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);\n  puVar5 = (undefined8 *)*param_1;\n  param_1[3] = puVar5;\n  while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }\n  if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }\n  puVar4 = (undefined1 *)FUN_002ee780(0x20);\n  *puVar4 = 1;\n  *(undefined8 *)(puVar4 + 8) = 0;\n  *(undefined8 *)(puVar4 + 0x10) = 0;\n  *(undefined8 *)(puVar4 + 0x18) = 0;\n  *(undefined4 *)(puVar4 + 4) = 1;\n  puVar5 = (undefined8 *)FUN_002ee780(0x48);\n  uVar2 = param_1[0x1f];\n  puVar5[8] = puVar4;\n  puVar5[2] = puVar5 + 4;\n  puVar5[1] = 0;\n  puVar5[3] = 0;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  *(undefined1 *)(puVar5 + 6) = 0;\n  *puVar5 = &PTR_FUN_004437c0;\n  puVar5[7] = uVar2;\n  FUN_0029bb40(param_2,puVar5);\n  param_1[0x1f] = puVar4;\n  *param_8 = puVar4;\n  return;\n}" primitive_type (function_declarator "FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)" identifier (parameter_list "(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "undefined8 param_5" type_identifier identifier) , (parameter_declaration "undefined8 param_6" type_identifier identifier) , (parameter_declaration "undefined8 param_7" type_identifier identifier) , (parameter_declaration "undefined8 *param_8" type_identifier (pointer_declarator "*param_8" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  undefined8 uVar2;\n  undefined *puVar3;\n  undefined1 *puVar4;\n  undefined8 *puVar5;\n  \n  *(undefined1 *)((long)param_1 + 0xb1) = 1;\n  param_1[0x1e] = param_7;\n  puVar3 = PTR_DAT_004586c8;\n  param_1[0x18] = param_2;\n  lVar1 = *(long *)(puVar3 + 0x10);\n  param_1[0x19] = param_3;\n  param_1[0x1a] = param_4;\n  param_1[0x1b] = param_5;\n  param_1[0x1d] = param_6;\n  param_1[0x1f] = 0;\n  if (lVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);\n  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);\n  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);\n  puVar5 = (undefined8 *)*param_1;\n  param_1[3] = puVar5;\n  while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }\n  if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }\n  puVar4 = (undefined1 *)FUN_002ee780(0x20);\n  *puVar4 = 1;\n  *(undefined8 *)(puVar4 + 8) = 0;\n  *(undefined8 *)(puVar4 + 0x10) = 0;\n  *(undefined8 *)(puVar4 + 0x18) = 0;\n  *(undefined4 *)(puVar4 + 4) = 1;\n  puVar5 = (undefined8 *)FUN_002ee780(0x48);\n  uVar2 = param_1[0x1f];\n  puVar5[8] = puVar4;\n  puVar5[2] = puVar5 + 4;\n  puVar5[1] = 0;\n  puVar5[3] = 0;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  *(undefined1 *)(puVar5 + 6) = 0;\n  *puVar5 = &PTR_FUN_004437c0;\n  puVar5[7] = uVar2;\n  FUN_0029bb40(param_2,puVar5);\n  param_1[0x1f] = puVar4;\n  *param_8 = puVar4;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined1 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (expression_statement "*(undefined1 *)((long)param_1 + 0xb1) = 1;" (assignment_expression "*(undefined1 *)((long)param_1 + 0xb1) = 1" (pointer_expression "*(undefined1 *)((long)param_1 + 0xb1)" * (cast_expression "(undefined1 *)((long)param_1 + 0xb1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0xb1)" ( (binary_expression "(long)param_1 + 0xb1" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "param_1[0x1e] = param_7;" (assignment_expression "param_1[0x1e] = param_7" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3 = PTR_DAT_004586c8;" (assignment_expression "puVar3 = PTR_DAT_004586c8" identifier = identifier) ;) (expression_statement "param_1[0x18] = param_2;" (assignment_expression "param_1[0x18] = param_2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar1 = *(long *)(puVar3 + 0x10);" (assignment_expression "lVar1 = *(long *)(puVar3 + 0x10)" identifier = (pointer_expression "*(long *)(puVar3 + 0x10)" * (cast_expression "(long *)(puVar3 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 0x10)" ( (binary_expression "puVar3 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "param_1[0x19] = param_3;" (assignment_expression "param_1[0x19] = param_3" (subscript_expression "param_1[0x19]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1a] = param_4;" (assignment_expression "param_1[0x1a] = param_4" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1b] = param_5;" (assignment_expression "param_1[0x1b] = param_5" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1d] = param_6;" (assignment_expression "param_1[0x1d] = param_6" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1f] = 0;" (assignment_expression "param_1[0x1f] = 0" (subscript_expression "param_1[0x1f]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (lVar1 == 0) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" if (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" { comment (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../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 ") ))) ;) })) (expression_statement "lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);" (assignment_expression "lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" identifier = (pointer_expression "*(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" * (cast_expression "(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar1 + 0x9058) + 0xe0)" ( (binary_expression "*(long *)(lVar1 + 0x9058) + 0xe0" (pointer_expression "*(long *)(lVar1 + 0x9058)" * (cast_expression "(long *)(lVar1 + 0x9058)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x9058)" ( (binary_expression "lVar1 + 0x9058" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);" (call_expression "FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5)" identifier (argument_list "(*(undefined8 *)(lVar1 + 8),param_5)" ( (pointer_expression "*(undefined8 *)(lVar1 + 8)" * (cast_expression "(undefined8 *)(lVar1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) )))) , identifier ))) ;) (expression_statement "FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);" (call_expression "FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29)" identifier (argument_list "(*(undefined8 *)(lVar1 + 8),param_1 + 0x29)" ( (pointer_expression "*(undefined8 *)(lVar1 + 8)" * (cast_expression "(undefined8 *)(lVar1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) )))) , (binary_expression "param_1 + 0x29" identifier + number_literal) ))) ;) (expression_statement "puVar5 = (undefined8 *)*param_1;" (assignment_expression "puVar5 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "param_1[3] = puVar5;" (assignment_expression "param_1[3] = puVar5" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (while_statement "while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }" while (parenthesized_expression "(puVar5 != param_1)" ( (binary_expression "puVar5 != param_1" identifier != identifier) )) (compound_statement "{\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }" { (if_statement "if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }" if (parenthesized_expression "(*(code **)(puVar5[2] + 0x48) != (code *)0x0)" ( (binary_expression "*(code **)(puVar5[2] + 0x48) != (code *)0x0" (pointer_expression "*(code **)(puVar5[2] + 0x48)" * (cast_expression "(code **)(puVar5[2] + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5[2] + 0x48)" ( (binary_expression "puVar5[2] + 0x48" (subscript_expression "puVar5[2]" identifier [ number_literal ]) + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(puVar5[2] + 0x48))();\n    }" { (expression_statement "(**(code **)(puVar5[2] + 0x48))();" (call_expression "(**(code **)(puVar5[2] + 0x48))()" (parenthesized_expression "(**(code **)(puVar5[2] + 0x48))" ( (pointer_expression "**(code **)(puVar5[2] + 0x48)" * (pointer_expression "*(code **)(puVar5[2] + 0x48)" * (cast_expression "(code **)(puVar5[2] + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5[2] + 0x48)" ( (binary_expression "puVar5[2] + 0x48" (subscript_expression "puVar5[2]" identifier [ number_literal ]) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (expression_statement "puVar5 = *(undefined8 **)param_1[3];" (assignment_expression "puVar5 = *(undefined8 **)param_1[3]" identifier = (pointer_expression "*(undefined8 **)param_1[3]" * (cast_expression "(undefined8 **)param_1[3]" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "param_1[3]" identifier [ number_literal ])))) ;) (expression_statement "param_1[3] = puVar5;" (assignment_expression "param_1[3] = puVar5" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) })) (if_statement "if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }" if (parenthesized_expression "(*(char *)((long)param_1 + 0xb2) == '\0')" ( (binary_expression "*(char *)((long)param_1 + 0xb2) == '\0'" (pointer_expression "*(char *)((long)param_1 + 0xb2)" * (cast_expression "(char *)((long)param_1 + 0xb2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0xb2)" ( (binary_expression "(long)param_1 + 0xb2" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *param_8 = param_1[0x1f];\n    return;\n  }" { (expression_statement "*param_8 = param_1[0x1f];" (assignment_expression "*param_8 = param_1[0x1f]" (pointer_expression "*param_8" * identifier) = (subscript_expression "param_1[0x1f]" identifier [ number_literal ])) ;) (return_statement "return;" return ;) })) (expression_statement "puVar4 = (undefined1 *)FUN_002ee780(0x20);" (assignment_expression "puVar4 = (undefined1 *)FUN_002ee780(0x20)" identifier = (cast_expression "(undefined1 *)FUN_002ee780(0x20)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002ee780(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (expression_statement "*puVar4 = 1;" (assignment_expression "*puVar4 = 1" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "*(undefined8 *)(puVar4 + 8) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 8) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 8)" * (cast_expression "(undefined8 *)(puVar4 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 8)" ( (binary_expression "puVar4 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(puVar4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 0x10)" * (cast_expression "(undefined8 *)(puVar4 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 0x10)" ( (binary_expression "puVar4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(puVar4 + 0x18) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 0x18) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 0x18)" * (cast_expression "(undefined8 *)(puVar4 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 0x18)" ( (binary_expression "puVar4 + 0x18" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(puVar4 + 4) = 1;" (assignment_expression "*(undefined4 *)(puVar4 + 4) = 1" (pointer_expression "*(undefined4 *)(puVar4 + 4)" * (cast_expression "(undefined4 *)(puVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 4)" ( (binary_expression "puVar4 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar5 = (undefined8 *)FUN_002ee780(0x48);" (assignment_expression "puVar5 = (undefined8 *)FUN_002ee780(0x48)" identifier = (cast_expression "(undefined8 *)FUN_002ee780(0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002ee780(0x48)" identifier (argument_list "(0x48)" ( number_literal ))))) ;) (expression_statement "uVar2 = param_1[0x1f];" (assignment_expression "uVar2 = param_1[0x1f]" identifier = (subscript_expression "param_1[0x1f]" identifier [ number_literal ])) ;) (expression_statement "puVar5[8] = puVar4;" (assignment_expression "puVar5[8] = puVar4" (subscript_expression "puVar5[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[2] = puVar5 + 4;" (assignment_expression "puVar5[2] = puVar5 + 4" (subscript_expression "puVar5[2]" identifier [ number_literal ]) = (binary_expression "puVar5 + 4" identifier + number_literal)) ;) (expression_statement "puVar5[1] = 0;" (assignment_expression "puVar5[1] = 0" (subscript_expression "puVar5[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar5[3] = 0;" (assignment_expression "puVar5[3] = 0" (subscript_expression "puVar5[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar5 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 4)" * (cast_expression "(undefined1 *)(puVar5 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar5 + 6) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 6) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 6)" * (cast_expression "(undefined1 *)(puVar5 + 6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 6)" ( (binary_expression "puVar5 + 6" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*puVar5 = &PTR_FUN_004437c0;" (assignment_expression "*puVar5 = &PTR_FUN_004437c0" (pointer_expression "*puVar5" * identifier) = (pointer_expression "&PTR_FUN_004437c0" & identifier)) ;) (expression_statement "puVar5[7] = uVar2;" (assignment_expression "puVar5[7] = uVar2" (subscript_expression "puVar5[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_0029bb40(param_2,puVar5);" (call_expression "FUN_0029bb40(param_2,puVar5)" identifier (argument_list "(param_2,puVar5)" ( identifier , identifier ))) ;) (expression_statement "param_1[0x1f] = puVar4;" (assignment_expression "param_1[0x1f] = puVar4" (subscript_expression "param_1[0x1f]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*param_8 = puVar4;" (assignment_expression "*param_8 = puVar4" (pointer_expression "*param_8" * identifier) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n/* 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: void all_symbols_read(Plugin_manager * this, Workqueue * workqueue,\n   Task * task, Input_objects * input_objects, Symbol_table * symtab, Dirsearch * dirpath, Mapfile *\n   mapfile, Task_token * * last_blocker) */\n\nvoid __thiscall\ngold::Plugin_manager::all_symbols_read\n          (Plugin_manager *this,Workqueue *workqueue,Task *task,Input_objects *input_objects,\n          Symbol_table *symtab,Dirsearch *dirpath,Mapfile *mapfile,Task_token **last_blocker)\n\n{\n  General_options *pGVar1;\n  Layout *pLVar2;\n  Plugin_manager *pPVar3;\n  code *pcVar4;\n  Task_token *pTVar5;\n  Parameters *pPVar6;\n  Task *pTVar7;\n  Task *t;\n  \n  this->in_replacement_phase_ = true;\n  this->mapfile_ = mapfile;\n  pPVar6 = parameters;\n  this->workqueue_ = workqueue;\n  pGVar1 = pPVar6->options_;\n  this->task_ = task;\n  this->input_objects_ = input_objects;\n  this->symtab_ = symtab;\n  this->dirpath_ = dirpath;\n  this->this_blocker_ = (Task_token *)0x0;\n  if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }\n  pLVar2 = pGVar1->plugins_->layout_;\n  Script_options::set_defsym_uses_in_real_elf(pLVar2->script_options_,symtab);\n  Script_options::find_defsym_defs(pLVar2->script_options_,&this->defsym_defines_set_);\n  pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n           _M_node.super__List_node_base._M_next;\n  (this->current_)._M_node = (_List_node_base *)pPVar3;\n  while (pPVar3 != this) {\n    pcVar4 = *(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48);\n    if (pcVar4 != (code *)0x0) {\n      (*pcVar4)();\n    }\n    pPVar3 = (Plugin_manager *)((this->current_)._M_node)->_M_next;\n    (this->current_)._M_node = (_List_node_base *)pPVar3;\n  }\n  if (this->any_added_ == false) {\n    *last_blocker = this->this_blocker_;\n    return;\n  }\n  pTVar7 = (Task *)operator_new(0x20);\n  *(undefined1 *)&pTVar7->_vptr_Task = 1;\n  pTVar7->list_next_ = (Task *)0x0;\n  (pTVar7->name_)._M_dataplus._M_p = (pointer)0x0;\n  (pTVar7->name_)._M_string_length = 0;\n  *(undefined4 *)((long)&pTVar7->_vptr_Task + 4) = 1;\n  t = (Task *)operator_new(0x48);\n  pTVar5 = this->this_blocker_;\n  t[1].list_next_ = pTVar7;\n  (t->name_)._M_dataplus._M_p = (pointer)&(t->name_).field_2;\n  t->list_next_ = (Task *)0x0;\n  (t->name_)._M_string_length = 0;\n  (t->name_).field_2._M_local_buf[0] = '\0';\n  t->should_run_soon_ = false;\n  t->_vptr_Task = (_func_int_varargs **)&PTR__Plugin_rescan_004437c0;\n  t[1]._vptr_Task = (_func_int_varargs **)pTVar5;\n  Workqueue::queue(workqueue,t);\n  this->this_blocker_ = (Task_token *)pTVar7;\n  *last_blocker = (Task_token *)pTVar7;\n  return;\n}\n\n" comment comment comment comment (function_definition "void __thiscall\ngold::Plugin_manager::all_symbols_read\n          (Plugin_manager *this,Workqueue *workqueue,Task *task,Input_objects *input_objects,\n          Symbol_table *symtab,Dirsearch *dirpath,Mapfile *mapfile,Task_token **last_blocker)\n\n{\n  General_options *pGVar1;\n  Layout *pLVar2;\n  Plugin_manager *pPVar3;\n  code *pcVar4;\n  Task_token *pTVar5;\n  Parameters *pPVar6;\n  Task *pTVar7;\n  Task *t;\n  \n  this->in_replacement_phase_ = true;\n  this->mapfile_ = mapfile;\n  pPVar6 = parameters;\n  this->workqueue_ = workqueue;\n  pGVar1 = pPVar6->options_;\n  this->task_ = task;\n  this->input_objects_ = input_objects;\n  this->symtab_ = symtab;\n  this->dirpath_ = dirpath;\n  this->this_blocker_ = (Task_token *)0x0;\n  if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }\n  pLVar2 = pGVar1->plugins_->layout_;\n  Script_options::set_defsym_uses_in_real_elf(pLVar2->script_options_,symtab);\n  Script_options::find_defsym_defs(pLVar2->script_options_,&this->defsym_defines_set_);\n  pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n           _M_node.super__List_node_base._M_next;\n  (this->current_)._M_node = (_List_node_base *)pPVar3;\n  while (pPVar3 != this) {\n    pcVar4 = *(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48);\n    if (pcVar4 != (code *)0x0) {\n      (*pcVar4)();\n    }\n    pPVar3 = (Plugin_manager *)((this->current_)._M_node)->_M_next;\n    (this->current_)._M_node = (_List_node_base *)pPVar3;\n  }\n  if (this->any_added_ == false) {\n    *last_blocker = this->this_blocker_;\n    return;\n  }\n  pTVar7 = (Task *)operator_new(0x20);\n  *(undefined1 *)&pTVar7->_vptr_Task = 1;\n  pTVar7->list_next_ = (Task *)0x0;\n  (pTVar7->name_)._M_dataplus._M_p = (pointer)0x0;\n  (pTVar7->name_)._M_string_length = 0;\n  *(undefined4 *)((long)&pTVar7->_vptr_Task + 4) = 1;\n  t = (Task *)operator_new(0x48);\n  pTVar5 = this->this_blocker_;\n  t[1].list_next_ = pTVar7;\n  (t->name_)._M_dataplus._M_p = (pointer)&(t->name_).field_2;\n  t->list_next_ = (Task *)0x0;\n  (t->name_)._M_string_length = 0;\n  (t->name_).field_2._M_local_buf[0] = '\0';\n  t->should_run_soon_ = false;\n  t->_vptr_Task = (_func_int_varargs **)&PTR__Plugin_rescan_004437c0;\n  t[1]._vptr_Task = (_func_int_varargs **)pTVar5;\n  Workqueue::queue(workqueue,t);\n  this->this_blocker_ = (Task_token *)pTVar7;\n  *last_blocker = (Task_token *)pTVar7;\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Plugin_manager::" identifier : : identifier : :) (function_declarator "all_symbols_read\n          (Plugin_manager *this,Workqueue *workqueue,Task *task,Input_objects *input_objects,\n          Symbol_table *symtab,Dirsearch *dirpath,Mapfile *mapfile,Task_token **last_blocker)" identifier (parameter_list "(Plugin_manager *this,Workqueue *workqueue,Task *task,Input_objects *input_objects,\n          Symbol_table *symtab,Dirsearch *dirpath,Mapfile *mapfile,Task_token **last_blocker)" ( (parameter_declaration "Plugin_manager *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Workqueue *workqueue" type_identifier (pointer_declarator "*workqueue" * identifier)) , (parameter_declaration "Task *task" type_identifier (pointer_declarator "*task" * identifier)) , (parameter_declaration "Input_objects *input_objects" type_identifier (pointer_declarator "*input_objects" * identifier)) , (parameter_declaration "Symbol_table *symtab" type_identifier (pointer_declarator "*symtab" * identifier)) , (parameter_declaration "Dirsearch *dirpath" type_identifier (pointer_declarator "*dirpath" * identifier)) , (parameter_declaration "Mapfile *mapfile" type_identifier (pointer_declarator "*mapfile" * identifier)) , (parameter_declaration "Task_token **last_blocker" type_identifier (pointer_declarator "**last_blocker" * (pointer_declarator "*last_blocker" * identifier))) ))) (compound_statement "{\n  General_options *pGVar1;\n  Layout *pLVar2;\n  Plugin_manager *pPVar3;\n  code *pcVar4;\n  Task_token *pTVar5;\n  Parameters *pPVar6;\n  Task *pTVar7;\n  Task *t;\n  \n  this->in_replacement_phase_ = true;\n  this->mapfile_ = mapfile;\n  pPVar6 = parameters;\n  this->workqueue_ = workqueue;\n  pGVar1 = pPVar6->options_;\n  this->task_ = task;\n  this->input_objects_ = input_objects;\n  this->symtab_ = symtab;\n  this->dirpath_ = dirpath;\n  this->this_blocker_ = (Task_token *)0x0;\n  if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }\n  pLVar2 = pGVar1->plugins_->layout_;\n  Script_options::set_defsym_uses_in_real_elf(pLVar2->script_options_,symtab);\n  Script_options::find_defsym_defs(pLVar2->script_options_,&this->defsym_defines_set_);\n  pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n           _M_node.super__List_node_base._M_next;\n  (this->current_)._M_node = (_List_node_base *)pPVar3;\n  while (pPVar3 != this) {\n    pcVar4 = *(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48);\n    if (pcVar4 != (code *)0x0) {\n      (*pcVar4)();\n    }\n    pPVar3 = (Plugin_manager *)((this->current_)._M_node)->_M_next;\n    (this->current_)._M_node = (_List_node_base *)pPVar3;\n  }\n  if (this->any_added_ == false) {\n    *last_blocker = this->this_blocker_;\n    return;\n  }\n  pTVar7 = (Task *)operator_new(0x20);\n  *(undefined1 *)&pTVar7->_vptr_Task = 1;\n  pTVar7->list_next_ = (Task *)0x0;\n  (pTVar7->name_)._M_dataplus._M_p = (pointer)0x0;\n  (pTVar7->name_)._M_string_length = 0;\n  *(undefined4 *)((long)&pTVar7->_vptr_Task + 4) = 1;\n  t = (Task *)operator_new(0x48);\n  pTVar5 = this->this_blocker_;\n  t[1].list_next_ = pTVar7;\n  (t->name_)._M_dataplus._M_p = (pointer)&(t->name_).field_2;\n  t->list_next_ = (Task *)0x0;\n  (t->name_)._M_string_length = 0;\n  (t->name_).field_2._M_local_buf[0] = '\0';\n  t->should_run_soon_ = false;\n  t->_vptr_Task = (_func_int_varargs **)&PTR__Plugin_rescan_004437c0;\n  t[1]._vptr_Task = (_func_int_varargs **)pTVar5;\n  Workqueue::queue(workqueue,t);\n  this->this_blocker_ = (Task_token *)pTVar7;\n  *last_blocker = (Task_token *)pTVar7;\n  return;\n}" { (declaration "General_options *pGVar1;" type_identifier (pointer_declarator "*pGVar1" * identifier) ;) (declaration "Layout *pLVar2;" type_identifier (pointer_declarator "*pLVar2" * identifier) ;) (declaration "Plugin_manager *pPVar3;" type_identifier (pointer_declarator "*pPVar3" * identifier) ;) (declaration "code *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "Task_token *pTVar5;" type_identifier (pointer_declarator "*pTVar5" * identifier) ;) (declaration "Parameters *pPVar6;" type_identifier (pointer_declarator "*pPVar6" * identifier) ;) (declaration "Task *pTVar7;" type_identifier (pointer_declarator "*pTVar7" * identifier) ;) (declaration "Task *t;" type_identifier (pointer_declarator "*t" * identifier) ;) (expression_statement "this->in_replacement_phase_ = true;" (assignment_expression "this->in_replacement_phase_ = true" (field_expression "this->in_replacement_phase_" identifier -> field_identifier) = true) ;) (expression_statement "this->mapfile_ = mapfile;" (assignment_expression "this->mapfile_ = mapfile" (field_expression "this->mapfile_" identifier -> field_identifier) = identifier) ;) (expression_statement "pPVar6 = parameters;" (assignment_expression "pPVar6 = parameters" identifier = identifier) ;) (expression_statement "this->workqueue_ = workqueue;" (assignment_expression "this->workqueue_ = workqueue" (field_expression "this->workqueue_" identifier -> field_identifier) = identifier) ;) (expression_statement "pGVar1 = pPVar6->options_;" (assignment_expression "pGVar1 = pPVar6->options_" identifier = (field_expression "pPVar6->options_" identifier -> field_identifier)) ;) (expression_statement "this->task_ = task;" (assignment_expression "this->task_ = task" (field_expression "this->task_" identifier -> field_identifier) = identifier) ;) (expression_statement "this->input_objects_ = input_objects;" (assignment_expression "this->input_objects_ = input_objects" (field_expression "this->input_objects_" identifier -> field_identifier) = identifier) ;) (expression_statement "this->symtab_ = symtab;" (assignment_expression "this->symtab_ = symtab" (field_expression "this->symtab_" identifier -> field_identifier) = identifier) ;) (expression_statement "this->dirpath_ = dirpath;" (assignment_expression "this->dirpath_ = dirpath" (field_expression "this->dirpath_" identifier -> field_identifier) = identifier) ;) (expression_statement "this->this_blocker_ = (Task_token *)0x0;" (assignment_expression "this->this_blocker_ = (Task_token *)0x0" (field_expression "this->this_blocker_" identifier -> field_identifier) = (cast_expression "(Task_token *)0x0" ( (type_descriptor "Task_token *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (pGVar1 == (General_options *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }" if (parenthesized_expression "(pGVar1 == (General_options *)0x0)" ( (binary_expression "pGVar1 == (General_options *)0x0" identifier == (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/parameters.h",0x5c,"options");\n  }" { comment (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 ") ))) ;) })) (expression_statement "pLVar2 = pGVar1->plugins_->layout_;" (assignment_expression "pLVar2 = pGVar1->plugins_->layout_" identifier = (field_expression "pGVar1->plugins_->layout_" (field_expression "pGVar1->plugins_" identifier -> field_identifier) -> field_identifier)) ;) (labeled_statement "Script_options::set_defsym_uses_in_real_elf(pLVar2->script_options_,symtab);" statement_identifier : (ERROR ":" :) (expression_statement "set_defsym_uses_in_real_elf(pLVar2->script_options_,symtab);" (call_expression "set_defsym_uses_in_real_elf(pLVar2->script_options_,symtab)" identifier (argument_list "(pLVar2->script_options_,symtab)" ( (field_expression "pLVar2->script_options_" identifier -> field_identifier) , identifier ))) ;)) (labeled_statement "Script_options::find_defsym_defs(pLVar2->script_options_,&this->defsym_defines_set_);" statement_identifier : (ERROR ":" :) (expression_statement "find_defsym_defs(pLVar2->script_options_,&this->defsym_defines_set_);" (call_expression "find_defsym_defs(pLVar2->script_options_,&this->defsym_defines_set_)" identifier (argument_list "(pLVar2->script_options_,&this->defsym_defines_set_)" ( (field_expression "pLVar2->script_options_" identifier -> field_identifier) , (pointer_expression "&this->defsym_defines_set_" & (field_expression "this->defsym_defines_set_" identifier -> field_identifier)) ))) ;)) (expression_statement "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n           _M_node.super__List_node_base._M_next;" (field_expression "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n           _M_node.super__List_node_base._M_next" (field_expression "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n           _M_node.super__List_node_base" (field_expression "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n           _M_node" (field_expression "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl" (binary_expression "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold::Plugin*,_std" (assignment_expression "pPVar3 = (Plugin_manager *)\n           (this->plugins_).super__List_base<gold" identifier = (binary_expression "(Plugin_manager *)\n           (this->plugins_).super__List_base<gold" (cast_expression "(Plugin_manager *)\n           (this->plugins_).super__List_base" ( (type_descriptor "Plugin_manager *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(this->plugins_).super__List_base" (parenthesized_expression "(this->plugins_)" ( (field_expression "this->plugins_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) ;) (expression_statement "(this->current_)._M_node = (_List_node_base *)pPVar3;" (assignment_expression "(this->current_)._M_node = (_List_node_base *)pPVar3" (field_expression "(this->current_)._M_node" (parenthesized_expression "(this->current_)" ( (field_expression "this->current_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(_List_node_base *)pPVar3" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (while_statement "while (pPVar3 != this) {\n    pcVar4 = *(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48);\n    if (pcVar4 != (code *)0x0) {\n      (*pcVar4)();\n    }\n    pPVar3 = (Plugin_manager *)((this->current_)._M_node)->_M_next;\n    (this->current_)._M_node = (_List_node_base *)pPVar3;\n  }" while (parenthesized_expression "(pPVar3 != this)" ( (binary_expression "pPVar3 != this" identifier != identifier) )) (compound_statement "{\n    pcVar4 = *(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48);\n    if (pcVar4 != (code *)0x0) {\n      (*pcVar4)();\n    }\n    pPVar3 = (Plugin_manager *)((this->current_)._M_node)->_M_next;\n    (this->current_)._M_node = (_List_node_base *)pPVar3;\n  }" { (expression_statement "pcVar4 = *(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48);" (assignment_expression "pcVar4 = *(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48)" identifier = (pointer_expression "*(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48)" * (cast_expression "(code **)((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48)" ( (binary_expression "(pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size + 0x48" (field_expression "(pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node._M_size" (field_expression "(pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                        _M_node" (field_expression "(pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl" (binary_expression "(pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "(pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "(pPVar3->plugins_).\n                        super__List_base<gold::Plugin*,_std" (binary_expression "(pPVar3->plugins_).\n                        super__List_base<gold" (field_expression "(pPVar3->plugins_).\n                        super__List_base" (parenthesized_expression "(pPVar3->plugins_)" ( (field_expression "pPVar3->plugins_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) + number_literal) ))))) ;) (if_statement "if (pcVar4 != (code *)0x0) {\n      (*pcVar4)();\n    }" if (parenthesized_expression "(pcVar4 != (code *)0x0)" ( (binary_expression "pcVar4 != (code *)0x0" identifier != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*pcVar4)();\n    }" { (expression_statement "(*pcVar4)();" (call_expression "(*pcVar4)()" (parenthesized_expression "(*pcVar4)" ( (pointer_expression "*pcVar4" * identifier) )) (argument_list "()" ( ))) ;) })) (expression_statement "pPVar3 = (Plugin_manager *)((this->current_)._M_node)->_M_next;" (assignment_expression "pPVar3 = (Plugin_manager *)((this->current_)._M_node)->_M_next" identifier = (cast_expression "(Plugin_manager *)((this->current_)._M_node)->_M_next" ( (type_descriptor "Plugin_manager *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "((this->current_)._M_node)->_M_next" (parenthesized_expression "((this->current_)._M_node)" ( (field_expression "(this->current_)._M_node" (parenthesized_expression "(this->current_)" ( (field_expression "this->current_" identifier -> field_identifier) )) . field_identifier) )) -> field_identifier))) ;) (expression_statement "(this->current_)._M_node = (_List_node_base *)pPVar3;" (assignment_expression "(this->current_)._M_node = (_List_node_base *)pPVar3" (field_expression "(this->current_)._M_node" (parenthesized_expression "(this->current_)" ( (field_expression "this->current_" identifier -> field_identifier) )) . field_identifier) = (cast_expression "(_List_node_base *)pPVar3" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) })) (if_statement "if (this->any_added_ == false) {\n    *last_blocker = this->this_blocker_;\n    return;\n  }" if (parenthesized_expression "(this->any_added_ == false)" ( (binary_expression "this->any_added_ == false" (field_expression "this->any_added_" identifier -> field_identifier) == false) )) (compound_statement "{\n    *last_blocker = this->this_blocker_;\n    return;\n  }" { (expression_statement "*last_blocker = this->this_blocker_;" (assignment_expression "*last_blocker = this->this_blocker_" (pointer_expression "*last_blocker" * identifier) = (field_expression "this->this_blocker_" identifier -> field_identifier)) ;) (return_statement "return;" return ;) })) (expression_statement "pTVar7 = (Task *)operator_new(0x20);" (assignment_expression "pTVar7 = (Task *)operator_new(0x20)" identifier = (cast_expression "(Task *)operator_new(0x20)" ( (type_descriptor "Task *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (expression_statement "*(undefined1 *)&pTVar7->_vptr_Task = 1;" (assignment_expression "*(undefined1 *)&pTVar7->_vptr_Task = 1" (pointer_expression "*(undefined1 *)&pTVar7->_vptr_Task" * (cast_expression "(undefined1 *)&pTVar7->_vptr_Task" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pTVar7->_vptr_Task" & (field_expression "pTVar7->_vptr_Task" identifier -> field_identifier)))) = number_literal) ;) (expression_statement "pTVar7->list_next_ = (Task *)0x0;" (assignment_expression "pTVar7->list_next_ = (Task *)0x0" (field_expression "pTVar7->list_next_" identifier -> field_identifier) = (cast_expression "(Task *)0x0" ( (type_descriptor "Task *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(pTVar7->name_)._M_dataplus._M_p = (pointer)0x0;" (assignment_expression "(pTVar7->name_)._M_dataplus._M_p = (pointer)0x0" (field_expression "(pTVar7->name_)._M_dataplus._M_p" (field_expression "(pTVar7->name_)._M_dataplus" (parenthesized_expression "(pTVar7->name_)" ( (field_expression "pTVar7->name_" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (expression_statement "(pTVar7->name_)._M_string_length = 0;" (assignment_expression "(pTVar7->name_)._M_string_length = 0" (field_expression "(pTVar7->name_)._M_string_length" (parenthesized_expression "(pTVar7->name_)" ( (field_expression "pTVar7->name_" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "*(undefined4 *)((long)&pTVar7->_vptr_Task + 4) = 1;" (assignment_expression "*(undefined4 *)((long)&pTVar7->_vptr_Task + 4) = 1" (pointer_expression "*(undefined4 *)((long)&pTVar7->_vptr_Task + 4)" * (cast_expression "(undefined4 *)((long)&pTVar7->_vptr_Task + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&pTVar7->_vptr_Task + 4)" ( (binary_expression "(long)&pTVar7->_vptr_Task + 4" (cast_expression "(long)&pTVar7->_vptr_Task" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&pTVar7->_vptr_Task" & (field_expression "pTVar7->_vptr_Task" identifier -> field_identifier))) + number_literal) )))) = number_literal) ;) (expression_statement "t = (Task *)operator_new(0x48);" (assignment_expression "t = (Task *)operator_new(0x48)" identifier = (cast_expression "(Task *)operator_new(0x48)" ( (type_descriptor "Task *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x48)" identifier (argument_list "(0x48)" ( number_literal ))))) ;) (expression_statement "pTVar5 = this->this_blocker_;" (assignment_expression "pTVar5 = this->this_blocker_" identifier = (field_expression "this->this_blocker_" identifier -> field_identifier)) ;) (expression_statement "t[1].list_next_ = pTVar7;" (assignment_expression "t[1].list_next_ = pTVar7" (field_expression "t[1].list_next_" (subscript_expression "t[1]" identifier [ number_literal ]) . field_identifier) = identifier) ;) (expression_statement "(t->name_)._M_dataplus._M_p = (pointer)&(t->name_).field_2;" (assignment_expression "(t->name_)._M_dataplus._M_p = (pointer)&(t->name_).field_2" (field_expression "(t->name_)._M_dataplus._M_p" (field_expression "(t->name_)._M_dataplus" (parenthesized_expression "(t->name_)" ( (field_expression "t->name_" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (binary_expression "(pointer)&(t->name_).field_2" (parenthesized_expression "(pointer)" ( identifier )) & (field_expression "(t->name_).field_2" (parenthesized_expression "(t->name_)" ( (field_expression "t->name_" identifier -> field_identifier) )) . field_identifier))) ;) (expression_statement "t->list_next_ = (Task *)0x0;" (assignment_expression "t->list_next_ = (Task *)0x0" (field_expression "t->list_next_" identifier -> field_identifier) = (cast_expression "(Task *)0x0" ( (type_descriptor "Task *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(t->name_)._M_string_length = 0;" (assignment_expression "(t->name_)._M_string_length = 0" (field_expression "(t->name_)._M_string_length" (parenthesized_expression "(t->name_)" ( (field_expression "t->name_" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "(t->name_).field_2._M_local_buf[0] = '\0';" (assignment_expression "(t->name_).field_2._M_local_buf[0] = '\0'" (subscript_expression "(t->name_).field_2._M_local_buf[0]" (field_expression "(t->name_).field_2._M_local_buf" (field_expression "(t->name_).field_2" (parenthesized_expression "(t->name_)" ( (field_expression "t->name_" identifier -> field_identifier) )) . field_identifier) . field_identifier) [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "t->should_run_soon_ = false;" (assignment_expression "t->should_run_soon_ = false" (field_expression "t->should_run_soon_" identifier -> field_identifier) = false) ;) (expression_statement "t->_vptr_Task = (_func_int_varargs **)&PTR__Plugin_rescan_004437c0;" (assignment_expression "t->_vptr_Task = (_func_int_varargs **)&PTR__Plugin_rescan_004437c0" (field_expression "t->_vptr_Task" identifier -> field_identifier) = (cast_expression "(_func_int_varargs **)&PTR__Plugin_rescan_004437c0" ( (type_descriptor "_func_int_varargs **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&PTR__Plugin_rescan_004437c0" & identifier))) ;) (expression_statement "t[1]._vptr_Task = (_func_int_varargs **)pTVar5;" (assignment_expression "t[1]._vptr_Task = (_func_int_varargs **)pTVar5" (field_expression "t[1]._vptr_Task" (subscript_expression "t[1]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(_func_int_varargs **)pTVar5" ( (type_descriptor "_func_int_varargs **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (labeled_statement "Workqueue::queue(workqueue,t);" statement_identifier : (ERROR ":" :) (expression_statement "queue(workqueue,t);" (call_expression "queue(workqueue,t)" identifier (argument_list "(workqueue,t)" ( identifier , identifier ))) ;)) (expression_statement "this->this_blocker_ = (Task_token *)pTVar7;" (assignment_expression "this->this_blocker_ = (Task_token *)pTVar7" (field_expression "this->this_blocker_" identifier -> field_identifier) = (cast_expression "(Task_token *)pTVar7" ( (type_descriptor "Task_token *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "*last_blocker = (Task_token *)pTVar7;" (assignment_expression "*last_blocker = (Task_token *)pTVar7" (pointer_expression "*last_blocker" * identifier) = (cast_expression "(Task_token *)pTVar7" ( (type_descriptor "Task_token *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined *puVar3;\n  undefined1 *puVar4;\n  undefined8 *puVar5;\n  \n  *(undefined1 *)((long)param_1 + 0xb1) = 1;\n  param_1[0x1e] = param_7;\n  puVar3 = PTR_DAT_004586c8;\n  param_1[0x18] = param_2;\n  lVar1 = *(long *)(puVar3 + 0x10);\n  param_1[0x19] = param_3;\n  param_1[0x1a] = param_4;\n  param_1[0x1b] = param_5;\n  param_1[0x1d] = param_6;\n  param_1[0x1f] = 0;\n  if (lVar1 == 0) {\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);\n  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);\n  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);\n  puVar5 = (undefined8 *)*param_1;\n  param_1[3] = puVar5;\n  while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }\n  if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }\n  puVar4 = (undefined1 *)FUN_002ee780(0x20);\n  *puVar4 = 1;\n  *(undefined8 *)(puVar4 + 8) = 0;\n  *(undefined8 *)(puVar4 + 0x10) = 0;\n  *(undefined8 *)(puVar4 + 0x18) = 0;\n  *(undefined4 *)(puVar4 + 4) = 1;\n  puVar5 = (undefined8 *)FUN_002ee780(0x48);\n  uVar2 = param_1[0x1f];\n  puVar5[8] = puVar4;\n  puVar5[2] = puVar5 + 4;\n  puVar5[1] = 0;\n  puVar5[3] = 0;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  *(undefined1 *)(puVar5 + 6) = 0;\n  *puVar5 = &PTR_FUN_004437c0;\n  puVar5[7] = uVar2;\n  FUN_0029bb40(param_2,puVar5);\n  param_1[0x1f] = puVar4;\n  *param_8 = puVar4;\n  return;\n}\n\n" (function_definition "void FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined *puVar3;\n  undefined1 *puVar4;\n  undefined8 *puVar5;\n  \n  *(undefined1 *)((long)param_1 + 0xb1) = 1;\n  param_1[0x1e] = param_7;\n  puVar3 = PTR_DAT_004586c8;\n  param_1[0x18] = param_2;\n  lVar1 = *(long *)(puVar3 + 0x10);\n  param_1[0x19] = param_3;\n  param_1[0x1a] = param_4;\n  param_1[0x1b] = param_5;\n  param_1[0x1d] = param_6;\n  param_1[0x1f] = 0;\n  if (lVar1 == 0) {\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);\n  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);\n  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);\n  puVar5 = (undefined8 *)*param_1;\n  param_1[3] = puVar5;\n  while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }\n  if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }\n  puVar4 = (undefined1 *)FUN_002ee780(0x20);\n  *puVar4 = 1;\n  *(undefined8 *)(puVar4 + 8) = 0;\n  *(undefined8 *)(puVar4 + 0x10) = 0;\n  *(undefined8 *)(puVar4 + 0x18) = 0;\n  *(undefined4 *)(puVar4 + 4) = 1;\n  puVar5 = (undefined8 *)FUN_002ee780(0x48);\n  uVar2 = param_1[0x1f];\n  puVar5[8] = puVar4;\n  puVar5[2] = puVar5 + 4;\n  puVar5[1] = 0;\n  puVar5[3] = 0;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  *(undefined1 *)(puVar5 + 6) = 0;\n  *puVar5 = &PTR_FUN_004437c0;\n  puVar5[7] = uVar2;\n  FUN_0029bb40(param_2,puVar5);\n  param_1[0x1f] = puVar4;\n  *param_8 = puVar4;\n  return;\n}" primitive_type (function_declarator "FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)" identifier (parameter_list "(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "undefined8 param_5" type_identifier identifier) , (parameter_declaration "undefined8 param_6" type_identifier identifier) , (parameter_declaration "undefined8 param_7" type_identifier identifier) , (parameter_declaration "undefined8 *param_8" type_identifier (pointer_declarator "*param_8" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  undefined8 uVar2;\n  undefined *puVar3;\n  undefined1 *puVar4;\n  undefined8 *puVar5;\n  \n  *(undefined1 *)((long)param_1 + 0xb1) = 1;\n  param_1[0x1e] = param_7;\n  puVar3 = PTR_DAT_004586c8;\n  param_1[0x18] = param_2;\n  lVar1 = *(long *)(puVar3 + 0x10);\n  param_1[0x19] = param_3;\n  param_1[0x1a] = param_4;\n  param_1[0x1b] = param_5;\n  param_1[0x1d] = param_6;\n  param_1[0x1f] = 0;\n  if (lVar1 == 0) {\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);\n  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);\n  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);\n  puVar5 = (undefined8 *)*param_1;\n  param_1[3] = puVar5;\n  while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }\n  if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }\n  puVar4 = (undefined1 *)FUN_002ee780(0x20);\n  *puVar4 = 1;\n  *(undefined8 *)(puVar4 + 8) = 0;\n  *(undefined8 *)(puVar4 + 0x10) = 0;\n  *(undefined8 *)(puVar4 + 0x18) = 0;\n  *(undefined4 *)(puVar4 + 4) = 1;\n  puVar5 = (undefined8 *)FUN_002ee780(0x48);\n  uVar2 = param_1[0x1f];\n  puVar5[8] = puVar4;\n  puVar5[2] = puVar5 + 4;\n  puVar5[1] = 0;\n  puVar5[3] = 0;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  *(undefined1 *)(puVar5 + 6) = 0;\n  *puVar5 = &PTR_FUN_004437c0;\n  puVar5[7] = uVar2;\n  FUN_0029bb40(param_2,puVar5);\n  param_1[0x1f] = puVar4;\n  *param_8 = puVar4;\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined1 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "undefined8 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (expression_statement "*(undefined1 *)((long)param_1 + 0xb1) = 1;" (assignment_expression "*(undefined1 *)((long)param_1 + 0xb1) = 1" (pointer_expression "*(undefined1 *)((long)param_1 + 0xb1)" * (cast_expression "(undefined1 *)((long)param_1 + 0xb1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0xb1)" ( (binary_expression "(long)param_1 + 0xb1" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "param_1[0x1e] = param_7;" (assignment_expression "param_1[0x1e] = param_7" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3 = PTR_DAT_004586c8;" (assignment_expression "puVar3 = PTR_DAT_004586c8" identifier = identifier) ;) (expression_statement "param_1[0x18] = param_2;" (assignment_expression "param_1[0x18] = param_2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar1 = *(long *)(puVar3 + 0x10);" (assignment_expression "lVar1 = *(long *)(puVar3 + 0x10)" identifier = (pointer_expression "*(long *)(puVar3 + 0x10)" * (cast_expression "(long *)(puVar3 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 0x10)" ( (binary_expression "puVar3 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "param_1[0x19] = param_3;" (assignment_expression "param_1[0x19] = param_3" (subscript_expression "param_1[0x19]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1a] = param_4;" (assignment_expression "param_1[0x1a] = param_4" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1b] = param_5;" (assignment_expression "param_1[0x1b] = param_5" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1d] = param_6;" (assignment_expression "param_1[0x1d] = param_6" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1f] = 0;" (assignment_expression "param_1[0x1f] = 0" (subscript_expression "param_1[0x1f]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (lVar1 == 0) {\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" if (parenthesized_expression "(lVar1 == 0)" ( (binary_expression "lVar1 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" { (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../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 ") ))) ;) })) (expression_statement "lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);" (assignment_expression "lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" identifier = (pointer_expression "*(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" * (cast_expression "(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar1 + 0x9058) + 0xe0)" ( (binary_expression "*(long *)(lVar1 + 0x9058) + 0xe0" (pointer_expression "*(long *)(lVar1 + 0x9058)" * (cast_expression "(long *)(lVar1 + 0x9058)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x9058)" ( (binary_expression "lVar1 + 0x9058" identifier + number_literal) )))) + number_literal) ))))) ;) (expression_statement "FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);" (call_expression "FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5)" identifier (argument_list "(*(undefined8 *)(lVar1 + 8),param_5)" ( (pointer_expression "*(undefined8 *)(lVar1 + 8)" * (cast_expression "(undefined8 *)(lVar1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) )))) , identifier ))) ;) (expression_statement "FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);" (call_expression "FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29)" identifier (argument_list "(*(undefined8 *)(lVar1 + 8),param_1 + 0x29)" ( (pointer_expression "*(undefined8 *)(lVar1 + 8)" * (cast_expression "(undefined8 *)(lVar1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 8)" ( (binary_expression "lVar1 + 8" identifier + number_literal) )))) , (binary_expression "param_1 + 0x29" identifier + number_literal) ))) ;) (expression_statement "puVar5 = (undefined8 *)*param_1;" (assignment_expression "puVar5 = (undefined8 *)*param_1" identifier = (cast_expression "(undefined8 *)*param_1" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "param_1[3] = puVar5;" (assignment_expression "param_1[3] = puVar5" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (while_statement "while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }" while (parenthesized_expression "(puVar5 != param_1)" ( (binary_expression "puVar5 != param_1" identifier != identifier) )) (compound_statement "{\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }" { (if_statement "if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }" if (parenthesized_expression "(*(code **)(puVar5[2] + 0x48) != (code *)0x0)" ( (binary_expression "*(code **)(puVar5[2] + 0x48) != (code *)0x0" (pointer_expression "*(code **)(puVar5[2] + 0x48)" * (cast_expression "(code **)(puVar5[2] + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5[2] + 0x48)" ( (binary_expression "puVar5[2] + 0x48" (subscript_expression "puVar5[2]" identifier [ number_literal ]) + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(puVar5[2] + 0x48))();\n    }" { (expression_statement "(**(code **)(puVar5[2] + 0x48))();" (call_expression "(**(code **)(puVar5[2] + 0x48))()" (parenthesized_expression "(**(code **)(puVar5[2] + 0x48))" ( (pointer_expression "**(code **)(puVar5[2] + 0x48)" * (pointer_expression "*(code **)(puVar5[2] + 0x48)" * (cast_expression "(code **)(puVar5[2] + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar5[2] + 0x48)" ( (binary_expression "puVar5[2] + 0x48" (subscript_expression "puVar5[2]" identifier [ number_literal ]) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (expression_statement "puVar5 = *(undefined8 **)param_1[3];" (assignment_expression "puVar5 = *(undefined8 **)param_1[3]" identifier = (pointer_expression "*(undefined8 **)param_1[3]" * (cast_expression "(undefined8 **)param_1[3]" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "param_1[3]" identifier [ number_literal ])))) ;) (expression_statement "param_1[3] = puVar5;" (assignment_expression "param_1[3] = puVar5" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) })) (if_statement "if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }" if (parenthesized_expression "(*(char *)((long)param_1 + 0xb2) == '\0')" ( (binary_expression "*(char *)((long)param_1 + 0xb2) == '\0'" (pointer_expression "*(char *)((long)param_1 + 0xb2)" * (cast_expression "(char *)((long)param_1 + 0xb2)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0xb2)" ( (binary_expression "(long)param_1 + 0xb2" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    *param_8 = param_1[0x1f];\n    return;\n  }" { (expression_statement "*param_8 = param_1[0x1f];" (assignment_expression "*param_8 = param_1[0x1f]" (pointer_expression "*param_8" * identifier) = (subscript_expression "param_1[0x1f]" identifier [ number_literal ])) ;) (return_statement "return;" return ;) })) (expression_statement "puVar4 = (undefined1 *)FUN_002ee780(0x20);" (assignment_expression "puVar4 = (undefined1 *)FUN_002ee780(0x20)" identifier = (cast_expression "(undefined1 *)FUN_002ee780(0x20)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002ee780(0x20)" identifier (argument_list "(0x20)" ( number_literal ))))) ;) (expression_statement "*puVar4 = 1;" (assignment_expression "*puVar4 = 1" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "*(undefined8 *)(puVar4 + 8) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 8) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 8)" * (cast_expression "(undefined8 *)(puVar4 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 8)" ( (binary_expression "puVar4 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(puVar4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 0x10)" * (cast_expression "(undefined8 *)(puVar4 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 0x10)" ( (binary_expression "puVar4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(puVar4 + 0x18) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 0x18) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 0x18)" * (cast_expression "(undefined8 *)(puVar4 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 0x18)" ( (binary_expression "puVar4 + 0x18" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(puVar4 + 4) = 1;" (assignment_expression "*(undefined4 *)(puVar4 + 4) = 1" (pointer_expression "*(undefined4 *)(puVar4 + 4)" * (cast_expression "(undefined4 *)(puVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar4 + 4)" ( (binary_expression "puVar4 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar5 = (undefined8 *)FUN_002ee780(0x48);" (assignment_expression "puVar5 = (undefined8 *)FUN_002ee780(0x48)" identifier = (cast_expression "(undefined8 *)FUN_002ee780(0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002ee780(0x48)" identifier (argument_list "(0x48)" ( number_literal ))))) ;) (expression_statement "uVar2 = param_1[0x1f];" (assignment_expression "uVar2 = param_1[0x1f]" identifier = (subscript_expression "param_1[0x1f]" identifier [ number_literal ])) ;) (expression_statement "puVar5[8] = puVar4;" (assignment_expression "puVar5[8] = puVar4" (subscript_expression "puVar5[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5[2] = puVar5 + 4;" (assignment_expression "puVar5[2] = puVar5 + 4" (subscript_expression "puVar5[2]" identifier [ number_literal ]) = (binary_expression "puVar5 + 4" identifier + number_literal)) ;) (expression_statement "puVar5[1] = 0;" (assignment_expression "puVar5[1] = 0" (subscript_expression "puVar5[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar5[3] = 0;" (assignment_expression "puVar5[3] = 0" (subscript_expression "puVar5[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar5 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 4)" * (cast_expression "(undefined1 *)(puVar5 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 4)" ( (binary_expression "puVar5 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(puVar5 + 6) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 6) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 6)" * (cast_expression "(undefined1 *)(puVar5 + 6)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar5 + 6)" ( (binary_expression "puVar5 + 6" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*puVar5 = &PTR_FUN_004437c0;" (assignment_expression "*puVar5 = &PTR_FUN_004437c0" (pointer_expression "*puVar5" * identifier) = (pointer_expression "&PTR_FUN_004437c0" & identifier)) ;) (expression_statement "puVar5[7] = uVar2;" (assignment_expression "puVar5[7] = uVar2" (subscript_expression "puVar5[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "FUN_0029bb40(param_2,puVar5);" (call_expression "FUN_0029bb40(param_2,puVar5)" identifier (argument_list "(param_2,puVar5)" ( identifier , identifier ))) ;) (expression_statement "param_1[0x1f] = puVar4;" (assignment_expression "param_1[0x1f] = puVar4" (subscript_expression "param_1[0x1f]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*param_8 = puVar4;" (assignment_expression "*param_8 = puVar4" (pointer_expression "*param_8" * identifier) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_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) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_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 , (string_literal " string_content ") ))) ;) })) (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) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) )) (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (subscript_expression IDENT [ LIT ])))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (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) )))) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return ;) })))
(function_definition "void FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  long lVar1;\n  undefined8 uVar2;\n  undefined *puVar3;\n  undefined1 *puVar4;\n  undefined8 *puVar5;\n  \n  *(undefined1 *)((long)param_1 + 0xb1) = 1;\n  param_1[0x1e] = param_7;\n  puVar3 = PTR_DAT_004586c8;\n  param_1[0x18] = param_2;\n  lVar1 = *(long *)(puVar3 + 0x10);\n  param_1[0x19] = param_3;\n  param_1[0x1a] = param_4;\n  param_1[0x1b] = param_5;\n  param_1[0x1d] = param_6;\n  param_1[0x1f] = 0;\n  if (lVar1 == 0) {\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);\n  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);\n  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);\n  puVar5 = (undefined8 *)*param_1;\n  param_1[3] = puVar5;\n  while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }\n  if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }\n  puVar4 = (undefined1 *)FUN_002ee780(0x20);\n  *puVar4 = 1;\n  *(undefined8 *)(puVar4 + 8) = 0;\n  *(undefined8 *)(puVar4 + 0x10) = 0;\n  *(undefined8 *)(puVar4 + 0x18) = 0;\n  *(undefined4 *)(puVar4 + 4) = 1;\n  puVar5 = (undefined8 *)FUN_002ee780(0x48);\n  uVar2 = param_1[0x1f];\n  puVar5[8] = puVar4;\n  puVar5[2] = puVar5 + 4;\n  puVar5[1] = 0;\n  puVar5[3] = 0;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  *(undefined1 *)(puVar5 + 6) = 0;\n  *puVar5 = &PTR_FUN_004437c0;\n  puVar5[7] = uVar2;\n  FUN_0029bb40(param_2,puVar5);\n  param_1[0x1f] = puVar4;\n  *param_8 = puVar4;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0024aaf0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)" (identifier "FUN_0024aaf0") (parameter_list "(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) (, ",") (parameter_declaration "undefined8 param_5" (type_identifier "undefined8") (identifier "param_5")) (, ",") (parameter_declaration "undefined8 param_6" (type_identifier "undefined8") (identifier "param_6")) (, ",") (parameter_declaration "undefined8 param_7" (type_identifier "undefined8") (identifier "param_7")) (, ",") (parameter_declaration "undefined8 *param_8" (type_identifier "undefined8") (pointer_declarator "*param_8" (* "*") (identifier "param_8"))) () ")"))) (compound_statement "{\n  long lVar1;\n  undefined8 uVar2;\n  undefined *puVar3;\n  undefined1 *puVar4;\n  undefined8 *puVar5;\n  \n  *(undefined1 *)((long)param_1 + 0xb1) = 1;\n  param_1[0x1e] = param_7;\n  puVar3 = PTR_DAT_004586c8;\n  param_1[0x18] = param_2;\n  lVar1 = *(long *)(puVar3 + 0x10);\n  param_1[0x19] = param_3;\n  param_1[0x1a] = param_4;\n  param_1[0x1b] = param_5;\n  param_1[0x1d] = param_6;\n  param_1[0x1f] = 0;\n  if (lVar1 == 0) {\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }\n  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);\n  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);\n  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);\n  puVar5 = (undefined8 *)*param_1;\n  param_1[3] = puVar5;\n  while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }\n  if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }\n  puVar4 = (undefined1 *)FUN_002ee780(0x20);\n  *puVar4 = 1;\n  *(undefined8 *)(puVar4 + 8) = 0;\n  *(undefined8 *)(puVar4 + 0x10) = 0;\n  *(undefined8 *)(puVar4 + 0x18) = 0;\n  *(undefined4 *)(puVar4 + 4) = 1;\n  puVar5 = (undefined8 *)FUN_002ee780(0x48);\n  uVar2 = param_1[0x1f];\n  puVar5[8] = puVar4;\n  puVar5[2] = puVar5 + 4;\n  puVar5[1] = 0;\n  puVar5[3] = 0;\n  *(undefined1 *)(puVar5 + 4) = 0;\n  *(undefined1 *)(puVar5 + 6) = 0;\n  *puVar5 = &PTR_FUN_004437c0;\n  puVar5[7] = uVar2;\n  FUN_0029bb40(param_2,puVar5);\n  param_1[0x1f] = puVar4;\n  *param_8 = puVar4;\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "undefined8 uVar2;" (type_identifier "undefined8") (identifier "uVar2") (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined1 *puVar4;" (type_identifier "undefined1") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "undefined8 *puVar5;" (type_identifier "undefined8") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (expression_statement "*(undefined1 *)((long)param_1 + 0xb1) = 1;" (assignment_expression "*(undefined1 *)((long)param_1 + 0xb1) = 1" (pointer_expression "*(undefined1 *)((long)param_1 + 0xb1)" (* "*") (cast_expression "(undefined1 *)((long)param_1 + 0xb1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0xb1)" (( "(") (binary_expression "(long)param_1 + 0xb1" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0xb1")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "param_1[0x1e] = param_7;" (assignment_expression "param_1[0x1e] = param_7" (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]")) (= "=") (identifier "param_7")) (; ";")) (expression_statement "puVar3 = PTR_DAT_004586c8;" (assignment_expression "puVar3 = PTR_DAT_004586c8" (identifier "puVar3") (= "=") (identifier "PTR_DAT_004586c8")) (; ";")) (expression_statement "param_1[0x18] = param_2;" (assignment_expression "param_1[0x18] = param_2" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (= "=") (identifier "param_2")) (; ";")) (expression_statement "lVar1 = *(long *)(puVar3 + 0x10);" (assignment_expression "lVar1 = *(long *)(puVar3 + 0x10)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(puVar3 + 0x10)" (* "*") (cast_expression "(long *)(puVar3 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 0x10)" (( "(") (binary_expression "puVar3 + 0x10" (identifier "puVar3") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "param_1[0x19] = param_3;" (assignment_expression "param_1[0x19] = param_3" (subscript_expression "param_1[0x19]" (identifier "param_1") ([ "[") (number_literal "0x19") (] "]")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "param_1[0x1a] = param_4;" (assignment_expression "param_1[0x1a] = param_4" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (= "=") (identifier "param_4")) (; ";")) (expression_statement "param_1[0x1b] = param_5;" (assignment_expression "param_1[0x1b] = param_5" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (identifier "param_5")) (; ";")) (expression_statement "param_1[0x1d] = param_6;" (assignment_expression "param_1[0x1d] = param_6" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (identifier "param_6")) (; ";")) (expression_statement "param_1[0x1f] = 0;" (assignment_expression "param_1[0x1f] = 0" (subscript_expression "param_1[0x1f]" (identifier "param_1") ([ "[") (number_literal "0x1f") (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (lVar1 == 0) {\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" (if "if") (parenthesized_expression "(lVar1 == 0)" (( "(") (binary_expression "lVar1 == 0" (identifier "lVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");\n  }" ({ "{") (expression_statement "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");" (call_expression "FUN_0018dcf0("../../gold/parameters.h",0x5c,"options")" (identifier "FUN_0018dcf0") (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") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);" (assignment_expression "lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" (* "*") (cast_expression "(long *)(*(long *)(lVar1 + 0x9058) + 0xe0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar1 + 0x9058) + 0xe0)" (( "(") (binary_expression "*(long *)(lVar1 + 0x9058) + 0xe0" (pointer_expression "*(long *)(lVar1 + 0x9058)" (* "*") (cast_expression "(long *)(lVar1 + 0x9058)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x9058)" (( "(") (binary_expression "lVar1 + 0x9058" (identifier "lVar1") (+ "+") (number_literal "0x9058")) () ")")))) (+ "+") (number_literal "0xe0")) () ")"))))) (; ";")) (expression_statement "FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);" (call_expression "FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5)" (identifier "FUN_00276180") (argument_list "(*(undefined8 *)(lVar1 + 8),param_5)" (( "(") (pointer_expression "*(undefined8 *)(lVar1 + 8)" (* "*") (cast_expression "(undefined8 *)(lVar1 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 8)" (( "(") (binary_expression "lVar1 + 8" (identifier "lVar1") (+ "+") (number_literal "8")) () ")")))) (, ",") (identifier "param_5") () ")"))) (; ";")) (expression_statement "FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);" (call_expression "FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29)" (identifier "FUN_0027a090") (argument_list "(*(undefined8 *)(lVar1 + 8),param_1 + 0x29)" (( "(") (pointer_expression "*(undefined8 *)(lVar1 + 8)" (* "*") (cast_expression "(undefined8 *)(lVar1 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 8)" (( "(") (binary_expression "lVar1 + 8" (identifier "lVar1") (+ "+") (number_literal "8")) () ")")))) (, ",") (binary_expression "param_1 + 0x29" (identifier "param_1") (+ "+") (number_literal "0x29")) () ")"))) (; ";")) (expression_statement "puVar5 = (undefined8 *)*param_1;" (assignment_expression "puVar5 = (undefined8 *)*param_1" (identifier "puVar5") (= "=") (cast_expression "(undefined8 *)*param_1" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "param_1[3] = puVar5;" (assignment_expression "param_1[3] = puVar5" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "puVar5")) (; ";")) (while_statement "while (puVar5 != param_1) {\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }" (while "while") (parenthesized_expression "(puVar5 != param_1)" (( "(") (binary_expression "puVar5 != param_1" (identifier "puVar5") (!= "!=") (identifier "param_1")) () ")")) (compound_statement "{\n    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }\n    puVar5 = *(undefined8 **)param_1[3];\n    param_1[3] = puVar5;\n  }" ({ "{") (if_statement "if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {\n      (**(code **)(puVar5[2] + 0x48))();\n    }" (if "if") (parenthesized_expression "(*(code **)(puVar5[2] + 0x48) != (code *)0x0)" (( "(") (binary_expression "*(code **)(puVar5[2] + 0x48) != (code *)0x0" (pointer_expression "*(code **)(puVar5[2] + 0x48)" (* "*") (cast_expression "(code **)(puVar5[2] + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar5[2] + 0x48)" (( "(") (binary_expression "puVar5[2] + 0x48" (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x48")) () ")")))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (**(code **)(puVar5[2] + 0x48))();\n    }" ({ "{") (expression_statement "(**(code **)(puVar5[2] + 0x48))();" (call_expression "(**(code **)(puVar5[2] + 0x48))()" (parenthesized_expression "(**(code **)(puVar5[2] + 0x48))" (( "(") (pointer_expression "**(code **)(puVar5[2] + 0x48)" (* "*") (pointer_expression "*(code **)(puVar5[2] + 0x48)" (* "*") (cast_expression "(code **)(puVar5[2] + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar5[2] + 0x48)" (( "(") (binary_expression "puVar5[2] + 0x48" (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "puVar5 = *(undefined8 **)param_1[3];" (assignment_expression "puVar5 = *(undefined8 **)param_1[3]" (identifier "puVar5") (= "=") (pointer_expression "*(undefined8 **)param_1[3]" (* "*") (cast_expression "(undefined8 **)param_1[3]" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))))) (; ";")) (expression_statement "param_1[3] = puVar5;" (assignment_expression "param_1[3] = puVar5" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "puVar5")) (; ";")) (} "}"))) (if_statement "if (*(char *)((long)param_1 + 0xb2) == '\0') {\n    *param_8 = param_1[0x1f];\n    return;\n  }" (if "if") (parenthesized_expression "(*(char *)((long)param_1 + 0xb2) == '\0')" (( "(") (binary_expression "*(char *)((long)param_1 + 0xb2) == '\0'" (pointer_expression "*(char *)((long)param_1 + 0xb2)" (* "*") (cast_expression "(char *)((long)param_1 + 0xb2)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0xb2)" (( "(") (binary_expression "(long)param_1 + 0xb2" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0xb2")) () ")")))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    *param_8 = param_1[0x1f];\n    return;\n  }" ({ "{") (expression_statement "*param_8 = param_1[0x1f];" (assignment_expression "*param_8 = param_1[0x1f]" (pointer_expression "*param_8" (* "*") (identifier "param_8")) (= "=") (subscript_expression "param_1[0x1f]" (identifier "param_1") ([ "[") (number_literal "0x1f") (] "]"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "puVar4 = (undefined1 *)FUN_002ee780(0x20);" (assignment_expression "puVar4 = (undefined1 *)FUN_002ee780(0x20)" (identifier "puVar4") (= "=") (cast_expression "(undefined1 *)FUN_002ee780(0x20)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002ee780(0x20)" (identifier "FUN_002ee780") (argument_list "(0x20)" (( "(") (number_literal "0x20") () ")"))))) (; ";")) (expression_statement "*puVar4 = 1;" (assignment_expression "*puVar4 = 1" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(undefined8 *)(puVar4 + 8) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 8) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 8)" (* "*") (cast_expression "(undefined8 *)(puVar4 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 8)" (( "(") (binary_expression "puVar4 + 8" (identifier "puVar4") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(puVar4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 0x10)" (* "*") (cast_expression "(undefined8 *)(puVar4 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 0x10)" (( "(") (binary_expression "puVar4 + 0x10" (identifier "puVar4") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(puVar4 + 0x18) = 0;" (assignment_expression "*(undefined8 *)(puVar4 + 0x18) = 0" (pointer_expression "*(undefined8 *)(puVar4 + 0x18)" (* "*") (cast_expression "(undefined8 *)(puVar4 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 0x18)" (( "(") (binary_expression "puVar4 + 0x18" (identifier "puVar4") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(puVar4 + 4) = 1;" (assignment_expression "*(undefined4 *)(puVar4 + 4) = 1" (pointer_expression "*(undefined4 *)(puVar4 + 4)" (* "*") (cast_expression "(undefined4 *)(puVar4 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar4 + 4)" (( "(") (binary_expression "puVar4 + 4" (identifier "puVar4") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "puVar5 = (undefined8 *)FUN_002ee780(0x48);" (assignment_expression "puVar5 = (undefined8 *)FUN_002ee780(0x48)" (identifier "puVar5") (= "=") (cast_expression "(undefined8 *)FUN_002ee780(0x48)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002ee780(0x48)" (identifier "FUN_002ee780") (argument_list "(0x48)" (( "(") (number_literal "0x48") () ")"))))) (; ";")) (expression_statement "uVar2 = param_1[0x1f];" (assignment_expression "uVar2 = param_1[0x1f]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0x1f]" (identifier "param_1") ([ "[") (number_literal "0x1f") (] "]"))) (; ";")) (expression_statement "puVar5[8] = puVar4;" (assignment_expression "puVar5[8] = puVar4" (subscript_expression "puVar5[8]" (identifier "puVar5") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "puVar4")) (; ";")) (expression_statement "puVar5[2] = puVar5 + 4;" (assignment_expression "puVar5[2] = puVar5 + 4" (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "puVar5 + 4" (identifier "puVar5") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "puVar5[1] = 0;" (assignment_expression "puVar5[1] = 0" (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar5[3] = 0;" (assignment_expression "puVar5[3] = 0" (subscript_expression "puVar5[3]" (identifier "puVar5") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)(puVar5 + 4) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 4) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 4)" (* "*") (cast_expression "(undefined1 *)(puVar5 + 4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar5 + 4)" (( "(") (binary_expression "puVar5 + 4" (identifier "puVar5") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)(puVar5 + 6) = 0;" (assignment_expression "*(undefined1 *)(puVar5 + 6) = 0" (pointer_expression "*(undefined1 *)(puVar5 + 6)" (* "*") (cast_expression "(undefined1 *)(puVar5 + 6)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar5 + 6)" (( "(") (binary_expression "puVar5 + 6" (identifier "puVar5") (+ "+") (number_literal "6")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*puVar5 = &PTR_FUN_004437c0;" (assignment_expression "*puVar5 = &PTR_FUN_004437c0" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (pointer_expression "&PTR_FUN_004437c0" (& "&") (identifier "PTR_FUN_004437c0"))) (; ";")) (expression_statement "puVar5[7] = uVar2;" (assignment_expression "puVar5[7] = uVar2" (subscript_expression "puVar5[7]" (identifier "puVar5") ([ "[") (number_literal "7") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (expression_statement "FUN_0029bb40(param_2,puVar5);" (call_expression "FUN_0029bb40(param_2,puVar5)" (identifier "FUN_0029bb40") (argument_list "(param_2,puVar5)" (( "(") (identifier "param_2") (, ",") (identifier "puVar5") () ")"))) (; ";")) (expression_statement "param_1[0x1f] = puVar4;" (assignment_expression "param_1[0x1f] = puVar4" (subscript_expression "param_1[0x1f]" (identifier "param_1") ([ "[") (number_literal "0x1f") (] "]")) (= "=") (identifier "puVar4")) (; ";")) (expression_statement "*param_8 = puVar4;" (assignment_expression "*param_8 = puVar4" (pointer_expression "*param_8" (* "*") (identifier "param_8")) (= "=") (identifier "puVar4")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* WARNING: Enum "ELFOSABI": Some values do not have unique names */
/* DWARF original prototype: void all_symbols_read(Plugin_manager * this, Workqueue * workqueue,
   Task * task, Input_objects * input_objects, Symbol_table * symtab, Dirsearch * dirpath, Mapfile *
   mapfile, Task_token * * last_blocker) */

void __thiscall
var_5::type_1::function_1
          (type_1 *var_9,type_2 *workqueue,type_3 *task,type_4 *input_objects,
          type_5 *symtab,type_6 *dirpath,type_7 *mapfile,type_8 **last_blocker)

{
  type_9 *var_1;
  type_10 *pLVar2;
  type_1 *var_8;
  type_11 *var_10;
  type_8 *pTVar5;
  type_12 *pPVar6;
  type_3 *pTVar7;
  type_3 *t;
  
  var_9->in_replacement_phase_ = true;
  var_9->mapfile_ = mapfile;
  pPVar6 = parameters;
  var_9->workqueue_ = workqueue;
  var_1 = pPVar6->options_;
  var_9->task_ = task;
  var_9->input_objects_ = input_objects;
  var_9->symtab_ = symtab;
  var_9->dirpath_ = dirpath;
  var_9->this_blocker_ = (type_8 *)0x0;
  if (var_1 == (type_9 *)0x0) {
                    /* WARNING: Subroutine does not return */
    var_2("../../gold/parameters.h",0x5c,"options");
  }
  pLVar2 = var_1->plugins_->layout_;
  Script_options::var_3(pLVar2->script_options_,symtab);
  Script_options::var_4(pLVar2->script_options_,&var_9->defsym_defines_set_);
  var_8 = (type_1 *)
           (var_9->plugins_).super__List_base<var_5::Plugin*,var_6::allocator<var_5::Plugin*>var_7>._M_impl.
           _M_node.super__List_node_base._M_next;
  (var_9->current_)._M_node = (type_13 *)var_8;
  while (var_8 != var_9) {
    var_10 = *(type_11 **)((var_8->plugins_).
                        super__List_base<var_5::Plugin*,var_6::allocator<var_5::Plugin*>var_7>._M_impl.
                        _M_node._M_size + 0x48);
    if (var_10 != (type_11 *)0x0) {
      (*var_10)();
    }
    var_8 = (type_1 *)((var_9->current_)._M_node)->_M_next;
    (var_9->current_)._M_node = (type_13 *)var_8;
  }
  if (var_9->any_added_ == false) {
    *last_blocker = var_9->this_blocker_;
    return;
  }
  pTVar7 = (type_3 *)var_11(0x20);
  *(type_14 *)&pTVar7->_vptr_Task = 1;
  pTVar7->list_next_ = (type_3 *)0x0;
  (pTVar7->name_)._M_dataplus._M_p = (type_15)0x0;
  (pTVar7->name_)._M_string_length = 0;
  *(type_16 *)((long)&pTVar7->_vptr_Task + 4) = 1;
  t = (type_3 *)var_11(0x48);
  pTVar5 = var_9->this_blocker_;
  t[1].list_next_ = pTVar7;
  (t->name_)._M_dataplus._M_p = (type_15)&(t->name_).field_2;
  t->list_next_ = (type_3 *)0x0;
  (t->name_)._M_string_length = 0;
  (t->name_).field_2._M_local_buf[0] = '\0';
  t->should_run_soon_ = false;
  t->_vptr_Task = (type_17 **)&PTR__Plugin_rescan_004437c0;
  t[1]._vptr_Task = (type_17 **)pTVar5;
  Workqueue::var_12(workqueue,t);
  var_9->this_blocker_ = (type_8 *)pTVar7;
  *last_blocker = (type_8 *)pTVar7;
  return;
}


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

void MASKED(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                 undefined8 param_5,undefined8 param_6,undefined8 param_7,undefined8 *param_8)

{
  long lVar1;
  undefined8 uVar2;
  undefined *puVar3;
  undefined1 *puVar4;
  undefined8 *puVar5;
  
  *(undefined1 *)((long)param_1 + 0xb1) = 1;
  param_1[0x1e] = param_7;
  puVar3 = PTR_DAT_004586c8;
  param_1[0x18] = param_2;
  lVar1 = *(long *)(puVar3 + 0x10);
  param_1[0x19] = param_3;
  param_1[0x1a] = param_4;
  param_1[0x1b] = param_5;
  param_1[0x1d] = param_6;
  param_1[0x1f] = 0;
  if (lVar1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_0018dcf0("../../gold/parameters.h",0x5c,"options");
  }
  lVar1 = *(long *)(*(long *)(lVar1 + 0x9058) + 0xe0);
  FUN_00276180(*(undefined8 *)(lVar1 + 8),param_5);
  FUN_0027a090(*(undefined8 *)(lVar1 + 8),param_1 + 0x29);
  puVar5 = (undefined8 *)*param_1;
  param_1[3] = puVar5;
  while (puVar5 != param_1) {
    if (*(code **)(puVar5[2] + 0x48) != (code *)0x0) {
      (**(code **)(puVar5[2] + 0x48))();
    }
    puVar5 = *(undefined8 **)param_1[3];
    param_1[3] = puVar5;
  }
  if (*(char *)((long)param_1 + 0xb2) == '\0') {
    *param_8 = param_1[0x1f];
    return;
  }
  puVar4 = (undefined1 *)FUN_002ee780(0x20);
  *puVar4 = 1;
  *(undefined8 *)(puVar4 + 8) = 0;
  *(undefined8 *)(puVar4 + 0x10) = 0;
  *(undefined8 *)(puVar4 + 0x18) = 0;
  *(undefined4 *)(puVar4 + 4) = 1;
  puVar5 = (undefined8 *)FUN_002ee780(0x48);
  uVar2 = param_1[0x1f];
  puVar5[8] = puVar4;
  puVar5[2] = puVar5 + 4;
  puVar5[1] = 0;
  puVar5[3] = 0;
  *(undefined1 *)(puVar5 + 4) = 0;
  *(undefined1 *)(puVar5 + 6) = 0;
  *puVar5 = &PTR_FUN_004437c0;
  puVar5[7] = uVar2;
  FUN_0029bb40(param_2,puVar5);
  param_1[0x1f] = puVar4;
  *param_8 = puVar4;
  return;
}

