
/* std::__codecvt_utf8_utf16_base<wchar_t>::do_out(__mbstate_t&, wchar_t const*, wchar_t const*,
   wchar_t const*&, char*, char*, char*&) const */

undefined8 __thiscall
std::__codecvt_utf8_utf16_base<wchar_t>::do_out
          (__codecvt_utf8_utf16_base<wchar_t> *this,__mbstate_t *param_1,wchar_t *param_2,
          wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7)

{
  ulong uVar1;
  char cVar2;
  long lVar3;
  undefined8 uVar4;
  wchar32 wVar5;
  char *local_28;
  char *local_20;
  
  uVar1 = *(ulong *)(this + 0x18);
  local_20 = param_6;
  local_28 = param_5;
  if ((((byte)this[0x20] & 2) == 0) ||
     (cVar2 = (anonymous_namespace)::write_utf8_bom(&local_28), cVar2 != '\0')) {
    lVar3 = (long)param_3 - (long)param_2;
    if (param_2 != param_3) {
      do {
        wVar5 = *param_2;
        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {
          if (1 < (ulong)(lVar3 >> 2)) {
            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {
              lVar3 = 2;
              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;
              if ((uint)wVar5 <= uVar1) goto LAB_00371313;
            }
LAB_0037135d:
            uVar4 = 2;
            goto LAB_0037136d;
          }
          break;
        }
        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))
        goto LAB_0037135d;
LAB_00371313:
        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);
        if (cVar2 == '\0') goto LAB_00371368;
        param_2 = param_2 + lVar3;
        lVar3 = (long)param_3 - (long)param_2;
      } while (param_3 != param_2);
    }
    uVar4 = 0;
  }
  else {
LAB_00371368:
    uVar4 = 1;
  }
LAB_0037136d:
  *param_4 = param_2;
  *param_7 = local_28;
  return uVar4;
}



undefined8
FUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,
            undefined8 param_6,undefined8 param_7,undefined8 *param_8)

{
  uint uVar1;
  ulong uVar2;
  char cVar3;
  long lVar4;
  undefined8 uVar5;
  undefined8 local_28;
  undefined8 local_20;
  
  uVar2 = *(ulong *)(param_1 + 0x18);
  local_20 = param_7;
  local_28 = param_6;
  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {
    lVar4 = (long)param_4 - (long)param_3;
    if (param_3 != param_4) {
      do {
        uVar1 = *param_3;
        if (uVar1 - 0xd800 < 0x400) {
          if (1 < (ulong)(lVar4 >> 2)) {
            if (param_3[1] - 0xdc00 < 0x400) {
              lVar4 = 2;
              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;
              goto joined_r0x00371311;
            }
LAB_0037135d:
            uVar5 = 2;
            goto LAB_0037136d;
          }
          break;
        }
        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;
        lVar4 = 1;
joined_r0x00371311:
        if (uVar2 < uVar1) goto LAB_0037135d;
        cVar3 = FUN_003707b0(&local_28);
        if (cVar3 == '\0') goto LAB_00371368;
        param_3 = param_3 + lVar4;
        lVar4 = (long)param_4 - (long)param_3;
      } while (param_4 != param_3);
    }
    uVar5 = 0;
  }
  else {
LAB_00371368:
    uVar5 = 1;
  }
LAB_0037136d:
  *param_5 = (long)param_3;
  *param_8 = local_28;
  return uVar5;
}


PUSH RBP
MOV R10,RDX
MOV R11,RCX
PUSH RBX
SUB RSP,0x18
MOV RBX,qword ptr [RDI + 0x18]
MOV RAX,qword ptr [RSP + 0x30]
MOV qword ptr [RSP],R9
MOV qword ptr [RSP + 0x8],RAX
TEST byte ptr [RDI + 0x20],0x2
JZ 0x003712c4
MOV RDI,RSP
CALL 0x00370a10
TEST AL,AL
JZ 0x00371368
MOV RAX,R11
SUB RAX,R10
SAR RAX,0x2
CMP R10,R11
JZ 0x00371388
MOV RBP,RSP
JMP 0x00371332
CMP RAX,0x1
JBE 0x00371388
MOV EAX,dword ptr [R10 + 0x4]
LEA EDX,[RAX + -0xdc00]
CMP EDX,0x3ff
JA 0x0037135d
SHL ESI,0xa
MOV R9D,0x2
LEA ESI,[RAX + RSI*0x1 + -0x35fdc00]
MOV EAX,ESI
CMP RBX,RAX
JC 0x0037135d
MOV RDI,RBP
CALL 0x003707b0
TEST AL,AL
JZ 0x00371368
LEA R10,[R10 + R9*0x4]
MOV RAX,R11
SUB RAX,R10
SAR RAX,0x2
CMP R11,R10
JZ 0x00371388
MOV ESI,dword ptr [R10]
LEA EDX,[RSI + -0xd800]
CMP EDX,0x3ff
JBE 0x003712e0
LEA EAX,[RSI + -0xdc00]
CMP EAX,0x3ff
JBE 0x0037135d
MOV EAX,ESI
MOV R9D,0x1
CMP RBX,RAX
JNC 0x00371313
MOV EAX,0x2
JMP 0x0037136d
MOV EAX,0x1
MOV RDX,qword ptr [RSP + 0x38]
MOV RCX,qword ptr [RSP]
MOV qword ptr [R8],R10
MOV qword ptr [RDX],RCX
ADD RSP,0x18
POP RBX
POP RBP
RET
XOR EAX,EAX
JMP 0x0037136d
(translation_unit "undefined8\nFUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  char cVar3;\n  long lVar4;\n  undefined8 uVar5;\n  undefined8 local_28;\n  undefined8 local_20;\n  \n  uVar2 = *(ulong *)(param_1 + 0x18);\n  local_20 = param_7;\n  local_28 = param_6;\n  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }\nLAB_0037136d:\n  *param_5 = (long)param_3;\n  *param_8 = local_28;\n  return uVar5;\n}\n\n" (function_definition "undefined8\nFUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  char cVar3;\n  long lVar4;\n  undefined8 uVar5;\n  undefined8 local_28;\n  undefined8 local_20;\n  \n  uVar2 = *(ulong *)(param_1 + 0x18);\n  local_20 = param_7;\n  local_28 = param_6;\n  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }\nLAB_0037136d:\n  *param_5 = (long)param_3;\n  *param_8 = local_28;\n  return uVar5;\n}" type_identifier (function_declarator "FUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)" identifier (parameter_list "(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "long *param_5" (sized_type_specifier "long" long) (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "undefined8 param_6" type_identifier identifier) , (parameter_declaration "undefined8 param_7" type_identifier identifier) , (parameter_declaration "undefined8 *param_8" type_identifier (pointer_declarator "*param_8" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  char cVar3;\n  long lVar4;\n  undefined8 uVar5;\n  undefined8 local_28;\n  undefined8 local_20;\n  \n  uVar2 = *(ulong *)(param_1 + 0x18);\n  local_20 = param_7;\n  local_28 = param_6;\n  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }\nLAB_0037136d:\n  *param_5 = (long)param_3;\n  *param_8 = local_28;\n  return uVar5;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "undefined8 local_28;" type_identifier identifier ;) (declaration "undefined8 local_20;" type_identifier identifier ;) (expression_statement "uVar2 = *(ulong *)(param_1 + 0x18);" (assignment_expression "uVar2 = *(ulong *)(param_1 + 0x18)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x18)" * (cast_expression "(ulong *)(param_1 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "local_20 = param_7;" (assignment_expression "local_20 = param_7" identifier = identifier) ;) (expression_statement "local_28 = param_6;" (assignment_expression "local_28 = param_6" identifier = identifier) ;) (if_statement "if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }" if (parenthesized_expression "(((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0'))" ( (binary_expression "((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')" (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')" ( (comma_expression "cVar3 = FUN_00370a10(&local_28), cVar3 != '\0'" (assignment_expression "cVar3 = FUN_00370a10(&local_28)" identifier = (call_expression "FUN_00370a10(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) )))) , (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }" { (expression_statement "lVar4 = (long)param_4 - (long)param_3;" (assignment_expression "lVar4 = (long)param_4 - (long)param_3" identifier = (binary_expression "(long)param_4 - (long)param_3" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }" if (parenthesized_expression "(param_3 != param_4)" ( (binary_expression "param_3 != param_4" identifier != identifier) )) (compound_statement "{\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }" { (do_statement "do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);" do (compound_statement "{\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      }" { (expression_statement "uVar1 = *param_3;" (assignment_expression "uVar1 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }" if (parenthesized_expression "(uVar1 - 0xd800 < 0x400)" ( (binary_expression "uVar1 - 0xd800 < 0x400" (binary_expression "uVar1 - 0xd800" identifier - number_literal) < number_literal) )) (compound_statement "{\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }" { (if_statement "if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }" if (parenthesized_expression "(1 < (ulong)(lVar4 >> 2))" ( (binary_expression "1 < (ulong)(lVar4 >> 2)" number_literal < (call_expression "(ulong)(lVar4 >> 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar4 >> 2)" ( (binary_expression "lVar4 >> 2" identifier >> number_literal) )))) )) (compound_statement "{\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }" { (if_statement "if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }" if (parenthesized_expression "(param_3[1] - 0xdc00 < 0x400)" ( (binary_expression "param_3[1] - 0xdc00 < 0x400" (binary_expression "param_3[1] - 0xdc00" (subscript_expression "param_3[1]" identifier [ number_literal ]) - number_literal) < number_literal) )) (compound_statement "{\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }" { (expression_statement "lVar4 = 2;" (assignment_expression "lVar4 = 2" identifier = number_literal) ;) (expression_statement "uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;" (assignment_expression "uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400" identifier = (binary_expression "param_3[1] + 0xfca02400 + uVar1 * 0x400" (binary_expression "param_3[1] + 0xfca02400" (subscript_expression "param_3[1]" identifier [ number_literal ]) + number_literal) + (binary_expression "uVar1 * 0x400" identifier * number_literal))) ;) (goto_statement "goto joined_r0x00371311;" goto statement_identifier ;) })) (labeled_statement "LAB_0037135d:\n            uVar5 = 2;" statement_identifier : (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;)) (goto_statement "goto LAB_0037136d;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) (if_statement "if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;" if (parenthesized_expression "(uVar1 - 0xdc00 < 0x400)" ( (binary_expression "uVar1 - 0xdc00 < 0x400" (binary_expression "uVar1 - 0xdc00" identifier - number_literal) < number_literal) )) (goto_statement "goto LAB_0037135d;" goto statement_identifier ;)) (expression_statement "lVar4 = 1;" (assignment_expression "lVar4 = 1" identifier = number_literal) ;) (labeled_statement "joined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;" statement_identifier : (if_statement "if (uVar2 < uVar1) goto LAB_0037135d;" if (parenthesized_expression "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) )) (goto_statement "goto LAB_0037135d;" goto statement_identifier ;))) (expression_statement "cVar3 = FUN_003707b0(&local_28);" (assignment_expression "cVar3 = FUN_003707b0(&local_28)" identifier = (call_expression "FUN_003707b0(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) )))) ;) (if_statement "if (cVar3 == '\0') goto LAB_00371368;" if (parenthesized_expression "(cVar3 == '\0')" ( (binary_expression "cVar3 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00371368;" goto statement_identifier ;)) (expression_statement "param_3 = param_3 + lVar4;" (assignment_expression "param_3 = param_3 + lVar4" identifier = (binary_expression "param_3 + lVar4" identifier + identifier)) ;) (expression_statement "lVar4 = (long)param_4 - (long)param_3;" (assignment_expression "lVar4 = (long)param_4 - (long)param_3" identifier = (binary_expression "(long)param_4 - (long)param_3" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) while (parenthesized_expression "(param_4 != param_3)" ( (binary_expression "param_4 != param_3" identifier != identifier) )) ;) })) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) }) (else_clause "else {\nLAB_00371368:\n    uVar5 = 1;\n  }" else (compound_statement "{\nLAB_00371368:\n    uVar5 = 1;\n  }" { (labeled_statement "LAB_00371368:\n    uVar5 = 1;" statement_identifier : (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;)) }))) (labeled_statement "LAB_0037136d:\n  *param_5 = (long)param_3;" statement_identifier : (expression_statement "*param_5 = (long)param_3;" (assignment_expression "*param_5 = (long)param_3" (pointer_expression "*param_5" * identifier) = (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;)) (expression_statement "*param_8 = local_28;" (assignment_expression "*param_8 = local_28" (pointer_expression "*param_8" * identifier) = identifier) ;) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit "/* std::__codecvt_utf8_utf16_base<wchar_t>::do_out(__mbstate_t&, wchar_t const*, wchar_t const*,\n   wchar_t const*&, char*, char*, char*&) const */\n\nundefined8 __thiscall\nstd::__codecvt_utf8_utf16_base<wchar_t>::do_out\n          (__codecvt_utf8_utf16_base<wchar_t> *this,__mbstate_t *param_1,wchar_t *param_2,\n          wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7)\n\n{\n  ulong uVar1;\n  char cVar2;\n  long lVar3;\n  undefined8 uVar4;\n  wchar32 wVar5;\n  char *local_28;\n  char *local_20;\n  \n  uVar1 = *(ulong *)(this + 0x18);\n  local_20 = param_6;\n  local_28 = param_5;\n  if ((((byte)this[0x20] & 2) == 0) ||\n     (cVar2 = (anonymous_namespace)::write_utf8_bom(&local_28), cVar2 != '\0')) {\n    lVar3 = (long)param_3 - (long)param_2;\n    if (param_2 != param_3) {\n      do {\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      } while (param_3 != param_2);\n    }\n    uVar4 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar4 = 1;\n  }\nLAB_0037136d:\n  *param_4 = param_2;\n  *param_7 = local_28;\n  return uVar4;\n}\n\n" comment (function_definition "undefined8 __thiscall\nstd::__codecvt_utf8_utf16_base<wchar_t>::do_out\n          (__codecvt_utf8_utf16_base<wchar_t> *this,__mbstate_t *param_1,wchar_t *param_2,\n          wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7)\n\n{\n  ulong uVar1;\n  char cVar2;\n  long lVar3;\n  undefined8 uVar4;\n  wchar32 wVar5;\n  char *local_28;\n  char *local_20;\n  \n  uVar1 = *(ulong *)(this + 0x18);\n  local_20 = param_6;\n  local_28 = param_5;\n  if ((((byte)this[0x20] & 2) == 0) ||\n     (cVar2 = (anonymous_namespace)::write_utf8_bom(&local_28), cVar2 != '\0')) {\n    lVar3 = (long)param_3 - (long)param_2;\n    if (param_2 != param_3) {\n      do {\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      } while (param_3 != param_2);\n    }\n    uVar4 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar4 = 1;\n  }\nLAB_0037136d:\n  *param_4 = param_2;\n  *param_7 = local_28;\n  return uVar4;\n}" type_identifier (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::__codecvt_utf8_utf16_base<wchar_t>::" identifier : : identifier < identifier > : :) (function_declarator "do_out\n          (__codecvt_utf8_utf16_base<wchar_t> *this,__mbstate_t *param_1,wchar_t *param_2,\n          wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7)" identifier (parameter_list "(__codecvt_utf8_utf16_base<wchar_t> *this,__mbstate_t *param_1,wchar_t *param_2,\n          wchar_t *param_3,wchar_t **param_4,char *param_5,char *param_6,char **param_7)" ( (parameter_declaration "__codecvt_utf8_utf16_base<wchar_t> *this" type_identifier (ERROR "<wchar_t>" < identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "__mbstate_t *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "wchar_t *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "wchar_t *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "wchar_t **param_4" type_identifier (pointer_declarator "**param_4" * (pointer_declarator "*param_4" * identifier))) , (parameter_declaration "char *param_5" primitive_type (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "char *param_6" primitive_type (pointer_declarator "*param_6" * identifier)) , (parameter_declaration "char **param_7" primitive_type (pointer_declarator "**param_7" * (pointer_declarator "*param_7" * identifier))) ))) (compound_statement "{\n  ulong uVar1;\n  char cVar2;\n  long lVar3;\n  undefined8 uVar4;\n  wchar32 wVar5;\n  char *local_28;\n  char *local_20;\n  \n  uVar1 = *(ulong *)(this + 0x18);\n  local_20 = param_6;\n  local_28 = param_5;\n  if ((((byte)this[0x20] & 2) == 0) ||\n     (cVar2 = (anonymous_namespace)::write_utf8_bom(&local_28), cVar2 != '\0')) {\n    lVar3 = (long)param_3 - (long)param_2;\n    if (param_2 != param_3) {\n      do {\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      } while (param_3 != param_2);\n    }\n    uVar4 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar4 = 1;\n  }\nLAB_0037136d:\n  *param_4 = param_2;\n  *param_7 = local_28;\n  return uVar4;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "wchar32 wVar5;" type_identifier identifier ;) (declaration "char *local_28;" primitive_type (pointer_declarator "*local_28" * identifier) ;) (declaration "char *local_20;" primitive_type (pointer_declarator "*local_20" * identifier) ;) (expression_statement "uVar1 = *(ulong *)(this + 0x18);" (assignment_expression "uVar1 = *(ulong *)(this + 0x18)" identifier = (pointer_expression "*(ulong *)(this + 0x18)" * (cast_expression "(ulong *)(this + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) ))))) ;) (expression_statement "local_20 = param_6;" (assignment_expression "local_20 = param_6" identifier = identifier) ;) (expression_statement "local_28 = param_5;" (assignment_expression "local_28 = param_5" identifier = identifier) ;) (if_statement "if ((((byte)this[0x20] & 2) == 0) ||\n     (cVar2 = (anonymous_namespace)::write_utf8_bom(&local_28), cVar2 != '\0')) {\n    lVar3 = (long)param_3 - (long)param_2;\n    if (param_2 != param_3) {\n      do {\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      } while (param_3 != param_2);\n    }\n    uVar4 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar4 = 1;\n  }" if (parenthesized_expression "((((byte)this[0x20] & 2) == 0) ||\n     (cVar2 = (anonymous_namespace)::write_utf8_bom(&local_28), cVar2 != '\0'))" ( (binary_expression "(((byte)this[0x20] & 2) == 0) ||\n     (cVar2 = (anonymous_namespace)::write_utf8_bom(&local_28), cVar2 != '\0')" (parenthesized_expression "(((byte)this[0x20] & 2) == 0)" ( (binary_expression "((byte)this[0x20] & 2) == 0" (parenthesized_expression "((byte)this[0x20] & 2)" ( (binary_expression "(byte)this[0x20] & 2" (cast_expression "(byte)this[0x20]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "this[0x20]" identifier [ number_literal ])) & number_literal) )) == number_literal) )) || (parenthesized_expression "(cVar2 = (anonymous_namespace)::write_utf8_bom(&local_28), cVar2 != '\0')" ( (ERROR "cVar2 = (anonymous_namespace)::" (assignment_expression "cVar2 = (anonymous_namespace)" identifier = (parenthesized_expression "(anonymous_namespace)" ( identifier ))) : :) (comma_expression "write_utf8_bom(&local_28), cVar2 != '\0'" (call_expression "write_utf8_bom(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) ))) , (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\n    lVar3 = (long)param_3 - (long)param_2;\n    if (param_2 != param_3) {\n      do {\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      } while (param_3 != param_2);\n    }\n    uVar4 = 0;\n  }" { (expression_statement "lVar3 = (long)param_3 - (long)param_2;" (assignment_expression "lVar3 = (long)param_3 - (long)param_2" identifier = (binary_expression "(long)param_3 - (long)param_2" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (param_2 != param_3) {\n      do {\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      } while (param_3 != param_2);\n    }" if (parenthesized_expression "(param_2 != param_3)" ( (binary_expression "param_2 != param_3" identifier != identifier) )) (compound_statement "{\n      do {\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      } while (param_3 != param_2);\n    }" { (do_statement "do {\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      } while (param_3 != param_2);" do (compound_statement "{\n        wVar5 = *param_2;\n        if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;\nLAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);\n        if (cVar2 == '\0') goto LAB_00371368;\n        param_2 = param_2 + lVar3;\n        lVar3 = (long)param_3 - (long)param_2;\n      }" { (expression_statement "wVar5 = *param_2;" (assignment_expression "wVar5 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if ((uint)(wVar5 + L'\xffff2800') < 0x400) {\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }" if (parenthesized_expression "((uint)(wVar5 + L'\xffff2800') < 0x400)" ( (binary_expression "(uint)(wVar5 + L'\xffff2800') < 0x400" (call_expression "(uint)(wVar5 + L'\xffff2800')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(wVar5 + L'\xffff2800')" ( (binary_expression "wVar5 + L'\xffff2800'" identifier + (char_literal "L'\xffff2800'" L' escape_sequence character character character character ')) ))) < number_literal) )) (compound_statement "{\n          if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }" { (if_statement "if (1 < (ulong)(lVar3 >> 2)) {\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }" if (parenthesized_expression "(1 < (ulong)(lVar3 >> 2))" ( (binary_expression "1 < (ulong)(lVar3 >> 2)" number_literal < (call_expression "(ulong)(lVar3 >> 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar3 >> 2)" ( (binary_expression "lVar3 >> 2" identifier >> number_literal) )))) )) (compound_statement "{\n            if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }\nLAB_0037135d:\n            uVar4 = 2;\n            goto LAB_0037136d;\n          }" { (if_statement "if ((uint)(param_2[1] + L'\xffff2400') < 0x400) {\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }" if (parenthesized_expression "((uint)(param_2[1] + L'\xffff2400') < 0x400)" ( (binary_expression "(uint)(param_2[1] + L'\xffff2400') < 0x400" (call_expression "(uint)(param_2[1] + L'\xffff2400')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2[1] + L'\xffff2400')" ( (binary_expression "param_2[1] + L'\xffff2400'" (subscript_expression "param_2[1]" identifier [ number_literal ]) + (char_literal "L'\xffff2400'" L' escape_sequence character character character character ')) ))) < number_literal) )) (compound_statement "{\n              lVar3 = 2;\n              wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;\n              if ((uint)wVar5 <= uVar1) goto LAB_00371313;\n            }" { (expression_statement "lVar3 = 2;" (assignment_expression "lVar3 = 2" identifier = number_literal) ;) (expression_statement "wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400;" (assignment_expression "wVar5 = param_2[1] + L'\xfca02400' + wVar5 * 0x400" identifier = (binary_expression "param_2[1] + L'\xfca02400' + wVar5 * 0x400" (binary_expression "param_2[1] + L'\xfca02400'" (subscript_expression "param_2[1]" identifier [ number_literal ]) + (char_literal "L'\xfca02400'" L' escape_sequence character character character character ')) + (binary_expression "wVar5 * 0x400" identifier * number_literal))) ;) (if_statement "if ((uint)wVar5 <= uVar1) goto LAB_00371313;" if (parenthesized_expression "((uint)wVar5 <= uVar1)" ( (binary_expression "(uint)wVar5 <= uVar1" (cast_expression "(uint)wVar5" ( (type_descriptor "uint" type_identifier) ) identifier) <= identifier) )) (goto_statement "goto LAB_00371313;" goto statement_identifier ;)) })) (labeled_statement "LAB_0037135d:\n            uVar4 = 2;" statement_identifier : (expression_statement "uVar4 = 2;" (assignment_expression "uVar4 = 2" identifier = number_literal) ;)) (goto_statement "goto LAB_0037136d;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) (if_statement "if (((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))\n        goto LAB_0037135d;" if (parenthesized_expression "(((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5))" ( (binary_expression "((uint)(wVar5 + L'\xffff2400') < 0x400) || (lVar3 = 1, uVar1 < (uint)wVar5)" (parenthesized_expression "((uint)(wVar5 + L'\xffff2400') < 0x400)" ( (binary_expression "(uint)(wVar5 + L'\xffff2400') < 0x400" (call_expression "(uint)(wVar5 + L'\xffff2400')" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(wVar5 + L'\xffff2400')" ( (binary_expression "wVar5 + L'\xffff2400'" identifier + (char_literal "L'\xffff2400'" L' escape_sequence character character character character ')) ))) < number_literal) )) || (parenthesized_expression "(lVar3 = 1, uVar1 < (uint)wVar5)" ( (comma_expression "lVar3 = 1, uVar1 < (uint)wVar5" (assignment_expression "lVar3 = 1" identifier = number_literal) , (binary_expression "uVar1 < (uint)wVar5" identifier < (cast_expression "(uint)wVar5" ( (type_descriptor "uint" type_identifier) ) identifier))) ))) )) (goto_statement "goto LAB_0037135d;" goto statement_identifier ;)) (labeled_statement "LAB_00371313:\n        cVar2 = (anonymous_namespace)::write_utf8_code_point((range *)&local_28,wVar5);" statement_identifier : (ERROR "cVar2 = (anonymous_namespace)::" (assignment_expression "cVar2 = (anonymous_namespace)" identifier = (parenthesized_expression "(anonymous_namespace)" ( identifier ))) : :) (expression_statement "write_utf8_code_point((range *)&local_28,wVar5);" (call_expression "write_utf8_code_point((range *)&local_28,wVar5)" identifier (argument_list "((range *)&local_28,wVar5)" ( (cast_expression "(range *)&local_28" ( (type_descriptor "range *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_28" & identifier)) , identifier ))) ;)) (if_statement "if (cVar2 == '\0') goto LAB_00371368;" if (parenthesized_expression "(cVar2 == '\0')" ( (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00371368;" goto statement_identifier ;)) (expression_statement "param_2 = param_2 + lVar3;" (assignment_expression "param_2 = param_2 + lVar3" identifier = (binary_expression "param_2 + lVar3" identifier + identifier)) ;) (expression_statement "lVar3 = (long)param_3 - (long)param_2;" (assignment_expression "lVar3 = (long)param_3 - (long)param_2" identifier = (binary_expression "(long)param_3 - (long)param_2" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_2" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) while (parenthesized_expression "(param_3 != param_2)" ( (binary_expression "param_3 != param_2" identifier != identifier) )) ;) })) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) }) (else_clause "else {\nLAB_00371368:\n    uVar4 = 1;\n  }" else (compound_statement "{\nLAB_00371368:\n    uVar4 = 1;\n  }" { (labeled_statement "LAB_00371368:\n    uVar4 = 1;" statement_identifier : (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" identifier = number_literal) ;)) }))) (labeled_statement "LAB_0037136d:\n  *param_4 = param_2;" statement_identifier : (expression_statement "*param_4 = param_2;" (assignment_expression "*param_4 = param_2" (pointer_expression "*param_4" * identifier) = identifier) ;)) (expression_statement "*param_7 = local_28;" (assignment_expression "*param_7 = local_28" (pointer_expression "*param_7" * identifier) = identifier) ;) (return_statement "return uVar4;" return identifier ;) })))
(translation_unit "undefined8\nFUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  char cVar3;\n  long lVar4;\n  undefined8 uVar5;\n  undefined8 local_28;\n  undefined8 local_20;\n  \n  uVar2 = *(ulong *)(param_1 + 0x18);\n  local_20 = param_7;\n  local_28 = param_6;\n  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }\nLAB_0037136d:\n  *param_5 = (long)param_3;\n  *param_8 = local_28;\n  return uVar5;\n}\n\n" (function_definition "undefined8\nFUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  char cVar3;\n  long lVar4;\n  undefined8 uVar5;\n  undefined8 local_28;\n  undefined8 local_20;\n  \n  uVar2 = *(ulong *)(param_1 + 0x18);\n  local_20 = param_7;\n  local_28 = param_6;\n  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }\nLAB_0037136d:\n  *param_5 = (long)param_3;\n  *param_8 = local_28;\n  return uVar5;\n}" type_identifier (function_declarator "FUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)" identifier (parameter_list "(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "long *param_5" (sized_type_specifier "long" long) (pointer_declarator "*param_5" * identifier)) , (parameter_declaration "undefined8 param_6" type_identifier identifier) , (parameter_declaration "undefined8 param_7" type_identifier identifier) , (parameter_declaration "undefined8 *param_8" type_identifier (pointer_declarator "*param_8" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  char cVar3;\n  long lVar4;\n  undefined8 uVar5;\n  undefined8 local_28;\n  undefined8 local_20;\n  \n  uVar2 = *(ulong *)(param_1 + 0x18);\n  local_20 = param_7;\n  local_28 = param_6;\n  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }\nLAB_0037136d:\n  *param_5 = (long)param_3;\n  *param_8 = local_28;\n  return uVar5;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "undefined8 local_28;" type_identifier identifier ;) (declaration "undefined8 local_20;" type_identifier identifier ;) (expression_statement "uVar2 = *(ulong *)(param_1 + 0x18);" (assignment_expression "uVar2 = *(ulong *)(param_1 + 0x18)" identifier = (pointer_expression "*(ulong *)(param_1 + 0x18)" * (cast_expression "(ulong *)(param_1 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "local_20 = param_7;" (assignment_expression "local_20 = param_7" identifier = identifier) ;) (expression_statement "local_28 = param_6;" (assignment_expression "local_28 = param_6" identifier = identifier) ;) (if_statement "if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }" if (parenthesized_expression "(((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0'))" ( (binary_expression "((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')" (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "(cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')" ( (comma_expression "cVar3 = FUN_00370a10(&local_28), cVar3 != '\0'" (assignment_expression "cVar3 = FUN_00370a10(&local_28)" identifier = (call_expression "FUN_00370a10(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) )))) , (binary_expression "cVar3 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence '))) ))) )) (compound_statement "{\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }" { (expression_statement "lVar4 = (long)param_4 - (long)param_3;" (assignment_expression "lVar4 = (long)param_4 - (long)param_3" identifier = (binary_expression "(long)param_4 - (long)param_3" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }" if (parenthesized_expression "(param_3 != param_4)" ( (binary_expression "param_3 != param_4" identifier != identifier) )) (compound_statement "{\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }" { (do_statement "do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);" do (compound_statement "{\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      }" { (expression_statement "uVar1 = *param_3;" (assignment_expression "uVar1 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }" if (parenthesized_expression "(uVar1 - 0xd800 < 0x400)" ( (binary_expression "uVar1 - 0xd800 < 0x400" (binary_expression "uVar1 - 0xd800" identifier - number_literal) < number_literal) )) (compound_statement "{\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }" { (if_statement "if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }" if (parenthesized_expression "(1 < (ulong)(lVar4 >> 2))" ( (binary_expression "1 < (ulong)(lVar4 >> 2)" number_literal < (call_expression "(ulong)(lVar4 >> 2)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar4 >> 2)" ( (binary_expression "lVar4 >> 2" identifier >> number_literal) )))) )) (compound_statement "{\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }" { (if_statement "if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }" if (parenthesized_expression "(param_3[1] - 0xdc00 < 0x400)" ( (binary_expression "param_3[1] - 0xdc00 < 0x400" (binary_expression "param_3[1] - 0xdc00" (subscript_expression "param_3[1]" identifier [ number_literal ]) - number_literal) < number_literal) )) (compound_statement "{\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }" { (expression_statement "lVar4 = 2;" (assignment_expression "lVar4 = 2" identifier = number_literal) ;) (expression_statement "uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;" (assignment_expression "uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400" identifier = (binary_expression "param_3[1] + 0xfca02400 + uVar1 * 0x400" (binary_expression "param_3[1] + 0xfca02400" (subscript_expression "param_3[1]" identifier [ number_literal ]) + number_literal) + (binary_expression "uVar1 * 0x400" identifier * number_literal))) ;) (goto_statement "goto joined_r0x00371311;" goto statement_identifier ;) })) (labeled_statement "LAB_0037135d:\n            uVar5 = 2;" statement_identifier : (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;)) (goto_statement "goto LAB_0037136d;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) (if_statement "if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;" if (parenthesized_expression "(uVar1 - 0xdc00 < 0x400)" ( (binary_expression "uVar1 - 0xdc00 < 0x400" (binary_expression "uVar1 - 0xdc00" identifier - number_literal) < number_literal) )) (goto_statement "goto LAB_0037135d;" goto statement_identifier ;)) (expression_statement "lVar4 = 1;" (assignment_expression "lVar4 = 1" identifier = number_literal) ;) (labeled_statement "joined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;" statement_identifier : (if_statement "if (uVar2 < uVar1) goto LAB_0037135d;" if (parenthesized_expression "(uVar2 < uVar1)" ( (binary_expression "uVar2 < uVar1" identifier < identifier) )) (goto_statement "goto LAB_0037135d;" goto statement_identifier ;))) (expression_statement "cVar3 = FUN_003707b0(&local_28);" (assignment_expression "cVar3 = FUN_003707b0(&local_28)" identifier = (call_expression "FUN_003707b0(&local_28)" identifier (argument_list "(&local_28)" ( (pointer_expression "&local_28" & identifier) )))) ;) (if_statement "if (cVar3 == '\0') goto LAB_00371368;" if (parenthesized_expression "(cVar3 == '\0')" ( (binary_expression "cVar3 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00371368;" goto statement_identifier ;)) (expression_statement "param_3 = param_3 + lVar4;" (assignment_expression "param_3 = param_3 + lVar4" identifier = (binary_expression "param_3 + lVar4" identifier + identifier)) ;) (expression_statement "lVar4 = (long)param_4 - (long)param_3;" (assignment_expression "lVar4 = (long)param_4 - (long)param_3" identifier = (binary_expression "(long)param_4 - (long)param_3" (cast_expression "(long)param_4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) while (parenthesized_expression "(param_4 != param_3)" ( (binary_expression "param_4 != param_3" identifier != identifier) )) ;) })) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) }) (else_clause "else {\nLAB_00371368:\n    uVar5 = 1;\n  }" else (compound_statement "{\nLAB_00371368:\n    uVar5 = 1;\n  }" { (labeled_statement "LAB_00371368:\n    uVar5 = 1;" statement_identifier : (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;)) }))) (labeled_statement "LAB_0037136d:\n  *param_5 = (long)param_3;" statement_identifier : (expression_statement "*param_5 = (long)param_3;" (assignment_expression "*param_5 = (long)param_3" (pointer_expression "*param_5" * identifier) = (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;)) (expression_statement "*param_8 = local_28;" (assignment_expression "*param_8 = local_28" (pointer_expression "*param_8" * identifier) = identifier) ;) (return_statement "return uVar5;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) , (binary_expression IDENT != (char_literal ' escape_sequence '))) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + (binary_expression IDENT * LIT))) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (goto_statement goto statement_identifier ;) })) (break_statement break ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (return_statement return IDENT ;) })))
(function_definition "undefined8\nFUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)\n\n{\n  uint uVar1;\n  ulong uVar2;\n  char cVar3;\n  long lVar4;\n  undefined8 uVar5;\n  undefined8 local_28;\n  undefined8 local_20;\n  \n  uVar2 = *(ulong *)(param_1 + 0x18);\n  local_20 = param_7;\n  local_28 = param_6;\n  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }\nLAB_0037136d:\n  *param_5 = (long)param_3;\n  *param_8 = local_28;\n  return uVar5;\n}" (type_identifier "undefined8") (function_declarator "FUN_00371290(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)" (identifier "FUN_00371290") (parameter_list "(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,\n            undefined8 param_6,undefined8 param_7,undefined8 *param_8)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "uint *param_4" (type_identifier "uint") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "long *param_5" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_5" (* "*") (identifier "param_5"))) (, ",") (parameter_declaration "undefined8 param_6" (type_identifier "undefined8") (identifier "param_6")) (, ",") (parameter_declaration "undefined8 param_7" (type_identifier "undefined8") (identifier "param_7")) (, ",") (parameter_declaration "undefined8 *param_8" (type_identifier "undefined8") (pointer_declarator "*param_8" (* "*") (identifier "param_8"))) () ")"))) (compound_statement "{\n  uint uVar1;\n  ulong uVar2;\n  char cVar3;\n  long lVar4;\n  undefined8 uVar5;\n  undefined8 local_28;\n  undefined8 local_20;\n  \n  uVar2 = *(ulong *)(param_1 + 0x18);\n  local_20 = param_7;\n  local_28 = param_6;\n  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }\nLAB_0037136d:\n  *param_5 = (long)param_3;\n  *param_8 = local_28;\n  return uVar5;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "char cVar3;" (primitive_type "char") (identifier "cVar3") (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "undefined8 local_28;" (type_identifier "undefined8") (identifier "local_28") (; ";")) (declaration "undefined8 local_20;" (type_identifier "undefined8") (identifier "local_20") (; ";")) (expression_statement "uVar2 = *(ulong *)(param_1 + 0x18);" (assignment_expression "uVar2 = *(ulong *)(param_1 + 0x18)" (identifier "uVar2") (= "=") (pointer_expression "*(ulong *)(param_1 + 0x18)" (* "*") (cast_expression "(ulong *)(param_1 + 0x18)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "local_20 = param_7;" (assignment_expression "local_20 = param_7" (identifier "local_20") (= "=") (identifier "param_7")) (; ";")) (expression_statement "local_28 = param_6;" (assignment_expression "local_28 = param_6" (identifier "local_28") (= "=") (identifier "param_6")) (; ";")) (if_statement "if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }\n  else {\nLAB_00371368:\n    uVar5 = 1;\n  }" (if "if") (parenthesized_expression "(((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0'))" (( "(") (binary_expression "((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')" (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 2) == 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x20) & 2) == 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 2)" (( "(") (binary_expression "*(byte *)(param_1 + 0x20) & 2" (pointer_expression "*(byte *)(param_1 + 0x20)" (* "*") (cast_expression "(byte *)(param_1 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')" (( "(") (comma_expression "cVar3 = FUN_00370a10(&local_28), cVar3 != '\0'" (assignment_expression "cVar3 = FUN_00370a10(&local_28)" (identifier "cVar3") (= "=") (call_expression "FUN_00370a10(&local_28)" (identifier "FUN_00370a10") (argument_list "(&local_28)" (( "(") (pointer_expression "&local_28" (& "&") (identifier "local_28")) () ")")))) (, ",") (binary_expression "cVar3 != '\0'" (identifier "cVar3") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")"))) () ")")) (compound_statement "{\n    lVar4 = (long)param_4 - (long)param_3;\n    if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }\n    uVar5 = 0;\n  }" ({ "{") (expression_statement "lVar4 = (long)param_4 - (long)param_3;" (assignment_expression "lVar4 = (long)param_4 - (long)param_3" (identifier "lVar4") (= "=") (binary_expression "(long)param_4 - (long)param_3" (cast_expression "(long)param_4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_4")) (- "-") (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")))) (; ";")) (if_statement "if (param_3 != param_4) {\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }" (if "if") (parenthesized_expression "(param_3 != param_4)" (( "(") (binary_expression "param_3 != param_4" (identifier "param_3") (!= "!=") (identifier "param_4")) () ")")) (compound_statement "{\n      do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);\n    }" ({ "{") (do_statement "do {\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      } while (param_4 != param_3);" (do "do") (compound_statement "{\n        uVar1 = *param_3;\n        if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }\n        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;\n        lVar4 = 1;\njoined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;\n        cVar3 = FUN_003707b0(&local_28);\n        if (cVar3 == '\0') goto LAB_00371368;\n        param_3 = param_3 + lVar4;\n        lVar4 = (long)param_4 - (long)param_3;\n      }" ({ "{") (expression_statement "uVar1 = *param_3;" (assignment_expression "uVar1 = *param_3" (identifier "uVar1") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if (uVar1 - 0xd800 < 0x400) {\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }" (if "if") (parenthesized_expression "(uVar1 - 0xd800 < 0x400)" (( "(") (binary_expression "uVar1 - 0xd800 < 0x400" (binary_expression "uVar1 - 0xd800" (identifier "uVar1") (- "-") (number_literal "0xd800")) (< "<") (number_literal "0x400")) () ")")) (compound_statement "{\n          if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }\n          break;\n        }" ({ "{") (if_statement "if (1 < (ulong)(lVar4 >> 2)) {\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }" (if "if") (parenthesized_expression "(1 < (ulong)(lVar4 >> 2))" (( "(") (binary_expression "1 < (ulong)(lVar4 >> 2)" (number_literal "1") (< "<") (call_expression "(ulong)(lVar4 >> 2)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(lVar4 >> 2)" (( "(") (binary_expression "lVar4 >> 2" (identifier "lVar4") (>> ">>") (number_literal "2")) () ")")))) () ")")) (compound_statement "{\n            if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }\nLAB_0037135d:\n            uVar5 = 2;\n            goto LAB_0037136d;\n          }" ({ "{") (if_statement "if (param_3[1] - 0xdc00 < 0x400) {\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }" (if "if") (parenthesized_expression "(param_3[1] - 0xdc00 < 0x400)" (( "(") (binary_expression "param_3[1] - 0xdc00 < 0x400" (binary_expression "param_3[1] - 0xdc00" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (- "-") (number_literal "0xdc00")) (< "<") (number_literal "0x400")) () ")")) (compound_statement "{\n              lVar4 = 2;\n              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;\n              goto joined_r0x00371311;\n            }" ({ "{") (expression_statement "lVar4 = 2;" (assignment_expression "lVar4 = 2" (identifier "lVar4") (= "=") (number_literal "2")) (; ";")) (expression_statement "uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;" (assignment_expression "uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400" (identifier "uVar1") (= "=") (binary_expression "param_3[1] + 0xfca02400 + uVar1 * 0x400" (binary_expression "param_3[1] + 0xfca02400" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (+ "+") (number_literal "0xfca02400")) (+ "+") (binary_expression "uVar1 * 0x400" (identifier "uVar1") (* "*") (number_literal "0x400")))) (; ";")) (goto_statement "goto joined_r0x00371311;" (goto "goto") (statement_identifier "joined_r0x00371311") (; ";")) (} "}"))) (labeled_statement "LAB_0037135d:\n            uVar5 = 2;" (statement_identifier "LAB_0037135d") (: ":") (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" (identifier "uVar5") (= "=") (number_literal "2")) (; ";"))) (goto_statement "goto LAB_0037136d;" (goto "goto") (statement_identifier "LAB_0037136d") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";")) (} "}"))) (if_statement "if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;" (if "if") (parenthesized_expression "(uVar1 - 0xdc00 < 0x400)" (( "(") (binary_expression "uVar1 - 0xdc00 < 0x400" (binary_expression "uVar1 - 0xdc00" (identifier "uVar1") (- "-") (number_literal "0xdc00")) (< "<") (number_literal "0x400")) () ")")) (goto_statement "goto LAB_0037135d;" (goto "goto") (statement_identifier "LAB_0037135d") (; ";"))) (expression_statement "lVar4 = 1;" (assignment_expression "lVar4 = 1" (identifier "lVar4") (= "=") (number_literal "1")) (; ";")) (labeled_statement "joined_r0x00371311:\n        if (uVar2 < uVar1) goto LAB_0037135d;" (statement_identifier "joined_r0x00371311") (: ":") (if_statement "if (uVar2 < uVar1) goto LAB_0037135d;" (if "if") (parenthesized_expression "(uVar2 < uVar1)" (( "(") (binary_expression "uVar2 < uVar1" (identifier "uVar2") (< "<") (identifier "uVar1")) () ")")) (goto_statement "goto LAB_0037135d;" (goto "goto") (statement_identifier "LAB_0037135d") (; ";")))) (expression_statement "cVar3 = FUN_003707b0(&local_28);" (assignment_expression "cVar3 = FUN_003707b0(&local_28)" (identifier "cVar3") (= "=") (call_expression "FUN_003707b0(&local_28)" (identifier "FUN_003707b0") (argument_list "(&local_28)" (( "(") (pointer_expression "&local_28" (& "&") (identifier "local_28")) () ")")))) (; ";")) (if_statement "if (cVar3 == '\0') goto LAB_00371368;" (if "if") (parenthesized_expression "(cVar3 == '\0')" (( "(") (binary_expression "cVar3 == '\0'" (identifier "cVar3") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_00371368;" (goto "goto") (statement_identifier "LAB_00371368") (; ";"))) (expression_statement "param_3 = param_3 + lVar4;" (assignment_expression "param_3 = param_3 + lVar4" (identifier "param_3") (= "=") (binary_expression "param_3 + lVar4" (identifier "param_3") (+ "+") (identifier "lVar4"))) (; ";")) (expression_statement "lVar4 = (long)param_4 - (long)param_3;" (assignment_expression "lVar4 = (long)param_4 - (long)param_3" (identifier "lVar4") (= "=") (binary_expression "(long)param_4 - (long)param_3" (cast_expression "(long)param_4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_4")) (- "-") (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_4 != param_3)" (( "(") (binary_expression "param_4 != param_3" (identifier "param_4") (!= "!=") (identifier "param_3")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\nLAB_00371368:\n    uVar5 = 1;\n  }" (else "else") (compound_statement "{\nLAB_00371368:\n    uVar5 = 1;\n  }" ({ "{") (labeled_statement "LAB_00371368:\n    uVar5 = 1;" (statement_identifier "LAB_00371368") (: ":") (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (; ";"))) (} "}")))) (labeled_statement "LAB_0037136d:\n  *param_5 = (long)param_3;" (statement_identifier "LAB_0037136d") (: ":") (expression_statement "*param_5 = (long)param_3;" (assignment_expression "*param_5 = (long)param_3" (pointer_expression "*param_5" (* "*") (identifier "param_5")) (= "=") (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3"))) (; ";"))) (expression_statement "*param_8 = local_28;" (assignment_expression "*param_8 = local_28" (pointer_expression "*param_8" (* "*") (identifier "param_8")) (= "=") (identifier "local_28")) (; ";")) (return_statement "return uVar5;" (return "return") (identifier "uVar5") (; ";")) (} "}")))

/* std::__codecvt_utf8_utf16_base<wchar_t>::do_out(__mbstate_t&, wchar_t const*, wchar_t const*,
   wchar_t const*&, char*, char*, char*&) const */

type_1 __thiscall
std::type_2<type_4>::function_1
          (type_2<type_4> *var_1,type_3 *param_1,type_4 *var_4,
          type_4 *var_5,type_4 **param_4,char *param_5,char *param_6,char **param_7)

{
  type_5 var_8;
  char var_3;
  long var_7;
  type_1 uVar4;
  type_6 var_6;
  char *local_28;
  char *local_20;
  
  var_8 = *(type_5 *)(var_1 + 0x18);
  local_20 = param_6;
  local_28 = param_5;
  if ((((type_7)var_1[0x20] & 2) == 0) ||
     (var_3 = (anonymous_namespace)::var_2(&local_28), var_3 != '\0')) {
    var_7 = (long)var_5 - (long)var_4;
    if (var_4 != var_5) {
      do {
        var_6 = *var_4;
        if ((type_8)(var_6 + L'\xffff2800') < 0x400) {
          if (1 < (type_5)(var_7 >> 2)) {
            if ((type_8)(var_4[1] + L'\xffff2400') < 0x400) {
              var_7 = 2;
              var_6 = var_4[1] + L'\xfca02400' + var_6 * 0x400;
              if ((type_8)var_6 <= var_8) goto LAB_00371313;
            }
LAB_0037135d:
            uVar4 = 2;
            goto LAB_0037136d;
          }
          break;
        }
        if (((type_8)(var_6 + L'\xffff2400') < 0x400) || (var_7 = 1, var_8 < (type_8)var_6))
        goto LAB_0037135d;
LAB_00371313:
        var_3 = (anonymous_namespace)::var_9((type_9 *)&local_28,var_6);
        if (var_3 == '\0') goto LAB_00371368;
        var_4 = var_4 + var_7;
        var_7 = (long)var_5 - (long)var_4;
      } while (var_5 != var_4);
    }
    uVar4 = 0;
  }
  else {
LAB_00371368:
    uVar4 = 1;
  }
LAB_0037136d:
  *param_4 = var_4;
  *param_7 = local_28;
  return uVar4;
}


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

undefined8
MASKED(long param_1,undefined8 param_2,uint *param_3,uint *param_4,long *param_5,
            undefined8 param_6,undefined8 param_7,undefined8 *param_8)

{
  uint uVar1;
  ulong uVar2;
  char cVar3;
  long lVar4;
  undefined8 uVar5;
  undefined8 local_28;
  undefined8 local_20;
  
  uVar2 = *(ulong *)(param_1 + 0x18);
  local_20 = param_7;
  local_28 = param_6;
  if (((*(byte *)(param_1 + 0x20) & 2) == 0) || (cVar3 = FUN_00370a10(&local_28), cVar3 != '\0')) {
    lVar4 = (long)param_4 - (long)param_3;
    if (param_3 != param_4) {
      do {
        uVar1 = *param_3;
        if (uVar1 - 0xd800 < 0x400) {
          if (1 < (ulong)(lVar4 >> 2)) {
            if (param_3[1] - 0xdc00 < 0x400) {
              lVar4 = 2;
              uVar1 = param_3[1] + 0xfca02400 + uVar1 * 0x400;
              goto joined_r0x00371311;
            }
LAB_0037135d:
            uVar5 = 2;
            goto LAB_0037136d;
          }
          break;
        }
        if (uVar1 - 0xdc00 < 0x400) goto LAB_0037135d;
        lVar4 = 1;
joined_r0x00371311:
        if (uVar2 < uVar1) goto LAB_0037135d;
        cVar3 = FUN_003707b0(&local_28);
        if (cVar3 == '\0') goto LAB_00371368;
        param_3 = param_3 + lVar4;
        lVar4 = (long)param_4 - (long)param_3;
      } while (param_4 != param_3);
    }
    uVar5 = 0;
  }
  else {
LAB_00371368:
    uVar5 = 1;
  }
LAB_0037136d:
  *param_5 = (long)param_3;
  *param_8 = local_28;
  return uVar5;
}

