
/* DWARF original prototype: void read_sections(Relaxation_debug_check * this, Section_list *
   sections) */

void __thiscall
gold::Layout::Relaxation_debug_check::read_sections
          (Relaxation_debug_check *this,Section_list *sections)

{
  byte bVar1;
  iterator __position;
  pointer ppOVar2;
  Section_info info;
  
  ppOVar2 = (sections->
            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).
            _M_impl._M_start;
  if (ppOVar2 !=
      (sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).
      _M_impl._M_finish) {
    do {
      while( true ) {
        info.output_section = *ppOVar2;
        info.address = 0;
        bVar1 = ((info.output_section)->super_Output_data).field_0x20;
        if ((bVar1 & 1) != 0) {
          info.address = ((info.output_section)->super_Output_data).address_;
        }
        info.data_size = -1;
        if ((bVar1 & 2) != 0) {
          info.data_size = ((info.output_section)->super_Output_data).data_size_;
        }
        info.offset = -1;
        if ((bVar1 & 4) != 0) {
          info.offset = ((info.output_section)->super_Output_data).offset_;
        }
        __position._M_current =
             (this->section_infos_).
             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>
             ._M_impl._M_finish;
        if (__position._M_current !=
            (this->section_infos_).
            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>
            ._M_impl._M_end_of_storage) break;
        ppOVar2 = ppOVar2 + 1;
        std::
        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>
        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>
                  (&this->section_infos_,__position,&info);
        if ((sections->
            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).
            _M_impl._M_finish == ppOVar2) {
          return;
        }
      }
      ppOVar2 = ppOVar2 + 1;
      (__position._M_current)->output_section = info.output_section;
      (__position._M_current)->address = info.address;
      (__position._M_current)->data_size = info.data_size;
      (__position._M_current)->offset = info.offset;
      (this->section_infos_).
      super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>
      ._M_impl._M_finish = __position._M_current + 1;
    } while ((sections->
             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).
             _M_impl._M_finish != ppOVar2);
  }
  return;
}



void FUN_001a86c0(long param_1,long *param_2)

{
  byte bVar1;
  long *plVar2;
  long *plVar3;
  long local_48;
  long lStack_40;
  long local_38;
  long lStack_30;
  
  plVar3 = (long *)*param_2;
  if (plVar3 != (long *)param_2[1]) {
    do {
      while( true ) {
        local_48 = *plVar3;
        lStack_40 = 0;
        bVar1 = *(byte *)(local_48 + 0x20);
        if ((bVar1 & 1) != 0) {
          lStack_40 = *(long *)(local_48 + 8);
        }
        local_38 = -1;
        if ((bVar1 & 2) != 0) {
          local_38 = *(long *)(local_48 + 0x10);
        }
        lStack_30 = -1;
        if ((bVar1 & 4) != 0) {
          lStack_30 = *(long *)(local_48 + 0x18);
        }
        plVar2 = *(long **)(param_1 + 8);
        if (plVar2 != *(long **)(param_1 + 0x10)) break;
        plVar3 = plVar3 + 1;
        FUN_001b1e20(param_1,plVar2,&local_48);
        if ((long *)param_2[1] == plVar3) {
          return;
        }
      }
      plVar3 = plVar3 + 1;
      *plVar2 = local_48;
      plVar2[1] = lStack_40;
      plVar2[2] = local_38;
      plVar2[3] = lStack_30;
      *(long **)(param_1 + 8) = plVar2 + 4;
    } while ((long *)param_2[1] != plVar3);
  }
  return;
}


PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x20
MOV RBX,qword ptr [RSI]
CMP RBX,qword ptr [RSI + 0x8]
JZ 0x001a8774
MOV R12,RDI
MOV R14,RSI
MOV R13,-0x1
MOV RBP,RSP
JMP 0x001a8716
MOVDQA XMM0,xmmword ptr [RSP]
ADD RSI,0x20
ADD RBX,0x8
MOVUPS xmmword ptr [RSI + -0x20],XMM0
MOVDQA XMM1,xmmword ptr [RSP + 0x10]
MOVUPS xmmword ptr [RSI + -0x10],XMM1
MOV qword ptr [R12 + 0x8],RSI
CMP qword ptr [R14 + 0x8],RBX
JZ 0x001a8774
MOV RAX,qword ptr [RBX]
XOR ECX,ECX
MOVZX EDX,byte ptr [RAX + 0x20]
MOV qword ptr [RSP],RAX
TEST DL,0x1
JZ 0x001a872c
MOV RCX,qword ptr [RAX + 0x8]
MOV qword ptr [RSP + 0x8],RCX
MOV RCX,R13
TEST DL,0x2
JZ 0x001a873d
MOV RCX,qword ptr [RAX + 0x10]
AND EDX,0x4
MOV qword ptr [RSP + 0x10],RCX
MOV RCX,R13
JZ 0x001a874e
MOV RCX,qword ptr [RAX + 0x18]
MOV qword ptr [RSP + 0x18],RCX
MOV RSI,qword ptr [R12 + 0x8]
CMP RSI,qword ptr [R12 + 0x10]
JNZ 0x001a86f0
MOV RDX,RBP
MOV RDI,R12
ADD RBX,0x8
CALL 0x001b1e20
CMP qword ptr [R14 + 0x8],RBX
JNZ 0x001a8716
ADD RSP,0x20
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
(translation_unit "void FUN_001a86c0(long param_1,long *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  long *plVar3;\n  long local_48;\n  long lStack_40;\n  long local_38;\n  long lStack_30;\n  \n  plVar3 = (long *)*param_2;\n  if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }\n  return;\n}\n\n" (function_definition "void FUN_001a86c0(long param_1,long *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  long *plVar3;\n  long local_48;\n  long lStack_40;\n  long local_38;\n  long lStack_30;\n  \n  plVar3 = (long *)*param_2;\n  if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001a86c0(long param_1,long *param_2)" identifier (parameter_list "(long param_1,long *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  long *plVar3;\n  long local_48;\n  long lStack_40;\n  long local_38;\n  long lStack_30;\n  \n  plVar3 = (long *)*param_2;\n  if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "long local_48;" (sized_type_specifier "long" long) identifier ;) (declaration "long lStack_40;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_38;" (sized_type_specifier "long" long) identifier ;) (declaration "long lStack_30;" (sized_type_specifier "long" long) identifier ;) (expression_statement "plVar3 = (long *)*param_2;" (assignment_expression "plVar3 = (long *)*param_2" identifier = (cast_expression "(long *)*param_2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }" if (parenthesized_expression "(plVar3 != (long *)param_2[1])" ( (binary_expression "plVar3 != (long *)param_2[1]" identifier != (cast_expression "(long *)param_2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )) (compound_statement "{\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }" { (do_statement "do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);" do (compound_statement "{\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    }" { (while_statement "while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }" { (expression_statement "local_48 = *plVar3;" (assignment_expression "local_48 = *plVar3" identifier = (pointer_expression "*plVar3" * identifier)) ;) (expression_statement "lStack_40 = 0;" (assignment_expression "lStack_40 = 0" identifier = number_literal) ;) (expression_statement "bVar1 = *(byte *)(local_48 + 0x20);" (assignment_expression "bVar1 = *(byte *)(local_48 + 0x20)" identifier = (pointer_expression "*(byte *)(local_48 + 0x20)" * (cast_expression "(byte *)(local_48 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + 0x20)" ( (binary_expression "local_48 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }" if (parenthesized_expression "((bVar1 & 1) != 0)" ( (binary_expression "(bVar1 & 1) != 0" (parenthesized_expression "(bVar1 & 1)" ( (binary_expression "bVar1 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          lStack_40 = *(long *)(local_48 + 8);\n        }" { (expression_statement "lStack_40 = *(long *)(local_48 + 8);" (assignment_expression "lStack_40 = *(long *)(local_48 + 8)" identifier = (pointer_expression "*(long *)(local_48 + 8)" * (cast_expression "(long *)(local_48 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + 8)" ( (binary_expression "local_48 + 8" identifier + number_literal) ))))) ;) })) (expression_statement "local_38 = -1;" (assignment_expression "local_38 = -1" identifier = number_literal) ;) (if_statement "if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }" if (parenthesized_expression "((bVar1 & 2) != 0)" ( (binary_expression "(bVar1 & 2) != 0" (parenthesized_expression "(bVar1 & 2)" ( (binary_expression "bVar1 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          local_38 = *(long *)(local_48 + 0x10);\n        }" { (expression_statement "local_38 = *(long *)(local_48 + 0x10);" (assignment_expression "local_38 = *(long *)(local_48 + 0x10)" identifier = (pointer_expression "*(long *)(local_48 + 0x10)" * (cast_expression "(long *)(local_48 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + 0x10)" ( (binary_expression "local_48 + 0x10" identifier + number_literal) ))))) ;) })) (expression_statement "lStack_30 = -1;" (assignment_expression "lStack_30 = -1" identifier = number_literal) ;) (if_statement "if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }" if (parenthesized_expression "((bVar1 & 4) != 0)" ( (binary_expression "(bVar1 & 4) != 0" (parenthesized_expression "(bVar1 & 4)" ( (binary_expression "bVar1 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }" { (expression_statement "lStack_30 = *(long *)(local_48 + 0x18);" (assignment_expression "lStack_30 = *(long *)(local_48 + 0x18)" identifier = (pointer_expression "*(long *)(local_48 + 0x18)" * (cast_expression "(long *)(local_48 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + 0x18)" ( (binary_expression "local_48 + 0x18" identifier + number_literal) ))))) ;) })) (expression_statement "plVar2 = *(long **)(param_1 + 8);" (assignment_expression "plVar2 = *(long **)(param_1 + 8)" identifier = (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (if_statement "if (plVar2 != *(long **)(param_1 + 0x10)) break;" if (parenthesized_expression "(plVar2 != *(long **)(param_1 + 0x10))" ( (binary_expression "plVar2 != *(long **)(param_1 + 0x10)" identifier != (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) )) (break_statement "break;" break ;)) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" identifier = (binary_expression "plVar3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_001b1e20(param_1,plVar2,&local_48);" (call_expression "FUN_001b1e20(param_1,plVar2,&local_48)" identifier (argument_list "(param_1,plVar2,&local_48)" ( identifier , identifier , (pointer_expression "&local_48" & identifier) ))) ;) (if_statement "if ((long *)param_2[1] == plVar3) {\n          return;\n        }" if (parenthesized_expression "((long *)param_2[1] == plVar3)" ( (binary_expression "(long *)param_2[1] == plVar3" (cast_expression "(long *)param_2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" identifier = (binary_expression "plVar3 + 1" identifier + number_literal)) ;) (expression_statement "*plVar2 = local_48;" (assignment_expression "*plVar2 = local_48" (pointer_expression "*plVar2" * identifier) = identifier) ;) (expression_statement "plVar2[1] = lStack_40;" (assignment_expression "plVar2[1] = lStack_40" (subscript_expression "plVar2[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar2[2] = local_38;" (assignment_expression "plVar2[2] = local_38" (subscript_expression "plVar2[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar2[3] = lStack_30;" (assignment_expression "plVar2[3] = lStack_30" (subscript_expression "plVar2[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(long **)(param_1 + 8) = plVar2 + 4;" (assignment_expression "*(long **)(param_1 + 8) = plVar2 + 4" (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (binary_expression "plVar2 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "((long *)param_2[1] != plVar3)" ( (binary_expression "(long *)param_2[1] != plVar3" (cast_expression "(long *)param_2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void read_sections(Relaxation_debug_check * this, Section_list *\n   sections) */\n\nvoid __thiscall\ngold::Layout::Relaxation_debug_check::read_sections\n          (Relaxation_debug_check *this,Section_list *sections)\n\n{\n  byte bVar1;\n  iterator __position;\n  pointer ppOVar2;\n  Section_info info;\n  \n  ppOVar2 = (sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_start;\n  if (ppOVar2 !=\n      (sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n      _M_impl._M_finish) {\n    do {\n      while( true ) {\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }\n      ppOVar2 = ppOVar2 + 1;\n      (__position._M_current)->output_section = info.output_section;\n      (__position._M_current)->address = info.address;\n      (__position._M_current)->data_size = info.data_size;\n      (__position._M_current)->offset = info.offset;\n      (this->section_infos_).\n      super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;\n    } while ((sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish != ppOVar2);\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall\ngold::Layout::Relaxation_debug_check::read_sections\n          (Relaxation_debug_check *this,Section_list *sections)\n\n{\n  byte bVar1;\n  iterator __position;\n  pointer ppOVar2;\n  Section_info info;\n  \n  ppOVar2 = (sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_start;\n  if (ppOVar2 !=\n      (sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n      _M_impl._M_finish) {\n    do {\n      while( true ) {\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }\n      ppOVar2 = ppOVar2 + 1;\n      (__position._M_current)->output_section = info.output_section;\n      (__position._M_current)->address = info.address;\n      (__position._M_current)->data_size = info.data_size;\n      (__position._M_current)->offset = info.offset;\n      (this->section_infos_).\n      super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;\n    } while ((sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish != ppOVar2);\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Layout::Relaxation_debug_check::" identifier : : identifier : : identifier : :) (function_declarator "read_sections\n          (Relaxation_debug_check *this,Section_list *sections)" identifier (parameter_list "(Relaxation_debug_check *this,Section_list *sections)" ( (parameter_declaration "Relaxation_debug_check *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Section_list *sections" type_identifier (pointer_declarator "*sections" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  iterator __position;\n  pointer ppOVar2;\n  Section_info info;\n  \n  ppOVar2 = (sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_start;\n  if (ppOVar2 !=\n      (sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n      _M_impl._M_finish) {\n    do {\n      while( true ) {\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }\n      ppOVar2 = ppOVar2 + 1;\n      (__position._M_current)->output_section = info.output_section;\n      (__position._M_current)->address = info.address;\n      (__position._M_current)->data_size = info.data_size;\n      (__position._M_current)->offset = info.offset;\n      (this->section_infos_).\n      super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;\n    } while ((sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish != ppOVar2);\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "iterator __position;" type_identifier identifier ;) (declaration "pointer ppOVar2;" type_identifier identifier ;) (declaration "Section_info info;" type_identifier identifier ;) (expression_statement "ppOVar2 = (sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_start;" (assignment_expression "ppOVar2 = (sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_start" identifier = (field_expression "(sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_start" (field_expression "(sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl" (parenthesized_expression "(sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>)" ( (ERROR "sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::" (comma_expression "sections->\n            super__Vector_base<gold::Output_section*,_std" (binary_expression "sections->\n            super__Vector_base<gold::Output_section*" (binary_expression "sections->\n            super__Vector_base<gold" (field_expression "sections->\n            super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section" : : identifier) * identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (binary_expression "Output_section*>_>" (binary_expression "Output_section*>_" identifier * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if (ppOVar2 !=\n      (sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n      _M_impl._M_finish) {\n    do {\n      while( true ) {\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }\n      ppOVar2 = ppOVar2 + 1;\n      (__position._M_current)->output_section = info.output_section;\n      (__position._M_current)->address = info.address;\n      (__position._M_current)->data_size = info.data_size;\n      (__position._M_current)->offset = info.offset;\n      (this->section_infos_).\n      super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;\n    } while ((sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish != ppOVar2);\n  }" if (parenthesized_expression "(ppOVar2 !=\n      (sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n      _M_impl._M_finish)" ( (binary_expression "ppOVar2 !=\n      (sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n      _M_impl._M_finish" identifier != (field_expression "(sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n      _M_impl._M_finish" (field_expression "(sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n      _M_impl" (parenthesized_expression "(sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>)" ( (binary_expression "sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>" (binary_expression "sections->super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_" (binary_expression "sections->super__Vector_base<gold::Output_section*,_std::allocator<gold" (binary_expression "sections->super__Vector_base<gold::Output_section*,_std" (binary_expression "sections->super__Vector_base<gold" (field_expression "sections->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_section" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier)) )) (compound_statement "{\n    do {\n      while( true ) {\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }\n      ppOVar2 = ppOVar2 + 1;\n      (__position._M_current)->output_section = info.output_section;\n      (__position._M_current)->address = info.address;\n      (__position._M_current)->data_size = info.data_size;\n      (__position._M_current)->offset = info.offset;\n      (this->section_infos_).\n      super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;\n    } while ((sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish != ppOVar2);\n  }" { (do_statement "do {\n      while( true ) {\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }\n      ppOVar2 = ppOVar2 + 1;\n      (__position._M_current)->output_section = info.output_section;\n      (__position._M_current)->address = info.address;\n      (__position._M_current)->data_size = info.data_size;\n      (__position._M_current)->offset = info.offset;\n      (this->section_infos_).\n      super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;\n    } while ((sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish != ppOVar2);" do (compound_statement "{\n      while( true ) {\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }\n      ppOVar2 = ppOVar2 + 1;\n      (__position._M_current)->output_section = info.output_section;\n      (__position._M_current)->address = info.address;\n      (__position._M_current)->data_size = info.data_size;\n      (__position._M_current)->offset = info.offset;\n      (this->section_infos_).\n      super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;\n    }" { (while_statement "while( true ) {\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        info.output_section = *ppOVar2;\n        info.address = 0;\n        bVar1 = ((info.output_section)->super_Output_data).field_0x20;\n        if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }\n        info.data_size = -1;\n        if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }\n        info.offset = -1;\n        if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }\n        __position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;\n        if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;\n        ppOVar2 = ppOVar2 + 1;\n        std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);\n        if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }\n      }" { (expression_statement "info.output_section = *ppOVar2;" (assignment_expression "info.output_section = *ppOVar2" (field_expression "info.output_section" identifier . field_identifier) = (pointer_expression "*ppOVar2" * identifier)) ;) (expression_statement "info.address = 0;" (assignment_expression "info.address = 0" (field_expression "info.address" identifier . field_identifier) = number_literal) ;) (expression_statement "bVar1 = ((info.output_section)->super_Output_data).field_0x20;" (assignment_expression "bVar1 = ((info.output_section)->super_Output_data).field_0x20" identifier = (field_expression "((info.output_section)->super_Output_data).field_0x20" (parenthesized_expression "((info.output_section)->super_Output_data)" ( (field_expression "(info.output_section)->super_Output_data" (parenthesized_expression "(info.output_section)" ( (field_expression "info.output_section" identifier . field_identifier) )) -> field_identifier) )) . field_identifier)) ;) (if_statement "if ((bVar1 & 1) != 0) {\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }" if (parenthesized_expression "((bVar1 & 1) != 0)" ( (binary_expression "(bVar1 & 1) != 0" (parenthesized_expression "(bVar1 & 1)" ( (binary_expression "bVar1 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          info.address = ((info.output_section)->super_Output_data).address_;\n        }" { (expression_statement "info.address = ((info.output_section)->super_Output_data).address_;" (assignment_expression "info.address = ((info.output_section)->super_Output_data).address_" (field_expression "info.address" identifier . field_identifier) = (field_expression "((info.output_section)->super_Output_data).address_" (parenthesized_expression "((info.output_section)->super_Output_data)" ( (field_expression "(info.output_section)->super_Output_data" (parenthesized_expression "(info.output_section)" ( (field_expression "info.output_section" identifier . field_identifier) )) -> field_identifier) )) . field_identifier)) ;) })) (expression_statement "info.data_size = -1;" (assignment_expression "info.data_size = -1" (field_expression "info.data_size" identifier . field_identifier) = number_literal) ;) (if_statement "if ((bVar1 & 2) != 0) {\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }" if (parenthesized_expression "((bVar1 & 2) != 0)" ( (binary_expression "(bVar1 & 2) != 0" (parenthesized_expression "(bVar1 & 2)" ( (binary_expression "bVar1 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          info.data_size = ((info.output_section)->super_Output_data).data_size_;\n        }" { (expression_statement "info.data_size = ((info.output_section)->super_Output_data).data_size_;" (assignment_expression "info.data_size = ((info.output_section)->super_Output_data).data_size_" (field_expression "info.data_size" identifier . field_identifier) = (field_expression "((info.output_section)->super_Output_data).data_size_" (parenthesized_expression "((info.output_section)->super_Output_data)" ( (field_expression "(info.output_section)->super_Output_data" (parenthesized_expression "(info.output_section)" ( (field_expression "info.output_section" identifier . field_identifier) )) -> field_identifier) )) . field_identifier)) ;) })) (expression_statement "info.offset = -1;" (assignment_expression "info.offset = -1" (field_expression "info.offset" identifier . field_identifier) = number_literal) ;) (if_statement "if ((bVar1 & 4) != 0) {\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }" if (parenthesized_expression "((bVar1 & 4) != 0)" ( (binary_expression "(bVar1 & 4) != 0" (parenthesized_expression "(bVar1 & 4)" ( (binary_expression "bVar1 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          info.offset = ((info.output_section)->super_Output_data).offset_;\n        }" { (expression_statement "info.offset = ((info.output_section)->super_Output_data).offset_;" (assignment_expression "info.offset = ((info.output_section)->super_Output_data).offset_" (field_expression "info.offset" identifier . field_identifier) = (field_expression "((info.output_section)->super_Output_data).offset_" (parenthesized_expression "((info.output_section)->super_Output_data)" ( (field_expression "(info.output_section)->super_Output_data" (parenthesized_expression "(info.output_section)" ( (field_expression "info.output_section" identifier . field_identifier) )) -> field_identifier) )) . field_identifier)) ;) })) (ERROR "__position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::" (comma_expression "__position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std" (assignment_expression "__position._M_current =\n             (this->section_infos_).\n             super__Vector_base<gold" (field_expression "__position._M_current" identifier . field_identifier) = (binary_expression "(this->section_infos_).\n             super__Vector_base<gold" (field_expression "(this->section_infos_).\n             super__Vector_base" (parenthesized_expression "(this->section_infos_)" ( (field_expression "this->section_infos_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Layout::Relaxation_debug_check::Section_info" : : identifier : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (labeled_statement "Layout::Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;" statement_identifier : (ERROR ":" :) (labeled_statement "Relaxation_debug_check::Section_info>_>\n             ._M_impl._M_finish;" statement_identifier : (ERROR ":" :) (expression_statement "Section_info>_>\n             ._M_impl._M_finish;" (field_expression "Section_info>_>\n             ._M_impl._M_finish" (field_expression "Section_info>_>\n             ._M_impl" (binary_expression "Section_info>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (if_statement "if (__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage) break;" if (parenthesized_expression "(__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n            ._M_impl._M_end_of_storage)" ( (ERROR "__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::" (comma_expression "__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold::Layout::Relaxation_debug_check::Section_info,_std" (binary_expression "__position._M_current !=\n            (this->section_infos_).\n            super__Vector_base<gold" (field_expression "__position._M_current" identifier . field_identifier) != (binary_expression "(this->section_infos_).\n            super__Vector_base<gold" (field_expression "(this->section_infos_).\n            super__Vector_base" (parenthesized_expression "(this->section_infos_)" ( (field_expression "this->section_infos_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Layout::Relaxation_debug_check::Section_info" : : identifier : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : : identifier : :) (field_expression "Section_info>_>\n            ._M_impl._M_end_of_storage" (field_expression "Section_info>_>\n            ._M_impl" (binary_expression "Section_info>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) )) (break_statement "break;" break ;)) (expression_statement "ppOVar2 = ppOVar2 + 1;" (assignment_expression "ppOVar2 = ppOVar2 + 1" identifier = (binary_expression "ppOVar2 + 1" identifier + number_literal)) ;) (labeled_statement "std::\n        vector<gold::Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);" statement_identifier (ERROR "::\n        vector<gold:" : : (binary_expression "vector<gold" identifier < identifier) :) : (labeled_statement "Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);" statement_identifier : (ERROR ":" :) (labeled_statement "Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);" statement_identifier (ERROR "::Section_info,_std::allocator<gold:" : : (comma_expression "Section_info,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Layout::Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);" statement_identifier : (ERROR ":" :) (labeled_statement "Relaxation_debug_check::Section_info>_>\n        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);" statement_identifier (ERROR "::Section_info>_>\n        ::_M_realloc_insert<const_gold:" : : (binary_expression "Section_info>_" identifier > identifier) > : : (binary_expression "_M_realloc_insert<const_gold" identifier < identifier) :) : (labeled_statement "Layout::Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);" statement_identifier : (ERROR ":" :) (labeled_statement "Relaxation_debug_check::Section_info&>\n                  (&this->section_infos_,__position,&info);" statement_identifier : (ERROR ":" :) (expression_statement "Section_info&>\n                  (&this->section_infos_,__position,&info);" (binary_expression "Section_info&>\n                  (&this->section_infos_,__position,&info)" identifier (ERROR "&" &) > (parenthesized_expression "(&this->section_infos_,__position,&info)" ( (comma_expression "&this->section_infos_,__position,&info" (pointer_expression "&this->section_infos_" & (field_expression "this->section_infos_" identifier -> field_identifier)) , (comma_expression "__position,&info" identifier , (pointer_expression "&info" & identifier))) ))) ;)))))))) (if_statement "if ((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2) {\n          return;\n        }" if (parenthesized_expression "((sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2)" ( (binary_expression "(sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish == ppOVar2" (field_expression "(sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl._M_finish" (field_expression "(sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n            _M_impl" (parenthesized_expression "(sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>)" ( (binary_expression "sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>" (binary_expression "sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_" (binary_expression "sections->\n            super__Vector_base<gold::Output_section*,_std::allocator<gold" (binary_expression "sections->\n            super__Vector_base<gold::Output_section*,_std" (binary_expression "sections->\n            super__Vector_base<gold" (field_expression "sections->\n            super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_section" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier) == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "ppOVar2 = ppOVar2 + 1;" (assignment_expression "ppOVar2 = ppOVar2 + 1" identifier = (binary_expression "ppOVar2 + 1" identifier + number_literal)) ;) (expression_statement "(__position._M_current)->output_section = info.output_section;" (assignment_expression "(__position._M_current)->output_section = info.output_section" (field_expression "(__position._M_current)->output_section" (parenthesized_expression "(__position._M_current)" ( (field_expression "__position._M_current" identifier . field_identifier) )) -> field_identifier) = (field_expression "info.output_section" identifier . field_identifier)) ;) (expression_statement "(__position._M_current)->address = info.address;" (assignment_expression "(__position._M_current)->address = info.address" (field_expression "(__position._M_current)->address" (parenthesized_expression "(__position._M_current)" ( (field_expression "__position._M_current" identifier . field_identifier) )) -> field_identifier) = (field_expression "info.address" identifier . field_identifier)) ;) (expression_statement "(__position._M_current)->data_size = info.data_size;" (assignment_expression "(__position._M_current)->data_size = info.data_size" (field_expression "(__position._M_current)->data_size" (parenthesized_expression "(__position._M_current)" ( (field_expression "__position._M_current" identifier . field_identifier) )) -> field_identifier) = (field_expression "info.data_size" identifier . field_identifier)) ;) (expression_statement "(__position._M_current)->offset = info.offset;" (assignment_expression "(__position._M_current)->offset = info.offset" (field_expression "(__position._M_current)->offset" (parenthesized_expression "(__position._M_current)" ( (field_expression "__position._M_current" identifier . field_identifier) )) -> field_identifier) = (field_expression "info.offset" identifier . field_identifier)) ;) (ERROR "(this->section_infos_).\n      super__Vector_base<gold::" (binary_expression "(this->section_infos_).\n      super__Vector_base<gold" (field_expression "(this->section_infos_).\n      super__Vector_base" (parenthesized_expression "(this->section_infos_)" ( (field_expression "this->section_infos_" identifier -> field_identifier) )) . field_identifier) < identifier) : :) (labeled_statement "Layout::Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;" statement_identifier : (ERROR ":" :) (labeled_statement "Relaxation_debug_check::Section_info,_std::allocator<gold::Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;" statement_identifier (ERROR "::Section_info,_std::allocator<gold:" : : (comma_expression "Section_info,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Layout::Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;" statement_identifier : (ERROR ":" :) (labeled_statement "Relaxation_debug_check::Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;" statement_identifier : (ERROR ":" :) (expression_statement "Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1;" (assignment_expression "Section_info>_>\n      ._M_impl._M_finish = __position._M_current + 1" (field_expression "Section_info>_>\n      ._M_impl._M_finish" (field_expression "Section_info>_>\n      ._M_impl" (binary_expression "Section_info>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) = (binary_expression "__position._M_current + 1" (field_expression "__position._M_current" identifier . field_identifier) + number_literal)) ;))))) }) while (parenthesized_expression "((sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish != ppOVar2)" ( (binary_expression "(sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish != ppOVar2" (field_expression "(sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl._M_finish" (field_expression "(sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>).\n             _M_impl" (parenthesized_expression "(sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>)" ( (binary_expression "sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_>" (binary_expression "sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold::Output_section*>_" (binary_expression "sections->\n             super__Vector_base<gold::Output_section*,_std::allocator<gold" (binary_expression "sections->\n             super__Vector_base<gold::Output_section*,_std" (binary_expression "sections->\n             super__Vector_base<gold" (field_expression "sections->\n             super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Output_section" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Output_section" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_001a86c0(long param_1,long *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  long *plVar3;\n  long local_48;\n  long lStack_40;\n  long local_38;\n  long lStack_30;\n  \n  plVar3 = (long *)*param_2;\n  if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }\n  return;\n}\n\n" (function_definition "void FUN_001a86c0(long param_1,long *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  long *plVar3;\n  long local_48;\n  long lStack_40;\n  long local_38;\n  long lStack_30;\n  \n  plVar3 = (long *)*param_2;\n  if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_001a86c0(long param_1,long *param_2)" identifier (parameter_list "(long param_1,long *param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  long *plVar3;\n  long local_48;\n  long lStack_40;\n  long local_38;\n  long lStack_30;\n  \n  plVar3 = (long *)*param_2;\n  if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long *plVar3;" (sized_type_specifier "long" long) (pointer_declarator "*plVar3" * identifier) ;) (declaration "long local_48;" (sized_type_specifier "long" long) identifier ;) (declaration "long lStack_40;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_38;" (sized_type_specifier "long" long) identifier ;) (declaration "long lStack_30;" (sized_type_specifier "long" long) identifier ;) (expression_statement "plVar3 = (long *)*param_2;" (assignment_expression "plVar3 = (long *)*param_2" identifier = (cast_expression "(long *)*param_2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }" if (parenthesized_expression "(plVar3 != (long *)param_2[1])" ( (binary_expression "plVar3 != (long *)param_2[1]" identifier != (cast_expression "(long *)param_2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )) (compound_statement "{\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }" { (do_statement "do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);" do (compound_statement "{\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    }" { (while_statement "while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }" { (expression_statement "local_48 = *plVar3;" (assignment_expression "local_48 = *plVar3" identifier = (pointer_expression "*plVar3" * identifier)) ;) (expression_statement "lStack_40 = 0;" (assignment_expression "lStack_40 = 0" identifier = number_literal) ;) (expression_statement "bVar1 = *(byte *)(local_48 + 0x20);" (assignment_expression "bVar1 = *(byte *)(local_48 + 0x20)" identifier = (pointer_expression "*(byte *)(local_48 + 0x20)" * (cast_expression "(byte *)(local_48 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + 0x20)" ( (binary_expression "local_48 + 0x20" identifier + number_literal) ))))) ;) (if_statement "if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }" if (parenthesized_expression "((bVar1 & 1) != 0)" ( (binary_expression "(bVar1 & 1) != 0" (parenthesized_expression "(bVar1 & 1)" ( (binary_expression "bVar1 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          lStack_40 = *(long *)(local_48 + 8);\n        }" { (expression_statement "lStack_40 = *(long *)(local_48 + 8);" (assignment_expression "lStack_40 = *(long *)(local_48 + 8)" identifier = (pointer_expression "*(long *)(local_48 + 8)" * (cast_expression "(long *)(local_48 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + 8)" ( (binary_expression "local_48 + 8" identifier + number_literal) ))))) ;) })) (expression_statement "local_38 = -1;" (assignment_expression "local_38 = -1" identifier = number_literal) ;) (if_statement "if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }" if (parenthesized_expression "((bVar1 & 2) != 0)" ( (binary_expression "(bVar1 & 2) != 0" (parenthesized_expression "(bVar1 & 2)" ( (binary_expression "bVar1 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          local_38 = *(long *)(local_48 + 0x10);\n        }" { (expression_statement "local_38 = *(long *)(local_48 + 0x10);" (assignment_expression "local_38 = *(long *)(local_48 + 0x10)" identifier = (pointer_expression "*(long *)(local_48 + 0x10)" * (cast_expression "(long *)(local_48 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + 0x10)" ( (binary_expression "local_48 + 0x10" identifier + number_literal) ))))) ;) })) (expression_statement "lStack_30 = -1;" (assignment_expression "lStack_30 = -1" identifier = number_literal) ;) (if_statement "if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }" if (parenthesized_expression "((bVar1 & 4) != 0)" ( (binary_expression "(bVar1 & 4) != 0" (parenthesized_expression "(bVar1 & 4)" ( (binary_expression "bVar1 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }" { (expression_statement "lStack_30 = *(long *)(local_48 + 0x18);" (assignment_expression "lStack_30 = *(long *)(local_48 + 0x18)" identifier = (pointer_expression "*(long *)(local_48 + 0x18)" * (cast_expression "(long *)(local_48 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + 0x18)" ( (binary_expression "local_48 + 0x18" identifier + number_literal) ))))) ;) })) (expression_statement "plVar2 = *(long **)(param_1 + 8);" (assignment_expression "plVar2 = *(long **)(param_1 + 8)" identifier = (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (if_statement "if (plVar2 != *(long **)(param_1 + 0x10)) break;" if (parenthesized_expression "(plVar2 != *(long **)(param_1 + 0x10))" ( (binary_expression "plVar2 != *(long **)(param_1 + 0x10)" identifier != (pointer_expression "*(long **)(param_1 + 0x10)" * (cast_expression "(long **)(param_1 + 0x10)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) )) (break_statement "break;" break ;)) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" identifier = (binary_expression "plVar3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_001b1e20(param_1,plVar2,&local_48);" (call_expression "FUN_001b1e20(param_1,plVar2,&local_48)" identifier (argument_list "(param_1,plVar2,&local_48)" ( identifier , identifier , (pointer_expression "&local_48" & identifier) ))) ;) (if_statement "if ((long *)param_2[1] == plVar3) {\n          return;\n        }" if (parenthesized_expression "((long *)param_2[1] == plVar3)" ( (binary_expression "(long *)param_2[1] == plVar3" (cast_expression "(long *)param_2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) == identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" identifier = (binary_expression "plVar3 + 1" identifier + number_literal)) ;) (expression_statement "*plVar2 = local_48;" (assignment_expression "*plVar2 = local_48" (pointer_expression "*plVar2" * identifier) = identifier) ;) (expression_statement "plVar2[1] = lStack_40;" (assignment_expression "plVar2[1] = lStack_40" (subscript_expression "plVar2[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar2[2] = local_38;" (assignment_expression "plVar2[2] = local_38" (subscript_expression "plVar2[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar2[3] = lStack_30;" (assignment_expression "plVar2[3] = lStack_30" (subscript_expression "plVar2[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(long **)(param_1 + 8) = plVar2 + 4;" (assignment_expression "*(long **)(param_1 + 8) = plVar2 + 4" (pointer_expression "*(long **)(param_1 + 8)" * (cast_expression "(long **)(param_1 + 8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (binary_expression "plVar2 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "((long *)param_2[1] != plVar3)" ( (binary_expression "(long *)param_2[1] != plVar3" (cast_expression "(long *)param_2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_2[1]" identifier [ number_literal ])) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression & IDENT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) == IDENT) )) (compound_statement { (return_statement return ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = 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 (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != IDENT) )) ;) })) (return_statement return ;) })))
(function_definition "void FUN_001a86c0(long param_1,long *param_2)\n\n{\n  byte bVar1;\n  long *plVar2;\n  long *plVar3;\n  long local_48;\n  long lStack_40;\n  long local_38;\n  long lStack_30;\n  \n  plVar3 = (long *)*param_2;\n  if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001a86c0(long param_1,long *param_2)" (identifier "FUN_001a86c0") (parameter_list "(long param_1,long *param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  byte bVar1;\n  long *plVar2;\n  long *plVar3;\n  long local_48;\n  long lStack_40;\n  long local_38;\n  long lStack_30;\n  \n  plVar3 = (long *)*param_2;\n  if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }\n  return;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "long *plVar3;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar3" (* "*") (identifier "plVar3")) (; ";")) (declaration "long local_48;" (sized_type_specifier "long" (long "long")) (identifier "local_48") (; ";")) (declaration "long lStack_40;" (sized_type_specifier "long" (long "long")) (identifier "lStack_40") (; ";")) (declaration "long local_38;" (sized_type_specifier "long" (long "long")) (identifier "local_38") (; ";")) (declaration "long lStack_30;" (sized_type_specifier "long" (long "long")) (identifier "lStack_30") (; ";")) (expression_statement "plVar3 = (long *)*param_2;" (assignment_expression "plVar3 = (long *)*param_2" (identifier "plVar3") (= "=") (cast_expression "(long *)*param_2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (if_statement "if (plVar3 != (long *)param_2[1]) {\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }" (if "if") (parenthesized_expression "(plVar3 != (long *)param_2[1])" (( "(") (binary_expression "plVar3 != (long *)param_2[1]" (identifier "plVar3") (!= "!=") (cast_expression "(long *)param_2[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")))) () ")")) (compound_statement "{\n    do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);\n  }" ({ "{") (do_statement "do {\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    } while ((long *)param_2[1] != plVar3);" (do "do") (compound_statement "{\n      while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }\n      plVar3 = plVar3 + 1;\n      *plVar2 = local_48;\n      plVar2[1] = lStack_40;\n      plVar2[2] = local_38;\n      plVar2[3] = lStack_30;\n      *(long **)(param_1 + 8) = plVar2 + 4;\n    }" ({ "{") (while_statement "while( true ) {\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        local_48 = *plVar3;\n        lStack_40 = 0;\n        bVar1 = *(byte *)(local_48 + 0x20);\n        if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }\n        local_38 = -1;\n        if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }\n        lStack_30 = -1;\n        if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }\n        plVar2 = *(long **)(param_1 + 8);\n        if (plVar2 != *(long **)(param_1 + 0x10)) break;\n        plVar3 = plVar3 + 1;\n        FUN_001b1e20(param_1,plVar2,&local_48);\n        if ((long *)param_2[1] == plVar3) {\n          return;\n        }\n      }" ({ "{") (expression_statement "local_48 = *plVar3;" (assignment_expression "local_48 = *plVar3" (identifier "local_48") (= "=") (pointer_expression "*plVar3" (* "*") (identifier "plVar3"))) (; ";")) (expression_statement "lStack_40 = 0;" (assignment_expression "lStack_40 = 0" (identifier "lStack_40") (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar1 = *(byte *)(local_48 + 0x20);" (assignment_expression "bVar1 = *(byte *)(local_48 + 0x20)" (identifier "bVar1") (= "=") (pointer_expression "*(byte *)(local_48 + 0x20)" (* "*") (cast_expression "(byte *)(local_48 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + 0x20)" (( "(") (binary_expression "local_48 + 0x20" (identifier "local_48") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (if_statement "if ((bVar1 & 1) != 0) {\n          lStack_40 = *(long *)(local_48 + 8);\n        }" (if "if") (parenthesized_expression "((bVar1 & 1) != 0)" (( "(") (binary_expression "(bVar1 & 1) != 0" (parenthesized_expression "(bVar1 & 1)" (( "(") (binary_expression "bVar1 & 1" (identifier "bVar1") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          lStack_40 = *(long *)(local_48 + 8);\n        }" ({ "{") (expression_statement "lStack_40 = *(long *)(local_48 + 8);" (assignment_expression "lStack_40 = *(long *)(local_48 + 8)" (identifier "lStack_40") (= "=") (pointer_expression "*(long *)(local_48 + 8)" (* "*") (cast_expression "(long *)(local_48 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + 8)" (( "(") (binary_expression "local_48 + 8" (identifier "local_48") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (} "}"))) (expression_statement "local_38 = -1;" (assignment_expression "local_38 = -1" (identifier "local_38") (= "=") (number_literal "-1")) (; ";")) (if_statement "if ((bVar1 & 2) != 0) {\n          local_38 = *(long *)(local_48 + 0x10);\n        }" (if "if") (parenthesized_expression "((bVar1 & 2) != 0)" (( "(") (binary_expression "(bVar1 & 2) != 0" (parenthesized_expression "(bVar1 & 2)" (( "(") (binary_expression "bVar1 & 2" (identifier "bVar1") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          local_38 = *(long *)(local_48 + 0x10);\n        }" ({ "{") (expression_statement "local_38 = *(long *)(local_48 + 0x10);" (assignment_expression "local_38 = *(long *)(local_48 + 0x10)" (identifier "local_38") (= "=") (pointer_expression "*(long *)(local_48 + 0x10)" (* "*") (cast_expression "(long *)(local_48 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + 0x10)" (( "(") (binary_expression "local_48 + 0x10" (identifier "local_48") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (} "}"))) (expression_statement "lStack_30 = -1;" (assignment_expression "lStack_30 = -1" (identifier "lStack_30") (= "=") (number_literal "-1")) (; ";")) (if_statement "if ((bVar1 & 4) != 0) {\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }" (if "if") (parenthesized_expression "((bVar1 & 4) != 0)" (( "(") (binary_expression "(bVar1 & 4) != 0" (parenthesized_expression "(bVar1 & 4)" (( "(") (binary_expression "bVar1 & 4" (identifier "bVar1") (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          lStack_30 = *(long *)(local_48 + 0x18);\n        }" ({ "{") (expression_statement "lStack_30 = *(long *)(local_48 + 0x18);" (assignment_expression "lStack_30 = *(long *)(local_48 + 0x18)" (identifier "lStack_30") (= "=") (pointer_expression "*(long *)(local_48 + 0x18)" (* "*") (cast_expression "(long *)(local_48 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + 0x18)" (( "(") (binary_expression "local_48 + 0x18" (identifier "local_48") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}"))) (expression_statement "plVar2 = *(long **)(param_1 + 8);" (assignment_expression "plVar2 = *(long **)(param_1 + 8)" (identifier "plVar2") (= "=") (pointer_expression "*(long **)(param_1 + 8)" (* "*") (cast_expression "(long **)(param_1 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (plVar2 != *(long **)(param_1 + 0x10)) break;" (if "if") (parenthesized_expression "(plVar2 != *(long **)(param_1 + 0x10))" (( "(") (binary_expression "plVar2 != *(long **)(param_1 + 0x10)" (identifier "plVar2") (!= "!=") (pointer_expression "*(long **)(param_1 + 0x10)" (* "*") (cast_expression "(long **)(param_1 + 0x10)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" (identifier "plVar3") (= "=") (binary_expression "plVar3 + 1" (identifier "plVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_001b1e20(param_1,plVar2,&local_48);" (call_expression "FUN_001b1e20(param_1,plVar2,&local_48)" (identifier "FUN_001b1e20") (argument_list "(param_1,plVar2,&local_48)" (( "(") (identifier "param_1") (, ",") (identifier "plVar2") (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";")) (if_statement "if ((long *)param_2[1] == plVar3) {\n          return;\n        }" (if "if") (parenthesized_expression "((long *)param_2[1] == plVar3)" (( "(") (binary_expression "(long *)param_2[1] == plVar3" (cast_expression "(long *)param_2[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (== "==") (identifier "plVar3")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "plVar3 = plVar3 + 1;" (assignment_expression "plVar3 = plVar3 + 1" (identifier "plVar3") (= "=") (binary_expression "plVar3 + 1" (identifier "plVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*plVar2 = local_48;" (assignment_expression "*plVar2 = local_48" (pointer_expression "*plVar2" (* "*") (identifier "plVar2")) (= "=") (identifier "local_48")) (; ";")) (expression_statement "plVar2[1] = lStack_40;" (assignment_expression "plVar2[1] = lStack_40" (subscript_expression "plVar2[1]" (identifier "plVar2") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lStack_40")) (; ";")) (expression_statement "plVar2[2] = local_38;" (assignment_expression "plVar2[2] = local_38" (subscript_expression "plVar2[2]" (identifier "plVar2") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "local_38")) (; ";")) (expression_statement "plVar2[3] = lStack_30;" (assignment_expression "plVar2[3] = lStack_30" (subscript_expression "plVar2[3]" (identifier "plVar2") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "lStack_30")) (; ";")) (expression_statement "*(long **)(param_1 + 8) = plVar2 + 4;" (assignment_expression "*(long **)(param_1 + 8) = plVar2 + 4" (pointer_expression "*(long **)(param_1 + 8)" (* "*") (cast_expression "(long **)(param_1 + 8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (binary_expression "plVar2 + 4" (identifier "plVar2") (+ "+") (number_literal "4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((long *)param_2[1] != plVar3)" (( "(") (binary_expression "(long *)param_2[1] != plVar3" (cast_expression "(long *)param_2[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (identifier "plVar3")) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void read_sections(Relaxation_debug_check * this, Section_list *
   sections) */

void __thiscall
var_5::Layout::type_1::function_1
          (type_1 *this,type_2 *sections)

{
  type_3 var_7;
  type_4 __position;
  type_5 var_4;
  type_6 info;
  
  var_4 = (sections->
            super__Vector_base<var_5::var_1*var_3,var_6::allocator<var_5::var_1*>var_2>var_3).
            _M_impl._M_start;
  if (var_4 !=
      (sections->super__Vector_base<var_5::var_1*,var_6::allocator<var_5::var_1*>var_2>var_3).
      _M_impl._M_finish) {
    do {
      while( true ) {
        info.output_section = *var_4;
        info.address = 0;
        var_7 = ((info.output_section)->super_Output_data).field_0x20;
        if ((var_7 & 1) != 0) {
          info.address = ((info.output_section)->super_Output_data).address_;
        }
        info.data_size = -1;
        if ((var_7 & 2) != 0) {
          info.data_size = ((info.output_section)->super_Output_data).data_size_;
        }
        info.offset = -1;
        if ((var_7 & 4) != 0) {
          info.offset = ((info.output_section)->super_Output_data).offset_;
        }
        __position._M_current =
             (this->section_infos_).
             super__Vector_base<var_5::Layout::type_1::type_6,var_6::allocator<var_5::Layout::Relaxation_debug_check::type_6>var_2>
             ._M_impl._M_finish;
        if (__position._M_current !=
            (this->section_infos_).
            super__Vector_base<var_5::Layout::type_1::type_6,var_6::allocator<var_5::Layout::type_1::type_6>var_2>
            ._M_impl._M_end_of_storage) break;
        var_4 = var_4 + 1;
        std::
        vector<var_5::Layout::Relaxation_debug_check::type_6,var_6::allocator<var_5::Layout::Relaxation_debug_check::type_6>var_2>
        ::_M_realloc_insert<const_gold::Layout::Relaxation_debug_check::type_6&>
                  (&this->section_infos_,__position,&info);
        if ((sections->
            super__Vector_base<var_5::var_1*,var_6::allocator<var_5::var_1*>var_2>var_3).
            _M_impl._M_finish == var_4) {
          return;
        }
      }
      var_4 = var_4 + 1;
      (__position._M_current)->output_section = info.output_section;
      (__position._M_current)->address = info.address;
      (__position._M_current)->data_size = info.data_size;
      (__position._M_current)->offset = info.offset;
      (this->section_infos_).
      super__Vector_base<var_5::Layout::Relaxation_debug_check::type_6,var_6::allocator<var_5::Layout::Relaxation_debug_check::type_6>var_2>
      ._M_impl._M_finish = __position._M_current + 1;
    } while ((sections->
             super__Vector_base<var_5::var_1*,var_6::allocator<var_5::var_1*>var_2>var_3).
             _M_impl._M_finish != var_4);
  }
  return;
}


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

void MASKED(long param_1,long *param_2)

{
  byte bVar1;
  long *plVar2;
  long *plVar3;
  long local_48;
  long lStack_40;
  long local_38;
  long lStack_30;
  
  plVar3 = (long *)*param_2;
  if (plVar3 != (long *)param_2[1]) {
    do {
      while( true ) {
        local_48 = *plVar3;
        lStack_40 = 0;
        bVar1 = *(byte *)(local_48 + 0x20);
        if ((bVar1 & 1) != 0) {
          lStack_40 = *(long *)(local_48 + 8);
        }
        local_38 = -1;
        if ((bVar1 & 2) != 0) {
          local_38 = *(long *)(local_48 + 0x10);
        }
        lStack_30 = -1;
        if ((bVar1 & 4) != 0) {
          lStack_30 = *(long *)(local_48 + 0x18);
        }
        plVar2 = *(long **)(param_1 + 8);
        if (plVar2 != *(long **)(param_1 + 0x10)) break;
        plVar3 = plVar3 + 1;
        FUN_001b1e20(param_1,plVar2,&local_48);
        if ((long *)param_2[1] == plVar3) {
          return;
        }
      }
      plVar3 = plVar3 + 1;
      *plVar2 = local_48;
      plVar2[1] = lStack_40;
      plVar2[2] = local_38;
      plVar2[3] = lStack_30;
      *(long **)(param_1 + 8) = plVar2 + 4;
    } while ((long *)param_2[1] != plVar3);
  }
  return;
}

