
/* WARNING: Removing unreachable block (ram,0x00345ad1) */
/* std::collate<char>::do_compare(char const*, char const*, char const*, char const*) const */

int __thiscall
std::collate<char>::do_compare
          (collate<char> *this,char *param_1,char *param_2,char *param_3,char *param_4)

{
  int iVar1;
  size_t sVar2;
  char *pcVar3;
  _Alloc_hider __s;
  char *pcVar4;
  char *pcVar5;
  char *pcVar6;
  long local_70;
  char local_68 [16];
  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_58;
  
  pcVar4 = local_68;
  __cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::
  _M_construct<char_const*>();
  local_58._M_dataplus._M_p = (pointer)&local_58.field_2;
                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */
  __cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::
  _M_construct<char_const*>(&local_58,param_3,param_4);
  pcVar5 = pcVar4 + local_70;
  pcVar6 = local_58._M_dataplus._M_p + local_58._M_string_length;
  __s._M_p = local_58._M_dataplus._M_p;
  do {
    iVar1 = _M_compare(this,pcVar4,__s._M_p);
    if (iVar1 != 0) {
LAB_00345aa7:
      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9
           *)local_58._M_dataplus._M_p != &local_58.field_2) {
        operator_delete(local_58._M_dataplus._M_p);
      }
      return iVar1;
    }
    sVar2 = strlen(pcVar4);
    pcVar4 = pcVar4 + sVar2;
    sVar2 = strlen(__s._M_p);
    pcVar3 = __s._M_p + sVar2;
    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;
    if (pcVar5 == pcVar4) {
      iVar1 = -1;
      goto LAB_00345aa7;
    }
    if (pcVar6 == pcVar3) {
      iVar1 = 1;
      goto LAB_00345aa7;
    }
    pcVar4 = pcVar4 + 1;
    __s._M_p = pcVar3 + 1;
  } while( true );
}



/* WARNING: Removing unreachable block (ram,0x00345ad1) */

int FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                undefined8 param_5)

{
  int iVar1;
  size_t sVar2;
  char *pcVar3;
  char *pcVar4;
  char *pcVar5;
  char *pcVar6;
  long local_70;
  char local_68 [16];
  char *local_58;
  long local_50;
  char local_48 [24];
  
  pcVar4 = local_68;
  FUN_001665c0();
  local_58 = local_48;
                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */
  FUN_001665c0(&local_58,param_4,param_5);
  pcVar5 = pcVar4 + local_70;
  pcVar6 = local_58 + local_50;
  pcVar3 = local_58;
  do {
    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);
    if (iVar1 != 0) {
LAB_00345aa7:
      if (local_58 != local_48) {
        FUN_002dac70();
      }
      return iVar1;
    }
    sVar2 = strlen(pcVar4);
    pcVar4 = pcVar4 + sVar2;
    sVar2 = strlen(pcVar3);
    pcVar3 = pcVar3 + sVar2;
    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;
    if (pcVar5 == pcVar4) {
      iVar1 = -1;
      goto LAB_00345aa7;
    }
    if (pcVar6 == pcVar3) {
      iVar1 = 1;
      goto LAB_00345aa7;
    }
    pcVar4 = pcVar4 + 1;
    pcVar3 = pcVar3 + 1;
  } while( true );
}


PUSH R15
MOV R15,RDI
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
MOV RBP,R8
PUSH RBX
MOV RBX,RCX
SUB RSP,0x58
LEA RDI,[RSP + 0x10]
LEA RAX,[RDI + 0x10]
MOV qword ptr [RSP],RDI
MOV qword ptr [RSP + 0x10],RAX
CALL 0x001665c0
LEA RDI,[RSP + 0x30]
MOV RDX,RBP
MOV RSI,RBX
LEA RAX,[RDI + 0x10]
MOV qword ptr [RSP + 0x8],RDI
MOV qword ptr [RSP + 0x30],RAX
CALL 0x001665c0
MOV RBP,qword ptr [RSP + 0x10]
MOV R13,qword ptr [RSP + 0x18]
MOV RBX,qword ptr [RSP + 0x30]
MOV R14,qword ptr [RSP + 0x38]
ADD R13,RBP
ADD R14,RBX
JMP 0x00345a92
MOV RDI,RBP
CALL 0x00147490
MOV RDI,RBX
ADD RBP,RAX
CALL 0x00147490
ADD RBX,RAX
CMP R13,RBP
JNZ 0x00345a80
CMP R14,RBX
JZ 0x00345aa7
CMP R13,RBP
JZ 0x00345af0
CMP R14,RBX
JZ 0x00345b00
ADD RBP,0x1
ADD RBX,0x1
MOV RDX,RBX
MOV RSI,RBP
MOV RDI,R15
CALL 0x003657c0
MOV R12D,EAX
TEST EAX,EAX
JZ 0x00345a60
MOV RAX,qword ptr [RSP + 0x8]
MOV RDI,qword ptr [RSP + 0x30]
ADD RAX,0x10
CMP RDI,RAX
JZ 0x00345abf
CALL 0x002dac70
MOV RAX,qword ptr [RSP]
MOV RDI,qword ptr [RSP + 0x10]
ADD RAX,0x10
CMP RDI,RAX
JZ 0x00345ad6
CALL 0x002dac70
ADD RSP,0x58
MOV EAX,R12D
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV R12D,0xffffffff
JMP 0x00345aa7
MOV R12D,0x1
JMP 0x00345aa7
(translation_unit "/* WARNING: Removing unreachable block (ram,0x00345ad1) */\n\nint FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  char *local_58;\n  long local_50;\n  char local_48 [24];\n  \n  pcVar4 = local_68;\n  FUN_001665c0();\n  local_58 = local_48;\n                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */\n  FUN_001665c0(&local_58,param_4,param_5);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58 + local_50;\n  pcVar3 = local_58;\n  do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );\n}\n\n" comment (function_definition "int FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  char *local_58;\n  long local_50;\n  char local_48 [24];\n  \n  pcVar4 = local_68;\n  FUN_001665c0();\n  local_58 = local_48;\n                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */\n  FUN_001665c0(&local_58,param_4,param_5);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58 + local_50;\n  pcVar3 = local_58;\n  do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );\n}" primitive_type (function_declarator "FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" identifier (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "undefined8 param_5" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  char *local_58;\n  long local_50;\n  char local_48 [24];\n  \n  pcVar4 = local_68;\n  FUN_001665c0();\n  local_58 = local_48;\n                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */\n  FUN_001665c0(&local_58,param_4,param_5);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58 + local_50;\n  pcVar3 = local_58;\n  do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long local_70;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_68 [16];" primitive_type (array_declarator "local_68 [16]" identifier [ number_literal ]) ;) (declaration "char *local_58;" primitive_type (pointer_declarator "*local_58" * identifier) ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_48 [24];" primitive_type (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "pcVar4 = local_68;" (assignment_expression "pcVar4 = local_68" identifier = identifier) ;) (expression_statement "FUN_001665c0();" (call_expression "FUN_001665c0()" identifier (argument_list "()" ( ))) ;) (expression_statement "local_58 = local_48;" (assignment_expression "local_58 = local_48" identifier = identifier) ;) comment (expression_statement "FUN_001665c0(&local_58,param_4,param_5);" (call_expression "FUN_001665c0(&local_58,param_4,param_5)" identifier (argument_list "(&local_58,param_4,param_5)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier ))) ;) (expression_statement "pcVar5 = pcVar4 + local_70;" (assignment_expression "pcVar5 = pcVar4 + local_70" identifier = (binary_expression "pcVar4 + local_70" identifier + identifier)) ;) (expression_statement "pcVar6 = local_58 + local_50;" (assignment_expression "pcVar6 = local_58 + local_50" identifier = (binary_expression "local_58 + local_50" identifier + identifier)) ;) (expression_statement "pcVar3 = local_58;" (assignment_expression "pcVar3 = local_58" identifier = identifier) ;) (do_statement "do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );" do (compound_statement "{\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  }" { (expression_statement "iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);" (assignment_expression "iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3)" identifier = (call_expression "FUN_003657c0(param_1,pcVar4,pcVar3)" identifier (argument_list "(param_1,pcVar4,pcVar3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }" { (labeled_statement "LAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }" statement_identifier : (if_statement "if (local_58 != local_48) {\n        FUN_002dac70();\n      }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n        FUN_002dac70();\n      }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar1;" return identifier ;) })) (expression_statement "sVar2 = strlen(pcVar4);" (assignment_expression "sVar2 = strlen(pcVar4)" identifier = (call_expression "strlen(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier )))) ;) (expression_statement "pcVar4 = pcVar4 + sVar2;" (assignment_expression "pcVar4 = pcVar4 + sVar2" identifier = (binary_expression "pcVar4 + sVar2" identifier + identifier)) ;) (expression_statement "sVar2 = strlen(pcVar3);" (assignment_expression "sVar2 = strlen(pcVar3)" identifier = (call_expression "strlen(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier )))) ;) (expression_statement "pcVar3 = pcVar3 + sVar2;" (assignment_expression "pcVar3 = pcVar3 + sVar2" identifier = (binary_expression "pcVar3 + sVar2" identifier + identifier)) ;) (if_statement "if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;" if (parenthesized_expression "((pcVar5 == pcVar4) && (pcVar6 == pcVar3))" ( (binary_expression "(pcVar5 == pcVar4) && (pcVar6 == pcVar3)" (parenthesized_expression "(pcVar5 == pcVar4)" ( (binary_expression "pcVar5 == pcVar4" identifier == identifier) )) && (parenthesized_expression "(pcVar6 == pcVar3)" ( (binary_expression "pcVar6 == pcVar3" identifier == identifier) ))) )) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;)) (if_statement "if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }" if (parenthesized_expression "(pcVar5 == pcVar4)" ( (binary_expression "pcVar5 == pcVar4" identifier == identifier) )) (compound_statement "{\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }" { (expression_statement "iVar1 = -1;" (assignment_expression "iVar1 = -1" identifier = number_literal) ;) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;) })) (if_statement "if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }" if (parenthesized_expression "(pcVar6 == pcVar3)" ( (binary_expression "pcVar6 == pcVar3" identifier == identifier) )) (compound_statement "{\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }" { (expression_statement "iVar1 = 1;" (assignment_expression "iVar1 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;) })) (expression_statement "pcVar4 = pcVar4 + 1;" (assignment_expression "pcVar4 = pcVar4 + 1" identifier = (binary_expression "pcVar4 + 1" identifier + number_literal)) ;) (expression_statement "pcVar3 = pcVar3 + 1;" (assignment_expression "pcVar3 = pcVar3 + 1" identifier = (binary_expression "pcVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "/* WARNING: Removing unreachable block (ram,0x00345ad1) */\n/* std::collate<char>::do_compare(char const*, char const*, char const*, char const*) const */\n\nint __thiscall\nstd::collate<char>::do_compare\n          (collate<char> *this,char *param_1,char *param_2,char *param_3,char *param_4)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  _Alloc_hider __s;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_58;\n  \n  pcVar4 = local_68;\n  __cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>();\n  local_58._M_dataplus._M_p = (pointer)&local_58.field_2;\n                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */\n  __cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>(&local_58,param_3,param_4);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58._M_dataplus._M_p + local_58._M_string_length;\n  __s._M_p = local_58._M_dataplus._M_p;\n  do {\n    iVar1 = _M_compare(this,pcVar4,__s._M_p);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(__s._M_p);\n    pcVar3 = __s._M_p + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    __s._M_p = pcVar3 + 1;\n  } while( true );\n}\n\n" comment comment (function_definition "int __thiscall\nstd::collate<char>::do_compare\n          (collate<char> *this,char *param_1,char *param_2,char *param_3,char *param_4)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  _Alloc_hider __s;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_58;\n  \n  pcVar4 = local_68;\n  __cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>();\n  local_58._M_dataplus._M_p = (pointer)&local_58.field_2;\n                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */\n  __cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>(&local_58,param_3,param_4);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58._M_dataplus._M_p + local_58._M_string_length;\n  __s._M_p = local_58._M_dataplus._M_p;\n  do {\n    iVar1 = _M_compare(this,pcVar4,__s._M_p);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(__s._M_p);\n    pcVar3 = __s._M_p + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    __s._M_p = pcVar3 + 1;\n  } while( true );\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::collate<char>::" identifier : : identifier < primitive_type > : :) (function_declarator "do_compare\n          (collate<char> *this,char *param_1,char *param_2,char *param_3,char *param_4)" identifier (parameter_list "(collate<char> *this,char *param_1,char *param_2,char *param_3,char *param_4)" ( (parameter_declaration "collate<char> *this" type_identifier (ERROR "<char>" < primitive_type >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "char *param_4" primitive_type (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  _Alloc_hider __s;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  basic_string<char,_std::char_traits<char>,_std::allocator<char>_> local_58;\n  \n  pcVar4 = local_68;\n  __cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>();\n  local_58._M_dataplus._M_p = (pointer)&local_58.field_2;\n                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */\n  __cxx11::basic_string<char,_std::char_traits<char>,_std::allocator<char>_>::\n  _M_construct<char_const*>(&local_58,param_3,param_4);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58._M_dataplus._M_p + local_58._M_string_length;\n  __s._M_p = local_58._M_dataplus._M_p;\n  do {\n    iVar1 = _M_compare(this,pcVar4,__s._M_p);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(__s._M_p);\n    pcVar3 = __s._M_p + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    __s._M_p = pcVar3 + 1;\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "_Alloc_hider __s;" type_identifier identifier ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long local_70;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_68 [16];" primitive_type (array_declarator "local_68 [16]" identifier [ number_literal ]) ;) (ERROR "basic_string<char,_std::char_traits<char>,_std::" (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (expression_statement "allocator<char>_> local_58;" (binary_expression "allocator<char>_> local_58" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > identifier) ;) (expression_statement "pcVar4 = local_68;" (assignment_expression "pcVar4 = local_68" identifier = identifier) ;) (ERROR "__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : :) (expression_statement "allocator<char>_>::\n  _M_construct<char_const*>();" (binary_expression "allocator<char>_>::\n  _M_construct<char_const" (binary_expression "allocator<char>_>::\n  _M_construct" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (ERROR "::" : :) identifier) < identifier) (ERROR "*>()" * > ( )) ;) (expression_statement "local_58._M_dataplus._M_p = (pointer)&local_58.field_2;" (assignment_expression "local_58._M_dataplus._M_p = (pointer)&local_58.field_2" (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier) = (binary_expression "(pointer)&local_58.field_2" (parenthesized_expression "(pointer)" ( identifier )) & (field_expression "local_58.field_2" identifier . field_identifier))) ;) comment (ERROR "__cxx11::basic_string<char,_std::char_traits<char>,_std::" (comma_expression "__cxx11::basic_string<char,_std::char_traits<char>,_std" identifier (ERROR "::basic_string<char,_std::char_traits<char>" : : (comma_expression "basic_string<char,_std" (binary_expression "basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char" identifier < identifier) >) , identifier) : :) (expression_statement "allocator<char>_>::\n  _M_construct<char_const*>(&local_58,param_3,param_4);" (binary_expression "allocator<char>_>::\n  _M_construct<char_const*>(&local_58,param_3,param_4)" (binary_expression "allocator<char>_>::\n  _M_construct<char_const" (binary_expression "allocator<char>_>::\n  _M_construct" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (ERROR "::" : :) identifier) < identifier) (ERROR "*" *) > (parenthesized_expression "(&local_58,param_3,param_4)" ( (comma_expression "&local_58,param_3,param_4" (pointer_expression "&local_58" & identifier) , (comma_expression "param_3,param_4" identifier , identifier)) ))) ;) (expression_statement "pcVar5 = pcVar4 + local_70;" (assignment_expression "pcVar5 = pcVar4 + local_70" identifier = (binary_expression "pcVar4 + local_70" identifier + identifier)) ;) (expression_statement "pcVar6 = local_58._M_dataplus._M_p + local_58._M_string_length;" (assignment_expression "pcVar6 = local_58._M_dataplus._M_p + local_58._M_string_length" identifier = (binary_expression "local_58._M_dataplus._M_p + local_58._M_string_length" (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier) + (field_expression "local_58._M_string_length" identifier . field_identifier))) ;) (expression_statement "__s._M_p = local_58._M_dataplus._M_p;" (assignment_expression "__s._M_p = local_58._M_dataplus._M_p" (field_expression "__s._M_p" identifier . field_identifier) = (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier)) ;) (do_statement "do {\n    iVar1 = _M_compare(this,pcVar4,__s._M_p);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(__s._M_p);\n    pcVar3 = __s._M_p + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    __s._M_p = pcVar3 + 1;\n  } while( true );" do (compound_statement "{\n    iVar1 = _M_compare(this,pcVar4,__s._M_p);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(__s._M_p);\n    pcVar3 = __s._M_p + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    __s._M_p = pcVar3 + 1;\n  }" { (expression_statement "iVar1 = _M_compare(this,pcVar4,__s._M_p);" (assignment_expression "iVar1 = _M_compare(this,pcVar4,__s._M_p)" identifier = (call_expression "_M_compare(this,pcVar4,__s._M_p)" identifier (argument_list "(this,pcVar4,__s._M_p)" ( identifier , identifier , (field_expression "__s._M_p" identifier . field_identifier) )))) ;) (if_statement "if (iVar1 != 0) {\nLAB_00345aa7:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }\n      return iVar1;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_00345aa7:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }\n      return iVar1;\n    }" { (labeled_statement "LAB_00345aa7:\n      if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }" statement_identifier : (if_statement "if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2) {\n        operator_delete(local_58._M_dataplus._M_p);\n      }" if (parenthesized_expression "((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2)" ( (parenthesized_expression "(anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2)" ( (ERROR "anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::" (comma_expression "anon_union_16_2_edb7204a_for_basic_string<char,_std" (binary_expression "anon_union_16_2_edb7204a_for_basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_9\n           *)local_58._M_dataplus._M_p != &local_58.field_2" (binary_expression "allocator<char>_>_9\n           *)local_58._M_dataplus._M_p" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (binary_expression "_9\n           *)local_58._M_dataplus._M_p" identifier * (ERROR ")" )) (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier))) != (pointer_expression "&local_58.field_2" & (field_expression "local_58.field_2" identifier . field_identifier))) )) )) (compound_statement "{\n        operator_delete(local_58._M_dataplus._M_p);\n      }" { (expression_statement "operator_delete(local_58._M_dataplus._M_p);" (call_expression "operator_delete(local_58._M_dataplus._M_p)" identifier (argument_list "(local_58._M_dataplus._M_p)" ( (field_expression "local_58._M_dataplus._M_p" (field_expression "local_58._M_dataplus" identifier . field_identifier) . field_identifier) ))) ;) }))) (return_statement "return iVar1;" return identifier ;) })) (expression_statement "sVar2 = strlen(pcVar4);" (assignment_expression "sVar2 = strlen(pcVar4)" identifier = (call_expression "strlen(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier )))) ;) (expression_statement "pcVar4 = pcVar4 + sVar2;" (assignment_expression "pcVar4 = pcVar4 + sVar2" identifier = (binary_expression "pcVar4 + sVar2" identifier + identifier)) ;) (expression_statement "sVar2 = strlen(__s._M_p);" (assignment_expression "sVar2 = strlen(__s._M_p)" identifier = (call_expression "strlen(__s._M_p)" identifier (argument_list "(__s._M_p)" ( (field_expression "__s._M_p" identifier . field_identifier) )))) ;) (expression_statement "pcVar3 = __s._M_p + sVar2;" (assignment_expression "pcVar3 = __s._M_p + sVar2" identifier = (binary_expression "__s._M_p + sVar2" (field_expression "__s._M_p" identifier . field_identifier) + identifier)) ;) (if_statement "if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;" if (parenthesized_expression "((pcVar5 == pcVar4) && (pcVar6 == pcVar3))" ( (binary_expression "(pcVar5 == pcVar4) && (pcVar6 == pcVar3)" (parenthesized_expression "(pcVar5 == pcVar4)" ( (binary_expression "pcVar5 == pcVar4" identifier == identifier) )) && (parenthesized_expression "(pcVar6 == pcVar3)" ( (binary_expression "pcVar6 == pcVar3" identifier == identifier) ))) )) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;)) (if_statement "if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }" if (parenthesized_expression "(pcVar5 == pcVar4)" ( (binary_expression "pcVar5 == pcVar4" identifier == identifier) )) (compound_statement "{\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }" { (expression_statement "iVar1 = -1;" (assignment_expression "iVar1 = -1" identifier = number_literal) ;) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;) })) (if_statement "if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }" if (parenthesized_expression "(pcVar6 == pcVar3)" ( (binary_expression "pcVar6 == pcVar3" identifier == identifier) )) (compound_statement "{\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }" { (expression_statement "iVar1 = 1;" (assignment_expression "iVar1 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;) })) (expression_statement "pcVar4 = pcVar4 + 1;" (assignment_expression "pcVar4 = pcVar4 + 1" identifier = (binary_expression "pcVar4 + 1" identifier + number_literal)) ;) (expression_statement "__s._M_p = pcVar3 + 1;" (assignment_expression "__s._M_p = pcVar3 + 1" (field_expression "__s._M_p" identifier . field_identifier) = (binary_expression "pcVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  char *local_58;\n  long local_50;\n  char local_48 [24];\n  \n  pcVar4 = local_68;\n  FUN_001665c0();\n  local_58 = local_48;\n                    \n  FUN_001665c0(&local_58,param_4,param_5);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58 + local_50;\n  pcVar3 = local_58;\n  do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );\n}\n\n" (function_definition "int FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  char *local_58;\n  long local_50;\n  char local_48 [24];\n  \n  pcVar4 = local_68;\n  FUN_001665c0();\n  local_58 = local_48;\n                    \n  FUN_001665c0(&local_58,param_4,param_5);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58 + local_50;\n  pcVar3 = local_58;\n  do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );\n}" primitive_type (function_declarator "FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" identifier (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "undefined8 param_4" type_identifier identifier) , (parameter_declaration "undefined8 param_5" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  char *local_58;\n  long local_50;\n  char local_48 [24];\n  \n  pcVar4 = local_68;\n  FUN_001665c0();\n  local_58 = local_48;\n                    \n  FUN_001665c0(&local_58,param_4,param_5);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58 + local_50;\n  pcVar3 = local_58;\n  do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "long local_70;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_68 [16];" primitive_type (array_declarator "local_68 [16]" identifier [ number_literal ]) ;) (declaration "char *local_58;" primitive_type (pointer_declarator "*local_58" * identifier) ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_48 [24];" primitive_type (array_declarator "local_48 [24]" identifier [ number_literal ]) ;) (expression_statement "pcVar4 = local_68;" (assignment_expression "pcVar4 = local_68" identifier = identifier) ;) (expression_statement "FUN_001665c0();" (call_expression "FUN_001665c0()" identifier (argument_list "()" ( ))) ;) (expression_statement "local_58 = local_48;" (assignment_expression "local_58 = local_48" identifier = identifier) ;) (expression_statement "FUN_001665c0(&local_58,param_4,param_5);" (call_expression "FUN_001665c0(&local_58,param_4,param_5)" identifier (argument_list "(&local_58,param_4,param_5)" ( (pointer_expression "&local_58" & identifier) , identifier , identifier ))) ;) (expression_statement "pcVar5 = pcVar4 + local_70;" (assignment_expression "pcVar5 = pcVar4 + local_70" identifier = (binary_expression "pcVar4 + local_70" identifier + identifier)) ;) (expression_statement "pcVar6 = local_58 + local_50;" (assignment_expression "pcVar6 = local_58 + local_50" identifier = (binary_expression "local_58 + local_50" identifier + identifier)) ;) (expression_statement "pcVar3 = local_58;" (assignment_expression "pcVar3 = local_58" identifier = identifier) ;) (do_statement "do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );" do (compound_statement "{\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  }" { (expression_statement "iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);" (assignment_expression "iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3)" identifier = (call_expression "FUN_003657c0(param_1,pcVar4,pcVar3)" identifier (argument_list "(param_1,pcVar4,pcVar3)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }" { (labeled_statement "LAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }" statement_identifier : (if_statement "if (local_58 != local_48) {\n        FUN_002dac70();\n      }" if (parenthesized_expression "(local_58 != local_48)" ( (binary_expression "local_58 != local_48" identifier != identifier) )) (compound_statement "{\n        FUN_002dac70();\n      }" { (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar1;" return identifier ;) })) (expression_statement "sVar2 = strlen(pcVar4);" (assignment_expression "sVar2 = strlen(pcVar4)" identifier = (call_expression "strlen(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier )))) ;) (expression_statement "pcVar4 = pcVar4 + sVar2;" (assignment_expression "pcVar4 = pcVar4 + sVar2" identifier = (binary_expression "pcVar4 + sVar2" identifier + identifier)) ;) (expression_statement "sVar2 = strlen(pcVar3);" (assignment_expression "sVar2 = strlen(pcVar3)" identifier = (call_expression "strlen(pcVar3)" identifier (argument_list "(pcVar3)" ( identifier )))) ;) (expression_statement "pcVar3 = pcVar3 + sVar2;" (assignment_expression "pcVar3 = pcVar3 + sVar2" identifier = (binary_expression "pcVar3 + sVar2" identifier + identifier)) ;) (if_statement "if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;" if (parenthesized_expression "((pcVar5 == pcVar4) && (pcVar6 == pcVar3))" ( (binary_expression "(pcVar5 == pcVar4) && (pcVar6 == pcVar3)" (parenthesized_expression "(pcVar5 == pcVar4)" ( (binary_expression "pcVar5 == pcVar4" identifier == identifier) )) && (parenthesized_expression "(pcVar6 == pcVar3)" ( (binary_expression "pcVar6 == pcVar3" identifier == identifier) ))) )) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;)) (if_statement "if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }" if (parenthesized_expression "(pcVar5 == pcVar4)" ( (binary_expression "pcVar5 == pcVar4" identifier == identifier) )) (compound_statement "{\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }" { (expression_statement "iVar1 = -1;" (assignment_expression "iVar1 = -1" identifier = number_literal) ;) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;) })) (if_statement "if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }" if (parenthesized_expression "(pcVar6 == pcVar3)" ( (binary_expression "pcVar6 == pcVar3" identifier == identifier) )) (compound_statement "{\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }" { (expression_statement "iVar1 = 1;" (assignment_expression "iVar1 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_00345aa7;" goto statement_identifier ;) })) (expression_statement "pcVar4 = pcVar4 + 1;" (assignment_expression "pcVar4 = pcVar4 + 1" identifier = (binary_expression "pcVar4 + 1" identifier + number_literal)) ;) (expression_statement "pcVar3 = pcVar3 + 1;" (assignment_expression "pcVar3 = pcVar3 + 1" identifier = (binary_expression "pcVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) && (parenthesized_expression ( (binary_expression IDENT == IDENT) ))) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)\n\n{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  char *local_58;\n  long local_50;\n  char local_48 [24];\n  \n  pcVar4 = local_68;\n  FUN_001665c0();\n  local_58 = local_48;\n                    \n  FUN_001665c0(&local_58,param_4,param_5);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58 + local_50;\n  pcVar3 = local_58;\n  do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );\n}" (primitive_type "int") (function_declarator "FUN_003459f0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" (identifier "FUN_003459f0") (parameter_list "(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n                undefined8 param_5)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) (, ",") (parameter_declaration "undefined8 param_5" (type_identifier "undefined8") (identifier "param_5")) () ")"))) (compound_statement "{\n  int iVar1;\n  size_t sVar2;\n  char *pcVar3;\n  char *pcVar4;\n  char *pcVar5;\n  char *pcVar6;\n  long local_70;\n  char local_68 [16];\n  char *local_58;\n  long local_50;\n  char local_48 [24];\n  \n  pcVar4 = local_68;\n  FUN_001665c0();\n  local_58 = local_48;\n                    \n  FUN_001665c0(&local_58,param_4,param_5);\n  pcVar5 = pcVar4 + local_70;\n  pcVar6 = local_58 + local_50;\n  pcVar3 = local_58;\n  do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "size_t sVar2;" (primitive_type "size_t") (identifier "sVar2") (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "char *pcVar4;" (primitive_type "char") (pointer_declarator "*pcVar4" (* "*") (identifier "pcVar4")) (; ";")) (declaration "char *pcVar5;" (primitive_type "char") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (declaration "long local_70;" (sized_type_specifier "long" (long "long")) (identifier "local_70") (; ";")) (declaration "char local_68 [16];" (primitive_type "char") (array_declarator "local_68 [16]" (identifier "local_68") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "char *local_58;" (primitive_type "char") (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (declaration "long local_50;" (sized_type_specifier "long" (long "long")) (identifier "local_50") (; ";")) (declaration "char local_48 [24];" (primitive_type "char") (array_declarator "local_48 [24]" (identifier "local_48") ([ "[") (number_literal "24") (] "]")) (; ";")) (expression_statement "pcVar4 = local_68;" (assignment_expression "pcVar4 = local_68" (identifier "pcVar4") (= "=") (identifier "local_68")) (; ";")) (expression_statement "FUN_001665c0();" (call_expression "FUN_001665c0()" (identifier "FUN_001665c0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "local_58 = local_48;" (assignment_expression "local_58 = local_48" (identifier "local_58") (= "=") (identifier "local_48")) (; ";")) (expression_statement "FUN_001665c0(&local_58,param_4,param_5);" (call_expression "FUN_001665c0(&local_58,param_4,param_5)" (identifier "FUN_001665c0") (argument_list "(&local_58,param_4,param_5)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "param_4") (, ",") (identifier "param_5") () ")"))) (; ";")) (expression_statement "pcVar5 = pcVar4 + local_70;" (assignment_expression "pcVar5 = pcVar4 + local_70" (identifier "pcVar5") (= "=") (binary_expression "pcVar4 + local_70" (identifier "pcVar4") (+ "+") (identifier "local_70"))) (; ";")) (expression_statement "pcVar6 = local_58 + local_50;" (assignment_expression "pcVar6 = local_58 + local_50" (identifier "pcVar6") (= "=") (binary_expression "local_58 + local_50" (identifier "local_58") (+ "+") (identifier "local_50"))) (; ";")) (expression_statement "pcVar3 = local_58;" (assignment_expression "pcVar3 = local_58" (identifier "pcVar3") (= "=") (identifier "local_58")) (; ";")) (do_statement "do {\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  } while( true );" (do "do") (compound_statement "{\n    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);\n    if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }\n    sVar2 = strlen(pcVar4);\n    pcVar4 = pcVar4 + sVar2;\n    sVar2 = strlen(pcVar3);\n    pcVar3 = pcVar3 + sVar2;\n    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;\n    if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }\n    if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }\n    pcVar4 = pcVar4 + 1;\n    pcVar3 = pcVar3 + 1;\n  }" ({ "{") (expression_statement "iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);" (assignment_expression "iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3)" (identifier "iVar1") (= "=") (call_expression "FUN_003657c0(param_1,pcVar4,pcVar3)" (identifier "FUN_003657c0") (argument_list "(param_1,pcVar4,pcVar3)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar4") (, ",") (identifier "pcVar3") () ")")))) (; ";")) (if_statement "if (iVar1 != 0) {\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }\n      return iVar1;\n    }" ({ "{") (labeled_statement "LAB_00345aa7:\n      if (local_58 != local_48) {\n        FUN_002dac70();\n      }" (statement_identifier "LAB_00345aa7") (: ":") (if_statement "if (local_58 != local_48) {\n        FUN_002dac70();\n      }" (if "if") (parenthesized_expression "(local_58 != local_48)" (( "(") (binary_expression "local_58 != local_48" (identifier "local_58") (!= "!=") (identifier "local_48")) () ")")) (compound_statement "{\n        FUN_002dac70();\n      }" ({ "{") (expression_statement "FUN_002dac70();" (call_expression "FUN_002dac70()" (identifier "FUN_002dac70") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return iVar1;" (return "return") (identifier "iVar1") (; ";")) (} "}"))) (expression_statement "sVar2 = strlen(pcVar4);" (assignment_expression "sVar2 = strlen(pcVar4)" (identifier "sVar2") (= "=") (call_expression "strlen(pcVar4)" (identifier "strlen") (argument_list "(pcVar4)" (( "(") (identifier "pcVar4") () ")")))) (; ";")) (expression_statement "pcVar4 = pcVar4 + sVar2;" (assignment_expression "pcVar4 = pcVar4 + sVar2" (identifier "pcVar4") (= "=") (binary_expression "pcVar4 + sVar2" (identifier "pcVar4") (+ "+") (identifier "sVar2"))) (; ";")) (expression_statement "sVar2 = strlen(pcVar3);" (assignment_expression "sVar2 = strlen(pcVar3)" (identifier "sVar2") (= "=") (call_expression "strlen(pcVar3)" (identifier "strlen") (argument_list "(pcVar3)" (( "(") (identifier "pcVar3") () ")")))) (; ";")) (expression_statement "pcVar3 = pcVar3 + sVar2;" (assignment_expression "pcVar3 = pcVar3 + sVar2" (identifier "pcVar3") (= "=") (binary_expression "pcVar3 + sVar2" (identifier "pcVar3") (+ "+") (identifier "sVar2"))) (; ";")) (if_statement "if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;" (if "if") (parenthesized_expression "((pcVar5 == pcVar4) && (pcVar6 == pcVar3))" (( "(") (binary_expression "(pcVar5 == pcVar4) && (pcVar6 == pcVar3)" (parenthesized_expression "(pcVar5 == pcVar4)" (( "(") (binary_expression "pcVar5 == pcVar4" (identifier "pcVar5") (== "==") (identifier "pcVar4")) () ")")) (&& "&&") (parenthesized_expression "(pcVar6 == pcVar3)" (( "(") (binary_expression "pcVar6 == pcVar3" (identifier "pcVar6") (== "==") (identifier "pcVar3")) () ")"))) () ")")) (goto_statement "goto LAB_00345aa7;" (goto "goto") (statement_identifier "LAB_00345aa7") (; ";"))) (if_statement "if (pcVar5 == pcVar4) {\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }" (if "if") (parenthesized_expression "(pcVar5 == pcVar4)" (( "(") (binary_expression "pcVar5 == pcVar4" (identifier "pcVar5") (== "==") (identifier "pcVar4")) () ")")) (compound_statement "{\n      iVar1 = -1;\n      goto LAB_00345aa7;\n    }" ({ "{") (expression_statement "iVar1 = -1;" (assignment_expression "iVar1 = -1" (identifier "iVar1") (= "=") (number_literal "-1")) (; ";")) (goto_statement "goto LAB_00345aa7;" (goto "goto") (statement_identifier "LAB_00345aa7") (; ";")) (} "}"))) (if_statement "if (pcVar6 == pcVar3) {\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }" (if "if") (parenthesized_expression "(pcVar6 == pcVar3)" (( "(") (binary_expression "pcVar6 == pcVar3" (identifier "pcVar6") (== "==") (identifier "pcVar3")) () ")")) (compound_statement "{\n      iVar1 = 1;\n      goto LAB_00345aa7;\n    }" ({ "{") (expression_statement "iVar1 = 1;" (assignment_expression "iVar1 = 1" (identifier "iVar1") (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_00345aa7;" (goto "goto") (statement_identifier "LAB_00345aa7") (; ";")) (} "}"))) (expression_statement "pcVar4 = pcVar4 + 1;" (assignment_expression "pcVar4 = pcVar4 + 1" (identifier "pcVar4") (= "=") (binary_expression "pcVar4 + 1" (identifier "pcVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pcVar3 = pcVar3 + 1;" (assignment_expression "pcVar3 = pcVar3 + 1" (identifier "pcVar3") (= "=") (binary_expression "pcVar3 + 1" (identifier "pcVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

/* WARNING: Removing unreachable block (ram,0x00345ad1) */
/* std::collate<char>::do_compare(char const*, char const*, char const*, char const*) const */

int __thiscall
std::type_1<char>::function_1
          (type_1<char> *this,char *param_1,char *param_2,char *param_3,char *param_4)

{
  int var_10;
  size_t var_14;
  char *var_17;
  type_2 __s;
  char *var_7;
  char *var_15;
  char *var_16;
  long var_8;
  char local_68 [16];
  basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3> var_4;
  
  var_7 = local_68;
  __cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>::
  var_5<var_6*>();
  var_4._M_dataplus._M_p = (pointer)&var_4.field_2;
                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */
  __cxx11::basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>::
  var_5<var_6*>(&var_4,param_3,param_4);
  var_15 = var_7 + var_8;
  var_16 = var_4._M_dataplus._M_p + var_4._M_string_length;
  __s._M_p = var_4._M_dataplus._M_p;
  do {
    var_10 = var_9(this,var_7,__s._M_p);
    if (var_10 != 0) {
LAB_00345aa7:
      if ((anon_union_16_2_edb7204a_for_basic_string<var_2,_std::char_traits<var_2>,_std::var_1<var_2>var_3>var_11
           *)var_4._M_dataplus._M_p != &var_4.field_2) {
        var_12(var_4._M_dataplus._M_p);
      }
      return var_10;
    }
    var_14 = var_13(var_7);
    var_7 = var_7 + var_14;
    var_14 = var_13(__s._M_p);
    var_17 = __s._M_p + var_14;
    if ((var_15 == var_7) && (var_16 == var_17)) goto LAB_00345aa7;
    if (var_15 == var_7) {
      var_10 = -1;
      goto LAB_00345aa7;
    }
    if (var_16 == var_17) {
      var_10 = 1;
      goto LAB_00345aa7;
    }
    var_7 = var_7 + 1;
    __s._M_p = var_17 + 1;
  } while( true );
}


(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: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (true))))))

/* WARNING: Removing unreachable block (ram,0x00345ad1) */

int MASKED(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                undefined8 param_5)

{
  int iVar1;
  size_t sVar2;
  char *pcVar3;
  char *pcVar4;
  char *pcVar5;
  char *pcVar6;
  long local_70;
  char local_68 [16];
  char *local_58;
  long local_50;
  char local_48 [24];
  
  pcVar4 = local_68;
  FUN_001665c0();
  local_58 = local_48;
                    /* try { // try from 00345a37 to 00345a3b has its CatchHandler @ 00345b08 */
  FUN_001665c0(&local_58,param_4,param_5);
  pcVar5 = pcVar4 + local_70;
  pcVar6 = local_58 + local_50;
  pcVar3 = local_58;
  do {
    iVar1 = FUN_003657c0(param_1,pcVar4,pcVar3);
    if (iVar1 != 0) {
LAB_00345aa7:
      if (local_58 != local_48) {
        FUN_002dac70();
      }
      return iVar1;
    }
    sVar2 = strlen(pcVar4);
    pcVar4 = pcVar4 + sVar2;
    sVar2 = strlen(pcVar3);
    pcVar3 = pcVar3 + sVar2;
    if ((pcVar5 == pcVar4) && (pcVar6 == pcVar3)) goto LAB_00345aa7;
    if (pcVar5 == pcVar4) {
      iVar1 = -1;
      goto LAB_00345aa7;
    }
    if (pcVar6 == pcVar3) {
      iVar1 = 1;
      goto LAB_00345aa7;
    }
    pcVar4 = pcVar4 + 1;
    pcVar3 = pcVar3 + 1;
  } while( true );
}

