
/* std::messages_byname<char>::messages_byname(char const*, unsigned long) */

void __thiscall
std::messages_byname<char>::messages_byname(messages_byname<char> *this,char *param_1,ulong param_2)

{
  char *pcVar1;
  int iVar2;
  char *__s2;
  size_t sVar3;
  void *pvVar4;
  long lVar5;
  byte *pbVar6;
  byte *pbVar7;
  undefined1 uVar8;
  bool bVar9;
  undefined1 uVar10;
  bool bVar11;
  byte bVar12;
  
  bVar12 = 0;
  messages<char>::messages((messages<char> *)this,param_2);
  pcVar1 = *(char **)(this + 0x18);
  *(undefined ***)this = &PTR__messages_byname_00439220;
  __s2 = (char *)locale::facet::_S_get_c_name();
  uVar8 = pcVar1 < __s2;
  uVar10 = pcVar1 == __s2;
  if (!(bool)uVar10) {
    if (pcVar1 != (char *)0x0) {
      operator_delete__(pcVar1);
    }
    iVar2 = strcmp(param_1,__s2);
    uVar8 = 0;
    uVar10 = iVar2 == 0;
    if ((bool)uVar10) {
      *(char **)(this + 0x18) = __s2;
    }
    else {
      sVar3 = strlen(param_1);
                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */
      pvVar4 = operator_new__(sVar3 + 1);
      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);
      *(void **)(this + 0x18) = pvVar4;
    }
  }
  lVar5 = 2;
  pbVar6 = (byte *)param_1;
  pbVar7 = (byte *)0x3853b6;
  do {
    if (lVar5 == 0) break;
    lVar5 = lVar5 + -1;
    uVar8 = *pbVar6 < *pbVar7;
    uVar10 = *pbVar6 == *pbVar7;
    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;
    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;
  } while ((bool)uVar10);
  bVar9 = false;
  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;
  if (!bVar11) {
    lVar5 = 6;
    pbVar6 = (byte *)param_1;
    pbVar7 = (byte *)"POSIX";
    do {
      if (lVar5 == 0) break;
      lVar5 = lVar5 + -1;
      bVar9 = *pbVar6 < *pbVar7;
      bVar11 = *pbVar6 == *pbVar7;
      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;
      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;
    } while (bVar11);
    if ((!bVar9 && !bVar11) != bVar9) {
      locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));
      locale::facet::_S_create_c_locale
                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);
      return;
    }
  }
  return;
}



void FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)

{
  char *pcVar1;
  int iVar2;
  char *__s2;
  size_t sVar3;
  void *pvVar4;
  long lVar5;
  byte *pbVar6;
  byte *pbVar7;
  undefined1 uVar8;
  bool bVar9;
  undefined1 uVar10;
  bool bVar11;
  byte bVar12;
  
  bVar12 = 0;
  FUN_002ec000(param_1,param_3);
  pcVar1 = (char *)param_1[3];
  *param_1 = &PTR_FUN_00439220;
  __s2 = (char *)FUN_002dcfb0();
  uVar8 = pcVar1 < __s2;
  uVar10 = pcVar1 == __s2;
  if (!(bool)uVar10) {
    if (pcVar1 != (char *)0x0) {
      thunk_FUN_002dac60(pcVar1);
    }
    iVar2 = strcmp((char *)param_2,__s2);
    uVar8 = 0;
    uVar10 = iVar2 == 0;
    if ((bool)uVar10) {
      param_1[3] = __s2;
    }
    else {
      sVar3 = strlen((char *)param_2);
                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */
      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);
      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);
      param_1[3] = pvVar4;
    }
  }
  lVar5 = 2;
  pbVar6 = param_2;
  pbVar7 = (byte *)0x3853b6;
  do {
    if (lVar5 == 0) break;
    lVar5 = lVar5 + -1;
    uVar8 = *pbVar6 < *pbVar7;
    uVar10 = *pbVar6 == *pbVar7;
    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;
    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;
  } while ((bool)uVar10);
  bVar9 = false;
  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;
  if (!bVar11) {
    lVar5 = 6;
    pbVar6 = param_2;
    pbVar7 = (byte *)"POSIX";
    do {
      if (lVar5 == 0) break;
      lVar5 = lVar5 + -1;
      bVar9 = *pbVar6 < *pbVar7;
      bVar11 = *pbVar6 == *pbVar7;
      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;
      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;
    } while (bVar11);
    if ((!bVar9 && !bVar11) != bVar9) {
      FUN_0031bb60(param_1 + 2);
      FUN_0031bb30(param_1 + 2,param_2,0);
      return;
    }
  }
  return;
}


PUSH R13
PUSH R12
PUSH RBP
MOV RBP,RSI
MOV RSI,RDX
PUSH RBX
MOV RBX,RDI
SUB RSP,0x8
CALL 0x002ec000
LEA RAX,[0x439210]
MOV R13,qword ptr [RBX + 0x18]
ADD RAX,0x10
MOV qword ptr [RBX],RAX
CALL 0x002dcfb0
CMP R13,RAX
JZ 0x002ec1e7
MOV R12,RAX
TEST R13,R13
JZ 0x002ec1d4
MOV RDI,R13
CALL 0x002dac30
MOV RSI,R12
MOV RDI,RBP
CALL 0x001477a0
TEST EAX,EAX
JNZ 0x002ec230
MOV qword ptr [RBX + 0x18],R12
MOV ECX,0x2
LEA RDI,[0x3853b6]
MOV RSI,RBP
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JZ 0x002ec21b
MOV ECX,0x6
LEA RDI,[0x3912e7]
MOV RSI,RBP
CMPSB.REPE RDI,RSI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x002ec260
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
RET
MOV RDI,RBP
CALL 0x00147490
LEA R12,[RAX + 0x1]
MOV RDI,R12
CALL 0x002d9430
MOV RDX,R12
MOV RSI,RBP
MOV RDI,RAX
CALL 0x00147aa0
MOV qword ptr [RBX + 0x18],RAX
JMP 0x002ec1e7
LEA R12,[RBX + 0x10]
MOV RDI,R12
CALL 0x0031bb60
XOR EDX,EDX
MOV RSI,RBP
MOV RDI,R12
CALL 0x0031bb30
ADD RSP,0x8
POP RBX
POP RBP
POP R12
POP R13
RET
(translation_unit "void FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  FUN_002ec000(param_1,param_3);\n  pcVar1 = (char *)param_1[3];\n  *param_1 = &PTR_FUN_00439220;\n  __s2 = (char *)FUN_002dcfb0();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = param_2;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  FUN_002ec000(param_1,param_3);\n  pcVar1 = (char *)param_1[3];\n  *param_1 = &PTR_FUN_00439220;\n  __s2 = (char *)FUN_002dcfb0();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = param_2;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 *param_1,byte *param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  FUN_002ec000(param_1,param_3);\n  pcVar1 = (char *)param_1[3];\n  *param_1 = &PTR_FUN_00439220;\n  __s2 = (char *)FUN_002dcfb0();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = param_2;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }\n  return;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "undefined1 uVar8;" type_identifier identifier ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "undefined1 uVar10;" type_identifier identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "byte bVar12;" type_identifier identifier ;) (expression_statement "bVar12 = 0;" (assignment_expression "bVar12 = 0" identifier = number_literal) ;) (expression_statement "FUN_002ec000(param_1,param_3);" (call_expression "FUN_002ec000(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier ))) ;) (expression_statement "pcVar1 = (char *)param_1[3];" (assignment_expression "pcVar1 = (char *)param_1[3]" identifier = (cast_expression "(char *)param_1[3]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "*param_1 = &PTR_FUN_00439220;" (assignment_expression "*param_1 = &PTR_FUN_00439220" (pointer_expression "*param_1" * identifier) = (pointer_expression "&PTR_FUN_00439220" & identifier)) ;) (expression_statement "__s2 = (char *)FUN_002dcfb0();" (assignment_expression "__s2 = (char *)FUN_002dcfb0()" identifier = (cast_expression "(char *)FUN_002dcfb0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002dcfb0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "uVar8 = pcVar1 < __s2;" (assignment_expression "uVar8 = pcVar1 < __s2" identifier = (binary_expression "pcVar1 < __s2" identifier < identifier)) ;) (expression_statement "uVar10 = pcVar1 == __s2;" (assignment_expression "uVar10 = pcVar1 == __s2" identifier = (binary_expression "pcVar1 == __s2" identifier == identifier)) ;) (if_statement "if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }" if (parenthesized_expression "(!(bool)uVar10)" ( (unary_expression "!(bool)uVar10" ! (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }" { (if_statement "if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }" if (parenthesized_expression "(pcVar1 != (char *)0x0)" ( (binary_expression "pcVar1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      thunk_FUN_002dac60(pcVar1);\n    }" { (expression_statement "thunk_FUN_002dac60(pcVar1);" (call_expression "thunk_FUN_002dac60(pcVar1)" identifier (argument_list "(pcVar1)" ( identifier ))) ;) })) (expression_statement "iVar2 = strcmp((char *)param_2,__s2);" (assignment_expression "iVar2 = strcmp((char *)param_2,__s2)" identifier = (call_expression "strcmp((char *)param_2,__s2)" identifier (argument_list "((char *)param_2,__s2)" ( (cast_expression "(char *)param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar10 = iVar2 == 0;" (assignment_expression "uVar10 = iVar2 == 0" identifier = (binary_expression "iVar2 == 0" identifier == number_literal)) ;) (if_statement "if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" if (parenthesized_expression "((bool)uVar10)" ( (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier) )) (compound_statement "{\n      param_1[3] = __s2;\n    }" { (expression_statement "param_1[3] = __s2;" (assignment_expression "param_1[3] = __s2" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) }) (else_clause "else {\n      sVar3 = strlen((char *)param_2);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" else (compound_statement "{\n      sVar3 = strlen((char *)param_2);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" { (expression_statement "sVar3 = strlen((char *)param_2);" (assignment_expression "sVar3 = strlen((char *)param_2)" identifier = (call_expression "strlen((char *)param_2)" identifier (argument_list "((char *)param_2)" ( (cast_expression "(char *)param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) comment (expression_statement "pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);" (assignment_expression "pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1)" identifier = (cast_expression "(void *)thunk_FUN_002d9490(sVar3 + 1)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002d9490(sVar3 + 1)" identifier (argument_list "(sVar3 + 1)" ( (binary_expression "sVar3 + 1" identifier + number_literal) ))))) ;) (expression_statement "pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);" (assignment_expression "pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1)" identifier = (call_expression "memcpy(pvVar4,param_2,sVar3 + 1)" identifier (argument_list "(pvVar4,param_2,sVar3 + 1)" ( identifier , identifier , (binary_expression "sVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "param_1[3] = pvVar4;" (assignment_expression "param_1[3] = pvVar4" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) }))) })) (expression_statement "lVar5 = 2;" (assignment_expression "lVar5 = 2" identifier = number_literal) ;) (expression_statement "pbVar6 = param_2;" (assignment_expression "pbVar6 = param_2" identifier = identifier) ;) (expression_statement "pbVar7 = (byte *)0x3853b6;" (assignment_expression "pbVar7 = (byte *)0x3853b6" identifier = (cast_expression "(byte *)0x3853b6" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);" do (compound_statement "{\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  }" { (if_statement "if (lVar5 == 0) break;" if (parenthesized_expression "(lVar5 == 0)" ( (binary_expression "lVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar5 = lVar5 + -1;" (assignment_expression "lVar5 = lVar5 + -1" identifier = (binary_expression "lVar5 + -1" identifier + number_literal)) ;) (expression_statement "uVar8 = *pbVar6 < *pbVar7;" (assignment_expression "uVar8 = *pbVar6 < *pbVar7" identifier = (binary_expression "*pbVar6 < *pbVar7" (pointer_expression "*pbVar6" * identifier) < (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "uVar10 = *pbVar6 == *pbVar7;" (assignment_expression "uVar10 = *pbVar6 == *pbVar7" identifier = (binary_expression "*pbVar6 == *pbVar7" (pointer_expression "*pbVar6" * identifier) == (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar6 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar10)" ( (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (expression_statement "bVar9 = false;" (assignment_expression "bVar9 = false" identifier = false) ;) (expression_statement "bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;" (assignment_expression "bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8" identifier = (binary_expression "(!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8" (parenthesized_expression "(!(bool)uVar8 && !(bool)uVar10)" ( (binary_expression "!(bool)uVar8 && !(bool)uVar10" (unary_expression "!(bool)uVar8" ! (cast_expression "(bool)uVar8" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar10" ! (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar8" ( (type_descriptor "bool" primitive_type) ) identifier))) ;) (if_statement "if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }" if (parenthesized_expression "(!bVar11)" ( (unary_expression "!bVar11" ! identifier) )) (compound_statement "{\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }" { (expression_statement "lVar5 = 6;" (assignment_expression "lVar5 = 6" identifier = number_literal) ;) (expression_statement "pbVar6 = param_2;" (assignment_expression "pbVar6 = param_2" identifier = identifier) ;) (expression_statement "pbVar7 = (byte *)"POSIX";" (assignment_expression "pbVar7 = (byte *)"POSIX"" identifier = (cast_expression "(byte *)"POSIX"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""POSIX"" " string_content "))) ;) (do_statement "do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);" do (compound_statement "{\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    }" { (if_statement "if (lVar5 == 0) break;" if (parenthesized_expression "(lVar5 == 0)" ( (binary_expression "lVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar5 = lVar5 + -1;" (assignment_expression "lVar5 = lVar5 + -1" identifier = (binary_expression "lVar5 + -1" identifier + number_literal)) ;) (expression_statement "bVar9 = *pbVar6 < *pbVar7;" (assignment_expression "bVar9 = *pbVar6 < *pbVar7" identifier = (binary_expression "*pbVar6 < *pbVar7" (pointer_expression "*pbVar6" * identifier) < (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "bVar11 = *pbVar6 == *pbVar7;" (assignment_expression "bVar11 = *pbVar6 == *pbVar7" identifier = (binary_expression "*pbVar6 == *pbVar7" (pointer_expression "*pbVar6" * identifier) == (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar6 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar11)" ( identifier )) ;) (if_statement "if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }" if (parenthesized_expression "((!bVar9 && !bVar11) != bVar9)" ( (binary_expression "(!bVar9 && !bVar11) != bVar9" (parenthesized_expression "(!bVar9 && !bVar11)" ( (binary_expression "!bVar9 && !bVar11" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar11" ! identifier)) )) != identifier) )) (compound_statement "{\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }" { (expression_statement "FUN_0031bb60(param_1 + 2);" (call_expression "FUN_0031bb60(param_1 + 2)" identifier (argument_list "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) ))) ;) (expression_statement "FUN_0031bb30(param_1 + 2,param_2,0);" (call_expression "FUN_0031bb30(param_1 + 2,param_2,0)" identifier (argument_list "(param_1 + 2,param_2,0)" ( (binary_expression "param_1 + 2" identifier + number_literal) , identifier , number_literal ))) ;) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "/* std::messages_byname<char>::messages_byname(char const*, unsigned long) */\n\nvoid __thiscall\nstd::messages_byname<char>::messages_byname(messages_byname<char> *this,char *param_1,ulong param_2)\n\n{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  messages<char>::messages((messages<char> *)this,param_2);\n  pcVar1 = *(char **)(this + 0x18);\n  *(undefined ***)this = &PTR__messages_byname_00439220;\n  __s2 = (char *)locale::facet::_S_get_c_name();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      operator_delete__(pcVar1);\n    }\n    iVar2 = strcmp(param_1,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      *(char **)(this + 0x18) = __s2;\n    }\n    else {\n      sVar3 = strlen(param_1);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = operator_new__(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);\n      *(void **)(this + 0x18) = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = (byte *)param_1;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = (byte *)param_1;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));\n      locale::facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);\n      return;\n    }\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall\nstd::messages_byname<char>::messages_byname(messages_byname<char> *this,char *param_1,ulong param_2)\n\n{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  messages<char>::messages((messages<char> *)this,param_2);\n  pcVar1 = *(char **)(this + 0x18);\n  *(undefined ***)this = &PTR__messages_byname_00439220;\n  __s2 = (char *)locale::facet::_S_get_c_name();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      operator_delete__(pcVar1);\n    }\n    iVar2 = strcmp(param_1,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      *(char **)(this + 0x18) = __s2;\n    }\n    else {\n      sVar3 = strlen(param_1);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = operator_new__(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);\n      *(void **)(this + 0x18) = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = (byte *)param_1;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = (byte *)param_1;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));\n      locale::facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);\n      return;\n    }\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::messages_byname<char>::" identifier : : identifier < primitive_type > : :) (function_declarator "messages_byname(messages_byname<char> *this,char *param_1,ulong param_2)" identifier (parameter_list "(messages_byname<char> *this,char *param_1,ulong param_2)" ( (parameter_declaration "messages_byname<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 "ulong param_2" type_identifier identifier) ))) (compound_statement "{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  messages<char>::messages((messages<char> *)this,param_2);\n  pcVar1 = *(char **)(this + 0x18);\n  *(undefined ***)this = &PTR__messages_byname_00439220;\n  __s2 = (char *)locale::facet::_S_get_c_name();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      operator_delete__(pcVar1);\n    }\n    iVar2 = strcmp(param_1,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      *(char **)(this + 0x18) = __s2;\n    }\n    else {\n      sVar3 = strlen(param_1);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = operator_new__(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);\n      *(void **)(this + 0x18) = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = (byte *)param_1;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = (byte *)param_1;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));\n      locale::facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);\n      return;\n    }\n  }\n  return;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "undefined1 uVar8;" type_identifier identifier ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "undefined1 uVar10;" type_identifier identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "byte bVar12;" type_identifier identifier ;) (expression_statement "bVar12 = 0;" (assignment_expression "bVar12 = 0" identifier = number_literal) ;) (expression_statement "messages<char>::messages((messages<char> *)this,param_2);" (binary_expression "messages<char>::messages((messages<char> *)this,param_2)" (binary_expression "messages<char" identifier < identifier) > (ERROR "::" : :) (call_expression "messages((messages<char> *)this,param_2)" identifier (argument_list "((messages<char> *)this,param_2)" ( (parenthesized_expression "(messages<char> *)this,param_2)" ( (comma_expression "messages<char> *)this,param_2" (binary_expression "messages<char> *)this" (binary_expression "messages<char" identifier < identifier) > (pointer_expression "*)this" * (ERROR ")" )) identifier)) , identifier) )) )))) ;) (expression_statement "pcVar1 = *(char **)(this + 0x18);" (assignment_expression "pcVar1 = *(char **)(this + 0x18)" identifier = (pointer_expression "*(char **)(this + 0x18)" * (cast_expression "(char **)(this + 0x18)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) ))))) ;) (expression_statement "*(undefined ***)this = &PTR__messages_byname_00439220;" (assignment_expression "*(undefined ***)this = &PTR__messages_byname_00439220" (pointer_expression "*(undefined ***)this" * (cast_expression "(undefined ***)this" ( (type_descriptor "undefined ***" type_identifier (abstract_pointer_declarator "***" * (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *)))) ) identifier)) = (pointer_expression "&PTR__messages_byname_00439220" & identifier)) ;) (ERROR "__s2 = (char *)locale::" (assignment_expression "__s2 = (char *)locale" identifier = (cast_expression "(char *)locale" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) : :) (labeled_statement "facet::_S_get_c_name();" statement_identifier : (ERROR ":" :) (expression_statement "_S_get_c_name();" (call_expression "_S_get_c_name()" identifier (argument_list "()" ( ))) ;)) (expression_statement "uVar8 = pcVar1 < __s2;" (assignment_expression "uVar8 = pcVar1 < __s2" identifier = (binary_expression "pcVar1 < __s2" identifier < identifier)) ;) (expression_statement "uVar10 = pcVar1 == __s2;" (assignment_expression "uVar10 = pcVar1 == __s2" identifier = (binary_expression "pcVar1 == __s2" identifier == identifier)) ;) (if_statement "if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      operator_delete__(pcVar1);\n    }\n    iVar2 = strcmp(param_1,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      *(char **)(this + 0x18) = __s2;\n    }\n    else {\n      sVar3 = strlen(param_1);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = operator_new__(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);\n      *(void **)(this + 0x18) = pvVar4;\n    }\n  }" if (parenthesized_expression "(!(bool)uVar10)" ( (unary_expression "!(bool)uVar10" ! (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    if (pcVar1 != (char *)0x0) {\n      operator_delete__(pcVar1);\n    }\n    iVar2 = strcmp(param_1,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      *(char **)(this + 0x18) = __s2;\n    }\n    else {\n      sVar3 = strlen(param_1);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = operator_new__(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);\n      *(void **)(this + 0x18) = pvVar4;\n    }\n  }" { (if_statement "if (pcVar1 != (char *)0x0) {\n      operator_delete__(pcVar1);\n    }" if (parenthesized_expression "(pcVar1 != (char *)0x0)" ( (binary_expression "pcVar1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      operator_delete__(pcVar1);\n    }" { (expression_statement "operator_delete__(pcVar1);" (call_expression "operator_delete__(pcVar1)" identifier (argument_list "(pcVar1)" ( identifier ))) ;) })) (expression_statement "iVar2 = strcmp(param_1,__s2);" (assignment_expression "iVar2 = strcmp(param_1,__s2)" identifier = (call_expression "strcmp(param_1,__s2)" identifier (argument_list "(param_1,__s2)" ( identifier , identifier )))) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar10 = iVar2 == 0;" (assignment_expression "uVar10 = iVar2 == 0" identifier = (binary_expression "iVar2 == 0" identifier == number_literal)) ;) (if_statement "if ((bool)uVar10) {\n      *(char **)(this + 0x18) = __s2;\n    }\n    else {\n      sVar3 = strlen(param_1);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = operator_new__(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);\n      *(void **)(this + 0x18) = pvVar4;\n    }" if (parenthesized_expression "((bool)uVar10)" ( (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier) )) (compound_statement "{\n      *(char **)(this + 0x18) = __s2;\n    }" { (expression_statement "*(char **)(this + 0x18) = __s2;" (assignment_expression "*(char **)(this + 0x18) = __s2" (pointer_expression "*(char **)(this + 0x18)" * (cast_expression "(char **)(this + 0x18)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      sVar3 = strlen(param_1);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = operator_new__(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);\n      *(void **)(this + 0x18) = pvVar4;\n    }" else (compound_statement "{\n      sVar3 = strlen(param_1);\n                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */\n      pvVar4 = operator_new__(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);\n      *(void **)(this + 0x18) = pvVar4;\n    }" { (expression_statement "sVar3 = strlen(param_1);" (assignment_expression "sVar3 = strlen(param_1)" identifier = (call_expression "strlen(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) comment (expression_statement "pvVar4 = operator_new__(sVar3 + 1);" (assignment_expression "pvVar4 = operator_new__(sVar3 + 1)" identifier = (call_expression "operator_new__(sVar3 + 1)" identifier (argument_list "(sVar3 + 1)" ( (binary_expression "sVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1);" (assignment_expression "pvVar4 = memcpy(pvVar4,param_1,sVar3 + 1)" identifier = (call_expression "memcpy(pvVar4,param_1,sVar3 + 1)" identifier (argument_list "(pvVar4,param_1,sVar3 + 1)" ( identifier , identifier , (binary_expression "sVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "*(void **)(this + 0x18) = pvVar4;" (assignment_expression "*(void **)(this + 0x18) = pvVar4" (pointer_expression "*(void **)(this + 0x18)" * (cast_expression "(void **)(this + 0x18)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) = identifier) ;) }))) })) (expression_statement "lVar5 = 2;" (assignment_expression "lVar5 = 2" identifier = number_literal) ;) (expression_statement "pbVar6 = (byte *)param_1;" (assignment_expression "pbVar6 = (byte *)param_1" identifier = (cast_expression "(byte *)param_1" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar7 = (byte *)0x3853b6;" (assignment_expression "pbVar7 = (byte *)0x3853b6" identifier = (cast_expression "(byte *)0x3853b6" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);" do (compound_statement "{\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  }" { (if_statement "if (lVar5 == 0) break;" if (parenthesized_expression "(lVar5 == 0)" ( (binary_expression "lVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar5 = lVar5 + -1;" (assignment_expression "lVar5 = lVar5 + -1" identifier = (binary_expression "lVar5 + -1" identifier + number_literal)) ;) (expression_statement "uVar8 = *pbVar6 < *pbVar7;" (assignment_expression "uVar8 = *pbVar6 < *pbVar7" identifier = (binary_expression "*pbVar6 < *pbVar7" (pointer_expression "*pbVar6" * identifier) < (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "uVar10 = *pbVar6 == *pbVar7;" (assignment_expression "uVar10 = *pbVar6 == *pbVar7" identifier = (binary_expression "*pbVar6 == *pbVar7" (pointer_expression "*pbVar6" * identifier) == (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar6 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar10)" ( (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (expression_statement "bVar9 = false;" (assignment_expression "bVar9 = false" identifier = false) ;) (expression_statement "bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;" (assignment_expression "bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8" identifier = (binary_expression "(!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8" (parenthesized_expression "(!(bool)uVar8 && !(bool)uVar10)" ( (binary_expression "!(bool)uVar8 && !(bool)uVar10" (unary_expression "!(bool)uVar8" ! (cast_expression "(bool)uVar8" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar10" ! (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar8" ( (type_descriptor "bool" primitive_type) ) identifier))) ;) (if_statement "if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = (byte *)param_1;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));\n      locale::facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);\n      return;\n    }\n  }" if (parenthesized_expression "(!bVar11)" ( (unary_expression "!bVar11" ! identifier) )) (compound_statement "{\n    lVar5 = 6;\n    pbVar6 = (byte *)param_1;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));\n      locale::facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);\n      return;\n    }\n  }" { (expression_statement "lVar5 = 6;" (assignment_expression "lVar5 = 6" identifier = number_literal) ;) (expression_statement "pbVar6 = (byte *)param_1;" (assignment_expression "pbVar6 = (byte *)param_1" identifier = (cast_expression "(byte *)param_1" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pbVar7 = (byte *)"POSIX";" (assignment_expression "pbVar7 = (byte *)"POSIX"" identifier = (cast_expression "(byte *)"POSIX"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""POSIX"" " string_content "))) ;) (do_statement "do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);" do (compound_statement "{\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    }" { (if_statement "if (lVar5 == 0) break;" if (parenthesized_expression "(lVar5 == 0)" ( (binary_expression "lVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar5 = lVar5 + -1;" (assignment_expression "lVar5 = lVar5 + -1" identifier = (binary_expression "lVar5 + -1" identifier + number_literal)) ;) (expression_statement "bVar9 = *pbVar6 < *pbVar7;" (assignment_expression "bVar9 = *pbVar6 < *pbVar7" identifier = (binary_expression "*pbVar6 < *pbVar7" (pointer_expression "*pbVar6" * identifier) < (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "bVar11 = *pbVar6 == *pbVar7;" (assignment_expression "bVar11 = *pbVar6 == *pbVar7" identifier = (binary_expression "*pbVar6 == *pbVar7" (pointer_expression "*pbVar6" * identifier) == (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar6 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar11)" ( identifier )) ;) (if_statement "if ((!bVar9 && !bVar11) != bVar9) {\n      locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));\n      locale::facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);\n      return;\n    }" if (parenthesized_expression "((!bVar9 && !bVar11) != bVar9)" ( (binary_expression "(!bVar9 && !bVar11) != bVar9" (parenthesized_expression "(!bVar9 && !bVar11)" ( (binary_expression "!bVar9 && !bVar11" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar11" ! identifier)) )) != identifier) )) (compound_statement "{\n      locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));\n      locale::facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);\n      return;\n    }" { (labeled_statement "locale::facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));" statement_identifier : (ERROR ":" :) (labeled_statement "facet::_S_destroy_c_locale((__locale_struct **)(this + 0x10));" statement_identifier : (ERROR ":" :) (expression_statement "_S_destroy_c_locale((__locale_struct **)(this + 0x10));" (call_expression "_S_destroy_c_locale((__locale_struct **)(this + 0x10))" identifier (argument_list "((__locale_struct **)(this + 0x10))" ( (cast_expression "(__locale_struct **)(this + 0x10)" ( (type_descriptor "__locale_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) ))) ))) ;))) (labeled_statement "locale::facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);" statement_identifier : (ERROR ":" :) (labeled_statement "facet::_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);" statement_identifier : (ERROR ":" :) (expression_statement "_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0);" (call_expression "_S_create_c_locale\n                ((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0)" identifier (argument_list "((__locale_struct **)(this + 0x10),param_1,(__locale_struct *)0x0)" ( (cast_expression "(__locale_struct **)(this + 0x10)" ( (type_descriptor "__locale_struct **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) ))) , identifier , (cast_expression "(__locale_struct *)0x0" ( (type_descriptor "__locale_struct *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;))) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  FUN_002ec000(param_1,param_3);\n  pcVar1 = (char *)param_1[3];\n  *param_1 = &PTR_FUN_00439220;\n  __s2 = (char *)FUN_002dcfb0();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = param_2;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  FUN_002ec000(param_1,param_3);\n  pcVar1 = (char *)param_1[3];\n  *param_1 = &PTR_FUN_00439220;\n  __s2 = (char *)FUN_002dcfb0();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = param_2;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 *param_1,byte *param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  FUN_002ec000(param_1,param_3);\n  pcVar1 = (char *)param_1[3];\n  *param_1 = &PTR_FUN_00439220;\n  __s2 = (char *)FUN_002dcfb0();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = param_2;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }\n  return;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "void *pvVar4;" primitive_type (pointer_declarator "*pvVar4" * identifier) ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "undefined1 uVar8;" type_identifier identifier ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "undefined1 uVar10;" type_identifier identifier ;) (declaration "bool bVar11;" primitive_type identifier ;) (declaration "byte bVar12;" type_identifier identifier ;) (expression_statement "bVar12 = 0;" (assignment_expression "bVar12 = 0" identifier = number_literal) ;) (expression_statement "FUN_002ec000(param_1,param_3);" (call_expression "FUN_002ec000(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier ))) ;) (expression_statement "pcVar1 = (char *)param_1[3];" (assignment_expression "pcVar1 = (char *)param_1[3]" identifier = (cast_expression "(char *)param_1[3]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) ;) (expression_statement "*param_1 = &PTR_FUN_00439220;" (assignment_expression "*param_1 = &PTR_FUN_00439220" (pointer_expression "*param_1" * identifier) = (pointer_expression "&PTR_FUN_00439220" & identifier)) ;) (expression_statement "__s2 = (char *)FUN_002dcfb0();" (assignment_expression "__s2 = (char *)FUN_002dcfb0()" identifier = (cast_expression "(char *)FUN_002dcfb0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002dcfb0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "uVar8 = pcVar1 < __s2;" (assignment_expression "uVar8 = pcVar1 < __s2" identifier = (binary_expression "pcVar1 < __s2" identifier < identifier)) ;) (expression_statement "uVar10 = pcVar1 == __s2;" (assignment_expression "uVar10 = pcVar1 == __s2" identifier = (binary_expression "pcVar1 == __s2" identifier == identifier)) ;) (if_statement "if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }" if (parenthesized_expression "(!(bool)uVar10)" ( (unary_expression "!(bool)uVar10" ! (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier)) )) (compound_statement "{\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }" { (if_statement "if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }" if (parenthesized_expression "(pcVar1 != (char *)0x0)" ( (binary_expression "pcVar1 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      thunk_FUN_002dac60(pcVar1);\n    }" { (expression_statement "thunk_FUN_002dac60(pcVar1);" (call_expression "thunk_FUN_002dac60(pcVar1)" identifier (argument_list "(pcVar1)" ( identifier ))) ;) })) (expression_statement "iVar2 = strcmp((char *)param_2,__s2);" (assignment_expression "iVar2 = strcmp((char *)param_2,__s2)" identifier = (call_expression "strcmp((char *)param_2,__s2)" identifier (argument_list "((char *)param_2,__s2)" ( (cast_expression "(char *)param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar10 = iVar2 == 0;" (assignment_expression "uVar10 = iVar2 == 0" identifier = (binary_expression "iVar2 == 0" identifier == number_literal)) ;) (if_statement "if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" if (parenthesized_expression "((bool)uVar10)" ( (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier) )) (compound_statement "{\n      param_1[3] = __s2;\n    }" { (expression_statement "param_1[3] = __s2;" (assignment_expression "param_1[3] = __s2" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) }) (else_clause "else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" else (compound_statement "{\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" { (expression_statement "sVar3 = strlen((char *)param_2);" (assignment_expression "sVar3 = strlen((char *)param_2)" identifier = (call_expression "strlen((char *)param_2)" identifier (argument_list "((char *)param_2)" ( (cast_expression "(char *)param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);" (assignment_expression "pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1)" identifier = (cast_expression "(void *)thunk_FUN_002d9490(sVar3 + 1)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002d9490(sVar3 + 1)" identifier (argument_list "(sVar3 + 1)" ( (binary_expression "sVar3 + 1" identifier + number_literal) ))))) ;) (expression_statement "pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);" (assignment_expression "pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1)" identifier = (call_expression "memcpy(pvVar4,param_2,sVar3 + 1)" identifier (argument_list "(pvVar4,param_2,sVar3 + 1)" ( identifier , identifier , (binary_expression "sVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "param_1[3] = pvVar4;" (assignment_expression "param_1[3] = pvVar4" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) }))) })) (expression_statement "lVar5 = 2;" (assignment_expression "lVar5 = 2" identifier = number_literal) ;) (expression_statement "pbVar6 = param_2;" (assignment_expression "pbVar6 = param_2" identifier = identifier) ;) (expression_statement "pbVar7 = (byte *)0x3853b6;" (assignment_expression "pbVar7 = (byte *)0x3853b6" identifier = (cast_expression "(byte *)0x3853b6" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);" do (compound_statement "{\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  }" { (if_statement "if (lVar5 == 0) break;" if (parenthesized_expression "(lVar5 == 0)" ( (binary_expression "lVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar5 = lVar5 + -1;" (assignment_expression "lVar5 = lVar5 + -1" identifier = (binary_expression "lVar5 + -1" identifier + number_literal)) ;) (expression_statement "uVar8 = *pbVar6 < *pbVar7;" (assignment_expression "uVar8 = *pbVar6 < *pbVar7" identifier = (binary_expression "*pbVar6 < *pbVar7" (pointer_expression "*pbVar6" * identifier) < (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "uVar10 = *pbVar6 == *pbVar7;" (assignment_expression "uVar10 = *pbVar6 == *pbVar7" identifier = (binary_expression "*pbVar6 == *pbVar7" (pointer_expression "*pbVar6" * identifier) == (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar6 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "((bool)uVar10)" ( (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier) )) ;) (expression_statement "bVar9 = false;" (assignment_expression "bVar9 = false" identifier = false) ;) (expression_statement "bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;" (assignment_expression "bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8" identifier = (binary_expression "(!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8" (parenthesized_expression "(!(bool)uVar8 && !(bool)uVar10)" ( (binary_expression "!(bool)uVar8 && !(bool)uVar10" (unary_expression "!(bool)uVar8" ! (cast_expression "(bool)uVar8" ( (type_descriptor "bool" primitive_type) ) identifier)) && (unary_expression "!(bool)uVar10" ! (cast_expression "(bool)uVar10" ( (type_descriptor "bool" primitive_type) ) identifier))) )) == (cast_expression "(bool)uVar8" ( (type_descriptor "bool" primitive_type) ) identifier))) ;) (if_statement "if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }" if (parenthesized_expression "(!bVar11)" ( (unary_expression "!bVar11" ! identifier) )) (compound_statement "{\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }" { (expression_statement "lVar5 = 6;" (assignment_expression "lVar5 = 6" identifier = number_literal) ;) (expression_statement "pbVar6 = param_2;" (assignment_expression "pbVar6 = param_2" identifier = identifier) ;) (expression_statement "pbVar7 = (byte *)"POSIX";" (assignment_expression "pbVar7 = (byte *)"POSIX"" identifier = (cast_expression "(byte *)"POSIX"" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (string_literal ""POSIX"" " string_content "))) ;) (do_statement "do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);" do (compound_statement "{\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    }" { (if_statement "if (lVar5 == 0) break;" if (parenthesized_expression "(lVar5 == 0)" ( (binary_expression "lVar5 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "lVar5 = lVar5 + -1;" (assignment_expression "lVar5 = lVar5 + -1" identifier = (binary_expression "lVar5 + -1" identifier + number_literal)) ;) (expression_statement "bVar9 = *pbVar6 < *pbVar7;" (assignment_expression "bVar9 = *pbVar6 < *pbVar7" identifier = (binary_expression "*pbVar6 < *pbVar7" (pointer_expression "*pbVar6" * identifier) < (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "bVar11 = *pbVar6 == *pbVar7;" (assignment_expression "bVar11 = *pbVar6 == *pbVar7" identifier = (binary_expression "*pbVar6 == *pbVar7" (pointer_expression "*pbVar6" * identifier) == (pointer_expression "*pbVar7" * identifier))) ;) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar6 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1" identifier = (binary_expression "pbVar7 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar12 * -2" identifier + (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar11)" ( identifier )) ;) (if_statement "if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }" if (parenthesized_expression "((!bVar9 && !bVar11) != bVar9)" ( (binary_expression "(!bVar9 && !bVar11) != bVar9" (parenthesized_expression "(!bVar9 && !bVar11)" ( (binary_expression "!bVar9 && !bVar11" (unary_expression "!bVar9" ! identifier) && (unary_expression "!bVar11" ! identifier)) )) != identifier) )) (compound_statement "{\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }" { (expression_statement "FUN_0031bb60(param_1 + 2);" (call_expression "FUN_0031bb60(param_1 + 2)" identifier (argument_list "(param_1 + 2)" ( (binary_expression "param_1 + 2" identifier + number_literal) ))) ;) (expression_statement "FUN_0031bb30(param_1 + 2,param_2,0);" (call_expression "FUN_0031bb30(param_1 + 2,param_2,0)" identifier (argument_list "(param_1 + 2,param_2,0)" ( (binary_expression "param_1 + 2" identifier + number_literal) , identifier , number_literal ))) ;) (return_statement "return;" return ;) })) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == IDENT)) ;) (if_statement if (parenthesized_expression ( (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT == LIT)) ;) (if_statement if (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }))) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT)) && (unary_expression ! (cast_expression ( (type_descriptor TYPE) ) IDENT))) )) == (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (string_literal " string_content "))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , LIT ))) ;) (return_statement return ;) })) })) (return_statement return ;) })))
(function_definition "void FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)\n\n{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  FUN_002ec000(param_1,param_3);\n  pcVar1 = (char *)param_1[3];\n  *param_1 = &PTR_FUN_00439220;\n  __s2 = (char *)FUN_002dcfb0();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = param_2;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_002ec190(undefined8 *param_1,byte *param_2,undefined8 param_3)" (identifier "FUN_002ec190") (parameter_list "(undefined8 *param_1,byte *param_2,undefined8 param_3)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "byte *param_2" (type_identifier "byte") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  char *pcVar1;\n  int iVar2;\n  char *__s2;\n  size_t sVar3;\n  void *pvVar4;\n  long lVar5;\n  byte *pbVar6;\n  byte *pbVar7;\n  undefined1 uVar8;\n  bool bVar9;\n  undefined1 uVar10;\n  bool bVar11;\n  byte bVar12;\n  \n  bVar12 = 0;\n  FUN_002ec000(param_1,param_3);\n  pcVar1 = (char *)param_1[3];\n  *param_1 = &PTR_FUN_00439220;\n  __s2 = (char *)FUN_002dcfb0();\n  uVar8 = pcVar1 < __s2;\n  uVar10 = pcVar1 == __s2;\n  if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }\n  lVar5 = 2;\n  pbVar6 = param_2;\n  pbVar7 = (byte *)0x3853b6;\n  do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);\n  bVar9 = false;\n  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;\n  if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }\n  return;\n}" ({ "{") (declaration "char *pcVar1;" (primitive_type "char") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "char *__s2;" (primitive_type "char") (pointer_declarator "*__s2" (* "*") (identifier "__s2")) (; ";")) (declaration "size_t sVar3;" (primitive_type "size_t") (identifier "sVar3") (; ";")) (declaration "void *pvVar4;" (primitive_type "void") (pointer_declarator "*pvVar4" (* "*") (identifier "pvVar4")) (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "byte *pbVar6;" (type_identifier "byte") (pointer_declarator "*pbVar6" (* "*") (identifier "pbVar6")) (; ";")) (declaration "byte *pbVar7;" (type_identifier "byte") (pointer_declarator "*pbVar7" (* "*") (identifier "pbVar7")) (; ";")) (declaration "undefined1 uVar8;" (type_identifier "undefined1") (identifier "uVar8") (; ";")) (declaration "bool bVar9;" (primitive_type "bool") (identifier "bVar9") (; ";")) (declaration "undefined1 uVar10;" (type_identifier "undefined1") (identifier "uVar10") (; ";")) (declaration "bool bVar11;" (primitive_type "bool") (identifier "bVar11") (; ";")) (declaration "byte bVar12;" (type_identifier "byte") (identifier "bVar12") (; ";")) (expression_statement "bVar12 = 0;" (assignment_expression "bVar12 = 0" (identifier "bVar12") (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_002ec000(param_1,param_3);" (call_expression "FUN_002ec000(param_1,param_3)" (identifier "FUN_002ec000") (argument_list "(param_1,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "pcVar1 = (char *)param_1[3];" (assignment_expression "pcVar1 = (char *)param_1[3]" (identifier "pcVar1") (= "=") (cast_expression "(char *)param_1[3]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "*param_1 = &PTR_FUN_00439220;" (assignment_expression "*param_1 = &PTR_FUN_00439220" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (pointer_expression "&PTR_FUN_00439220" (& "&") (identifier "PTR_FUN_00439220"))) (; ";")) (expression_statement "__s2 = (char *)FUN_002dcfb0();" (assignment_expression "__s2 = (char *)FUN_002dcfb0()" (identifier "__s2") (= "=") (cast_expression "(char *)FUN_002dcfb0()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002dcfb0()" (identifier "FUN_002dcfb0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "uVar8 = pcVar1 < __s2;" (assignment_expression "uVar8 = pcVar1 < __s2" (identifier "uVar8") (= "=") (binary_expression "pcVar1 < __s2" (identifier "pcVar1") (< "<") (identifier "__s2"))) (; ";")) (expression_statement "uVar10 = pcVar1 == __s2;" (assignment_expression "uVar10 = pcVar1 == __s2" (identifier "uVar10") (= "=") (binary_expression "pcVar1 == __s2" (identifier "pcVar1") (== "==") (identifier "__s2"))) (; ";")) (if_statement "if (!(bool)uVar10) {\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }" (if "if") (parenthesized_expression "(!(bool)uVar10)" (( "(") (unary_expression "!(bool)uVar10" (! "!") (cast_expression "(bool)uVar10" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar10"))) () ")")) (compound_statement "{\n    if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }\n    iVar2 = strcmp((char *)param_2,__s2);\n    uVar8 = 0;\n    uVar10 = iVar2 == 0;\n    if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }\n  }" ({ "{") (if_statement "if (pcVar1 != (char *)0x0) {\n      thunk_FUN_002dac60(pcVar1);\n    }" (if "if") (parenthesized_expression "(pcVar1 != (char *)0x0)" (( "(") (binary_expression "pcVar1 != (char *)0x0" (identifier "pcVar1") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      thunk_FUN_002dac60(pcVar1);\n    }" ({ "{") (expression_statement "thunk_FUN_002dac60(pcVar1);" (call_expression "thunk_FUN_002dac60(pcVar1)" (identifier "thunk_FUN_002dac60") (argument_list "(pcVar1)" (( "(") (identifier "pcVar1") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar2 = strcmp((char *)param_2,__s2);" (assignment_expression "iVar2 = strcmp((char *)param_2,__s2)" (identifier "iVar2") (= "=") (call_expression "strcmp((char *)param_2,__s2)" (identifier "strcmp") (argument_list "((char *)param_2,__s2)" (( "(") (cast_expression "(char *)param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_2")) (, ",") (identifier "__s2") () ")")))) (; ";")) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar10 = iVar2 == 0;" (assignment_expression "uVar10 = iVar2 == 0" (identifier "uVar10") (= "=") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0"))) (; ";")) (if_statement "if ((bool)uVar10) {\n      param_1[3] = __s2;\n    }\n    else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" (if "if") (parenthesized_expression "((bool)uVar10)" (( "(") (cast_expression "(bool)uVar10" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar10")) () ")")) (compound_statement "{\n      param_1[3] = __s2;\n    }" ({ "{") (expression_statement "param_1[3] = __s2;" (assignment_expression "param_1[3] = __s2" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "__s2")) (; ";")) (} "}")) (else_clause "else {\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" (else "else") (compound_statement "{\n      sVar3 = strlen((char *)param_2);\n                    \n      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);\n      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);\n      param_1[3] = pvVar4;\n    }" ({ "{") (expression_statement "sVar3 = strlen((char *)param_2);" (assignment_expression "sVar3 = strlen((char *)param_2)" (identifier "sVar3") (= "=") (call_expression "strlen((char *)param_2)" (identifier "strlen") (argument_list "((char *)param_2)" (( "(") (cast_expression "(char *)param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_2")) () ")")))) (; ";")) (expression_statement "pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);" (assignment_expression "pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1)" (identifier "pvVar4") (= "=") (cast_expression "(void *)thunk_FUN_002d9490(sVar3 + 1)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "thunk_FUN_002d9490(sVar3 + 1)" (identifier "thunk_FUN_002d9490") (argument_list "(sVar3 + 1)" (( "(") (binary_expression "sVar3 + 1" (identifier "sVar3") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);" (assignment_expression "pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1)" (identifier "pvVar4") (= "=") (call_expression "memcpy(pvVar4,param_2,sVar3 + 1)" (identifier "memcpy") (argument_list "(pvVar4,param_2,sVar3 + 1)" (( "(") (identifier "pvVar4") (, ",") (identifier "param_2") (, ",") (binary_expression "sVar3 + 1" (identifier "sVar3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "param_1[3] = pvVar4;" (assignment_expression "param_1[3] = pvVar4" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "pvVar4")) (; ";")) (} "}")))) (} "}"))) (expression_statement "lVar5 = 2;" (assignment_expression "lVar5 = 2" (identifier "lVar5") (= "=") (number_literal "2")) (; ";")) (expression_statement "pbVar6 = param_2;" (assignment_expression "pbVar6 = param_2" (identifier "pbVar6") (= "=") (identifier "param_2")) (; ";")) (expression_statement "pbVar7 = (byte *)0x3853b6;" (assignment_expression "pbVar7 = (byte *)0x3853b6" (identifier "pbVar7") (= "=") (cast_expression "(byte *)0x3853b6" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x3853b6"))) (; ";")) (do_statement "do {\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  } while ((bool)uVar10);" (do "do") (compound_statement "{\n    if (lVar5 == 0) break;\n    lVar5 = lVar5 + -1;\n    uVar8 = *pbVar6 < *pbVar7;\n    uVar10 = *pbVar6 == *pbVar7;\n    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n  }" ({ "{") (if_statement "if (lVar5 == 0) break;" (if "if") (parenthesized_expression "(lVar5 == 0)" (( "(") (binary_expression "lVar5 == 0" (identifier "lVar5") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar5 = lVar5 + -1;" (assignment_expression "lVar5 = lVar5 + -1" (identifier "lVar5") (= "=") (binary_expression "lVar5 + -1" (identifier "lVar5") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar8 = *pbVar6 < *pbVar7;" (assignment_expression "uVar8 = *pbVar6 < *pbVar7" (identifier "uVar8") (= "=") (binary_expression "*pbVar6 < *pbVar7" (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6")) (< "<") (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")))) (; ";")) (expression_statement "uVar10 = *pbVar6 == *pbVar7;" (assignment_expression "uVar10 = *pbVar6 == *pbVar7" (identifier "uVar10") (= "=") (binary_expression "*pbVar6 == *pbVar7" (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6")) (== "==") (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")))) (; ";")) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1" (identifier "pbVar6") (= "=") (binary_expression "pbVar6 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar12 * -2" (identifier "pbVar6") (+ "+") (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar12")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1" (identifier "pbVar7") (= "=") (binary_expression "pbVar7 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar12 * -2" (identifier "pbVar7") (+ "+") (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar12")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((bool)uVar10)" (( "(") (cast_expression "(bool)uVar10" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar10")) () ")")) (; ";")) (expression_statement "bVar9 = false;" (assignment_expression "bVar9 = false" (identifier "bVar9") (= "=") (false "false")) (; ";")) (expression_statement "bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;" (assignment_expression "bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8" (identifier "bVar11") (= "=") (binary_expression "(!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8" (parenthesized_expression "(!(bool)uVar8 && !(bool)uVar10)" (( "(") (binary_expression "!(bool)uVar8 && !(bool)uVar10" (unary_expression "!(bool)uVar8" (! "!") (cast_expression "(bool)uVar8" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar8"))) (&& "&&") (unary_expression "!(bool)uVar10" (! "!") (cast_expression "(bool)uVar10" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar10")))) () ")")) (== "==") (cast_expression "(bool)uVar8" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (identifier "uVar8")))) (; ";")) (if_statement "if (!bVar11) {\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }" (if "if") (parenthesized_expression "(!bVar11)" (( "(") (unary_expression "!bVar11" (! "!") (identifier "bVar11")) () ")")) (compound_statement "{\n    lVar5 = 6;\n    pbVar6 = param_2;\n    pbVar7 = (byte *)"POSIX";\n    do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);\n    if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }\n  }" ({ "{") (expression_statement "lVar5 = 6;" (assignment_expression "lVar5 = 6" (identifier "lVar5") (= "=") (number_literal "6")) (; ";")) (expression_statement "pbVar6 = param_2;" (assignment_expression "pbVar6 = param_2" (identifier "pbVar6") (= "=") (identifier "param_2")) (; ";")) (expression_statement "pbVar7 = (byte *)"POSIX";" (assignment_expression "pbVar7 = (byte *)"POSIX"" (identifier "pbVar7") (= "=") (cast_expression "(byte *)"POSIX"" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (string_literal ""POSIX"" (" """) (string_content "POSIX") (" """)))) (; ";")) (do_statement "do {\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    } while (bVar11);" (do "do") (compound_statement "{\n      if (lVar5 == 0) break;\n      lVar5 = lVar5 + -1;\n      bVar9 = *pbVar6 < *pbVar7;\n      bVar11 = *pbVar6 == *pbVar7;\n      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;\n      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;\n    }" ({ "{") (if_statement "if (lVar5 == 0) break;" (if "if") (parenthesized_expression "(lVar5 == 0)" (( "(") (binary_expression "lVar5 == 0" (identifier "lVar5") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "lVar5 = lVar5 + -1;" (assignment_expression "lVar5 = lVar5 + -1" (identifier "lVar5") (= "=") (binary_expression "lVar5 + -1" (identifier "lVar5") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar9 = *pbVar6 < *pbVar7;" (assignment_expression "bVar9 = *pbVar6 < *pbVar7" (identifier "bVar9") (= "=") (binary_expression "*pbVar6 < *pbVar7" (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6")) (< "<") (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")))) (; ";")) (expression_statement "bVar11 = *pbVar6 == *pbVar7;" (assignment_expression "bVar11 = *pbVar6 == *pbVar7" (identifier "bVar11") (= "=") (binary_expression "*pbVar6 == *pbVar7" (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6")) (== "==") (pointer_expression "*pbVar7" (* "*") (identifier "pbVar7")))) (; ";")) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1" (identifier "pbVar6") (= "=") (binary_expression "pbVar6 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar12 * -2" (identifier "pbVar6") (+ "+") (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar12")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;" (assignment_expression "pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1" (identifier "pbVar7") (= "=") (binary_expression "pbVar7 + (ulong)bVar12 * -2 + 1" (binary_expression "pbVar7 + (ulong)bVar12 * -2" (identifier "pbVar7") (+ "+") (binary_expression "(ulong)bVar12 * -2" (cast_expression "(ulong)bVar12" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar12")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar11)" (( "(") (identifier "bVar11") () ")")) (; ";")) (if_statement "if ((!bVar9 && !bVar11) != bVar9) {\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }" (if "if") (parenthesized_expression "((!bVar9 && !bVar11) != bVar9)" (( "(") (binary_expression "(!bVar9 && !bVar11) != bVar9" (parenthesized_expression "(!bVar9 && !bVar11)" (( "(") (binary_expression "!bVar9 && !bVar11" (unary_expression "!bVar9" (! "!") (identifier "bVar9")) (&& "&&") (unary_expression "!bVar11" (! "!") (identifier "bVar11"))) () ")")) (!= "!=") (identifier "bVar9")) () ")")) (compound_statement "{\n      FUN_0031bb60(param_1 + 2);\n      FUN_0031bb30(param_1 + 2,param_2,0);\n      return;\n    }" ({ "{") (expression_statement "FUN_0031bb60(param_1 + 2);" (call_expression "FUN_0031bb60(param_1 + 2)" (identifier "FUN_0031bb60") (argument_list "(param_1 + 2)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) () ")"))) (; ";")) (expression_statement "FUN_0031bb30(param_1 + 2,param_2,0);" (call_expression "FUN_0031bb30(param_1 + 2,param_2,0)" (identifier "FUN_0031bb30") (argument_list "(param_1 + 2,param_2,0)" (( "(") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2")) (, ",") (identifier "param_2") (, ",") (number_literal "0") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* std::messages_byname<char>::messages_byname(char const*, unsigned long) */

void __thiscall
std::function_1<char>::function_1(function_1<char> *var_3,char *param_1,type_1 param_2)

{
  char *var_5;
  int var_9;
  char *var_6;
  size_t var_12;
  void *pvVar4;
  long var_14;
  type_2 *var_15;
  type_2 *var_16;
  type_3 uVar8;
  bool var_17;
  type_3 uVar10;
  bool bVar11;
  type_2 bVar12;
  
  bVar12 = 0;
  var_1<var_2>::var_1((var_1<var_2> *)var_3,param_2);
  var_5 = *(char **)(var_3 + 0x18);
  *(type_4 ***)var_3 = &PTR__messages_byname_00439220;
  var_6 = (char *)locale::facet::var_4();
  uVar8 = var_5 < var_6;
  uVar10 = var_5 == var_6;
  if (!(bool)uVar10) {
    if (var_5 != (char *)0x0) {
      var_7(var_5);
    }
    var_9 = var_8(param_1,var_6);
    uVar8 = 0;
    uVar10 = var_9 == 0;
    if ((bool)uVar10) {
      *(char **)(var_3 + 0x18) = var_6;
    }
    else {
      var_12 = var_10(param_1);
                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */
      pvVar4 = var_11(var_12 + 1);
      pvVar4 = var_13(pvVar4,param_1,var_12 + 1);
      *(void **)(var_3 + 0x18) = pvVar4;
    }
  }
  var_14 = 2;
  var_15 = (type_2 *)param_1;
  var_16 = (type_2 *)0x3853b6;
  do {
    if (var_14 == 0) break;
    var_14 = var_14 + -1;
    uVar8 = *var_15 < *var_16;
    uVar10 = *var_15 == *var_16;
    var_15 = var_15 + (type_1)bVar12 * -2 + 1;
    var_16 = var_16 + (type_1)bVar12 * -2 + 1;
  } while ((bool)uVar10);
  var_17 = false;
  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;
  if (!bVar11) {
    var_14 = 6;
    var_15 = (type_2 *)param_1;
    var_16 = (type_2 *)"POSIX";
    do {
      if (var_14 == 0) break;
      var_14 = var_14 + -1;
      var_17 = *var_15 < *var_16;
      bVar11 = *var_15 == *var_16;
      var_15 = var_15 + (type_1)bVar12 * -2 + 1;
      var_16 = var_16 + (type_1)bVar12 * -2 + 1;
    } while (bVar11);
    if ((!var_17 && !bVar11) != var_17) {
      locale::facet::var_18((type_5 **)(var_3 + 0x10));
      locale::facet::var_19
                ((type_5 **)(var_3 + 0x10),param_1,(type_5 *)0x0);
      return;
    }
  }
  return;
}


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

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

{
  char *pcVar1;
  int iVar2;
  char *__s2;
  size_t sVar3;
  void *pvVar4;
  long lVar5;
  byte *pbVar6;
  byte *pbVar7;
  undefined1 uVar8;
  bool bVar9;
  undefined1 uVar10;
  bool bVar11;
  byte bVar12;
  
  bVar12 = 0;
  FUN_002ec000(param_1,param_3);
  pcVar1 = (char *)param_1[3];
  *param_1 = &PTR_FUN_00439220;
  __s2 = (char *)FUN_002dcfb0();
  uVar8 = pcVar1 < __s2;
  uVar10 = pcVar1 == __s2;
  if (!(bool)uVar10) {
    if (pcVar1 != (char *)0x0) {
      thunk_FUN_002dac60(pcVar1);
    }
    iVar2 = strcmp((char *)param_2,__s2);
    uVar8 = 0;
    uVar10 = iVar2 == 0;
    if ((bool)uVar10) {
      param_1[3] = __s2;
    }
    else {
      sVar3 = strlen((char *)param_2);
                    /* try { // try from 002ec23f to 002ec278 has its CatchHandler @ 002ec284 */
      pvVar4 = (void *)thunk_FUN_002d9490(sVar3 + 1);
      pvVar4 = memcpy(pvVar4,param_2,sVar3 + 1);
      param_1[3] = pvVar4;
    }
  }
  lVar5 = 2;
  pbVar6 = param_2;
  pbVar7 = (byte *)0x3853b6;
  do {
    if (lVar5 == 0) break;
    lVar5 = lVar5 + -1;
    uVar8 = *pbVar6 < *pbVar7;
    uVar10 = *pbVar6 == *pbVar7;
    pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;
    pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;
  } while ((bool)uVar10);
  bVar9 = false;
  bVar11 = (!(bool)uVar8 && !(bool)uVar10) == (bool)uVar8;
  if (!bVar11) {
    lVar5 = 6;
    pbVar6 = param_2;
    pbVar7 = (byte *)"POSIX";
    do {
      if (lVar5 == 0) break;
      lVar5 = lVar5 + -1;
      bVar9 = *pbVar6 < *pbVar7;
      bVar11 = *pbVar6 == *pbVar7;
      pbVar6 = pbVar6 + (ulong)bVar12 * -2 + 1;
      pbVar7 = pbVar7 + (ulong)bVar12 * -2 + 1;
    } while (bVar11);
    if ((!bVar9 && !bVar11) != bVar9) {
      FUN_0031bb60(param_1 + 2);
      FUN_0031bb30(param_1 + 2,param_2,0);
      return;
    }
  }
  return;
}

