
/* DWARF original prototype: void gather_cref(Cref_inputs * this, Objects * objects, Cref_table *
   table) */

void __thiscall gold::Cref_inputs::gather_cref(Cref_inputs *this,Objects *objects,Cref_table *table)

{
  Symbol *pSVar1;
  iterator __position;
  Object *pOVar2;
  int iVar3;
  undefined4 extraout_var;
  _Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>
  _Var5;
  _Base_ptr p_Var6;
  _Base_ptr p_Var7;
  size_t __n;
  long *plVar8;
  Object **__args_0;
  iterator __position_00;
  bool bVar9;
  pair<std::_Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_bool>
  pVar10;
  pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*> local_48;
  long *plVar4;
  
  __args_0 = (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.
             _M_start;
  if (__args_0 !=
      (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl._M_finish
     ) {
    do {
      iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();
      plVar4 = (long *)CONCAT44(extraout_var,iVar3);
      if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {
LAB_002974f1:
        do {
          pSVar1 = (Symbol *)*plVar8;
          if (pSVar1 != (Symbol *)0x0) {
            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;
            local_48.first = pSVar1;
            pVar10 = std::
                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>
                     ::
                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>
                               (&table->_M_t,&local_48);
            _Var5 = pVar10.first;
            if (pVar10.second != false) {
              p_Var6 = (_Base_ptr)operator_new(0x18);
              *(undefined8 *)p_Var6 = 0;
              p_Var6->_M_parent = (_Base_ptr)0x0;
              p_Var6->_M_left = (_Base_ptr)0x0;
              _Var5._M_node[1]._M_parent = p_Var6;
            }
            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {
              if ((pSVar1->field_0x3b & 0x20) == 0) {
                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);
                bVar9 = !bVar9;
              }
              else {
                bVar9 = (pSVar1->u2_).shndx != 0;
              }
              p_Var6 = _Var5._M_node[1]._M_parent;
              p_Var7 = p_Var6->_M_parent;
              __position_00._M_current = (Object **)p_Var6->_M_left;
              if (bVar9) {
                __position._M_current = *(Object ***)p_Var6;
                if ((_Base_ptr)__position_00._M_current == p_Var7) {
                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::
                  _M_realloc_insert<gold::Object*_const&>
                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,
                             __position,__args_0);
                }
                else {
                  pOVar2 = *__args_0;
                  if ((_Base_ptr)__position._M_current == p_Var7) {
                    *__position._M_current = pOVar2;
                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;
                  }
                  else {
                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;
                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;
                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {
                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;
                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);
                    }
                    *__position._M_current = pOVar2;
                  }
                }
                goto LAB_002974e6;
              }
            }
            else {
              p_Var6 = _Var5._M_node[1]._M_parent;
              p_Var7 = p_Var6->_M_parent;
              __position_00._M_current = (Object **)p_Var6->_M_left;
            }
            if ((_Base_ptr)__position_00._M_current == p_Var7) {
              plVar8 = plVar8 + 1;
              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::
              _M_realloc_insert<gold::Object*_const&>
                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,
                         __position_00,__args_0);
              if ((long *)plVar4[1] == plVar8) break;
              goto LAB_002974f1;
            }
            *(Object **)p_Var7 = *__args_0;
            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;
          }
LAB_002974e6:
          plVar8 = plVar8 + 1;
        } while ((long *)plVar4[1] != plVar8);
      }
      __args_0 = __args_0 + 1;
    } while ((objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.
             _M_finish != __args_0);
  }
  return;
}



void FUN_00297450(undefined8 param_1,long *param_2,undefined8 param_3)

{
  long lVar1;
  long *__src;
  long *plVar2;
  long lVar3;
  undefined8 *puVar4;
  long *plVar5;
  char extraout_DL;
  size_t __n;
  long *plVar6;
  long *plVar7;
  long *plVar8;
  byte bVar9;
  long local_48 [3];
  
  plVar7 = (long *)*param_2;
  if (plVar7 != (long *)param_2[1]) {
    do {
      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();
      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {
LAB_002974f1:
        do {
          lVar1 = *plVar6;
          if (lVar1 != 0) {
            local_48[1] = 0;
            local_48[0] = lVar1;
            lVar3 = FUN_00297e20(param_3,local_48);
            if (extraout_DL != '\0') {
              puVar4 = (undefined8 *)FUN_002d9490(0x18);
              *puVar4 = 0;
              puVar4[1] = 0;
              puVar4[2] = 0;
              *(undefined8 **)(lVar3 + 0x28) = puVar4;
            }
            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {
              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {
                bVar9 = FUN_00270fe0();
                bVar9 = bVar9 ^ 1;
              }
              else {
                bVar9 = *(int *)(lVar1 + 0x18) != 0;
              }
              puVar4 = *(undefined8 **)(lVar3 + 0x28);
              plVar5 = (long *)puVar4[1];
              plVar8 = (long *)puVar4[2];
              if (bVar9 != 0) {
                __src = (long *)*puVar4;
                if (plVar8 == plVar5) {
                  FUN_0023d3a0(puVar4,__src,plVar7);
                }
                else {
                  lVar1 = *plVar7;
                  if (__src == plVar5) {
                    *__src = lVar1;
                    puVar4[1] = plVar5 + 1;
                  }
                  else {
                    *plVar5 = plVar5[-1];
                    puVar4[1] = plVar5 + 1;
                    if (__src != plVar5 + -1) {
                      __n = (long)(plVar5 + -1) - (long)__src;
                      memmove((void *)((long)plVar5 - __n),__src,__n);
                    }
                    *__src = lVar1;
                  }
                }
                goto LAB_002974e6;
              }
            }
            else {
              puVar4 = *(undefined8 **)(lVar3 + 0x28);
              plVar5 = (long *)puVar4[1];
              plVar8 = (long *)puVar4[2];
            }
            if (plVar8 == plVar5) {
              plVar6 = plVar6 + 1;
              FUN_0023d3a0(puVar4,plVar8,plVar7);
              if ((long *)plVar2[1] == plVar6) break;
              goto LAB_002974f1;
            }
            *plVar5 = *plVar7;
            puVar4[1] = plVar5 + 1;
          }
LAB_002974e6:
          plVar6 = plVar6 + 1;
        } while ((long *)plVar2[1] != plVar6);
      }
      plVar7 = plVar7 + 1;
    } while ((long *)param_2[1] != plVar7);
  }
  return;
}


PUSH R15
PUSH R14
MOV R14,RDX
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x38
MOV RBP,qword ptr [RSI]
LEA RDX,[RSP + 0x20]
MOV qword ptr [RSP + 0x10],RSI
MOV qword ptr [RSP + 0x8],RDX
CMP RBP,qword ptr [RSI + 0x8]
JZ 0x00297573
NOP dword ptr [RAX]
MOV RDI,qword ptr [RBP]
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0xe8]
MOV R12,RAX
TEST RAX,RAX
JZ 0x00297560
MOV RBX,qword ptr [RAX]
CMP RBX,qword ptr [RAX + 0x8]
JNZ 0x002974f1
JMP 0x00297560
TEST byte ptr [R13 + 0x3a],0x7
JNZ 0x002974c5
MOV RAX,qword ptr [R13 + 0x10]
CMP qword ptr [RBP],RAX
JZ 0x00297588
MOV RDI,qword ptr [R15 + 0x28]
MOV RCX,qword ptr [RDI + 0x8]
MOV RSI,qword ptr [RDI + 0x10]
CMP RSI,RCX
JZ 0x00297548
MOV RAX,qword ptr [RBP]
ADD RCX,0x8
MOV qword ptr [RCX + -0x8],RAX
MOV qword ptr [RDI + 0x8],RCX
ADD RBX,0x8
CMP qword ptr [R12 + 0x8],RBX
JZ 0x00297560
MOV R13,qword ptr [RBX]
TEST R13,R13
JZ 0x002974e6
MOV RSI,qword ptr [RSP + 0x8]
MOV RDI,R14
MOV qword ptr [RSP + 0x20],R13
MOV qword ptr [RSP + 0x28],0x0
CALL 0x00297e20
MOV R15,RAX
TEST DL,DL
JZ 0x002974b0
MOV EDI,0x18
CALL 0x002d9490
MOV qword ptr [RAX],0x0
MOV qword ptr [RAX + 0x8],0x0
MOV qword ptr [RAX + 0x10],0x0
MOV qword ptr [R15 + 0x28],RAX
JMP 0x002974b0
MOV RDX,RBP
ADD RBX,0x8
CALL 0x0023d3a0
CMP qword ptr [R12 + 0x8],RBX
JNZ 0x002974f1
NOP dword ptr [RAX + RAX*0x1]
MOV RAX,qword ptr [RSP + 0x10]
ADD RBP,0x8
CMP qword ptr [RAX + 0x8],RBP
JNZ 0x00297480
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV EDI,dword ptr [R13 + 0x18]
TEST byte ptr [R13 + 0x3b],0x20
JZ 0x00297600
TEST EDI,EDI
SETNZ AL
MOV RDI,qword ptr [R15 + 0x28]
MOV RCX,qword ptr [RDI + 0x8]
MOV RSI,qword ptr [RDI + 0x10]
TEST AL,AL
JZ 0x002974d1
MOV R15,qword ptr [RDI]
CMP RSI,RCX
JZ 0x00297616
MOV R9,qword ptr [RBP]
LEA RAX,[RCX + 0x8]
CMP R15,RCX
JZ 0x0029760a
MOV RDX,qword ptr [RCX + -0x8]
MOV qword ptr [RCX],RDX
LEA RDX,[RCX + -0x8]
MOV qword ptr [RDI + 0x8],RAX
CMP R15,RDX
JZ 0x002975f0
SUB RDX,R15
MOV RSI,R15
MOV qword ptr [RSP + 0x18],R9
SUB RCX,RDX
MOV RDI,RCX
CALL 0x001476d0
MOV R9,qword ptr [RSP + 0x18]
MOV qword ptr [R15],R9
JMP 0x002974e6
CALL 0x00270fe0
XOR EAX,0x1
JMP 0x00297598
MOV qword ptr [R15],R9
MOV qword ptr [RDI + 0x8],RAX
JMP 0x002974e6
MOV RDX,RBP
MOV RSI,R15
CALL 0x0023d3a0
JMP 0x002974e6
(translation_unit "void FUN_00297450(undefined8 param_1,long *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  long *__src;\n  long *plVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long *plVar5;\n  char extraout_DL;\n  size_t __n;\n  long *plVar6;\n  long *plVar7;\n  long *plVar8;\n  byte bVar9;\n  long local_48 [3];\n  \n  plVar7 = (long *)*param_2;\n  if (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00297450(undefined8 param_1,long *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  long *__src;\n  long *plVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long *plVar5;\n  char extraout_DL;\n  size_t __n;\n  long *plVar6;\n  long *plVar7;\n  long *plVar8;\n  byte bVar9;\n  long local_48 [3];\n  \n  plVar7 = (long *)*param_2;\n  if (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00297450(undefined8 param_1,long *param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long *__src;\n  long *plVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long *plVar5;\n  char extraout_DL;\n  size_t __n;\n  long *plVar6;\n  long *plVar7;\n  long *plVar8;\n  byte bVar9;\n  long local_48 [3];\n  \n  plVar7 = (long *)*param_2;\n  if (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long *__src;" (sized_type_specifier "long" long) (pointer_declarator "*__src" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "char extraout_DL;" primitive_type identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "long *plVar6;" (sized_type_specifier "long" long) (pointer_declarator "*plVar6" * identifier) ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long *plVar8;" (sized_type_specifier "long" long) (pointer_declarator "*plVar8" * identifier) ;) (declaration "byte bVar9;" type_identifier identifier ;) (declaration "long local_48 [3];" (sized_type_specifier "long" long) (array_declarator "local_48 [3]" identifier [ number_literal ]) ;) (expression_statement "plVar7 = (long *)*param_2;" (assignment_expression "plVar7 = (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 (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }" if (parenthesized_expression "(plVar7 != (long *)param_2[1])" ( (binary_expression "plVar7 != (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      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }" { (do_statement "do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);" do (compound_statement "{\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    }" { (expression_statement "plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();" (assignment_expression "plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))()" identifier = (cast_expression "(long *)(**(code **)(*(long *)*plVar7 + 0xe8))()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*(long *)*plVar7 + 0xe8))()" (parenthesized_expression "(**(code **)(*(long *)*plVar7 + 0xe8))" ( (pointer_expression "**(code **)(*(long *)*plVar7 + 0xe8)" * (pointer_expression "*(code **)(*(long *)*plVar7 + 0xe8)" * (cast_expression "(code **)(*(long *)*plVar7 + 0xe8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*plVar7 + 0xe8)" ( (binary_expression "*(long *)*plVar7 + 0xe8" (pointer_expression "*(long *)*plVar7" * (cast_expression "(long *)*plVar7" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar7" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))))) ;) (if_statement "if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }" if (parenthesized_expression "((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1]))" ( (binary_expression "(plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])" (parenthesized_expression "(plVar2 != (long *)0x0)" ( (binary_expression "plVar2 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])" ( (comma_expression "plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1]" (assignment_expression "plVar6 = (long *)*plVar2" identifier = (cast_expression "(long *)*plVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar2" * identifier))) , (binary_expression "plVar6 != (long *)plVar2[1]" identifier != (cast_expression "(long *)plVar2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[1]" identifier [ number_literal ])))) ))) )) (compound_statement "{\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }" { (labeled_statement "LAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);" statement_identifier : (do_statement "do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);" do (compound_statement "{\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        }" { (expression_statement "lVar1 = *plVar6;" (assignment_expression "lVar1 = *plVar6" identifier = (pointer_expression "*plVar6" * identifier)) ;) (if_statement "if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }" if (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) (compound_statement "{\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }" { (expression_statement "local_48[1] = 0;" (assignment_expression "local_48[1] = 0" (subscript_expression "local_48[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_48[0] = lVar1;" (assignment_expression "local_48[0] = lVar1" (subscript_expression "local_48[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar3 = FUN_00297e20(param_3,local_48);" (assignment_expression "lVar3 = FUN_00297e20(param_3,local_48)" identifier = (call_expression "FUN_00297e20(param_3,local_48)" identifier (argument_list "(param_3,local_48)" ( identifier , identifier )))) ;) (if_statement "if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }" if (parenthesized_expression "(extraout_DL != '\0')" ( (binary_expression "extraout_DL != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }" { (expression_statement "puVar4 = (undefined8 *)FUN_002d9490(0x18);" (assignment_expression "puVar4 = (undefined8 *)FUN_002d9490(0x18)" identifier = (cast_expression "(undefined8 *)FUN_002d9490(0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002d9490(0x18)" identifier (argument_list "(0x18)" ( number_literal ))))) ;) (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4[1] = 0;" (assignment_expression "puVar4[1] = 0" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4[2] = 0;" (assignment_expression "puVar4[2] = 0" (subscript_expression "puVar4[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined8 **)(lVar3 + 0x28) = puVar4;" (assignment_expression "*(undefined8 **)(lVar3 + 0x28) = puVar4" (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" * (cast_expression "(undefined8 **)(lVar3 + 0x28)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) )))) = identifier) ;) })) (if_statement "if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" if (parenthesized_expression "(((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10)))" ( (binary_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))" (parenthesized_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3a) & 7)" ( (binary_expression "*(byte *)(lVar1 + 0x3a) & 7" (pointer_expression "*(byte *)(lVar1 + 0x3a)" * (cast_expression "(byte *)(lVar1 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x3a)" ( (binary_expression "lVar1 + 0x3a" identifier + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "(*plVar7 == *(long *)(lVar1 + 0x10))" ( (binary_expression "*plVar7 == *(long *)(lVar1 + 0x10)" (pointer_expression "*plVar7" * identifier) == (pointer_expression "*(long *)(lVar1 + 0x10)" * (cast_expression "(long *)(lVar1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x10)" ( (binary_expression "lVar1 + 0x10" identifier + number_literal) ))))) ))) )) (compound_statement "{\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }" { (if_statement "if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" if (parenthesized_expression "((*(byte *)(lVar1 + 0x3b) & 0x20) == 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3b) & 0x20)" ( (binary_expression "*(byte *)(lVar1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(lVar1 + 0x3b)" * (cast_expression "(byte *)(lVar1 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x3b)" ( (binary_expression "lVar1 + 0x3b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }" { (expression_statement "bVar9 = FUN_00270fe0();" (assignment_expression "bVar9 = FUN_00270fe0()" identifier = (call_expression "FUN_00270fe0()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar9 = bVar9 ^ 1;" (assignment_expression "bVar9 = bVar9 ^ 1" identifier = (binary_expression "bVar9 ^ 1" identifier ^ number_literal)) ;) }) (else_clause "else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" else (compound_statement "{\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" { (expression_statement "bVar9 = *(int *)(lVar1 + 0x18) != 0;" (assignment_expression "bVar9 = *(int *)(lVar1 + 0x18) != 0" identifier = (binary_expression "*(int *)(lVar1 + 0x18) != 0" (pointer_expression "*(int *)(lVar1 + 0x18)" * (cast_expression "(int *)(lVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x18)" ( (binary_expression "lVar1 + 0x18" identifier + number_literal) )))) != number_literal)) ;) }))) (expression_statement "puVar4 = *(undefined8 **)(lVar3 + 0x28);" (assignment_expression "puVar4 = *(undefined8 **)(lVar3 + 0x28)" identifier = (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" * (cast_expression "(undefined8 **)(lVar3 + 0x28)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "plVar5 = (long *)puVar4[1];" (assignment_expression "plVar5 = (long *)puVar4[1]" identifier = (cast_expression "(long *)puVar4[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ]))) ;) (expression_statement "plVar8 = (long *)puVar4[2];" (assignment_expression "plVar8 = (long *)puVar4[2]" identifier = (cast_expression "(long *)puVar4[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[2]" identifier [ number_literal ]))) ;) (if_statement "if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }" if (parenthesized_expression "(bVar9 != 0)" ( (binary_expression "bVar9 != 0" identifier != number_literal) )) (compound_statement "{\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }" { (expression_statement "__src = (long *)*puVar4;" (assignment_expression "__src = (long *)*puVar4" identifier = (cast_expression "(long *)*puVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier))) ;) (if_statement "if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" if (parenthesized_expression "(plVar8 == plVar5)" ( (binary_expression "plVar8 == plVar5" identifier == identifier) )) (compound_statement "{\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }" { (expression_statement "FUN_0023d3a0(puVar4,__src,plVar7);" (call_expression "FUN_0023d3a0(puVar4,__src,plVar7)" identifier (argument_list "(puVar4,__src,plVar7)" ( identifier , identifier , identifier ))) ;) }) (else_clause "else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" else (compound_statement "{\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" { (expression_statement "lVar1 = *plVar7;" (assignment_expression "lVar1 = *plVar7" identifier = (pointer_expression "*plVar7" * identifier)) ;) (if_statement "if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" if (parenthesized_expression "(__src == plVar5)" ( (binary_expression "__src == plVar5" identifier == identifier) )) (compound_statement "{\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }" { (expression_statement "*__src = lVar1;" (assignment_expression "*__src = lVar1" (pointer_expression "*__src" * identifier) = identifier) ;) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (binary_expression "plVar5 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" else (compound_statement "{\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" { (expression_statement "*plVar5 = plVar5[-1];" (assignment_expression "*plVar5 = plVar5[-1]" (pointer_expression "*plVar5" * identifier) = (subscript_expression "plVar5[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (binary_expression "plVar5 + 1" identifier + number_literal)) ;) (if_statement "if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }" if (parenthesized_expression "(__src != plVar5 + -1)" ( (binary_expression "__src != plVar5 + -1" identifier != (binary_expression "plVar5 + -1" identifier + number_literal)) )) (compound_statement "{\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }" { (expression_statement "__n = (long)(plVar5 + -1) - (long)__src;" (assignment_expression "__n = (long)(plVar5 + -1) - (long)__src" identifier = (binary_expression "(long)(plVar5 + -1) - (long)__src" (cast_expression "(long)(plVar5 + -1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(plVar5 + -1)" ( (binary_expression "plVar5 + -1" identifier + number_literal) ))) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "memmove((void *)((long)plVar5 - __n),__src,__n);" (call_expression "memmove((void *)((long)plVar5 - __n),__src,__n)" identifier (argument_list "((void *)((long)plVar5 - __n),__src,__n)" ( (cast_expression "(void *)((long)plVar5 - __n)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar5 - __n)" ( (binary_expression "(long)plVar5 - __n" (cast_expression "(long)plVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - identifier) ))) , identifier , identifier ))) ;) })) (expression_statement "*__src = lVar1;" (assignment_expression "*__src = lVar1" (pointer_expression "*__src" * identifier) = identifier) ;) }))) }))) (goto_statement "goto LAB_002974e6;" goto statement_identifier ;) })) }) (else_clause "else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" else (compound_statement "{\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" { (expression_statement "puVar4 = *(undefined8 **)(lVar3 + 0x28);" (assignment_expression "puVar4 = *(undefined8 **)(lVar3 + 0x28)" identifier = (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" * (cast_expression "(undefined8 **)(lVar3 + 0x28)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "plVar5 = (long *)puVar4[1];" (assignment_expression "plVar5 = (long *)puVar4[1]" identifier = (cast_expression "(long *)puVar4[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ]))) ;) (expression_statement "plVar8 = (long *)puVar4[2];" (assignment_expression "plVar8 = (long *)puVar4[2]" identifier = (cast_expression "(long *)puVar4[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[2]" identifier [ number_literal ]))) ;) }))) (if_statement "if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }" if (parenthesized_expression "(plVar8 == plVar5)" ( (binary_expression "plVar8 == plVar5" identifier == identifier) )) (compound_statement "{\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }" { (expression_statement "plVar6 = plVar6 + 1;" (assignment_expression "plVar6 = plVar6 + 1" identifier = (binary_expression "plVar6 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0023d3a0(puVar4,plVar8,plVar7);" (call_expression "FUN_0023d3a0(puVar4,plVar8,plVar7)" identifier (argument_list "(puVar4,plVar8,plVar7)" ( identifier , identifier , identifier ))) ;) (if_statement "if ((long *)plVar2[1] == plVar6) break;" if (parenthesized_expression "((long *)plVar2[1] == plVar6)" ( (binary_expression "(long *)plVar2[1] == plVar6" (cast_expression "(long *)plVar2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[1]" identifier [ number_literal ])) == identifier) )) (break_statement "break;" break ;)) (goto_statement "goto LAB_002974f1;" goto statement_identifier ;) })) (expression_statement "*plVar5 = *plVar7;" (assignment_expression "*plVar5 = *plVar7" (pointer_expression "*plVar5" * identifier) = (pointer_expression "*plVar7" * identifier)) ;) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (binary_expression "plVar5 + 1" identifier + number_literal)) ;) })) (labeled_statement "LAB_002974e6:\n          plVar6 = plVar6 + 1;" statement_identifier : (expression_statement "plVar6 = plVar6 + 1;" (assignment_expression "plVar6 = plVar6 + 1" identifier = (binary_expression "plVar6 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "((long *)plVar2[1] != plVar6)" ( (binary_expression "(long *)plVar2[1] != plVar6" (cast_expression "(long *)plVar2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[1]" identifier [ number_literal ])) != identifier) )) ;)) })) (expression_statement "plVar7 = plVar7 + 1;" (assignment_expression "plVar7 = plVar7 + 1" identifier = (binary_expression "plVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((long *)param_2[1] != plVar7)" ( (binary_expression "(long *)param_2[1] != plVar7" (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 gather_cref(Cref_inputs * this, Objects * objects, Cref_table *\n   table) */\n\nvoid __thiscall gold::Cref_inputs::gather_cref(Cref_inputs *this,Objects *objects,Cref_table *table)\n\n{\n  Symbol *pSVar1;\n  iterator __position;\n  Object *pOVar2;\n  int iVar3;\n  undefined4 extraout_var;\n  _Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n  _Var5;\n  _Base_ptr p_Var6;\n  _Base_ptr p_Var7;\n  size_t __n;\n  long *plVar8;\n  Object **__args_0;\n  iterator __position_00;\n  bool bVar9;\n  pair<std::_Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_bool>\n  pVar10;\n  pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*> local_48;\n  long *plVar4;\n  \n  __args_0 = (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_start;\n  if (__args_0 !=\n      (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl._M_finish\n     ) {\n    do {\n      iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();\n      plVar4 = (long *)CONCAT44(extraout_var,iVar3);\n      if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }\n      __args_0 = __args_0 + 1;\n    } while ((objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish != __args_0);\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall gold::Cref_inputs::gather_cref(Cref_inputs *this,Objects *objects,Cref_table *table)\n\n{\n  Symbol *pSVar1;\n  iterator __position;\n  Object *pOVar2;\n  int iVar3;\n  undefined4 extraout_var;\n  _Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n  _Var5;\n  _Base_ptr p_Var6;\n  _Base_ptr p_Var7;\n  size_t __n;\n  long *plVar8;\n  Object **__args_0;\n  iterator __position_00;\n  bool bVar9;\n  pair<std::_Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_bool>\n  pVar10;\n  pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*> local_48;\n  long *plVar4;\n  \n  __args_0 = (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_start;\n  if (__args_0 !=\n      (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl._M_finish\n     ) {\n    do {\n      iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();\n      plVar4 = (long *)CONCAT44(extraout_var,iVar3);\n      if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }\n      __args_0 = __args_0 + 1;\n    } while ((objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish != __args_0);\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Cref_inputs::" identifier : : identifier : :) (function_declarator "gather_cref(Cref_inputs *this,Objects *objects,Cref_table *table)" identifier (parameter_list "(Cref_inputs *this,Objects *objects,Cref_table *table)" ( (parameter_declaration "Cref_inputs *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "Objects *objects" type_identifier (pointer_declarator "*objects" * identifier)) , (parameter_declaration "Cref_table *table" type_identifier (pointer_declarator "*table" * identifier)) ))) (compound_statement "{\n  Symbol *pSVar1;\n  iterator __position;\n  Object *pOVar2;\n  int iVar3;\n  undefined4 extraout_var;\n  _Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n  _Var5;\n  _Base_ptr p_Var6;\n  _Base_ptr p_Var7;\n  size_t __n;\n  long *plVar8;\n  Object **__args_0;\n  iterator __position_00;\n  bool bVar9;\n  pair<std::_Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_bool>\n  pVar10;\n  pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*> local_48;\n  long *plVar4;\n  \n  __args_0 = (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_start;\n  if (__args_0 !=\n      (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl._M_finish\n     ) {\n    do {\n      iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();\n      plVar4 = (long *)CONCAT44(extraout_var,iVar3);\n      if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }\n      __args_0 = __args_0 + 1;\n    } while ((objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish != __args_0);\n  }\n  return;\n}" { (declaration "Symbol *pSVar1;" type_identifier (pointer_declarator "*pSVar1" * identifier) ;) (declaration "iterator __position;" type_identifier identifier ;) (declaration "Object *pOVar2;" type_identifier (pointer_declarator "*pOVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 extraout_var;" type_identifier identifier ;) (ERROR "_Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::" (comma_expression "_Rb_tree_iterator<std::pair<const_gold::Symbol*_const,_std" (binary_expression "_Rb_tree_iterator<std::pair<const_gold::Symbol*_const" (binary_expression "_Rb_tree_iterator<std::pair<const_gold" (binary_expression "_Rb_tree_iterator<std" identifier < identifier) (ERROR "::pair" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * identifier) , identifier) : : (binary_expression "vector<gold" identifier < identifier) : : (binary_expression "Object*,_std" identifier * (ERROR "," ,) identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (expression_statement "Object*>_>*>_>\n  _Var5;" (binary_expression "Object*>_>*>_>\n  _Var5" (binary_expression "Object*>_>*>_" (binary_expression "Object*>_" identifier * (ERROR ">" >) identifier) > (pointer_expression "*>_" * (ERROR ">" >) identifier)) > identifier) ;) (declaration "_Base_ptr p_Var6;" type_identifier identifier ;) (declaration "_Base_ptr p_Var7;" type_identifier identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "long *plVar8;" (sized_type_specifier "long" long) (pointer_declarator "*plVar8" * identifier) ;) (declaration "Object **__args_0;" type_identifier (pointer_declarator "**__args_0" * (pointer_declarator "*__args_0" * identifier)) ;) (declaration "iterator __position_00;" type_identifier identifier ;) (declaration "bool bVar9;" primitive_type identifier ;) (ERROR "pair<std::_Rb_tree_iterator<std::pair<const_gold::" (binary_expression "pair<std" identifier < identifier) : : (binary_expression "_Rb_tree_iterator<std" identifier < identifier) : : (binary_expression "pair<const_gold" identifier < identifier) : :) (declaration "Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_bool>\n  pVar10;" type_identifier (pointer_declarator "*_const" * identifier) , (ERROR "_std::vector<gold::" identifier : : identifier < identifier : :) identifier (ERROR "*" *) , (ERROR "_std::allocator<gold::Object*>_>" identifier : : identifier < identifier : : identifier * > identifier >) (pointer_declarator "*>_" * (ERROR ">" >) identifier) (ERROR ">" >) , (ERROR "_bool>" identifier >) identifier ;) (expression_statement "pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*> local_48;" (binary_expression "pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*> local_48" (binary_expression "pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold" (binary_expression "pair<const_gold::Symbol*,_std::vector<gold::Object*,_std" (binary_expression "pair<const_gold::Symbol*,_std::vector<gold" (binary_expression "pair<const_gold::Symbol*,_std" (binary_expression "pair<const_gold" identifier < identifier) (ERROR "::Symbol" : : identifier) * (ERROR "," ,) identifier) (ERROR "::vector" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) > (pointer_expression "*> local_48" * (ERROR ">" >) identifier)) ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (expression_statement "__args_0 = (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_start;" (assignment_expression "__args_0 = (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_start" identifier = (field_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_start" (field_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl" (parenthesized_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)" ( (ERROR "objects->super__Vector_base<gold::Object*,_std::allocator<gold::" (comma_expression "objects->super__Vector_base<gold::Object*,_std" (binary_expression "objects->super__Vector_base<gold::Object*" (binary_expression "objects->super__Vector_base<gold" (field_expression "objects->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Object" : : identifier) * identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : :) (binary_expression "Object*>_>" (binary_expression "Object*>_" identifier * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if (__args_0 !=\n      (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl._M_finish\n     ) {\n    do {\n      iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();\n      plVar4 = (long *)CONCAT44(extraout_var,iVar3);\n      if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }\n      __args_0 = __args_0 + 1;\n    } while ((objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish != __args_0);\n  }" if (parenthesized_expression "(__args_0 !=\n      (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl._M_finish\n     )" ( (binary_expression "__args_0 !=\n      (objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl._M_finish" identifier != (field_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl._M_finish" (field_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl" (parenthesized_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)" ( (binary_expression "objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>" (binary_expression "objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "objects->super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "objects->super__Vector_base<gold::Object*,_std" (binary_expression "objects->super__Vector_base<gold" (field_expression "objects->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier)) )) (compound_statement "{\n    do {\n      iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();\n      plVar4 = (long *)CONCAT44(extraout_var,iVar3);\n      if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }\n      __args_0 = __args_0 + 1;\n    } while ((objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish != __args_0);\n  }" { (do_statement "do {\n      iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();\n      plVar4 = (long *)CONCAT44(extraout_var,iVar3);\n      if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }\n      __args_0 = __args_0 + 1;\n    } while ((objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish != __args_0);" do (compound_statement "{\n      iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();\n      plVar4 = (long *)CONCAT44(extraout_var,iVar3);\n      if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }\n      __args_0 = __args_0 + 1;\n    }" { (expression_statement "iVar3 = (*(*__args_0)->_vptr_Object[0x1d])();" (assignment_expression "iVar3 = (*(*__args_0)->_vptr_Object[0x1d])()" identifier = (call_expression "(*(*__args_0)->_vptr_Object[0x1d])()" (parenthesized_expression "(*(*__args_0)->_vptr_Object[0x1d])" ( (pointer_expression "*(*__args_0)->_vptr_Object[0x1d]" * (subscript_expression "(*__args_0)->_vptr_Object[0x1d]" (field_expression "(*__args_0)->_vptr_Object" (parenthesized_expression "(*__args_0)" ( (pointer_expression "*__args_0" * identifier) )) -> field_identifier) [ number_literal ])) )) (argument_list "()" ( )))) ;) (expression_statement "plVar4 = (long *)CONCAT44(extraout_var,iVar3);" (assignment_expression "plVar4 = (long *)CONCAT44(extraout_var,iVar3)" identifier = (cast_expression "(long *)CONCAT44(extraout_var,iVar3)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "CONCAT44(extraout_var,iVar3)" identifier (argument_list "(extraout_var,iVar3)" ( identifier , identifier ))))) ;) (if_statement "if ((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])) {\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }" if (parenthesized_expression "((plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1]))" ( (binary_expression "(plVar4 != (long *)0x0) && (plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])" (parenthesized_expression "(plVar4 != (long *)0x0)" ( (binary_expression "plVar4 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1])" ( (comma_expression "plVar8 = (long *)*plVar4, plVar8 != (long *)plVar4[1]" (assignment_expression "plVar8 = (long *)*plVar4" identifier = (cast_expression "(long *)*plVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar4" * identifier))) , (binary_expression "plVar8 != (long *)plVar4[1]" identifier != (cast_expression "(long *)plVar4[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])))) ))) )) (compound_statement "{\nLAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);\n      }" { (labeled_statement "LAB_002974f1:\n        do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);" statement_identifier : (do_statement "do {\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        } while ((long *)plVar4[1] != plVar8);" do (compound_statement "{\n          pSVar1 = (Symbol *)*plVar8;\n          if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }\nLAB_002974e6:\n          plVar8 = plVar8 + 1;\n        }" { (expression_statement "pSVar1 = (Symbol *)*plVar8;" (assignment_expression "pSVar1 = (Symbol *)*plVar8" identifier = (cast_expression "(Symbol *)*plVar8" ( (type_descriptor "Symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar8" * identifier))) ;) (if_statement "if (pSVar1 != (Symbol *)0x0) {\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }" if (parenthesized_expression "(pSVar1 != (Symbol *)0x0)" ( (binary_expression "pSVar1 != (Symbol *)0x0" identifier != (cast_expression "(Symbol *)0x0" ( (type_descriptor "Symbol *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;\n            local_48.first = pSVar1;\n            pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);\n            _Var5 = pVar10.first;\n            if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }\n            if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }\n            if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }\n            *(Object **)p_Var7 = *__args_0;\n            p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n          }" { (expression_statement "local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0;" (assignment_expression "local_48.second = (vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0" (field_expression "local_48.second" identifier . field_identifier) = (parenthesized_expression "(vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0" ( (binary_expression "vector<gold::Object*,_std::allocator<gold::Object*>_> *)0x0" (binary_expression "vector<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "vector<gold::Object*,_std::allocator<gold" (binary_expression "vector<gold::Object*,_std" (binary_expression "vector<gold" identifier < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) > (pointer_expression "*)0x0" * (ERROR ")" )) number_literal)) ))) ;) (expression_statement "local_48.first = pSVar1;" (assignment_expression "local_48.first = pSVar1" (field_expression "local_48.first" identifier . field_identifier) = identifier) ;) (ERROR "pVar10 = std::\n                     _Rb_tree<const_gold::Symbol*,_std::pair<const_gold::" (assignment_expression "pVar10 = std" identifier = identifier) : : (binary_expression "_Rb_tree<const_gold" identifier < identifier) : : (binary_expression "Symbol*,_std" identifier * (ERROR "," ,) identifier) : : (binary_expression "pair<const_gold" identifier < identifier) : :) (declaration "Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>,_std::_Select1st<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>,_gold::Cref_inputs::Cref_table_compare,_std::allocator<std::pair<const_gold::Symbol*_const,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol*,_std::vector<gold::Object*,_std::allocator<gold::Object*>_>*>_>\n                               (&table->_M_t,&local_48);" type_identifier (pointer_declarator "*_const" * identifier) , (ERROR "_std::vector<gold::" identifier : : identifier < identifier : :) identifier (ERROR "*,_std::allocator<gold::Object*>_>*>" * , (ERROR "_std::allocator<gold::Object*>_>" identifier : : identifier < identifier : : identifier * > identifier >) * >) , (ERROR "_std::_Select1st<std::pair<const_gold::Symbol" identifier : : identifier < identifier : : identifier < identifier : : identifier) (pointer_declarator "*_const" * identifier) , (ERROR "_std::vector<gold::" identifier : : identifier < identifier : :) identifier (ERROR "*" *) , (ERROR "_std::allocator<gold::Object*>_>" identifier : : identifier < identifier : : identifier * > identifier >) (pointer_declarator "*>_" * (ERROR ">" >) identifier) (ERROR ">" >) , (ERROR "_gold::Cref_inputs::" identifier : : identifier : :) identifier , (ERROR "_std::allocator<std::pair<const_gold::Symbol" identifier : : identifier < identifier : : identifier < identifier : : identifier) (pointer_declarator "*_const" * identifier) , (ERROR "_std::vector<gold::" identifier : : identifier < identifier : :) identifier (ERROR "*" *) , (ERROR "_std::allocator<gold::Object*>_>" identifier : : identifier < identifier : : identifier * > identifier >) (pointer_declarator "*>_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::Symbol" * (ERROR ">_>_>\n                     ::\n                     _M_emplace_unique<std::pair<const_gold::" > identifier > identifier > : : identifier < identifier : : identifier < identifier : :) identifier) (ERROR "*" *) , (ERROR "_std::vector<gold::" identifier : : identifier < identifier : :) identifier (ERROR "*" *) , (ERROR "_std::allocator<gold::Object*>_>" identifier : : identifier < identifier : : identifier * > identifier >) (pointer_declarator "*>_>\n                               (&table->_M_t,&local_48)" * (ERROR ">" >) (function_declarator "_>\n                               (&table->_M_t,&local_48)" identifier (ERROR ">" >) (parameter_list "(&table->_M_t,&local_48)" ( (ERROR "&" &) (parameter_declaration "table->_M_t" type_identifier (ERROR "->" ->) identifier) , (ERROR "&" &) (parameter_declaration "local_48" type_identifier) )))) ;) (expression_statement "_Var5 = pVar10.first;" (assignment_expression "_Var5 = pVar10.first" identifier = (field_expression "pVar10.first" identifier . field_identifier)) ;) (if_statement "if (pVar10.second != false) {\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }" if (parenthesized_expression "(pVar10.second != false)" ( (binary_expression "pVar10.second != false" (field_expression "pVar10.second" identifier . field_identifier) != false) )) (compound_statement "{\n              p_Var6 = (_Base_ptr)operator_new(0x18);\n              *(undefined8 *)p_Var6 = 0;\n              p_Var6->_M_parent = (_Base_ptr)0x0;\n              p_Var6->_M_left = (_Base_ptr)0x0;\n              _Var5._M_node[1]._M_parent = p_Var6;\n            }" { (expression_statement "p_Var6 = (_Base_ptr)operator_new(0x18);" (assignment_expression "p_Var6 = (_Base_ptr)operator_new(0x18)" identifier = (cast_expression "(_Base_ptr)operator_new(0x18)" ( (type_descriptor "_Base_ptr" type_identifier) ) (call_expression "operator_new(0x18)" identifier (argument_list "(0x18)" ( number_literal ))))) ;) (expression_statement "*(undefined8 *)p_Var6 = 0;" (assignment_expression "*(undefined8 *)p_Var6 = 0" (pointer_expression "*(undefined8 *)p_Var6" * (cast_expression "(undefined8 *)p_Var6" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = number_literal) ;) (expression_statement "p_Var6->_M_parent = (_Base_ptr)0x0;" (assignment_expression "p_Var6->_M_parent = (_Base_ptr)0x0" (field_expression "p_Var6->_M_parent" identifier -> field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "p_Var6->_M_left = (_Base_ptr)0x0;" (assignment_expression "p_Var6->_M_left = (_Base_ptr)0x0" (field_expression "p_Var6->_M_left" identifier -> field_identifier) = (cast_expression "(_Base_ptr)0x0" ( (type_descriptor "_Base_ptr" type_identifier) ) number_literal)) ;) (expression_statement "_Var5._M_node[1]._M_parent = p_Var6;" (assignment_expression "_Var5._M_node[1]._M_parent = p_Var6" (field_expression "_Var5._M_node[1]._M_parent" (subscript_expression "_Var5._M_node[1]" (field_expression "_Var5._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier) = identifier) ;) })) (if_statement "if (((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)) {\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }" if (parenthesized_expression "(((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object))" ( (binary_expression "((pSVar1->field_0x3a & 7) == 0) && (*__args_0 == (pSVar1->u1_).object)" (parenthesized_expression "((pSVar1->field_0x3a & 7) == 0)" ( (binary_expression "(pSVar1->field_0x3a & 7) == 0" (parenthesized_expression "(pSVar1->field_0x3a & 7)" ( (binary_expression "pSVar1->field_0x3a & 7" (field_expression "pSVar1->field_0x3a" identifier -> field_identifier) & number_literal) )) == number_literal) )) && (parenthesized_expression "(*__args_0 == (pSVar1->u1_).object)" ( (binary_expression "*__args_0 == (pSVar1->u1_).object" (pointer_expression "*__args_0" * identifier) == (field_expression "(pSVar1->u1_).object" (parenthesized_expression "(pSVar1->u1_)" ( (field_expression "pSVar1->u1_" identifier -> field_identifier) )) . field_identifier)) ))) )) (compound_statement "{\n              if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n              if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }" { (if_statement "if ((pSVar1->field_0x3b & 0x20) == 0) {\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }\n              else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }" if (parenthesized_expression "((pSVar1->field_0x3b & 0x20) == 0)" ( (binary_expression "(pSVar1->field_0x3b & 0x20) == 0" (parenthesized_expression "(pSVar1->field_0x3b & 0x20)" ( (binary_expression "pSVar1->field_0x3b & 0x20" (field_expression "pSVar1->field_0x3b" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n                bVar9 = Symbol::is_common_shndx((pSVar1->u2_).shndx);\n                bVar9 = !bVar9;\n              }" { (ERROR "bVar9 = Symbol::" (assignment_expression "bVar9 = Symbol" identifier = identifier) : :) (expression_statement "is_common_shndx((pSVar1->u2_).shndx);" (call_expression "is_common_shndx((pSVar1->u2_).shndx)" identifier (argument_list "((pSVar1->u2_).shndx)" ( (field_expression "(pSVar1->u2_).shndx" (parenthesized_expression "(pSVar1->u2_)" ( (field_expression "pSVar1->u2_" identifier -> field_identifier) )) . field_identifier) ))) ;) (expression_statement "bVar9 = !bVar9;" (assignment_expression "bVar9 = !bVar9" identifier = (unary_expression "!bVar9" ! identifier)) ;) }) (else_clause "else {\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }" else (compound_statement "{\n                bVar9 = (pSVar1->u2_).shndx != 0;\n              }" { (expression_statement "bVar9 = (pSVar1->u2_).shndx != 0;" (assignment_expression "bVar9 = (pSVar1->u2_).shndx != 0" identifier = (binary_expression "(pSVar1->u2_).shndx != 0" (field_expression "(pSVar1->u2_).shndx" (parenthesized_expression "(pSVar1->u2_)" ( (field_expression "pSVar1->u2_" identifier -> field_identifier) )) . field_identifier) != number_literal)) ;) }))) (expression_statement "p_Var6 = _Var5._M_node[1]._M_parent;" (assignment_expression "p_Var6 = _Var5._M_node[1]._M_parent" identifier = (field_expression "_Var5._M_node[1]._M_parent" (subscript_expression "_Var5._M_node[1]" (field_expression "_Var5._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var7 = p_Var6->_M_parent;" (assignment_expression "p_Var7 = p_Var6->_M_parent" identifier = (field_expression "p_Var6->_M_parent" identifier -> field_identifier)) ;) (expression_statement "__position_00._M_current = (Object **)p_Var6->_M_left;" (assignment_expression "__position_00._M_current = (Object **)p_Var6->_M_left" (field_expression "__position_00._M_current" identifier . field_identifier) = (cast_expression "(Object **)p_Var6->_M_left" ( (type_descriptor "Object **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (field_expression "p_Var6->_M_left" identifier -> field_identifier))) ;) (if_statement "if (bVar9) {\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }" if (parenthesized_expression "(bVar9)" ( identifier )) (compound_statement "{\n                __position._M_current = *(Object ***)p_Var6;\n                if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }\n                goto LAB_002974e6;\n              }" { (expression_statement "__position._M_current = *(Object ***)p_Var6;" (assignment_expression "__position._M_current = *(Object ***)p_Var6" (field_expression "__position._M_current" identifier . field_identifier) = (pointer_expression "*(Object ***)p_Var6" * (cast_expression "(Object ***)p_Var6" ( (type_descriptor "Object ***" type_identifier (abstract_pointer_declarator "***" * (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *)))) ) identifier))) ;) (if_statement "if ((_Base_ptr)__position_00._M_current == p_Var7) {\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }\n                else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }" if (parenthesized_expression "((_Base_ptr)__position_00._M_current == p_Var7)" ( (binary_expression "(_Base_ptr)__position_00._M_current == p_Var7" (cast_expression "(_Base_ptr)__position_00._M_current" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "__position_00._M_current" identifier . field_identifier)) == identifier) )) (compound_statement "{\n                  std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);\n                }" { (ERROR "std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n                  _M_realloc_insert<gold::" (comma_expression "std::vector<gold::Object*,_std" identifier (ERROR "::vector<gold::Object*" : : (binary_expression "vector<gold" identifier < identifier) : : identifier *) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : (binary_expression "Object*>_>::\n                  _M_realloc_insert<gold" (binary_expression "Object*>_>::\n                  _M_realloc_insert" (binary_expression "Object*>_" identifier * (ERROR ">" >) identifier) > (ERROR "::" : :) identifier) < identifier) : :) (expression_statement "Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0);" (binary_expression "Object*_const&>\n                            ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0)" (binary_expression "Object*_const" identifier * identifier) (ERROR "&" &) > (parenthesized_expression "((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0)" ( (parenthesized_expression "(vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0)" ( (comma_expression "vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                             __position,__args_0" (binary_expression "vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6" (binary_expression "vector<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "vector<gold::Object*,_std::allocator<gold" (binary_expression "vector<gold::Object*,_std" (binary_expression "vector<gold" identifier < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) > (pointer_expression "*)p_Var6" * (ERROR ")" )) identifier)) , (comma_expression "__position,__args_0" identifier , identifier)) )) ))) ;) }) (else_clause "else {\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }" else (compound_statement "{\n                  pOVar2 = *__args_0;\n                  if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }\n                }" { (expression_statement "pOVar2 = *__args_0;" (assignment_expression "pOVar2 = *__args_0" identifier = (pointer_expression "*__args_0" * identifier)) ;) (if_statement "if ((_Base_ptr)__position._M_current == p_Var7) {\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }\n                  else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }" if (parenthesized_expression "((_Base_ptr)__position._M_current == p_Var7)" ( (binary_expression "(_Base_ptr)__position._M_current == p_Var7" (cast_expression "(_Base_ptr)__position._M_current" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "__position._M_current" identifier . field_identifier)) == identifier) )) (compound_statement "{\n                    *__position._M_current = pOVar2;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                  }" { (expression_statement "*__position._M_current = pOVar2;" (assignment_expression "*__position._M_current = pOVar2" (pointer_expression "*__position._M_current" * (field_expression "__position._M_current" identifier . field_identifier)) = identifier) ;) (expression_statement "p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;" (assignment_expression "p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent" (field_expression "p_Var6->_M_parent" identifier -> field_identifier) = (binary_expression "(_Base_ptr)&p_Var7->_M_parent" (parenthesized_expression "(_Base_ptr)" ( identifier )) & (field_expression "p_Var7->_M_parent" identifier -> field_identifier))) ;) }) (else_clause "else {\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }" else (compound_statement "{\n                    *(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;\n                    p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;\n                    if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }\n                    *__position._M_current = pOVar2;\n                  }" { (expression_statement "*(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right;" (assignment_expression "*(Object **)p_Var7 = (Object *)p_Var7[-1]._M_right" (pointer_expression "*(Object **)p_Var7" * (cast_expression "(Object **)p_Var7" ( (type_descriptor "Object **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) = (cast_expression "(Object *)p_Var7[-1]._M_right" ( (type_descriptor "Object *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "p_Var7[-1]._M_right" (subscript_expression "p_Var7[-1]" identifier [ number_literal ]) . field_identifier))) ;) (expression_statement "p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;" (assignment_expression "p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent" (field_expression "p_Var6->_M_parent" identifier -> field_identifier) = (binary_expression "(_Base_ptr)&p_Var7->_M_parent" (parenthesized_expression "(_Base_ptr)" ( identifier )) & (field_expression "p_Var7->_M_parent" identifier -> field_identifier))) ;) (if_statement "if (__position._M_current != (Object **)&p_Var7[-1]._M_right) {\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }" if (parenthesized_expression "(__position._M_current != (Object **)&p_Var7[-1]._M_right)" ( (binary_expression "__position._M_current != (Object **)&p_Var7[-1]._M_right" (field_expression "__position._M_current" identifier . field_identifier) != (cast_expression "(Object **)&p_Var7[-1]._M_right" ( (type_descriptor "Object **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&p_Var7[-1]._M_right" & (field_expression "p_Var7[-1]._M_right" (subscript_expression "p_Var7[-1]" identifier [ number_literal ]) . field_identifier)))) )) (compound_statement "{\n                      __n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;\n                      memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);\n                    }" { (expression_statement "__n = (long)&p_Var7[-1]._M_right - (long)__position._M_current;" (assignment_expression "__n = (long)&p_Var7[-1]._M_right - (long)__position._M_current" identifier = (binary_expression "(long)&p_Var7[-1]._M_right - (long)__position._M_current" (cast_expression "(long)&p_Var7[-1]._M_right" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&p_Var7[-1]._M_right" & (field_expression "p_Var7[-1]._M_right" (subscript_expression "p_Var7[-1]" identifier [ number_literal ]) . field_identifier))) - (cast_expression "(long)__position._M_current" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "__position._M_current" identifier . field_identifier)))) ;) (expression_statement "memmove((void *)((long)p_Var7 - __n),__position._M_current,__n);" (call_expression "memmove((void *)((long)p_Var7 - __n),__position._M_current,__n)" identifier (argument_list "((void *)((long)p_Var7 - __n),__position._M_current,__n)" ( (cast_expression "(void *)((long)p_Var7 - __n)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)p_Var7 - __n)" ( (binary_expression "(long)p_Var7 - __n" (cast_expression "(long)p_Var7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - identifier) ))) , (field_expression "__position._M_current" identifier . field_identifier) , identifier ))) ;) })) (expression_statement "*__position._M_current = pOVar2;" (assignment_expression "*__position._M_current = pOVar2" (pointer_expression "*__position._M_current" * (field_expression "__position._M_current" identifier . field_identifier)) = identifier) ;) }))) }))) (goto_statement "goto LAB_002974e6;" goto statement_identifier ;) })) }) (else_clause "else {\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }" else (compound_statement "{\n              p_Var6 = _Var5._M_node[1]._M_parent;\n              p_Var7 = p_Var6->_M_parent;\n              __position_00._M_current = (Object **)p_Var6->_M_left;\n            }" { (expression_statement "p_Var6 = _Var5._M_node[1]._M_parent;" (assignment_expression "p_Var6 = _Var5._M_node[1]._M_parent" identifier = (field_expression "_Var5._M_node[1]._M_parent" (subscript_expression "_Var5._M_node[1]" (field_expression "_Var5._M_node" identifier . field_identifier) [ number_literal ]) . field_identifier)) ;) (expression_statement "p_Var7 = p_Var6->_M_parent;" (assignment_expression "p_Var7 = p_Var6->_M_parent" identifier = (field_expression "p_Var6->_M_parent" identifier -> field_identifier)) ;) (expression_statement "__position_00._M_current = (Object **)p_Var6->_M_left;" (assignment_expression "__position_00._M_current = (Object **)p_Var6->_M_left" (field_expression "__position_00._M_current" identifier . field_identifier) = (cast_expression "(Object **)p_Var6->_M_left" ( (type_descriptor "Object **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (field_expression "p_Var6->_M_left" identifier -> field_identifier))) ;) }))) (if_statement "if ((_Base_ptr)__position_00._M_current == p_Var7) {\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }" if (parenthesized_expression "((_Base_ptr)__position_00._M_current == p_Var7)" ( (binary_expression "(_Base_ptr)__position_00._M_current == p_Var7" (cast_expression "(_Base_ptr)__position_00._M_current" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "__position_00._M_current" identifier . field_identifier)) == identifier) )) (compound_statement "{\n              plVar8 = plVar8 + 1;\n              std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);\n              if ((long *)plVar4[1] == plVar8) break;\n              goto LAB_002974f1;\n            }" { (expression_statement "plVar8 = plVar8 + 1;" (assignment_expression "plVar8 = plVar8 + 1" identifier = (binary_expression "plVar8 + 1" identifier + number_literal)) ;) (ERROR "std::vector<gold::Object*,_std::allocator<gold::Object*>_>::\n              _M_realloc_insert<gold::" (comma_expression "std::vector<gold::Object*,_std" identifier (ERROR "::vector<gold::Object*" : : (binary_expression "vector<gold" identifier < identifier) : : identifier *) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : (binary_expression "Object*>_>::\n              _M_realloc_insert<gold" (binary_expression "Object*>_>::\n              _M_realloc_insert" (binary_expression "Object*>_" identifier * (ERROR ">" >) identifier) > (ERROR "::" : :) identifier) < identifier) : :) (expression_statement "Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0);" (binary_expression "Object*_const&>\n                        ((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0)" (binary_expression "Object*_const" identifier * identifier) (ERROR "&" &) > (parenthesized_expression "((vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0)" ( (parenthesized_expression "(vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0)" ( (comma_expression "vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6,\n                         __position_00,__args_0" (binary_expression "vector<gold::Object*,_std::allocator<gold::Object*>_> *)p_Var6" (binary_expression "vector<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "vector<gold::Object*,_std::allocator<gold" (binary_expression "vector<gold::Object*,_std" (binary_expression "vector<gold" identifier < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) > (pointer_expression "*)p_Var6" * (ERROR ")" )) identifier)) , (comma_expression "__position_00,__args_0" identifier , identifier)) )) ))) ;) (if_statement "if ((long *)plVar4[1] == plVar8) break;" if (parenthesized_expression "((long *)plVar4[1] == plVar8)" ( (binary_expression "(long *)plVar4[1] == plVar8" (cast_expression "(long *)plVar4[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) == identifier) )) (break_statement "break;" break ;)) (goto_statement "goto LAB_002974f1;" goto statement_identifier ;) })) (expression_statement "*(Object **)p_Var7 = *__args_0;" (assignment_expression "*(Object **)p_Var7 = *__args_0" (pointer_expression "*(Object **)p_Var7" * (cast_expression "(Object **)p_Var7" ( (type_descriptor "Object **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) = (pointer_expression "*__args_0" * identifier)) ;) (expression_statement "p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent;" (assignment_expression "p_Var6->_M_parent = (_Base_ptr)&p_Var7->_M_parent" (field_expression "p_Var6->_M_parent" identifier -> field_identifier) = (binary_expression "(_Base_ptr)&p_Var7->_M_parent" (parenthesized_expression "(_Base_ptr)" ( identifier )) & (field_expression "p_Var7->_M_parent" identifier -> field_identifier))) ;) })) (labeled_statement "LAB_002974e6:\n          plVar8 = plVar8 + 1;" statement_identifier : (expression_statement "plVar8 = plVar8 + 1;" (assignment_expression "plVar8 = plVar8 + 1" identifier = (binary_expression "plVar8 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "((long *)plVar4[1] != plVar8)" ( (binary_expression "(long *)plVar4[1] != plVar8" (cast_expression "(long *)plVar4[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[1]" identifier [ number_literal ])) != identifier) )) ;)) })) (expression_statement "__args_0 = __args_0 + 1;" (assignment_expression "__args_0 = __args_0 + 1" identifier = (binary_expression "__args_0 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish != __args_0)" ( (binary_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish != __args_0" (field_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl.\n             _M_finish" (field_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)._M_impl" (parenthesized_expression "(objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>)" ( (binary_expression "objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>" (binary_expression "objects->super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "objects->super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "objects->super__Vector_base<gold::Object*,_std" (binary_expression "objects->super__Vector_base<gold" (field_expression "objects->super__Vector_base" identifier -> field_identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) > identifier) )) . field_identifier) . field_identifier) != identifier) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00297450(undefined8 param_1,long *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  long *__src;\n  long *plVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long *plVar5;\n  char extraout_DL;\n  size_t __n;\n  long *plVar6;\n  long *plVar7;\n  long *plVar8;\n  byte bVar9;\n  long local_48 [3];\n  \n  plVar7 = (long *)*param_2;\n  if (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00297450(undefined8 param_1,long *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  long *__src;\n  long *plVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long *plVar5;\n  char extraout_DL;\n  size_t __n;\n  long *plVar6;\n  long *plVar7;\n  long *plVar8;\n  byte bVar9;\n  long local_48 [3];\n  \n  plVar7 = (long *)*param_2;\n  if (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00297450(undefined8 param_1,long *param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  long lVar1;\n  long *__src;\n  long *plVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long *plVar5;\n  char extraout_DL;\n  size_t __n;\n  long *plVar6;\n  long *plVar7;\n  long *plVar8;\n  byte bVar9;\n  long local_48 [3];\n  \n  plVar7 = (long *)*param_2;\n  if (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "long *__src;" (sized_type_specifier "long" long) (pointer_declarator "*__src" * identifier) ;) (declaration "long *plVar2;" (sized_type_specifier "long" long) (pointer_declarator "*plVar2" * identifier) ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "long *plVar5;" (sized_type_specifier "long" long) (pointer_declarator "*plVar5" * identifier) ;) (declaration "char extraout_DL;" primitive_type identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "long *plVar6;" (sized_type_specifier "long" long) (pointer_declarator "*plVar6" * identifier) ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "long *plVar8;" (sized_type_specifier "long" long) (pointer_declarator "*plVar8" * identifier) ;) (declaration "byte bVar9;" type_identifier identifier ;) (declaration "long local_48 [3];" (sized_type_specifier "long" long) (array_declarator "local_48 [3]" identifier [ number_literal ]) ;) (expression_statement "plVar7 = (long *)*param_2;" (assignment_expression "plVar7 = (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 (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }" if (parenthesized_expression "(plVar7 != (long *)param_2[1])" ( (binary_expression "plVar7 != (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      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }" { (do_statement "do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);" do (compound_statement "{\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    }" { (expression_statement "plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();" (assignment_expression "plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))()" identifier = (cast_expression "(long *)(**(code **)(*(long *)*plVar7 + 0xe8))()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*(long *)*plVar7 + 0xe8))()" (parenthesized_expression "(**(code **)(*(long *)*plVar7 + 0xe8))" ( (pointer_expression "**(code **)(*(long *)*plVar7 + 0xe8)" * (pointer_expression "*(code **)(*(long *)*plVar7 + 0xe8)" * (cast_expression "(code **)(*(long *)*plVar7 + 0xe8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)*plVar7 + 0xe8)" ( (binary_expression "*(long *)*plVar7 + 0xe8" (pointer_expression "*(long *)*plVar7" * (cast_expression "(long *)*plVar7" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar7" * identifier))) + number_literal) ))))) )) (argument_list "()" ( ))))) ;) (if_statement "if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }" if (parenthesized_expression "((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1]))" ( (binary_expression "(plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])" (parenthesized_expression "(plVar2 != (long *)0x0)" ( (binary_expression "plVar2 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])" ( (comma_expression "plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1]" (assignment_expression "plVar6 = (long *)*plVar2" identifier = (cast_expression "(long *)*plVar2" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*plVar2" * identifier))) , (binary_expression "plVar6 != (long *)plVar2[1]" identifier != (cast_expression "(long *)plVar2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[1]" identifier [ number_literal ])))) ))) )) (compound_statement "{\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }" { (labeled_statement "LAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);" statement_identifier : (do_statement "do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);" do (compound_statement "{\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        }" { (expression_statement "lVar1 = *plVar6;" (assignment_expression "lVar1 = *plVar6" identifier = (pointer_expression "*plVar6" * identifier)) ;) (if_statement "if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }" if (parenthesized_expression "(lVar1 != 0)" ( (binary_expression "lVar1 != 0" identifier != number_literal) )) (compound_statement "{\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }" { (expression_statement "local_48[1] = 0;" (assignment_expression "local_48[1] = 0" (subscript_expression "local_48[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_48[0] = lVar1;" (assignment_expression "local_48[0] = lVar1" (subscript_expression "local_48[0]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar3 = FUN_00297e20(param_3,local_48);" (assignment_expression "lVar3 = FUN_00297e20(param_3,local_48)" identifier = (call_expression "FUN_00297e20(param_3,local_48)" identifier (argument_list "(param_3,local_48)" ( identifier , identifier )))) ;) (if_statement "if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }" if (parenthesized_expression "(extraout_DL != '\0')" ( (binary_expression "extraout_DL != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }" { (expression_statement "puVar4 = (undefined8 *)FUN_002d9490(0x18);" (assignment_expression "puVar4 = (undefined8 *)FUN_002d9490(0x18)" identifier = (cast_expression "(undefined8 *)FUN_002d9490(0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002d9490(0x18)" identifier (argument_list "(0x18)" ( number_literal ))))) ;) (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" * identifier) = number_literal) ;) (expression_statement "puVar4[1] = 0;" (assignment_expression "puVar4[1] = 0" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar4[2] = 0;" (assignment_expression "puVar4[2] = 0" (subscript_expression "puVar4[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined8 **)(lVar3 + 0x28) = puVar4;" (assignment_expression "*(undefined8 **)(lVar3 + 0x28) = puVar4" (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" * (cast_expression "(undefined8 **)(lVar3 + 0x28)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) )))) = identifier) ;) })) (if_statement "if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" if (parenthesized_expression "(((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10)))" ( (binary_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))" (parenthesized_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3a) & 7)" ( (binary_expression "*(byte *)(lVar1 + 0x3a) & 7" (pointer_expression "*(byte *)(lVar1 + 0x3a)" * (cast_expression "(byte *)(lVar1 + 0x3a)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x3a)" ( (binary_expression "lVar1 + 0x3a" identifier + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "(*plVar7 == *(long *)(lVar1 + 0x10))" ( (binary_expression "*plVar7 == *(long *)(lVar1 + 0x10)" (pointer_expression "*plVar7" * identifier) == (pointer_expression "*(long *)(lVar1 + 0x10)" * (cast_expression "(long *)(lVar1 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x10)" ( (binary_expression "lVar1 + 0x10" identifier + number_literal) ))))) ))) )) (compound_statement "{\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }" { (if_statement "if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" if (parenthesized_expression "((*(byte *)(lVar1 + 0x3b) & 0x20) == 0)" ( (binary_expression "(*(byte *)(lVar1 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3b) & 0x20)" ( (binary_expression "*(byte *)(lVar1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(lVar1 + 0x3b)" * (cast_expression "(byte *)(lVar1 + 0x3b)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x3b)" ( (binary_expression "lVar1 + 0x3b" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }" { (expression_statement "bVar9 = FUN_00270fe0();" (assignment_expression "bVar9 = FUN_00270fe0()" identifier = (call_expression "FUN_00270fe0()" identifier (argument_list "()" ( )))) ;) (expression_statement "bVar9 = bVar9 ^ 1;" (assignment_expression "bVar9 = bVar9 ^ 1" identifier = (binary_expression "bVar9 ^ 1" identifier ^ number_literal)) ;) }) (else_clause "else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" else (compound_statement "{\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" { (expression_statement "bVar9 = *(int *)(lVar1 + 0x18) != 0;" (assignment_expression "bVar9 = *(int *)(lVar1 + 0x18) != 0" identifier = (binary_expression "*(int *)(lVar1 + 0x18) != 0" (pointer_expression "*(int *)(lVar1 + 0x18)" * (cast_expression "(int *)(lVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar1 + 0x18)" ( (binary_expression "lVar1 + 0x18" identifier + number_literal) )))) != number_literal)) ;) }))) (expression_statement "puVar4 = *(undefined8 **)(lVar3 + 0x28);" (assignment_expression "puVar4 = *(undefined8 **)(lVar3 + 0x28)" identifier = (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" * (cast_expression "(undefined8 **)(lVar3 + 0x28)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "plVar5 = (long *)puVar4[1];" (assignment_expression "plVar5 = (long *)puVar4[1]" identifier = (cast_expression "(long *)puVar4[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ]))) ;) (expression_statement "plVar8 = (long *)puVar4[2];" (assignment_expression "plVar8 = (long *)puVar4[2]" identifier = (cast_expression "(long *)puVar4[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[2]" identifier [ number_literal ]))) ;) (if_statement "if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }" if (parenthesized_expression "(bVar9 != 0)" ( (binary_expression "bVar9 != 0" identifier != number_literal) )) (compound_statement "{\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }" { (expression_statement "__src = (long *)*puVar4;" (assignment_expression "__src = (long *)*puVar4" identifier = (cast_expression "(long *)*puVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier))) ;) (if_statement "if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" if (parenthesized_expression "(plVar8 == plVar5)" ( (binary_expression "plVar8 == plVar5" identifier == identifier) )) (compound_statement "{\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }" { (expression_statement "FUN_0023d3a0(puVar4,__src,plVar7);" (call_expression "FUN_0023d3a0(puVar4,__src,plVar7)" identifier (argument_list "(puVar4,__src,plVar7)" ( identifier , identifier , identifier ))) ;) }) (else_clause "else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" else (compound_statement "{\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" { (expression_statement "lVar1 = *plVar7;" (assignment_expression "lVar1 = *plVar7" identifier = (pointer_expression "*plVar7" * identifier)) ;) (if_statement "if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" if (parenthesized_expression "(__src == plVar5)" ( (binary_expression "__src == plVar5" identifier == identifier) )) (compound_statement "{\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }" { (expression_statement "*__src = lVar1;" (assignment_expression "*__src = lVar1" (pointer_expression "*__src" * identifier) = identifier) ;) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (binary_expression "plVar5 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" else (compound_statement "{\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" { (expression_statement "*plVar5 = plVar5[-1];" (assignment_expression "*plVar5 = plVar5[-1]" (pointer_expression "*plVar5" * identifier) = (subscript_expression "plVar5[-1]" identifier [ number_literal ])) ;) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (binary_expression "plVar5 + 1" identifier + number_literal)) ;) (if_statement "if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }" if (parenthesized_expression "(__src != plVar5 + -1)" ( (binary_expression "__src != plVar5 + -1" identifier != (binary_expression "plVar5 + -1" identifier + number_literal)) )) (compound_statement "{\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }" { (expression_statement "__n = (long)(plVar5 + -1) - (long)__src;" (assignment_expression "__n = (long)(plVar5 + -1) - (long)__src" identifier = (binary_expression "(long)(plVar5 + -1) - (long)__src" (cast_expression "(long)(plVar5 + -1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(plVar5 + -1)" ( (binary_expression "plVar5 + -1" identifier + number_literal) ))) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "memmove((void *)((long)plVar5 - __n),__src,__n);" (call_expression "memmove((void *)((long)plVar5 - __n),__src,__n)" identifier (argument_list "((void *)((long)plVar5 - __n),__src,__n)" ( (cast_expression "(void *)((long)plVar5 - __n)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar5 - __n)" ( (binary_expression "(long)plVar5 - __n" (cast_expression "(long)plVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - identifier) ))) , identifier , identifier ))) ;) })) (expression_statement "*__src = lVar1;" (assignment_expression "*__src = lVar1" (pointer_expression "*__src" * identifier) = identifier) ;) }))) }))) (goto_statement "goto LAB_002974e6;" goto statement_identifier ;) })) }) (else_clause "else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" else (compound_statement "{\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" { (expression_statement "puVar4 = *(undefined8 **)(lVar3 + 0x28);" (assignment_expression "puVar4 = *(undefined8 **)(lVar3 + 0x28)" identifier = (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" * (cast_expression "(undefined8 **)(lVar3 + 0x28)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar3 + 0x28)" ( (binary_expression "lVar3 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "plVar5 = (long *)puVar4[1];" (assignment_expression "plVar5 = (long *)puVar4[1]" identifier = (cast_expression "(long *)puVar4[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ]))) ;) (expression_statement "plVar8 = (long *)puVar4[2];" (assignment_expression "plVar8 = (long *)puVar4[2]" identifier = (cast_expression "(long *)puVar4[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[2]" identifier [ number_literal ]))) ;) }))) (if_statement "if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }" if (parenthesized_expression "(plVar8 == plVar5)" ( (binary_expression "plVar8 == plVar5" identifier == identifier) )) (compound_statement "{\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }" { (expression_statement "plVar6 = plVar6 + 1;" (assignment_expression "plVar6 = plVar6 + 1" identifier = (binary_expression "plVar6 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0023d3a0(puVar4,plVar8,plVar7);" (call_expression "FUN_0023d3a0(puVar4,plVar8,plVar7)" identifier (argument_list "(puVar4,plVar8,plVar7)" ( identifier , identifier , identifier ))) ;) (if_statement "if ((long *)plVar2[1] == plVar6) break;" if (parenthesized_expression "((long *)plVar2[1] == plVar6)" ( (binary_expression "(long *)plVar2[1] == plVar6" (cast_expression "(long *)plVar2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[1]" identifier [ number_literal ])) == identifier) )) (break_statement "break;" break ;)) (goto_statement "goto LAB_002974f1;" goto statement_identifier ;) })) (expression_statement "*plVar5 = *plVar7;" (assignment_expression "*plVar5 = *plVar7" (pointer_expression "*plVar5" * identifier) = (pointer_expression "*plVar7" * identifier)) ;) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" identifier [ number_literal ]) = (binary_expression "plVar5 + 1" identifier + number_literal)) ;) })) (labeled_statement "LAB_002974e6:\n          plVar6 = plVar6 + 1;" statement_identifier : (expression_statement "plVar6 = plVar6 + 1;" (assignment_expression "plVar6 = plVar6 + 1" identifier = (binary_expression "plVar6 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "((long *)plVar2[1] != plVar6)" ( (binary_expression "(long *)plVar2[1] != plVar6" (cast_expression "(long *)plVar2[1]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar2[1]" identifier [ number_literal ])) != identifier) )) ;)) })) (expression_statement "plVar7 = plVar7 + 1;" (assignment_expression "plVar7 = plVar7 + 1" identifier = (binary_expression "plVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((long *)param_2[1] != plVar7)" ( (binary_expression "(long *)param_2[1] != plVar7" (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 TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (array_declarator IDENT [ LIT ]) ;) (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 { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) + LIT) ))))) )) (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) , (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) ))) )) (compound_statement { (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT ^ LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (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 == IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - IDENT) ))) , IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) }))) }))) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) == IDENT) )) (break_statement break ;)) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (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) )) ;)) })) (expression_statement (assignment_expression IDENT = (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_00297450(undefined8 param_1,long *param_2,undefined8 param_3)\n\n{\n  long lVar1;\n  long *__src;\n  long *plVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long *plVar5;\n  char extraout_DL;\n  size_t __n;\n  long *plVar6;\n  long *plVar7;\n  long *plVar8;\n  byte bVar9;\n  long local_48 [3];\n  \n  plVar7 = (long *)*param_2;\n  if (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00297450(undefined8 param_1,long *param_2,undefined8 param_3)" (identifier "FUN_00297450") (parameter_list "(undefined8 param_1,long *param_2,undefined8 param_3)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  long lVar1;\n  long *__src;\n  long *plVar2;\n  long lVar3;\n  undefined8 *puVar4;\n  long *plVar5;\n  char extraout_DL;\n  size_t __n;\n  long *plVar6;\n  long *plVar7;\n  long *plVar8;\n  byte bVar9;\n  long local_48 [3];\n  \n  plVar7 = (long *)*param_2;\n  if (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "long *__src;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*__src" (* "*") (identifier "__src")) (; ";")) (declaration "long *plVar2;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar2" (* "*") (identifier "plVar2")) (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined8 *puVar4;" (type_identifier "undefined8") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "long *plVar5;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar5" (* "*") (identifier "plVar5")) (; ";")) (declaration "char extraout_DL;" (primitive_type "char") (identifier "extraout_DL") (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "long *plVar6;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar6" (* "*") (identifier "plVar6")) (; ";")) (declaration "long *plVar7;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar7" (* "*") (identifier "plVar7")) (; ";")) (declaration "long *plVar8;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar8" (* "*") (identifier "plVar8")) (; ";")) (declaration "byte bVar9;" (type_identifier "byte") (identifier "bVar9") (; ";")) (declaration "long local_48 [3];" (sized_type_specifier "long" (long "long")) (array_declarator "local_48 [3]" (identifier "local_48") ([ "[") (number_literal "3") (] "]")) (; ";")) (expression_statement "plVar7 = (long *)*param_2;" (assignment_expression "plVar7 = (long *)*param_2" (identifier "plVar7") (= "=") (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 (plVar7 != (long *)param_2[1]) {\n    do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }" (if "if") (parenthesized_expression "(plVar7 != (long *)param_2[1])" (( "(") (binary_expression "plVar7 != (long *)param_2[1]" (identifier "plVar7") (!= "!=") (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      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);\n  }" ({ "{") (do_statement "do {\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    } while ((long *)param_2[1] != plVar7);" (do "do") (compound_statement "{\n      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();\n      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }\n      plVar7 = plVar7 + 1;\n    }" ({ "{") (expression_statement "plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();" (assignment_expression "plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))()" (identifier "plVar2") (= "=") (cast_expression "(long *)(**(code **)(*(long *)*plVar7 + 0xe8))()" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(**(code **)(*(long *)*plVar7 + 0xe8))()" (parenthesized_expression "(**(code **)(*(long *)*plVar7 + 0xe8))" (( "(") (pointer_expression "**(code **)(*(long *)*plVar7 + 0xe8)" (* "*") (pointer_expression "*(code **)(*(long *)*plVar7 + 0xe8)" (* "*") (cast_expression "(code **)(*(long *)*plVar7 + 0xe8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)*plVar7 + 0xe8)" (( "(") (binary_expression "*(long *)*plVar7 + 0xe8" (pointer_expression "*(long *)*plVar7" (* "*") (cast_expression "(long *)*plVar7" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar7" (* "*") (identifier "plVar7")))) (+ "+") (number_literal "0xe8")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }" (if "if") (parenthesized_expression "((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1]))" (( "(") (binary_expression "(plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])" (parenthesized_expression "(plVar2 != (long *)0x0)" (( "(") (binary_expression "plVar2 != (long *)0x0" (identifier "plVar2") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])" (( "(") (comma_expression "plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1]" (assignment_expression "plVar6 = (long *)*plVar2" (identifier "plVar6") (= "=") (cast_expression "(long *)*plVar2" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*plVar2" (* "*") (identifier "plVar2")))) (, ",") (binary_expression "plVar6 != (long *)plVar2[1]" (identifier "plVar6") (!= "!=") (cast_expression "(long *)plVar2[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[1]" (identifier "plVar2") ([ "[") (number_literal "1") (] "]"))))) () ")"))) () ")")) (compound_statement "{\nLAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);\n      }" ({ "{") (labeled_statement "LAB_002974f1:\n        do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);" (statement_identifier "LAB_002974f1") (: ":") (do_statement "do {\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        } while ((long *)plVar2[1] != plVar6);" (do "do") (compound_statement "{\n          lVar1 = *plVar6;\n          if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }\nLAB_002974e6:\n          plVar6 = plVar6 + 1;\n        }" ({ "{") (expression_statement "lVar1 = *plVar6;" (assignment_expression "lVar1 = *plVar6" (identifier "lVar1") (= "=") (pointer_expression "*plVar6" (* "*") (identifier "plVar6"))) (; ";")) (if_statement "if (lVar1 != 0) {\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }" (if "if") (parenthesized_expression "(lVar1 != 0)" (( "(") (binary_expression "lVar1 != 0" (identifier "lVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            local_48[1] = 0;\n            local_48[0] = lVar1;\n            lVar3 = FUN_00297e20(param_3,local_48);\n            if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }\n            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }\n            if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }\n            *plVar5 = *plVar7;\n            puVar4[1] = plVar5 + 1;\n          }" ({ "{") (expression_statement "local_48[1] = 0;" (assignment_expression "local_48[1] = 0" (subscript_expression "local_48[1]" (identifier "local_48") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_48[0] = lVar1;" (assignment_expression "local_48[0] = lVar1" (subscript_expression "local_48[0]" (identifier "local_48") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "lVar1")) (; ";")) (expression_statement "lVar3 = FUN_00297e20(param_3,local_48);" (assignment_expression "lVar3 = FUN_00297e20(param_3,local_48)" (identifier "lVar3") (= "=") (call_expression "FUN_00297e20(param_3,local_48)" (identifier "FUN_00297e20") (argument_list "(param_3,local_48)" (( "(") (identifier "param_3") (, ",") (identifier "local_48") () ")")))) (; ";")) (if_statement "if (extraout_DL != '\0') {\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }" (if "if") (parenthesized_expression "(extraout_DL != '\0')" (( "(") (binary_expression "extraout_DL != '\0'" (identifier "extraout_DL") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n              puVar4 = (undefined8 *)FUN_002d9490(0x18);\n              *puVar4 = 0;\n              puVar4[1] = 0;\n              puVar4[2] = 0;\n              *(undefined8 **)(lVar3 + 0x28) = puVar4;\n            }" ({ "{") (expression_statement "puVar4 = (undefined8 *)FUN_002d9490(0x18);" (assignment_expression "puVar4 = (undefined8 *)FUN_002d9490(0x18)" (identifier "puVar4") (= "=") (cast_expression "(undefined8 *)FUN_002d9490(0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002d9490(0x18)" (identifier "FUN_002d9490") (argument_list "(0x18)" (( "(") (number_literal "0x18") () ")"))))) (; ";")) (expression_statement "*puVar4 = 0;" (assignment_expression "*puVar4 = 0" (pointer_expression "*puVar4" (* "*") (identifier "puVar4")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar4[1] = 0;" (assignment_expression "puVar4[1] = 0" (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar4[2] = 0;" (assignment_expression "puVar4[2] = 0" (subscript_expression "puVar4[2]" (identifier "puVar4") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 **)(lVar3 + 0x28) = puVar4;" (assignment_expression "*(undefined8 **)(lVar3 + 0x28) = puVar4" (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" (* "*") (cast_expression "(undefined8 **)(lVar3 + 0x28)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar3 + 0x28)" (( "(") (binary_expression "lVar3 + 0x28" (identifier "lVar3") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "puVar4")) (; ";")) (} "}"))) (if_statement "if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }\n            else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" (if "if") (parenthesized_expression "(((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10)))" (( "(") (binary_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))" (parenthesized_expression "((*(byte *)(lVar1 + 0x3a) & 7) == 0)" (( "(") (binary_expression "(*(byte *)(lVar1 + 0x3a) & 7) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3a) & 7)" (( "(") (binary_expression "*(byte *)(lVar1 + 0x3a) & 7" (pointer_expression "*(byte *)(lVar1 + 0x3a)" (* "*") (cast_expression "(byte *)(lVar1 + 0x3a)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x3a)" (( "(") (binary_expression "lVar1 + 0x3a" (identifier "lVar1") (+ "+") (number_literal "0x3a")) () ")")))) (& "&") (number_literal "7")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*plVar7 == *(long *)(lVar1 + 0x10))" (( "(") (binary_expression "*plVar7 == *(long *)(lVar1 + 0x10)" (pointer_expression "*plVar7" (* "*") (identifier "plVar7")) (== "==") (pointer_expression "*(long *)(lVar1 + 0x10)" (* "*") (cast_expression "(long *)(lVar1 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x10)" (( "(") (binary_expression "lVar1 + 0x10" (identifier "lVar1") (+ "+") (number_literal "0x10")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n              if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }\n            }" ({ "{") (if_statement "if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }\n              else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" (if "if") (parenthesized_expression "((*(byte *)(lVar1 + 0x3b) & 0x20) == 0)" (( "(") (binary_expression "(*(byte *)(lVar1 + 0x3b) & 0x20) == 0" (parenthesized_expression "(*(byte *)(lVar1 + 0x3b) & 0x20)" (( "(") (binary_expression "*(byte *)(lVar1 + 0x3b) & 0x20" (pointer_expression "*(byte *)(lVar1 + 0x3b)" (* "*") (cast_expression "(byte *)(lVar1 + 0x3b)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x3b)" (( "(") (binary_expression "lVar1 + 0x3b" (identifier "lVar1") (+ "+") (number_literal "0x3b")) () ")")))) (& "&") (number_literal "0x20")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                bVar9 = FUN_00270fe0();\n                bVar9 = bVar9 ^ 1;\n              }" ({ "{") (expression_statement "bVar9 = FUN_00270fe0();" (assignment_expression "bVar9 = FUN_00270fe0()" (identifier "bVar9") (= "=") (call_expression "FUN_00270fe0()" (identifier "FUN_00270fe0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "bVar9 = bVar9 ^ 1;" (assignment_expression "bVar9 = bVar9 ^ 1" (identifier "bVar9") (= "=") (binary_expression "bVar9 ^ 1" (identifier "bVar9") (^ "^") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" (else "else") (compound_statement "{\n                bVar9 = *(int *)(lVar1 + 0x18) != 0;\n              }" ({ "{") (expression_statement "bVar9 = *(int *)(lVar1 + 0x18) != 0;" (assignment_expression "bVar9 = *(int *)(lVar1 + 0x18) != 0" (identifier "bVar9") (= "=") (binary_expression "*(int *)(lVar1 + 0x18) != 0" (pointer_expression "*(int *)(lVar1 + 0x18)" (* "*") (cast_expression "(int *)(lVar1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar1 + 0x18)" (( "(") (binary_expression "lVar1 + 0x18" (identifier "lVar1") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (number_literal "0"))) (; ";")) (} "}")))) (expression_statement "puVar4 = *(undefined8 **)(lVar3 + 0x28);" (assignment_expression "puVar4 = *(undefined8 **)(lVar3 + 0x28)" (identifier "puVar4") (= "=") (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" (* "*") (cast_expression "(undefined8 **)(lVar3 + 0x28)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar3 + 0x28)" (( "(") (binary_expression "lVar3 + 0x28" (identifier "lVar3") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "plVar5 = (long *)puVar4[1];" (assignment_expression "plVar5 = (long *)puVar4[1]" (identifier "plVar5") (= "=") (cast_expression "(long *)puVar4[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "plVar8 = (long *)puVar4[2];" (assignment_expression "plVar8 = (long *)puVar4[2]" (identifier "plVar8") (= "=") (cast_expression "(long *)puVar4[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar4[2]" (identifier "puVar4") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (bVar9 != 0) {\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }" (if "if") (parenthesized_expression "(bVar9 != 0)" (( "(") (binary_expression "bVar9 != 0" (identifier "bVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                __src = (long *)*puVar4;\n                if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }\n                goto LAB_002974e6;\n              }" ({ "{") (expression_statement "__src = (long *)*puVar4;" (assignment_expression "__src = (long *)*puVar4" (identifier "__src") (= "=") (cast_expression "(long *)*puVar4" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar4" (* "*") (identifier "puVar4")))) (; ";")) (if_statement "if (plVar8 == plVar5) {\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }\n                else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" (if "if") (parenthesized_expression "(plVar8 == plVar5)" (( "(") (binary_expression "plVar8 == plVar5" (identifier "plVar8") (== "==") (identifier "plVar5")) () ")")) (compound_statement "{\n                  FUN_0023d3a0(puVar4,__src,plVar7);\n                }" ({ "{") (expression_statement "FUN_0023d3a0(puVar4,__src,plVar7);" (call_expression "FUN_0023d3a0(puVar4,__src,plVar7)" (identifier "FUN_0023d3a0") (argument_list "(puVar4,__src,plVar7)" (( "(") (identifier "puVar4") (, ",") (identifier "__src") (, ",") (identifier "plVar7") () ")"))) (; ";")) (} "}")) (else_clause "else {\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" (else "else") (compound_statement "{\n                  lVar1 = *plVar7;\n                  if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }\n                }" ({ "{") (expression_statement "lVar1 = *plVar7;" (assignment_expression "lVar1 = *plVar7" (identifier "lVar1") (= "=") (pointer_expression "*plVar7" (* "*") (identifier "plVar7"))) (; ";")) (if_statement "if (__src == plVar5) {\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }\n                  else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" (if "if") (parenthesized_expression "(__src == plVar5)" (( "(") (binary_expression "__src == plVar5" (identifier "__src") (== "==") (identifier "plVar5")) () ")")) (compound_statement "{\n                    *__src = lVar1;\n                    puVar4[1] = plVar5 + 1;\n                  }" ({ "{") (expression_statement "*__src = lVar1;" (assignment_expression "*__src = lVar1" (pointer_expression "*__src" (* "*") (identifier "__src")) (= "=") (identifier "lVar1")) (; ";")) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "plVar5 + 1" (identifier "plVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" (else "else") (compound_statement "{\n                    *plVar5 = plVar5[-1];\n                    puVar4[1] = plVar5 + 1;\n                    if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }\n                    *__src = lVar1;\n                  }" ({ "{") (expression_statement "*plVar5 = plVar5[-1];" (assignment_expression "*plVar5 = plVar5[-1]" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (= "=") (subscript_expression "plVar5[-1]" (identifier "plVar5") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "plVar5 + 1" (identifier "plVar5") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (__src != plVar5 + -1) {\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }" (if "if") (parenthesized_expression "(__src != plVar5 + -1)" (( "(") (binary_expression "__src != plVar5 + -1" (identifier "__src") (!= "!=") (binary_expression "plVar5 + -1" (identifier "plVar5") (+ "+") (number_literal "-1"))) () ")")) (compound_statement "{\n                      __n = (long)(plVar5 + -1) - (long)__src;\n                      memmove((void *)((long)plVar5 - __n),__src,__n);\n                    }" ({ "{") (expression_statement "__n = (long)(plVar5 + -1) - (long)__src;" (assignment_expression "__n = (long)(plVar5 + -1) - (long)__src" (identifier "__n") (= "=") (binary_expression "(long)(plVar5 + -1) - (long)__src" (cast_expression "(long)(plVar5 + -1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(plVar5 + -1)" (( "(") (binary_expression "plVar5 + -1" (identifier "plVar5") (+ "+") (number_literal "-1")) () ")"))) (- "-") (cast_expression "(long)__src" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__src")))) (; ";")) (expression_statement "memmove((void *)((long)plVar5 - __n),__src,__n);" (call_expression "memmove((void *)((long)plVar5 - __n),__src,__n)" (identifier "memmove") (argument_list "((void *)((long)plVar5 - __n),__src,__n)" (( "(") (cast_expression "(void *)((long)plVar5 - __n)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar5 - __n)" (( "(") (binary_expression "(long)plVar5 - __n" (cast_expression "(long)plVar5" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar5")) (- "-") (identifier "__n")) () ")"))) (, ",") (identifier "__src") (, ",") (identifier "__n") () ")"))) (; ";")) (} "}"))) (expression_statement "*__src = lVar1;" (assignment_expression "*__src = lVar1" (pointer_expression "*__src" (* "*") (identifier "__src")) (= "=") (identifier "lVar1")) (; ";")) (} "}")))) (} "}")))) (goto_statement "goto LAB_002974e6;" (goto "goto") (statement_identifier "LAB_002974e6") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" (else "else") (compound_statement "{\n              puVar4 = *(undefined8 **)(lVar3 + 0x28);\n              plVar5 = (long *)puVar4[1];\n              plVar8 = (long *)puVar4[2];\n            }" ({ "{") (expression_statement "puVar4 = *(undefined8 **)(lVar3 + 0x28);" (assignment_expression "puVar4 = *(undefined8 **)(lVar3 + 0x28)" (identifier "puVar4") (= "=") (pointer_expression "*(undefined8 **)(lVar3 + 0x28)" (* "*") (cast_expression "(undefined8 **)(lVar3 + 0x28)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar3 + 0x28)" (( "(") (binary_expression "lVar3 + 0x28" (identifier "lVar3") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "plVar5 = (long *)puVar4[1];" (assignment_expression "plVar5 = (long *)puVar4[1]" (identifier "plVar5") (= "=") (cast_expression "(long *)puVar4[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "plVar8 = (long *)puVar4[2];" (assignment_expression "plVar8 = (long *)puVar4[2]" (identifier "plVar8") (= "=") (cast_expression "(long *)puVar4[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar4[2]" (identifier "puVar4") ([ "[") (number_literal "2") (] "]")))) (; ";")) (} "}")))) (if_statement "if (plVar8 == plVar5) {\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }" (if "if") (parenthesized_expression "(plVar8 == plVar5)" (( "(") (binary_expression "plVar8 == plVar5" (identifier "plVar8") (== "==") (identifier "plVar5")) () ")")) (compound_statement "{\n              plVar6 = plVar6 + 1;\n              FUN_0023d3a0(puVar4,plVar8,plVar7);\n              if ((long *)plVar2[1] == plVar6) break;\n              goto LAB_002974f1;\n            }" ({ "{") (expression_statement "plVar6 = plVar6 + 1;" (assignment_expression "plVar6 = plVar6 + 1" (identifier "plVar6") (= "=") (binary_expression "plVar6 + 1" (identifier "plVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_0023d3a0(puVar4,plVar8,plVar7);" (call_expression "FUN_0023d3a0(puVar4,plVar8,plVar7)" (identifier "FUN_0023d3a0") (argument_list "(puVar4,plVar8,plVar7)" (( "(") (identifier "puVar4") (, ",") (identifier "plVar8") (, ",") (identifier "plVar7") () ")"))) (; ";")) (if_statement "if ((long *)plVar2[1] == plVar6) break;" (if "if") (parenthesized_expression "((long *)plVar2[1] == plVar6)" (( "(") (binary_expression "(long *)plVar2[1] == plVar6" (cast_expression "(long *)plVar2[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[1]" (identifier "plVar2") ([ "[") (number_literal "1") (] "]"))) (== "==") (identifier "plVar6")) () ")")) (break_statement "break;" (break "break") (; ";"))) (goto_statement "goto LAB_002974f1;" (goto "goto") (statement_identifier "LAB_002974f1") (; ";")) (} "}"))) (expression_statement "*plVar5 = *plVar7;" (assignment_expression "*plVar5 = *plVar7" (pointer_expression "*plVar5" (* "*") (identifier "plVar5")) (= "=") (pointer_expression "*plVar7" (* "*") (identifier "plVar7"))) (; ";")) (expression_statement "puVar4[1] = plVar5 + 1;" (assignment_expression "puVar4[1] = plVar5 + 1" (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "plVar5 + 1" (identifier "plVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (labeled_statement "LAB_002974e6:\n          plVar6 = plVar6 + 1;" (statement_identifier "LAB_002974e6") (: ":") (expression_statement "plVar6 = plVar6 + 1;" (assignment_expression "plVar6 = plVar6 + 1" (identifier "plVar6") (= "=") (binary_expression "plVar6 + 1" (identifier "plVar6") (+ "+") (number_literal "1"))) (; ";"))) (} "}")) (while "while") (parenthesized_expression "((long *)plVar2[1] != plVar6)" (( "(") (binary_expression "(long *)plVar2[1] != plVar6" (cast_expression "(long *)plVar2[1]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar2[1]" (identifier "plVar2") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (identifier "plVar6")) () ")")) (; ";"))) (} "}"))) (expression_statement "plVar7 = plVar7 + 1;" (assignment_expression "plVar7 = plVar7 + 1" (identifier "plVar7") (= "=") (binary_expression "plVar7 + 1" (identifier "plVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((long *)param_2[1] != plVar7)" (( "(") (binary_expression "(long *)param_2[1] != plVar7" (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 "plVar7")) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void gather_cref(Cref_inputs * this, Objects * objects, Cref_table *
   table) */

void __thiscall var_6::type_1::function_1(type_1 *this,type_2 *objects,type_3 *type_9)

{
  type_4 *var_12;
  type_5 __position;
  type_6 *pOVar2;
  int iVar3;
  type_7 extraout_var;
  _Rb_tree_iterator<std::var_3<var_4::type_4*var_17,var_5::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>*>var_1>
  var_2;
  type_8 p_Var6;
  type_8 var_16;
  size_t var_19;
  long *var_11;
  type_6 **var_8;
  type_5 __position_00;
  bool bVar9;
  var_3<std::_Rb_tree_iterator<std::var_3<var_4::type_4*var_17,var_5::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>*>var_1>,_bool>
  pVar10;
  var_3<var_4::type_4*,var_5::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>*> type_10;
  long *var_10;
  
  var_8 = (objects->super__Vector_base<var_6::type_6*var_7,var_5::allocator<var_6::type_6*>var_1>var_7)._M_impl.
             _M_start;
  if (var_8 !=
      (objects->super__Vector_base<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>var_7)._M_impl._M_finish
     ) {
    do {
      iVar3 = (*(*var_8)->_vptr_Object[0x1d])();
      var_10 = (long *)var_9(extraout_var,iVar3);
      if ((var_10 != (long *)0x0) && (var_11 = (long *)*var_10, var_11 != (long *)var_10[1])) {
LAB_002974f1:
        do {
          var_12 = (type_4 *)*var_11;
          if (var_12 != (type_4 *)0x0) {
            type_10.second = (var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1> *)0x0;
            type_10.first = var_12;
            pVar10 = std::
                     _Rb_tree<var_4::type_4*,var_5::var_3<var_4::type_4*var_17,var_5::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>*>,var_5::_Select1st<std::var_3<var_4::type_4*var_17,var_5::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>*>var_1>,_gold::type_1::Cref_table_compare,var_5::allocator<std::var_3<var_4::type_4*var_17,var_5::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>*>var_1>var_1>
                     ::
                     _M_emplace_unique<std::var_3<var_4::type_4*,var_5::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>*>var_1>
                               (&type_9->_M_t,&type_10);
            var_2 = pVar10.first;
            if (pVar10.second != false) {
              p_Var6 = (type_8)var_14(0x18);
              *(type_11 *)p_Var6 = 0;
              p_Var6->_M_parent = (type_8)0x0;
              p_Var6->_M_left = (type_8)0x0;
              var_2._M_node[1]._M_parent = p_Var6;
            }
            if (((var_12->field_0x3a & 7) == 0) && (*var_8 == (var_12->u1_).object)) {
              if ((var_12->field_0x3b & 0x20) == 0) {
                bVar9 = type_4::var_15((var_12->u2_).shndx);
                bVar9 = !bVar9;
              }
              else {
                bVar9 = (var_12->u2_).shndx != 0;
              }
              p_Var6 = var_2._M_node[1]._M_parent;
              var_16 = p_Var6->_M_parent;
              __position_00._M_current = (type_6 **)p_Var6->_M_left;
              if (bVar9) {
                __position._M_current = *(type_6 ***)p_Var6;
                if ((type_8)__position_00._M_current == var_16) {
                  std::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>::
                  _M_realloc_insert<var_6::type_6*var_17&>
                            ((var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1> *)p_Var6,
                             __position,var_8);
                }
                else {
                  pOVar2 = *var_8;
                  if ((type_8)__position._M_current == var_16) {
                    *__position._M_current = pOVar2;
                    p_Var6->_M_parent = (type_8)&var_16->_M_parent;
                  }
                  else {
                    *(type_6 **)var_16 = (type_6 *)var_16[-1]._M_right;
                    p_Var6->_M_parent = (type_8)&var_16->_M_parent;
                    if (__position._M_current != (type_6 **)&var_16[-1]._M_right) {
                      var_19 = (long)&var_16[-1]._M_right - (long)__position._M_current;
                      var_18((void *)((long)var_16 - var_19),__position._M_current,var_19);
                    }
                    *__position._M_current = pOVar2;
                  }
                }
                goto LAB_002974e6;
              }
            }
            else {
              p_Var6 = var_2._M_node[1]._M_parent;
              var_16 = p_Var6->_M_parent;
              __position_00._M_current = (type_6 **)p_Var6->_M_left;
            }
            if ((type_8)__position_00._M_current == var_16) {
              var_11 = var_11 + 1;
              std::var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>::
              _M_realloc_insert<var_6::type_6*var_17&>
                        ((var_13<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1> *)p_Var6,
                         __position_00,var_8);
              if ((long *)var_10[1] == var_11) break;
              goto LAB_002974f1;
            }
            *(type_6 **)var_16 = *var_8;
            p_Var6->_M_parent = (type_8)&var_16->_M_parent;
          }
LAB_002974e6:
          var_11 = var_11 + 1;
        } while ((long *)var_10[1] != var_11);
      }
      var_8 = var_8 + 1;
    } while ((objects->super__Vector_base<var_6::type_6*,var_5::allocator<var_6::type_6*>var_1>var_7)._M_impl.
             _M_finish != var_8);
  }
  return;
}


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

void MASKED(undefined8 param_1,long *param_2,undefined8 param_3)

{
  long lVar1;
  long *__src;
  long *plVar2;
  long lVar3;
  undefined8 *puVar4;
  long *plVar5;
  char extraout_DL;
  size_t __n;
  long *plVar6;
  long *plVar7;
  long *plVar8;
  byte bVar9;
  long local_48 [3];
  
  plVar7 = (long *)*param_2;
  if (plVar7 != (long *)param_2[1]) {
    do {
      plVar2 = (long *)(**(code **)(*(long *)*plVar7 + 0xe8))();
      if ((plVar2 != (long *)0x0) && (plVar6 = (long *)*plVar2, plVar6 != (long *)plVar2[1])) {
LAB_002974f1:
        do {
          lVar1 = *plVar6;
          if (lVar1 != 0) {
            local_48[1] = 0;
            local_48[0] = lVar1;
            lVar3 = FUN_00297e20(param_3,local_48);
            if (extraout_DL != '\0') {
              puVar4 = (undefined8 *)FUN_002d9490(0x18);
              *puVar4 = 0;
              puVar4[1] = 0;
              puVar4[2] = 0;
              *(undefined8 **)(lVar3 + 0x28) = puVar4;
            }
            if (((*(byte *)(lVar1 + 0x3a) & 7) == 0) && (*plVar7 == *(long *)(lVar1 + 0x10))) {
              if ((*(byte *)(lVar1 + 0x3b) & 0x20) == 0) {
                bVar9 = FUN_00270fe0();
                bVar9 = bVar9 ^ 1;
              }
              else {
                bVar9 = *(int *)(lVar1 + 0x18) != 0;
              }
              puVar4 = *(undefined8 **)(lVar3 + 0x28);
              plVar5 = (long *)puVar4[1];
              plVar8 = (long *)puVar4[2];
              if (bVar9 != 0) {
                __src = (long *)*puVar4;
                if (plVar8 == plVar5) {
                  FUN_0023d3a0(puVar4,__src,plVar7);
                }
                else {
                  lVar1 = *plVar7;
                  if (__src == plVar5) {
                    *__src = lVar1;
                    puVar4[1] = plVar5 + 1;
                  }
                  else {
                    *plVar5 = plVar5[-1];
                    puVar4[1] = plVar5 + 1;
                    if (__src != plVar5 + -1) {
                      __n = (long)(plVar5 + -1) - (long)__src;
                      memmove((void *)((long)plVar5 - __n),__src,__n);
                    }
                    *__src = lVar1;
                  }
                }
                goto LAB_002974e6;
              }
            }
            else {
              puVar4 = *(undefined8 **)(lVar3 + 0x28);
              plVar5 = (long *)puVar4[1];
              plVar8 = (long *)puVar4[2];
            }
            if (plVar8 == plVar5) {
              plVar6 = plVar6 + 1;
              FUN_0023d3a0(puVar4,plVar8,plVar7);
              if ((long *)plVar2[1] == plVar6) break;
              goto LAB_002974f1;
            }
            *plVar5 = *plVar7;
            puVar4[1] = plVar5 + 1;
          }
LAB_002974e6:
          plVar6 = plVar6 + 1;
        } while ((long *)plVar2[1] != plVar6);
      }
      plVar7 = plVar7 + 1;
    } while ((long *)param_2[1] != plVar7);
  }
  return;
}

