
/* DWARF original prototype: iterator
   _M_lower_bound(_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>
   * this, _Link_type __x, _Base_ptr __y, Erratum_stub<32,_true> * * __k) */

iterator __thiscall
std::
_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>
::_M_lower_bound(_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>
                 *this,_Link_type __x,_Base_ptr __y,Erratum_stub<32,_true> **__k)

{
  _Rb_tree_color *p_Var1;
  int iVar2;
  int iVar3;
  iterator in_EAX;
  _Rb_tree_color in_ECX;
  _Rb_tree_color in_EDX;
  bool bVar4;
  
  if (in_EDX != _S_red) {
    iVar2 = *(int *)&this->_M_impl;
    do {
      while (iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3) {
LAB_001d6e8d:
        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);
        in_ECX = in_EDX;
        in_EDX = *p_Var1;
        if (*p_Var1 == _S_red) goto LAB_001d6e96;
      }
      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);
      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&
         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),
         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {
        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);
      }
      if (!bVar4) goto LAB_001d6e8d;
      in_EDX = *(_Rb_tree_color *)(in_EDX + 0xc);
    } while (in_EDX != _S_red);
  }
LAB_001d6e96:
  (in_EAX._M_node)->_M_color = in_ECX;
  return (iterator)in_EAX._M_node;
}



void __regparm3 FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  bool bVar4;
  
  if (param_2 != 0) {
    iVar2 = *param_4;
    do {
      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {
LAB_001d6e8d:
        piVar1 = (int *)(param_2 + 8);
        param_3 = param_2;
        param_2 = *piVar1;
        if (*piVar1 == 0) goto LAB_001d6e96;
      }
      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);
      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&
         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),
         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {
        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);
      }
      if (!bVar4) goto LAB_001d6e8d;
      param_2 = *(int *)(param_2 + 0xc);
    } while (param_2 != 0);
  }
LAB_001d6e96:
  *param_1 = param_3;
  return;
}


PUSH EDI
PUSH ESI
PUSH EBX
TEST EDX,EDX
JZ 0x001d6e96
MOV EBX,dword ptr [ESP + 0x10]
MOV ESI,dword ptr [EBX]
JMP 0x001d6e77
MOV EDX,dword ptr [EDX + 0xc]
TEST EDX,EDX
JZ 0x001d6e96
MOV EBX,dword ptr [EDX + 0x10]
CMP ESI,EBX
JZ 0x001d6e8d
MOV EDI,dword ptr [ESI + 0x10]
CMP dword ptr [EBX + 0x10],EDI
JZ 0x001d6ea0
SETC BL
TEST BL,BL
JNZ 0x001d6e70
MOV ECX,EDX
MOV EDX,dword ptr [EDX + 0x8]
TEST EDX,EDX
JNZ 0x001d6e77
POP EBX
POP ESI
MOV dword ptr [EAX],ECX
POP EDI
RET
MOV EDI,dword ptr [ESI + 0x14]
CMP dword ptr [EBX + 0x14],EDI
JNZ 0x001d6e86
MOV EDI,dword ptr [ESI + 0x18]
CMP dword ptr [EBX + 0x18],EDI
JMP 0x001d6e86
(translation_unit "void __regparm3 FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  \n  if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }\nLAB_001d6e96:\n  *param_1 = param_3;\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  \n  if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }\nLAB_001d6e96:\n  *param_1 = param_3;\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)" identifier (parameter_list "(int *param_1,int param_2,int param_3,int *param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  \n  if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }\nLAB_001d6e96:\n  *param_1 = param_3;\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (if_statement "if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }" { (expression_statement "iVar2 = *param_4;" (assignment_expression "iVar2 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (do_statement "do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);" do (compound_statement "{\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    }" { (while_statement "while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }" while (parenthesized_expression "(iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3)" ( (comma_expression "iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3" (assignment_expression "iVar3 = *(int *)(param_2 + 0x10)" identifier = (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) , (binary_expression "iVar2 == iVar3" identifier == identifier)) )) (compound_statement "{\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }" { (labeled_statement "LAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);" statement_identifier : (expression_statement "piVar1 = (int *)(param_2 + 8);" (assignment_expression "piVar1 = (int *)(param_2 + 8)" identifier = (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) ;)) (expression_statement "param_3 = param_2;" (assignment_expression "param_3 = param_2" identifier = identifier) ;) (expression_statement "param_2 = *piVar1;" (assignment_expression "param_2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if (*piVar1 == 0) goto LAB_001d6e96;" if (parenthesized_expression "(*piVar1 == 0)" ( (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" * identifier) == number_literal) )) (goto_statement "goto LAB_001d6e96;" goto statement_identifier ;)) })) (expression_statement "bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10)" identifier = (binary_expression "*(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10)" (pointer_expression "*(uint *)(iVar3 + 0x10)" * (cast_expression "(uint *)(iVar3 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x10)" * (cast_expression "(uint *)(iVar2 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))))) ;) (if_statement "if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }" if (parenthesized_expression "((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)))" ( (binary_expression "(*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))" (parenthesized_expression "(*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10))" ( (binary_expression "*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)" (pointer_expression "*(uint *)(iVar3 + 0x10)" * (cast_expression "(uint *)(iVar3 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) == (pointer_expression "*(uint *)(iVar2 + 0x10)" * (cast_expression "(uint *)(iVar2 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) ))))) )) && (parenthesized_expression "(bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))" ( (comma_expression "bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14)" identifier = (binary_expression "*(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14)" (pointer_expression "*(uint *)(iVar3 + 0x14)" * (cast_expression "(uint *)(iVar3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))))) , (binary_expression "*(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)" (pointer_expression "*(uint *)(iVar3 + 0x14)" * (cast_expression "(uint *)(iVar3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) )))) == (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))))) ))) )) (compound_statement "{\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }" { (expression_statement "bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18)" identifier = (binary_expression "*(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18)" (pointer_expression "*(uint *)(iVar3 + 0x18)" * (cast_expression "(uint *)(iVar3 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x18)" ( (binary_expression "iVar3 + 0x18" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x18)" * (cast_expression "(uint *)(iVar2 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x18)" ( (binary_expression "iVar2 + 0x18" identifier + number_literal) )))))) ;) })) (if_statement "if (!bVar4) goto LAB_001d6e8d;" if (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) )) (goto_statement "goto LAB_001d6e8d;" goto statement_identifier ;)) (expression_statement "param_2 = *(int *)(param_2 + 0xc);" (assignment_expression "param_2 = *(int *)(param_2 + 0xc)" identifier = (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) ;) })) (labeled_statement "LAB_001d6e96:\n  *param_1 = param_3;" statement_identifier : (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" * identifier) = identifier) ;)) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: iterator\n   _M_lower_bound(_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>\n   * this, _Link_type __x, _Base_ptr __y, Erratum_stub<32,_true> * * __k) */\n\niterator __thiscall\nstd::\n_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>\n::_M_lower_bound(_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>\n                 *this,_Link_type __x,_Base_ptr __y,Erratum_stub<32,_true> **__k)\n\n{\n  _Rb_tree_color *p_Var1;\n  int iVar2;\n  int iVar3;\n  iterator in_EAX;\n  _Rb_tree_color in_ECX;\n  _Rb_tree_color in_EDX;\n  bool bVar4;\n  \n  if (in_EDX != _S_red) {\n    iVar2 = *(int *)&this->_M_impl;\n    do {\n      while (iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);\n        in_ECX = in_EDX;\n        in_EDX = *p_Var1;\n        if (*p_Var1 == _S_red) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      in_EDX = *(_Rb_tree_color *)(in_EDX + 0xc);\n    } while (in_EDX != _S_red);\n  }\nLAB_001d6e96:\n  (in_EAX._M_node)->_M_color = in_ECX;\n  return (iterator)in_EAX._M_node;\n}\n\n" comment (declaration "iterator __thiscall\nstd::\n_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>\n::_M_lower_bound(_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>\n                 *this,_Link_type __x,_Base_ptr __y,Erratum_stub<32,_true> **__k)\n\n{\n  _Rb_tree_color *p_Var1;" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::\n_Rb_tree<(anonymous_namespace)::" identifier : : identifier < ( identifier ) : :) identifier (ERROR "<32" < number_literal) , identifier (ERROR ">*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32" > * , (function_declarator "_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<32," < number_literal ,) identifier (ERROR ">*," > * ,) identifier (ERROR "::" : :) identifier (ERROR "<(" < () identifier) ) : : identifier < number_literal) , identifier (ERROR ">*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32" > * > , (function_declarator "_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<32," < number_literal ,) identifier (ERROR ">," > ,) identifier (ERROR "::" : :) identifier (ERROR "<(" < () identifier) ) : : identifier < number_literal) , (ERROR "_true>*>_>\n::_M_lower_bound(_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>" identifier > * > identifier > : : (function_declarator "_M_lower_bound(_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true" identifier (parameter_list "(_Rb_tree<(anonymous_namespace)" ( (parameter_declaration "_Rb_tree<(anonymous_namespace" type_identifier (ERROR "<(" < () identifier) )) (ERROR "::" : :) identifier (ERROR "<32," < number_literal ,) identifier) >) (pointer_declarator "*,_(anonymous_namespace)::Erratum_stub" * (ERROR "," ,) (function_declarator "_(anonymous_namespace)::Erratum_stub" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier)) (ERROR "<32" < number_literal) , identifier (ERROR ">*" > *) , (ERROR "_std::_Identity<(anonymous_namespace)::" identifier : : identifier < ( identifier ) : :) identifier (ERROR "<32" < number_literal) , identifier (ERROR ">*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32" > * > , (function_declarator "_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace" identifier (parameter_list "(anonymous_namespace)" ( (parameter_declaration "anonymous_namespace" type_identifier) )) (ERROR "::" : :) identifier (ERROR "<32," < number_literal ,) identifier (ERROR ">," > ,) identifier (ERROR "::" : :) identifier (ERROR "<(" < () identifier) ) : : identifier < number_literal) , (ERROR "_true>*>_>" identifier > * > identifier >) (pointer_declarator "*this" * identifier) , identifier (ERROR "__x" identifier) , identifier (ERROR "__y" identifier) , identifier (ERROR "<32" < number_literal) , (ERROR "_true> **__k)\n\n{\n  _Rb_tree_color" identifier > (pointer_declarator "**__k" * (pointer_declarator "*__k" * identifier)) ) { identifier) (pointer_declarator "*p_Var1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "iterator in_EAX;" type_identifier identifier ;) (declaration "_Rb_tree_color in_ECX;" type_identifier identifier ;) (declaration "_Rb_tree_color in_EDX;" type_identifier identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (if_statement "if (in_EDX != _S_red) {\n    iVar2 = *(int *)&this->_M_impl;\n    do {\n      while (iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);\n        in_ECX = in_EDX;\n        in_EDX = *p_Var1;\n        if (*p_Var1 == _S_red) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      in_EDX = *(_Rb_tree_color *)(in_EDX + 0xc);\n    } while (in_EDX != _S_red);\n  }" if (parenthesized_expression "(in_EDX != _S_red)" ( (binary_expression "in_EDX != _S_red" identifier != identifier) )) (compound_statement "{\n    iVar2 = *(int *)&this->_M_impl;\n    do {\n      while (iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);\n        in_ECX = in_EDX;\n        in_EDX = *p_Var1;\n        if (*p_Var1 == _S_red) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      in_EDX = *(_Rb_tree_color *)(in_EDX + 0xc);\n    } while (in_EDX != _S_red);\n  }" { (expression_statement "iVar2 = *(int *)&this->_M_impl;" (assignment_expression "iVar2 = *(int *)&this->_M_impl" identifier = (pointer_expression "*(int *)&this->_M_impl" * (cast_expression "(int *)&this->_M_impl" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&this->_M_impl" & (field_expression "this->_M_impl" identifier -> field_identifier))))) ;) (do_statement "do {\n      while (iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);\n        in_ECX = in_EDX;\n        in_EDX = *p_Var1;\n        if (*p_Var1 == _S_red) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      in_EDX = *(_Rb_tree_color *)(in_EDX + 0xc);\n    } while (in_EDX != _S_red);" do (compound_statement "{\n      while (iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);\n        in_ECX = in_EDX;\n        in_EDX = *p_Var1;\n        if (*p_Var1 == _S_red) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      in_EDX = *(_Rb_tree_color *)(in_EDX + 0xc);\n    }" { (while_statement "while (iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);\n        in_ECX = in_EDX;\n        in_EDX = *p_Var1;\n        if (*p_Var1 == _S_red) goto LAB_001d6e96;\n      }" while (parenthesized_expression "(iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3)" ( (comma_expression "iVar3 = *(int *)(in_EDX + 0x10), iVar2 == iVar3" (assignment_expression "iVar3 = *(int *)(in_EDX + 0x10)" identifier = (pointer_expression "*(int *)(in_EDX + 0x10)" * (cast_expression "(int *)(in_EDX + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EDX + 0x10)" ( (binary_expression "in_EDX + 0x10" identifier + number_literal) ))))) , (binary_expression "iVar2 == iVar3" identifier == identifier)) )) (compound_statement "{\nLAB_001d6e8d:\n        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);\n        in_ECX = in_EDX;\n        in_EDX = *p_Var1;\n        if (*p_Var1 == _S_red) goto LAB_001d6e96;\n      }" { (labeled_statement "LAB_001d6e8d:\n        p_Var1 = (_Rb_tree_color *)(in_EDX + 8);" statement_identifier : (expression_statement "p_Var1 = (_Rb_tree_color *)(in_EDX + 8);" (assignment_expression "p_Var1 = (_Rb_tree_color *)(in_EDX + 8)" identifier = (cast_expression "(_Rb_tree_color *)(in_EDX + 8)" ( (type_descriptor "_Rb_tree_color *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EDX + 8)" ( (binary_expression "in_EDX + 8" identifier + number_literal) )))) ;)) (expression_statement "in_ECX = in_EDX;" (assignment_expression "in_ECX = in_EDX" identifier = identifier) ;) (expression_statement "in_EDX = *p_Var1;" (assignment_expression "in_EDX = *p_Var1" identifier = (pointer_expression "*p_Var1" * identifier)) ;) (if_statement "if (*p_Var1 == _S_red) goto LAB_001d6e96;" if (parenthesized_expression "(*p_Var1 == _S_red)" ( (binary_expression "*p_Var1 == _S_red" (pointer_expression "*p_Var1" * identifier) == identifier) )) (goto_statement "goto LAB_001d6e96;" goto statement_identifier ;)) })) (expression_statement "bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10)" identifier = (binary_expression "*(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10)" (pointer_expression "*(uint *)(iVar3 + 0x10)" * (cast_expression "(uint *)(iVar3 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x10)" * (cast_expression "(uint *)(iVar2 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))))) ;) (if_statement "if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }" if (parenthesized_expression "((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)))" ( (binary_expression "(*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))" (parenthesized_expression "(*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10))" ( (binary_expression "*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)" (pointer_expression "*(uint *)(iVar3 + 0x10)" * (cast_expression "(uint *)(iVar3 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) == (pointer_expression "*(uint *)(iVar2 + 0x10)" * (cast_expression "(uint *)(iVar2 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) ))))) )) && (parenthesized_expression "(bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))" ( (comma_expression "bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14)" identifier = (binary_expression "*(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14)" (pointer_expression "*(uint *)(iVar3 + 0x14)" * (cast_expression "(uint *)(iVar3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))))) , (binary_expression "*(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)" (pointer_expression "*(uint *)(iVar3 + 0x14)" * (cast_expression "(uint *)(iVar3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) )))) == (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))))) ))) )) (compound_statement "{\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }" { (expression_statement "bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18)" identifier = (binary_expression "*(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18)" (pointer_expression "*(uint *)(iVar3 + 0x18)" * (cast_expression "(uint *)(iVar3 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x18)" ( (binary_expression "iVar3 + 0x18" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x18)" * (cast_expression "(uint *)(iVar2 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x18)" ( (binary_expression "iVar2 + 0x18" identifier + number_literal) )))))) ;) })) (if_statement "if (!bVar4) goto LAB_001d6e8d;" if (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) )) (goto_statement "goto LAB_001d6e8d;" goto statement_identifier ;)) (expression_statement "in_EDX = *(_Rb_tree_color *)(in_EDX + 0xc);" (assignment_expression "in_EDX = *(_Rb_tree_color *)(in_EDX + 0xc)" identifier = (pointer_expression "*(_Rb_tree_color *)(in_EDX + 0xc)" * (cast_expression "(_Rb_tree_color *)(in_EDX + 0xc)" ( (type_descriptor "_Rb_tree_color *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_EDX + 0xc)" ( (binary_expression "in_EDX + 0xc" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(in_EDX != _S_red)" ( (binary_expression "in_EDX != _S_red" identifier != identifier) )) ;) })) (labeled_statement "LAB_001d6e96:\n  (in_EAX._M_node)->_M_color = in_ECX;" statement_identifier : (expression_statement "(in_EAX._M_node)->_M_color = in_ECX;" (assignment_expression "(in_EAX._M_node)->_M_color = in_ECX" (field_expression "(in_EAX._M_node)->_M_color" (parenthesized_expression "(in_EAX._M_node)" ( (field_expression "in_EAX._M_node" identifier . field_identifier) )) -> field_identifier) = identifier) ;)) (return_statement "return (iterator)in_EAX._M_node;" return (cast_expression "(iterator)in_EAX._M_node" ( (type_descriptor "iterator" type_identifier) ) (field_expression "in_EAX._M_node" identifier . field_identifier)) ;) (ERROR "}" }))
(translation_unit "void __regparm3 FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  \n  if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }\nLAB_001d6e96:\n  *param_1 = param_3;\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  \n  if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }\nLAB_001d6e96:\n  *param_1 = param_3;\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)" identifier (parameter_list "(int *param_1,int param_2,int param_3,int *param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  \n  if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }\nLAB_001d6e96:\n  *param_1 = param_3;\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (if_statement "if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }" { (expression_statement "iVar2 = *param_4;" (assignment_expression "iVar2 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) ;) (do_statement "do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);" do (compound_statement "{\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    }" { (while_statement "while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }" while (parenthesized_expression "(iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3)" ( (comma_expression "iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3" (assignment_expression "iVar3 = *(int *)(param_2 + 0x10)" identifier = (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) , (binary_expression "iVar2 == iVar3" identifier == identifier)) )) (compound_statement "{\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }" { (labeled_statement "LAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);" statement_identifier : (expression_statement "piVar1 = (int *)(param_2 + 8);" (assignment_expression "piVar1 = (int *)(param_2 + 8)" identifier = (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) ;)) (expression_statement "param_3 = param_2;" (assignment_expression "param_3 = param_2" identifier = identifier) ;) (expression_statement "param_2 = *piVar1;" (assignment_expression "param_2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (if_statement "if (*piVar1 == 0) goto LAB_001d6e96;" if (parenthesized_expression "(*piVar1 == 0)" ( (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" * identifier) == number_literal) )) (goto_statement "goto LAB_001d6e96;" goto statement_identifier ;)) })) (expression_statement "bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10)" identifier = (binary_expression "*(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10)" (pointer_expression "*(uint *)(iVar3 + 0x10)" * (cast_expression "(uint *)(iVar3 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x10)" * (cast_expression "(uint *)(iVar2 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))))) ;) (if_statement "if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }" if (parenthesized_expression "((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)))" ( (binary_expression "(*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))" (parenthesized_expression "(*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10))" ( (binary_expression "*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)" (pointer_expression "*(uint *)(iVar3 + 0x10)" * (cast_expression "(uint *)(iVar3 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x10)" ( (binary_expression "iVar3 + 0x10" identifier + number_literal) )))) == (pointer_expression "*(uint *)(iVar2 + 0x10)" * (cast_expression "(uint *)(iVar2 + 0x10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) ))))) )) && (parenthesized_expression "(bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))" ( (comma_expression "bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14)" identifier = (binary_expression "*(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14)" (pointer_expression "*(uint *)(iVar3 + 0x14)" * (cast_expression "(uint *)(iVar3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))))) , (binary_expression "*(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)" (pointer_expression "*(uint *)(iVar3 + 0x14)" * (cast_expression "(uint *)(iVar3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) )))) == (pointer_expression "*(uint *)(iVar2 + 0x14)" * (cast_expression "(uint *)(iVar2 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x14)" ( (binary_expression "iVar2 + 0x14" identifier + number_literal) )))))) ))) )) (compound_statement "{\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }" { (expression_statement "bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18)" identifier = (binary_expression "*(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18)" (pointer_expression "*(uint *)(iVar3 + 0x18)" * (cast_expression "(uint *)(iVar3 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x18)" ( (binary_expression "iVar3 + 0x18" identifier + number_literal) )))) < (pointer_expression "*(uint *)(iVar2 + 0x18)" * (cast_expression "(uint *)(iVar2 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x18)" ( (binary_expression "iVar2 + 0x18" identifier + number_literal) )))))) ;) })) (if_statement "if (!bVar4) goto LAB_001d6e8d;" if (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) )) (goto_statement "goto LAB_001d6e8d;" goto statement_identifier ;)) (expression_statement "param_2 = *(int *)(param_2 + 0xc);" (assignment_expression "param_2 = *(int *)(param_2 + 0xc)" identifier = (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) ;) })) (labeled_statement "LAB_001d6e96:\n  *param_1 = param_3;" statement_identifier : (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" * identifier) = identifier) ;)) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (binary_expression IDENT == IDENT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ))) )) (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) )))) < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) })) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;)) (return_statement return ;) })))
(function_definition "void __regparm3 FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)\n\n{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  \n  if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }\nLAB_001d6e96:\n  *param_1 = param_3;\n  return;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_001d6e60(int *param_1,int param_2,int param_3,int *param_4)" (identifier "FUN_001d6e60") (parameter_list "(int *param_1,int param_2,int param_3,int *param_4)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int *param_4" (primitive_type "int") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  int iVar3;\n  bool bVar4;\n  \n  if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }\nLAB_001d6e96:\n  *param_1 = param_3;\n  return;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (if_statement "if (param_2 != 0) {\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    iVar2 = *param_4;\n    do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);\n  }" ({ "{") (expression_statement "iVar2 = *param_4;" (assignment_expression "iVar2 = *param_4" (identifier "iVar2") (= "=") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) (; ";")) (do_statement "do {\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    } while (param_2 != 0);" (do "do") (compound_statement "{\n      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }\n      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);\n      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }\n      if (!bVar4) goto LAB_001d6e8d;\n      param_2 = *(int *)(param_2 + 0xc);\n    }" ({ "{") (while_statement "while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }" (while "while") (parenthesized_expression "(iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3)" (( "(") (comma_expression "iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3" (assignment_expression "iVar3 = *(int *)(param_2 + 0x10)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_2 + 0x10)" (* "*") (cast_expression "(int *)(param_2 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")"))))) (, ",") (binary_expression "iVar2 == iVar3" (identifier "iVar2") (== "==") (identifier "iVar3"))) () ")")) (compound_statement "{\nLAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);\n        param_3 = param_2;\n        param_2 = *piVar1;\n        if (*piVar1 == 0) goto LAB_001d6e96;\n      }" ({ "{") (labeled_statement "LAB_001d6e8d:\n        piVar1 = (int *)(param_2 + 8);" (statement_identifier "LAB_001d6e8d") (: ":") (expression_statement "piVar1 = (int *)(param_2 + 8);" (assignment_expression "piVar1 = (int *)(param_2 + 8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(param_2 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (; ";"))) (expression_statement "param_3 = param_2;" (assignment_expression "param_3 = param_2" (identifier "param_3") (= "=") (identifier "param_2")) (; ";")) (expression_statement "param_2 = *piVar1;" (assignment_expression "param_2 = *piVar1" (identifier "param_2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (if_statement "if (*piVar1 == 0) goto LAB_001d6e96;" (if "if") (parenthesized_expression "(*piVar1 == 0)" (( "(") (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_001d6e96;" (goto "goto") (statement_identifier "LAB_001d6e96") (; ";"))) (} "}"))) (expression_statement "bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10)" (identifier "bVar4") (= "=") (binary_expression "*(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10)" (pointer_expression "*(uint *)(iVar3 + 0x10)" (* "*") (cast_expression "(uint *)(iVar3 + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x10)" (( "(") (binary_expression "iVar3 + 0x10" (identifier "iVar3") (+ "+") (number_literal "0x10")) () ")")))) (< "<") (pointer_expression "*(uint *)(iVar2 + 0x10)" (* "*") (cast_expression "(uint *)(iVar2 + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x10)" (( "(") (binary_expression "iVar2 + 0x10" (identifier "iVar2") (+ "+") (number_literal "0x10")) () ")")))))) (; ";")) (if_statement "if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }" (if "if") (parenthesized_expression "((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)))" (( "(") (binary_expression "(*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&\n         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))" (parenthesized_expression "(*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10))" (( "(") (binary_expression "*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)" (pointer_expression "*(uint *)(iVar3 + 0x10)" (* "*") (cast_expression "(uint *)(iVar3 + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x10)" (( "(") (binary_expression "iVar3 + 0x10" (identifier "iVar3") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (pointer_expression "*(uint *)(iVar2 + 0x10)" (* "*") (cast_expression "(uint *)(iVar2 + 0x10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x10)" (( "(") (binary_expression "iVar2 + 0x10" (identifier "iVar2") (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (&& "&&") (parenthesized_expression "(bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))" (( "(") (comma_expression "bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),\n         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14)" (identifier "bVar4") (= "=") (binary_expression "*(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14)" (pointer_expression "*(uint *)(iVar3 + 0x14)" (* "*") (cast_expression "(uint *)(iVar3 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x14)" (( "(") (binary_expression "iVar3 + 0x14" (identifier "iVar3") (+ "+") (number_literal "0x14")) () ")")))) (< "<") (pointer_expression "*(uint *)(iVar2 + 0x14)" (* "*") (cast_expression "(uint *)(iVar2 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x14)" (( "(") (binary_expression "iVar2 + 0x14" (identifier "iVar2") (+ "+") (number_literal "0x14")) () ")")))))) (, ",") (binary_expression "*(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14)" (pointer_expression "*(uint *)(iVar3 + 0x14)" (* "*") (cast_expression "(uint *)(iVar3 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x14)" (( "(") (binary_expression "iVar3 + 0x14" (identifier "iVar3") (+ "+") (number_literal "0x14")) () ")")))) (== "==") (pointer_expression "*(uint *)(iVar2 + 0x14)" (* "*") (cast_expression "(uint *)(iVar2 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x14)" (( "(") (binary_expression "iVar2 + 0x14" (identifier "iVar2") (+ "+") (number_literal "0x14")) () ")")))))) () ")"))) () ")")) (compound_statement "{\n        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);\n      }" ({ "{") (expression_statement "bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);" (assignment_expression "bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18)" (identifier "bVar4") (= "=") (binary_expression "*(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18)" (pointer_expression "*(uint *)(iVar3 + 0x18)" (* "*") (cast_expression "(uint *)(iVar3 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x18)" (( "(") (binary_expression "iVar3 + 0x18" (identifier "iVar3") (+ "+") (number_literal "0x18")) () ")")))) (< "<") (pointer_expression "*(uint *)(iVar2 + 0x18)" (* "*") (cast_expression "(uint *)(iVar2 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x18)" (( "(") (binary_expression "iVar2 + 0x18" (identifier "iVar2") (+ "+") (number_literal "0x18")) () ")")))))) (; ";")) (} "}"))) (if_statement "if (!bVar4) goto LAB_001d6e8d;" (if "if") (parenthesized_expression "(!bVar4)" (( "(") (unary_expression "!bVar4" (! "!") (identifier "bVar4")) () ")")) (goto_statement "goto LAB_001d6e8d;" (goto "goto") (statement_identifier "LAB_001d6e8d") (; ";"))) (expression_statement "param_2 = *(int *)(param_2 + 0xc);" (assignment_expression "param_2 = *(int *)(param_2 + 0xc)" (identifier "param_2") (= "=") (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}"))) (labeled_statement "LAB_001d6e96:\n  *param_1 = param_3;" (statement_identifier "LAB_001d6e96") (: ":") (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "param_3")) (; ";"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: iterator
   _M_lower_bound(_Rb_tree<(anonymous_namespace)::Erratum_stub<32,_true>*,_(anonymous_namespace)::Erratum_stub<32,_true>*,_std::_Identity<(anonymous_namespace)::Erratum_stub<32,_true>*>,_(anonymous_namespace)::Erratum_stub_less<32,_true>,_std::allocator<(anonymous_namespace)::Erratum_stub<32,_true>*>_>
   * this, _Link_type __x, _Base_ptr __y, Erratum_stub<32,_true> * * __k) */

type_1 __thiscall
std::
_Rb_tree<(type_2)::function_2<32,_true>*,function_1(type_2)::function_2<32,_true>*,_std::_Identity<(type_2)::function_2<32,_true>*>,function_1(type_2)::Erratum_stub_less<32,_true>,_std::allocator<(type_2)::function_2<32,_true>*>function_1>
::_M_lower_bound(_Rb_tree<(type_2)::function_2<32,_true>*,function_1(type_2)::function_2<32,_true>*,_std::_Identity<(type_2)::function_2<32,_true>*>,function_1(type_2)::Erratum_stub_less<32,_true>,_std::allocator<(type_2)::function_2<32,_true>*>function_1>
                 *this,_Link_type __x,_Base_ptr __y,function_2<32,_true> **__k)

{
  type_3 *p_Var1;
  int var_3;
  int var_4;
  type_1 in_EAX;
  type_3 in_ECX;
  type_3 var_1;
  bool bVar4;
  
  if (var_1 != var_2) {
    var_3 = *(int *)&this->_M_impl;
    do {
      while (var_4 = *(int *)(var_1 + 0x10), var_3 == var_4) {
LAB_001d6e8d:
        p_Var1 = (type_3 *)(var_1 + 8);
        in_ECX = var_1;
        var_1 = *p_Var1;
        if (*p_Var1 == var_2) goto LAB_001d6e96;
      }
      bVar4 = *(type_4 *)(var_4 + 0x10) < *(type_4 *)(var_3 + 0x10);
      if ((*(type_4 *)(var_4 + 0x10) == *(type_4 *)(var_3 + 0x10)) &&
         (bVar4 = *(type_4 *)(var_4 + 0x14) < *(type_4 *)(var_3 + 0x14),
         *(type_4 *)(var_4 + 0x14) == *(type_4 *)(var_3 + 0x14))) {
        bVar4 = *(type_4 *)(var_4 + 0x18) < *(type_4 *)(var_3 + 0x18);
      }
      if (!bVar4) goto LAB_001d6e8d;
      var_1 = *(type_3 *)(var_1 + 0xc);
    } while (var_1 != var_2);
  }
LAB_001d6e96:
  (in_EAX._M_node)->_M_color = in_ECX;
  return (type_1)in_EAX._M_node;
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (binary_expression left: (identifier) right: (identifier)))) body: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (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: (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: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (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: (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: (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: (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)))))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (return_statement))))

void __regparm3 MASKED(int *param_1,int param_2,int param_3,int *param_4)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  bool bVar4;
  
  if (param_2 != 0) {
    iVar2 = *param_4;
    do {
      while (iVar3 = *(int *)(param_2 + 0x10), iVar2 == iVar3) {
LAB_001d6e8d:
        piVar1 = (int *)(param_2 + 8);
        param_3 = param_2;
        param_2 = *piVar1;
        if (*piVar1 == 0) goto LAB_001d6e96;
      }
      bVar4 = *(uint *)(iVar3 + 0x10) < *(uint *)(iVar2 + 0x10);
      if ((*(uint *)(iVar3 + 0x10) == *(uint *)(iVar2 + 0x10)) &&
         (bVar4 = *(uint *)(iVar3 + 0x14) < *(uint *)(iVar2 + 0x14),
         *(uint *)(iVar3 + 0x14) == *(uint *)(iVar2 + 0x14))) {
        bVar4 = *(uint *)(iVar3 + 0x18) < *(uint *)(iVar2 + 0x18);
      }
      if (!bVar4) goto LAB_001d6e8d;
      param_2 = *(int *)(param_2 + 0xc);
    } while (param_2 != 0);
  }
LAB_001d6e96:
  *param_1 = param_3;
  return;
}

