
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::wistream& std::getline<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>
   >(std::wistream&, std::wstring&, wchar_t) */

wistream *
std::getline<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>
          (wistream *param_1,wstring *param_2,wchar_t param_3)

{
  int *piVar1;
  uint uVar2;
  wchar_t *pwVar3;
  wchar_t wVar4;
  wistream *__s;
  wistream *pwVar5;
  size_t __n;
  wstring *pwVar6;
  uint uVar7;
  wistream *pwVar8;
  uint uVar9;
  wistream *local_34;
  uint local_30;
  sentry local_1d [13];
  
  uVar9 = 1;
  pwVar8 = param_1;
  wistream::sentry::sentry(local_1d,(wistream *)param_1,true);
  if (local_1d[0] != (sentry)0x0) {
    *(undefined4 *)(param_2 + 4) = 0;
    **(undefined4 **)param_2 = 0;
    pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);
    piVar1 = *(int **)(pwVar5 + 0x7c);
    local_34 = (wistream *)piVar1[3];
    __s = (wistream *)piVar1[2];
    if (__s < local_34) {
      wVar4 = *(wchar_t *)__s;
      if (wVar4 == L'\xffffffff') goto LAB_003af2df;
    }
    else {
                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */
      wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);
      if (wVar4 == L'\xffffffff') {
        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);
        goto LAB_003af2df;
      }
      local_34 = (wistream *)piVar1[3];
      __s = (wistream *)piVar1[2];
    }
    local_30 = 0;
    if (param_3 == wVar4) {
      if (local_34 <= __s) {
                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */
        (**(code **)(*piVar1 + 0x28))(piVar1);
        return param_1;
      }
LAB_003af5a9:
      piVar1[2] = (int)(__s + 4);
      return param_1;
    }
    do {
      __n = (int)local_34 - (int)__s >> 2;
      if ((int)(0x1fffffff - local_30) < (int)__n) {
        __n = 0x1fffffff - local_30;
      }
      uVar2 = *(uint *)(param_2 + 4);
      if ((int)__n < 2) {
        pwVar6 = *(wstring **)param_2;
        if (pwVar6 == param_2 + 8) {
          uVar7 = 3;
        }
        else {
          uVar7 = *(uint *)(param_2 + 8);
        }
        if (uVar7 < uVar2 + 1) {
          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);
          __s = (wistream *)piVar1[2];
          pwVar6 = *(wstring **)param_2;
          local_34 = (wistream *)piVar1[3];
        }
        local_30 = local_30 + 1;
        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;
        *(uint *)(param_2 + 4) = uVar2 + 1;
        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;
        if (__s < local_34) {
          wVar4 = *(wchar_t *)__s;
          piVar1[2] = (int)(__s + 4);
        }
        else {
          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);
        }
        if (wVar4 != L'\xffffffff') {
          pwVar3 = (wchar_t *)piVar1[2];
          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;
          goto LAB_003af3e2;
        }
LAB_003af538:
        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);
        goto LAB_003af2df;
      }
      pwVar3 = wmemchr((wchar_t *)__s,param_3,__n);
      uVar7 = (int)pwVar3 - (int)__s >> 2;
      if (pwVar3 == (wchar_t *)0x0) {
        uVar7 = __n;
      }
      if (0x1fffffff - uVar2 < uVar7) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */
        __throw_length_error("basic_string::append");
      }
      uVar9 = uVar7;
                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */
      wstring::_M_append((wchar_t *)param_2,(uint)__s);
      local_30 = local_30 + uVar7;
      pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4);
      piVar1[2] = (int)pwVar3;
      pwVar8 = __s;
      if (pwVar3 < (wchar_t *)piVar1[3]) {
LAB_003af3e2:
        wVar4 = *pwVar3;
      }
      else {
LAB_003af49f:
        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);
      }
      if (0x1ffffffe < local_30) {
        if (wVar4 == L'\xffffffff') goto LAB_003af538;
        if (param_3 != wVar4) goto LAB_003af2cf;
        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;
        piVar1[2] = piVar1[2] + 4;
        if (local_30 != 0xffffffff) {
          return param_1;
        }
        goto LAB_003af2cf;
      }
      if (wVar4 == L'\xffffffff') {
        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);
        goto LAB_003af2df;
      }
      local_34 = (wistream *)piVar1[3];
      __s = (wistream *)piVar1[2];
    } while (param_3 != wVar4);
    if (__s < local_34) goto LAB_003af5a9;
LAB_003af418:
    (**(code **)(*piVar1 + 0x28))(piVar1);
    if (local_30 != 0xffffffff) {
      return param_1;
    }
  }
LAB_003af2cf:
  pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);
LAB_003af2df:
  wios::clear((_Ios_Iostate)pwVar5);
  return param_1;
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

int * FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)

{
  int *piVar1;
  uint uVar2;
  wchar_t *pwVar3;
  wchar_t *pwVar4;
  wchar_t wVar5;
  int iVar6;
  size_t __n;
  undefined4 *puVar7;
  wchar_t *local_34;
  uint local_30;
  char local_1d [13];
  
  FUN_003d4d40(local_1d,param_1,1);
  if (local_1d[0] == '\0') {
LAB_003af2cf:
    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
    uVar2 = 4;
  }
  else {
    param_2[1] = 0;
    *(undefined4 *)*param_2 = 0;
    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
    piVar1 = *(int **)(iVar6 + 0x7c);
    local_34 = (wchar_t *)piVar1[3];
    pwVar4 = (wchar_t *)piVar1[2];
    if (pwVar4 < local_34) {
      wVar5 = *pwVar4;
      if (wVar5 != L'\xffffffff') goto LAB_003af33c;
    }
    else {
                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */
      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);
      if (wVar5 != L'\xffffffff') {
        local_34 = (wchar_t *)piVar1[3];
        pwVar4 = (wchar_t *)piVar1[2];
LAB_003af33c:
        local_30 = 0;
        if (param_3 == wVar5) {
          if (local_34 <= pwVar4) {
                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */
            (**(code **)(*piVar1 + 0x28))(piVar1);
            return param_1;
          }
LAB_003af5a9:
          piVar1[2] = (int)(pwVar4 + 1);
          return param_1;
        }
        do {
          __n = (int)local_34 - (int)pwVar4 >> 2;
          if ((int)(0x1fffffff - local_30) < (int)__n) {
            __n = 0x1fffffff - local_30;
          }
          iVar6 = param_2[1];
          if ((int)__n < 2) {
            puVar7 = (undefined4 *)*param_2;
            if (puVar7 == param_2 + 2) {
              uVar2 = 3;
            }
            else {
              uVar2 = param_2[2];
            }
            if (uVar2 < iVar6 + 1U) {
              FUN_003b2370(param_2,iVar6,0,0,1);
              pwVar4 = (wchar_t *)piVar1[2];
              puVar7 = (undefined4 *)*param_2;
              local_34 = (wchar_t *)piVar1[3];
            }
            local_30 = local_30 + 1;
            puVar7[iVar6] = wVar5;
            param_2[1] = iVar6 + 1U;
            puVar7[iVar6 + 1] = 0;
            if (pwVar4 < local_34) {
              wVar5 = *pwVar4;
              piVar1[2] = (int)(pwVar4 + 1);
            }
            else {
              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);
            }
            if (wVar5 != L'\xffffffff') {
              pwVar4 = (wchar_t *)piVar1[2];
              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;
              goto LAB_003af3e2;
            }
LAB_003af538:
            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
            uVar2 = 2;
            goto LAB_003af2df;
          }
          pwVar3 = wmemchr(pwVar4,param_3,__n);
          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;
          if (pwVar3 == (wchar_t *)0x0) {
            uVar2 = __n;
          }
          if (0x1fffffffU - iVar6 < uVar2) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */
            FUN_003f3a70("basic_string::append");
          }
                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */
          FUN_003b3f40(param_2,pwVar4,uVar2);
          local_30 = local_30 + uVar2;
          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);
          piVar1[2] = (int)pwVar4;
          if (pwVar4 < (wchar_t *)piVar1[3]) {
LAB_003af3e2:
            wVar5 = *pwVar4;
          }
          else {
LAB_003af49f:
            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);
          }
          if (0x1ffffffe < local_30) {
            if (wVar5 == L'\xffffffff') goto LAB_003af538;
            if (param_3 != wVar5) goto LAB_003af2cf;
            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;
            piVar1[2] = piVar1[2] + 4;
            if (local_30 != 0xffffffff) {
              return param_1;
            }
            goto LAB_003af2cf;
          }
          if (wVar5 == L'\xffffffff') {
            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;
            goto LAB_003af2df;
          }
          local_34 = (wchar_t *)piVar1[3];
          pwVar4 = (wchar_t *)piVar1[2];
        } while (param_3 != wVar5);
        if (pwVar4 < local_34) goto LAB_003af5a9;
LAB_003af418:
        (**(code **)(*piVar1 + 0x28))(piVar1);
        if (local_30 != 0xffffffff) {
          return param_1;
        }
        goto LAB_003af2cf;
      }
      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
    }
    uVar2 = 6;
  }
LAB_003af2df:
  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));
  return param_1;
}


CALL 0x00074f02
ADD EAX,0x23ad5b
PUSH EBP
MOV EBP,ESP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBX,EAX
SUB ESP,0x40
MOV dword ptr [EBP + -0x38],EAX
LEA EAX,[EBP + -0x19]
PUSH 0x1
PUSH dword ptr [EBP + 0x8]
PUSH EAX
CALL 0x003d4d40
ADD ESP,0x10
CMP byte ptr [EBP + -0x19],0x0
JNZ 0x003af300
MOV EAX,dword ptr [EBP + 0x8]
MOV EDX,dword ptr [EBP + 0x8]
MOV EAX,dword ptr [EAX]
ADD EDX,dword ptr [EAX + -0xc]
MOV EAX,0x4
SUB ESP,0x8
OR EAX,dword ptr [EDX + 0x14]
MOV EBX,dword ptr [EBP + -0x38]
PUSH EAX
PUSH EDX
CALL 0x003d8970
ADD ESP,0x10
MOV EAX,dword ptr [EBP + 0x8]
LEA ESP,[EBP + -0xc]
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [EBP + 0xc]
MOV EDX,dword ptr [EBP + 0x8]
MOV dword ptr [EAX + 0x4],0x0
MOV EAX,dword ptr [EAX]
MOV dword ptr [EAX],0x0
MOV EAX,dword ptr [EBP + 0x8]
MOV EAX,dword ptr [EAX]
ADD EDX,dword ptr [EAX + -0xc]
MOV ESI,dword ptr [EDX + 0x7c]
MOV EAX,dword ptr [ESI + 0xc]
MOV ECX,dword ptr [ESI + 0x8]
MOV dword ptr [EBP + -0x30],EAX
CMP EAX,ECX
JBE 0x003af588
MOV EDI,dword ptr [ECX]
CMP EDI,-0x1
JZ 0x003af5d2
MOV EAX,dword ptr [EBP + 0xc]
MOV dword ptr [EBP + -0x2c],0x0
ADD EAX,0x8
MOV dword ptr [EBP + -0x40],EAX
CMP dword ptr [EBP + 0x10],EDI
JZ 0x003af5b4
LEA ESI,[ESI]
MOV EDX,dword ptr [EBP + -0x30]
MOV EBX,0x1fffffff
SUB EBX,dword ptr [EBP + -0x2c]
SUB EDX,ECX
SAR EDX,0x2
CMP EDX,EBX
CMOVG EDX,EBX
MOV EBX,dword ptr [EBP + 0xc]
MOV EBX,dword ptr [EBX + 0x4]
MOV dword ptr [EBP + -0x34],EBX
CMP EDX,0x1
JLE 0x003af438
SUB ESP,0x4
MOV EBX,dword ptr [EBP + -0x38]
MOV dword ptr [EBP + -0x3c],EDX
PUSH EDX
PUSH dword ptr [EBP + 0x10]
PUSH ECX
MOV dword ptr [EBP + -0x30],ECX
CALL 0x00039a30
MOV ECX,dword ptr [EBP + -0x30]
MOV EDX,dword ptr [EBP + -0x3c]
ADD ESP,0x10
MOV EDI,EAX
SUB EDI,ECX
SAR EDI,0x2
TEST EAX,EAX
MOV EAX,0x1fffffff
CMOVZ EDI,EDX
SUB EAX,dword ptr [EBP + -0x34]
CMP EAX,EDI
JC 0x003af5dc
SUB ESP,0x4
MOV EBX,dword ptr [EBP + -0x38]
PUSH EDI
PUSH ECX
PUSH dword ptr [EBP + 0xc]
CALL 0x003b3f40
MOV EAX,dword ptr [ESI + 0x8]
ADD ESP,0x10
ADD dword ptr [EBP + -0x2c],EDI
LEA EAX,[EAX + EDI*0x4]
MOV dword ptr [ESI + 0x8],EAX
CMP dword ptr [ESI + 0xc],EAX
JBE 0x003af49f
CMP dword ptr [EBP + -0x2c],0x1ffffffe
MOV EDI,dword ptr [EAX]
JA 0x003af4c0
CMP EDI,-0x1
JZ 0x003af568
MOV EAX,dword ptr [ESI + 0xc]
MOV ECX,dword ptr [ESI + 0x8]
MOV dword ptr [EBP + -0x30],EAX
CMP dword ptr [EBP + 0x10],EDI
JNZ 0x003af358
ADD dword ptr [EBP + -0x2c],0x1
CMP ECX,EAX
JC 0x003af5a9
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
PUSH ESI
CALL dword ptr [EAX + 0x28]
MOV EAX,dword ptr [EBP + -0x2c]
ADD ESP,0x10
TEST EAX,EAX
JZ 0x003af2cf
JMP 0x003af2f2
MOV EDX,dword ptr [EBP + -0x34]
ADD EDX,0x1
MOV dword ptr [EBP + -0x3c],EDX
MOV EDX,dword ptr [EBP + 0xc]
MOV EDX,dword ptr [EDX]
CMP EDX,dword ptr [EBP + -0x40]
JZ 0x003af528
MOV EAX,dword ptr [EBP + 0xc]
MOV EBX,dword ptr [EAX + 0x8]
CMP dword ptr [EBP + -0x3c],EBX
JA 0x003af4f8
MOV EBX,dword ptr [EBP + -0x34]
MOV EAX,dword ptr [EBP + -0x3c]
ADD dword ptr [EBP + -0x2c],0x1
MOV dword ptr [EDX + EBX*0x4],EDI
MOV EDI,dword ptr [EBP + 0xc]
MOV dword ptr [EDI + 0x4],EAX
MOV dword ptr [EDX + EBX*0x4 + 0x4],0x0
CMP ECX,dword ptr [EBP + -0x30]
JNC 0x003af550
MOV EAX,dword ptr [ECX]
ADD ECX,0x4
MOV dword ptr [ESI + 0x8],ECX
CMP EAX,-0x1
JZ 0x003af538
MOV EAX,dword ptr [ESI + 0x8]
CMP EAX,dword ptr [ESI + 0xc]
JC 0x003af3e2
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
PUSH ESI
CALL dword ptr [EAX + 0x24]
ADD ESP,0x10
CMP dword ptr [EBP + -0x2c],0x1ffffffe
MOV EDI,EAX
JBE 0x003af3f1
LEA ESI,[ESI]
CMP EDI,-0x1
JZ 0x003af538
CMP dword ptr [EBP + 0x10],EDI
JNZ 0x003af2cf
ADD dword ptr [EBP + -0x2c],0x1
MOV EAX,dword ptr [ESI + 0x8]
MOV ECX,dword ptr [EBP + -0x2c]
CMP EAX,dword ptr [ESI + 0xc]
JNC 0x003af418
ADD EAX,0x4
MOV dword ptr [ESI + 0x8],EAX
TEST ECX,ECX
JZ 0x003af2cf
JMP 0x003af2f2
SUB ESP,0xc
MOV EBX,dword ptr [EBP + -0x38]
PUSH 0x1
PUSH 0x0
PUSH 0x0
PUSH dword ptr [EBP + -0x34]
PUSH dword ptr [EBP + 0xc]
CALL 0x003b2370
MOV EAX,dword ptr [EBP + 0xc]
ADD ESP,0x20
MOV ECX,dword ptr [ESI + 0x8]
MOV EDX,dword ptr [EAX]
MOV EAX,dword ptr [ESI + 0xc]
MOV dword ptr [EBP + -0x30],EAX
JMP 0x003af45e
MOV EBX,0x3
JMP 0x003af455
MOV EAX,dword ptr [EBP + 0x8]
MOV EDX,dword ptr [EBP + 0x8]
MOV EAX,dword ptr [EAX]
ADD EDX,dword ptr [EAX + -0xc]
MOV EAX,0x2
JMP 0x003af2df
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
PUSH ESI
CALL dword ptr [EAX + 0x28]
ADD ESP,0x10
JMP 0x003af48a
MOV EAX,dword ptr [EBP + 0x8]
MOV EDX,dword ptr [EBP + 0x8]
MOV EAX,dword ptr [EAX]
ADD EDX,dword ptr [EAX + -0xc]
CMP dword ptr [EBP + -0x2c],0x1
SBB EAX,EAX
AND EAX,0x4
ADD EAX,0x2
JMP 0x003af2df
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
PUSH ESI
CALL dword ptr [EAX + 0x24]
MOV EDI,EAX
ADD ESP,0x10
CMP EAX,-0x1
JZ 0x003af5c7
MOV EAX,dword ptr [ESI + 0xc]
MOV ECX,dword ptr [ESI + 0x8]
MOV dword ptr [EBP + -0x30],EAX
JMP 0x003af33c
ADD ECX,0x4
MOV dword ptr [ESI + 0x8],ECX
JMP 0x003af2f2
CMP ECX,dword ptr [EBP + -0x30]
JC 0x003af5a9
MOV EAX,dword ptr [ESI]
SUB ESP,0xc
PUSH ESI
CALL dword ptr [EAX + 0x28]
JMP 0x003af2ef
MOV EAX,dword ptr [EBP + 0x8]
MOV EDX,dword ptr [EBP + 0x8]
MOV EAX,dword ptr [EAX]
ADD EDX,dword ptr [EAX + -0xc]
MOV EAX,0x6
JMP 0x003af2df
SUB ESP,0xc
LEA EAX,[EBX + 0xffe8206e]
PUSH EAX
CALL 0x003f3a70
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nint * FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)\n\n{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t *pwVar4;\n  wchar_t wVar5;\n  int iVar6;\n  size_t __n;\n  undefined4 *puVar7;\n  wchar_t *local_34;\n  uint local_30;\n  char local_1d [13];\n  \n  FUN_003d4d40(local_1d,param_1,1);\n  if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }\nLAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));\n  return param_1;\n}\n\n" comment (function_definition "int * FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)\n\n{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t *pwVar4;\n  wchar_t wVar5;\n  int iVar6;\n  size_t __n;\n  undefined4 *puVar7;\n  wchar_t *local_34;\n  uint local_30;\n  char local_1d [13];\n  \n  FUN_003d4d40(local_1d,param_1,1);\n  if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }\nLAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));\n  return param_1;\n}" primitive_type (pointer_declarator "* FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)" * (function_declarator "FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)" identifier (parameter_list "(int *param_1,undefined4 *param_2,wchar_t param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "wchar_t param_3" type_identifier identifier) )))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t *pwVar4;\n  wchar_t wVar5;\n  int iVar6;\n  size_t __n;\n  undefined4 *puVar7;\n  wchar_t *local_34;\n  uint local_30;\n  char local_1d [13];\n  \n  FUN_003d4d40(local_1d,param_1,1);\n  if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }\nLAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));\n  return param_1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "wchar_t *pwVar3;" type_identifier (pointer_declarator "*pwVar3" * identifier) ;) (declaration "wchar_t *pwVar4;" type_identifier (pointer_declarator "*pwVar4" * identifier) ;) (declaration "wchar_t wVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "wchar_t *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "uint local_30;" type_identifier identifier ;) (declaration "char local_1d [13];" primitive_type (array_declarator "local_1d [13]" identifier [ number_literal ]) ;) (expression_statement "FUN_003d4d40(local_1d,param_1,1);" (call_expression "FUN_003d4d40(local_1d,param_1,1)" identifier (argument_list "(local_1d,param_1,1)" ( identifier , identifier , number_literal ))) ;) (if_statement "if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" if (parenthesized_expression "(local_1d[0] == '\0')" ( (binary_expression "local_1d[0] == '\0'" (subscript_expression "local_1d[0]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }" { (labeled_statement "LAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" statement_identifier : (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;)) (expression_statement "uVar2 = 4;" (assignment_expression "uVar2 = 4" identifier = number_literal) ;) }) (else_clause "else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" else (compound_statement "{\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" { (expression_statement "param_2[1] = 0;" (assignment_expression "param_2[1] = 0" (subscript_expression "param_2[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined4 *)*param_2 = 0;" (assignment_expression "*(undefined4 *)*param_2 = 0" (pointer_expression "*(undefined4 *)*param_2" * (cast_expression "(undefined4 *)*param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) = number_literal) ;) (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (expression_statement "piVar1 = *(int **)(iVar6 + 0x7c);" (assignment_expression "piVar1 = *(int **)(iVar6 + 0x7c)" identifier = (pointer_expression "*(int **)(iVar6 + 0x7c)" * (cast_expression "(int **)(iVar6 + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + 0x7c)" ( (binary_expression "iVar6 + 0x7c" identifier + number_literal) ))))) ;) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" identifier = (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" if (parenthesized_expression "(pwVar4 < local_34)" ( (binary_expression "pwVar4 < local_34" identifier < identifier) )) (compound_statement "{\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }" { (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" identifier = (pointer_expression "*pwVar4" * identifier)) ;) (if_statement "if (wVar5 != L'\xffffffff') goto LAB_003af33c;" if (parenthesized_expression "(wVar5 != L'\xffffffff')" ( (binary_expression "wVar5 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (goto_statement "goto LAB_003af33c;" goto statement_identifier ;)) }) (else_clause "else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" else (compound_statement "{\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" { comment (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x24))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x24))" ( (pointer_expression "**(code **)(*piVar1 + 0x24)" * (pointer_expression "*(code **)(*piVar1 + 0x24)" * (cast_expression "(code **)(*piVar1 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x24)" ( (binary_expression "*piVar1 + 0x24" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) (if_statement "if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }" if (parenthesized_expression "(wVar5 != L'\xffffffff')" ( (binary_expression "wVar5 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }" { (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" identifier = (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (labeled_statement "LAB_003af33c:\n        local_30 = 0;" statement_identifier : (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;)) (if_statement "if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }" if (parenthesized_expression "(param_3 == wVar5)" ( (binary_expression "param_3 == wVar5" identifier == identifier) )) (compound_statement "{\n          if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }" { (if_statement "if (local_34 <= pwVar4) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }" if (parenthesized_expression "(local_34 <= pwVar4)" ( (binary_expression "local_34 <= pwVar4" identifier <= identifier) )) (compound_statement "{\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }" { comment (expression_statement "(**(code **)(*piVar1 + 0x28))(piVar1);" (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier ))) ;) (return_statement "return param_1;" return identifier ;) })) (labeled_statement "LAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);" statement_identifier : (expression_statement "piVar1[2] = (int)(pwVar4 + 1);" (assignment_expression "piVar1[2] = (int)(pwVar4 + 1)" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar4 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar4 + 1)" ( (binary_expression "pwVar4 + 1" identifier + number_literal) )))) ;)) (return_statement "return param_1;" return identifier ;) })) (do_statement "do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);" do (compound_statement "{\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        }" { (expression_statement "__n = (int)local_34 - (int)pwVar4 >> 2;" (assignment_expression "__n = (int)local_34 - (int)pwVar4 >> 2" identifier = (binary_expression "(int)local_34 - (int)pwVar4 >> 2" (binary_expression "(int)local_34 - (int)pwVar4" (cast_expression "(int)local_34" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pwVar4" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }" if (parenthesized_expression "((int)(0x1fffffff - local_30) < (int)__n)" ( (binary_expression "(int)(0x1fffffff - local_30) < (int)__n" (cast_expression "(int)(0x1fffffff - local_30)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x1fffffff - local_30)" ( (binary_expression "0x1fffffff - local_30" number_literal - identifier) ))) < (cast_expression "(int)__n" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n            __n = 0x1fffffff - local_30;\n          }" { (expression_statement "__n = 0x1fffffff - local_30;" (assignment_expression "__n = 0x1fffffff - local_30" identifier = (binary_expression "0x1fffffff - local_30" number_literal - identifier)) ;) })) (expression_statement "iVar6 = param_2[1];" (assignment_expression "iVar6 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (if_statement "if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }" if (parenthesized_expression "((int)__n < 2)" ( (binary_expression "(int)__n < 2" (cast_expression "(int)__n" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }" { (expression_statement "puVar7 = (undefined4 *)*param_2;" (assignment_expression "puVar7 = (undefined4 *)*param_2" identifier = (cast_expression "(undefined4 *)*param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }" if (parenthesized_expression "(puVar7 == param_2 + 2)" ( (binary_expression "puVar7 == param_2 + 2" identifier == (binary_expression "param_2 + 2" identifier + number_literal)) )) (compound_statement "{\n              uVar2 = 3;\n            }" { (expression_statement "uVar2 = 3;" (assignment_expression "uVar2 = 3" identifier = number_literal) ;) }) (else_clause "else {\n              uVar2 = param_2[2];\n            }" else (compound_statement "{\n              uVar2 = param_2[2];\n            }" { (expression_statement "uVar2 = param_2[2];" (assignment_expression "uVar2 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) }))) (if_statement "if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }" if (parenthesized_expression "(uVar2 < iVar6 + 1U)" ( (binary_expression "uVar2 < iVar6 + 1U" identifier < (binary_expression "iVar6 + 1U" identifier + number_literal)) )) (compound_statement "{\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }" { (expression_statement "FUN_003b2370(param_2,iVar6,0,0,1);" (call_expression "FUN_003b2370(param_2,iVar6,0,0,1)" identifier (argument_list "(param_2,iVar6,0,0,1)" ( identifier , identifier , number_literal , number_literal , number_literal ))) ;) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (expression_statement "puVar7 = (undefined4 *)*param_2;" (assignment_expression "puVar7 = (undefined4 *)*param_2" identifier = (cast_expression "(undefined4 *)*param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" identifier = (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) })) (expression_statement "local_30 = local_30 + 1;" (assignment_expression "local_30 = local_30 + 1" identifier = (binary_expression "local_30 + 1" identifier + number_literal)) ;) (expression_statement "puVar7[iVar6] = wVar5;" (assignment_expression "puVar7[iVar6] = wVar5" (subscript_expression "puVar7[iVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "param_2[1] = iVar6 + 1U;" (assignment_expression "param_2[1] = iVar6 + 1U" (subscript_expression "param_2[1]" identifier [ number_literal ]) = (binary_expression "iVar6 + 1U" identifier + number_literal)) ;) (expression_statement "puVar7[iVar6 + 1] = 0;" (assignment_expression "puVar7[iVar6 + 1] = 0" (subscript_expression "puVar7[iVar6 + 1]" identifier [ (binary_expression "iVar6 + 1" identifier + number_literal) ]) = number_literal) ;) (if_statement "if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" if (parenthesized_expression "(pwVar4 < local_34)" ( (binary_expression "pwVar4 < local_34" identifier < identifier) )) (compound_statement "{\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }" { (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" identifier = (pointer_expression "*pwVar4" * identifier)) ;) (expression_statement "piVar1[2] = (int)(pwVar4 + 1);" (assignment_expression "piVar1[2] = (int)(pwVar4 + 1)" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar4 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar4 + 1)" ( (binary_expression "pwVar4 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" else (compound_statement "{\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" { (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }))) (if_statement "if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }" if (parenthesized_expression "(wVar5 != L'\xffffffff')" ( (binary_expression "wVar5 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }" { (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;" if (parenthesized_expression "((wchar_t *)piVar1[3] <= pwVar4)" ( (binary_expression "(wchar_t *)piVar1[3] <= pwVar4" (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ])) <= identifier) )) (goto_statement "goto LAB_003af49f;" goto statement_identifier ;)) (goto_statement "goto LAB_003af3e2;" goto statement_identifier ;) })) (labeled_statement "LAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" statement_identifier : (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;)) (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" identifier = number_literal) ;) (goto_statement "goto LAB_003af2df;" goto statement_identifier ;) })) (expression_statement "pwVar3 = wmemchr(pwVar4,param_3,__n);" (assignment_expression "pwVar3 = wmemchr(pwVar4,param_3,__n)" identifier = (call_expression "wmemchr(pwVar4,param_3,__n)" identifier (argument_list "(pwVar4,param_3,__n)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;" (assignment_expression "uVar2 = (int)pwVar3 - (int)pwVar4 >> 2" identifier = (binary_expression "(int)pwVar3 - (int)pwVar4 >> 2" (binary_expression "(int)pwVar3 - (int)pwVar4" (cast_expression "(int)pwVar3" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pwVar4" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }" if (parenthesized_expression "(pwVar3 == (wchar_t *)0x0)" ( (binary_expression "pwVar3 == (wchar_t *)0x0" identifier == (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            uVar2 = __n;\n          }" { (expression_statement "uVar2 = __n;" (assignment_expression "uVar2 = __n" identifier = identifier) ;) })) (if_statement "if (0x1fffffffU - iVar6 < uVar2) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }" if (parenthesized_expression "(0x1fffffffU - iVar6 < uVar2)" ( (binary_expression "0x1fffffffU - iVar6 < uVar2" (binary_expression "0x1fffffffU - iVar6" number_literal - identifier) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n            FUN_003f3a70("basic_string::append");\n          }" { comment comment (expression_statement "FUN_003f3a70("basic_string::append");" (call_expression "FUN_003f3a70("basic_string::append")" identifier (argument_list "("basic_string::append")" ( (string_literal ""basic_string::append"" " string_content ") ))) ;) })) comment (expression_statement "FUN_003b3f40(param_2,pwVar4,uVar2);" (call_expression "FUN_003b3f40(param_2,pwVar4,uVar2)" identifier (argument_list "(param_2,pwVar4,uVar2)" ( identifier , identifier , identifier ))) ;) (expression_statement "local_30 = local_30 + uVar2;" (assignment_expression "local_30 = local_30 + uVar2" identifier = (binary_expression "local_30 + uVar2" identifier + identifier)) ;) (expression_statement "pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);" (assignment_expression "pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4)" identifier = (cast_expression "(wchar_t *)(piVar1[2] + uVar2 * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1[2] + uVar2 * 4)" ( (binary_expression "piVar1[2] + uVar2 * 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) + (binary_expression "uVar2 * 4" identifier * number_literal)) )))) ;) (expression_statement "piVar1[2] = (int)pwVar4;" (assignment_expression "piVar1[2] = (int)pwVar4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)pwVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" if (parenthesized_expression "(pwVar4 < (wchar_t *)piVar1[3])" ( (binary_expression "pwVar4 < (wchar_t *)piVar1[3]" identifier < (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }" { (labeled_statement "LAB_003af3e2:\n            wVar5 = *pwVar4;" statement_identifier : (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" identifier = (pointer_expression "*pwVar4" * identifier)) ;)) }) (else_clause "else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" else (compound_statement "{\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" { (labeled_statement "LAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" statement_identifier : (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x24))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x24))" ( (pointer_expression "**(code **)(*piVar1 + 0x24)" * (pointer_expression "*(code **)(*piVar1 + 0x24)" * (cast_expression "(code **)(*piVar1 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x24)" ( (binary_expression "*piVar1 + 0x24" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;)) }))) (if_statement "if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }" if (parenthesized_expression "(0x1ffffffe < local_30)" ( (binary_expression "0x1ffffffe < local_30" number_literal < identifier) )) (compound_statement "{\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }" { (if_statement "if (wVar5 == L'\xffffffff') goto LAB_003af538;" if (parenthesized_expression "(wVar5 == L'\xffffffff')" ( (binary_expression "wVar5 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (goto_statement "goto LAB_003af538;" goto statement_identifier ;)) (if_statement "if (param_3 != wVar5) goto LAB_003af2cf;" if (parenthesized_expression "(param_3 != wVar5)" ( (binary_expression "param_3 != wVar5" identifier != identifier) )) (goto_statement "goto LAB_003af2cf;" goto statement_identifier ;)) (if_statement "if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;" if (parenthesized_expression "((uint)piVar1[3] <= (uint)piVar1[2])" ( (binary_expression "(uint)piVar1[3] <= (uint)piVar1[2]" (cast_expression "(uint)piVar1[3]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[3]" identifier [ number_literal ])) <= (cast_expression "(uint)piVar1[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_003af418;" goto statement_identifier ;)) (expression_statement "piVar1[2] = piVar1[2] + 4;" (assignment_expression "piVar1[2] = piVar1[2] + 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (binary_expression "piVar1[2] + 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (local_30 != 0xffffffff) {\n              return param_1;\n            }" if (parenthesized_expression "(local_30 != 0xffffffff)" ( (binary_expression "local_30 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n              return param_1;\n            }" { (return_statement "return param_1;" return identifier ;) })) (goto_statement "goto LAB_003af2cf;" goto statement_identifier ;) })) (if_statement "if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }" if (parenthesized_expression "(wVar5 == L'\xffffffff')" ( (binary_expression "wVar5 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }" { (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (expression_statement "uVar2 = (-(uint)(local_30 == 0) & 4) + 2;" (assignment_expression "uVar2 = (-(uint)(local_30 == 0) & 4) + 2" identifier = (binary_expression "(-(uint)(local_30 == 0) & 4) + 2" (parenthesized_expression "(-(uint)(local_30 == 0) & 4)" ( (binary_expression "-(uint)(local_30 == 0) & 4" (unary_expression "-(uint)(local_30 == 0)" - (call_expression "(uint)(local_30 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(local_30 == 0)" ( (binary_expression "local_30 == 0" identifier == number_literal) )))) & number_literal) )) + number_literal)) ;) (goto_statement "goto LAB_003af2df;" goto statement_identifier ;) })) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" identifier = (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(param_3 != wVar5)" ( (binary_expression "param_3 != wVar5" identifier != identifier) )) ;) (if_statement "if (pwVar4 < local_34) goto LAB_003af5a9;" if (parenthesized_expression "(pwVar4 < local_34)" ( (binary_expression "pwVar4 < local_34" identifier < identifier) )) (goto_statement "goto LAB_003af5a9;" goto statement_identifier ;)) (labeled_statement "LAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);" statement_identifier : (expression_statement "(**(code **)(*piVar1 + 0x28))(piVar1);" (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier ))) ;)) (if_statement "if (local_30 != 0xffffffff) {\n          return param_1;\n        }" if (parenthesized_expression "(local_30 != 0xffffffff)" ( (binary_expression "local_30 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n          return param_1;\n        }" { (return_statement "return param_1;" return identifier ;) })) (goto_statement "goto LAB_003af2cf;" goto statement_identifier ;) })) (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) }))) (expression_statement "uVar2 = 6;" (assignment_expression "uVar2 = 6" identifier = number_literal) ;) }))) (labeled_statement "LAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));" statement_identifier : (expression_statement "FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));" (call_expression "FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14))" identifier (argument_list "(iVar6,uVar2 | *(uint *)(iVar6 + 0x14))" ( identifier , (binary_expression "uVar2 | *(uint *)(iVar6 + 0x14)" identifier | (pointer_expression "*(uint *)(iVar6 + 0x14)" * (cast_expression "(uint *)(iVar6 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x14)" ( (binary_expression "iVar6 + 0x14" identifier + number_literal) ))))) ))) ;)) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* std::wistream& std::getline<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>\n   >(std::wistream&, std::wstring&, wchar_t) */\n\nwistream *\nstd::getline<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)\n\n{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t wVar4;\n  wistream *__s;\n  wistream *pwVar5;\n  size_t __n;\n  wstring *pwVar6;\n  uint uVar7;\n  wistream *pwVar8;\n  uint uVar9;\n  wistream *local_34;\n  uint local_30;\n  sentry local_1d [13];\n  \n  uVar9 = 1;\n  pwVar8 = param_1;\n  wistream::sentry::sentry(local_1d,(wistream *)param_1,true);\n  if (local_1d[0] != (sentry)0x0) {\n    *(undefined4 *)(param_2 + 4) = 0;\n    **(undefined4 **)param_2 = 0;\n    pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n    piVar1 = *(int **)(pwVar5 + 0x7c);\n    local_34 = (wistream *)piVar1[3];\n    __s = (wistream *)piVar1[2];\n    if (__s < local_34) {\n      wVar4 = *(wchar_t *)__s;\n      if (wVar4 == L'\xffffffff') goto LAB_003af2df;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    }\n    local_30 = 0;\n    if (param_3 == wVar4) {\n      if (local_34 <= __s) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        return param_1;\n      }\nLAB_003af5a9:\n      piVar1[2] = (int)(__s + 4);\n      return param_1;\n    }\n    do {\n      __n = (int)local_34 - (int)__s >> 2;\n      if ((int)(0x1fffffff - local_30) < (int)__n) {\n        __n = 0x1fffffff - local_30;\n      }\n      uVar2 = *(uint *)(param_2 + 4);\n      if ((int)__n < 2) {\n        pwVar6 = *(wstring **)param_2;\n        if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }\n        local_30 = local_30 + 1;\n        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;\n        *(uint *)(param_2 + 4) = uVar2 + 1;\n        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;\n        if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }\n        if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }\nLAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      pwVar3 = wmemchr((wchar_t *)__s,param_3,__n);\n      uVar7 = (int)pwVar3 - (int)__s >> 2;\n      if (pwVar3 == (wchar_t *)0x0) {\n        uVar7 = __n;\n      }\n      if (0x1fffffff - uVar2 < uVar7) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n        __throw_length_error("basic_string::append");\n      }\n      uVar9 = uVar7;\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n      wstring::_M_append((wchar_t *)param_2,(uint)__s);\n      local_30 = local_30 + uVar7;\n      pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4);\n      piVar1[2] = (int)pwVar3;\n      pwVar8 = __s;\n      if (pwVar3 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n        wVar4 = *pwVar3;\n      }\n      else {\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }\n      if (0x1ffffffe < local_30) {\n        if (wVar4 == L'\xffffffff') goto LAB_003af538;\n        if (param_3 != wVar4) goto LAB_003af2cf;\n        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n        piVar1[2] = piVar1[2] + 4;\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    } while (param_3 != wVar4);\n    if (__s < local_34) goto LAB_003af5a9;\nLAB_003af418:\n    (**(code **)(*piVar1 + 0x28))(piVar1);\n    if (local_30 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003af2cf:\n  pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\nLAB_003af2df:\n  wios::clear((_Ios_Iostate)pwVar5);\n  return param_1;\n}\n\n" comment comment comment (ERROR "wistream *\nstd::getline<wchar_t," (binary_expression "wistream *\nstd::getline<wchar_t" (binary_expression "wistream *\nstd" identifier * identifier) (ERROR "::getline" : : identifier) < identifier) ,) (labeled_statement "std::char_traits<wchar_t>,std::allocator<wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)" statement_identifier (ERROR "::char_traits<wchar_t>,std:" : : (binary_expression "char_traits<wchar_t>,std" (binary_expression "char_traits<wchar_t" identifier < identifier) > (ERROR "," ,) identifier) :) : (expression_statement "allocator<wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)" (binary_expression "allocator<wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)" identifier < (binary_expression "wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)" identifier >> (parenthesized_expression "(wistream *param_1,wstring *param_2,wchar_t param_3)" ( (comma_expression "wistream *param_1,wstring *param_2,wchar_t" (binary_expression "wistream *param_1" identifier * identifier) , (comma_expression "wstring *param_2,wchar_t" (binary_expression "wstring *param_2" identifier * identifier) , identifier)) (ERROR "param_3" identifier) )))) ;)) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t wVar4;\n  wistream *__s;\n  wistream *pwVar5;\n  size_t __n;\n  wstring *pwVar6;\n  uint uVar7;\n  wistream *pwVar8;\n  uint uVar9;\n  wistream *local_34;\n  uint local_30;\n  sentry local_1d [13];\n  \n  uVar9 = 1;\n  pwVar8 = param_1;\n  wistream::sentry::sentry(local_1d,(wistream *)param_1,true);\n  if (local_1d[0] != (sentry)0x0) {\n    *(undefined4 *)(param_2 + 4) = 0;\n    **(undefined4 **)param_2 = 0;\n    pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n    piVar1 = *(int **)(pwVar5 + 0x7c);\n    local_34 = (wistream *)piVar1[3];\n    __s = (wistream *)piVar1[2];\n    if (__s < local_34) {\n      wVar4 = *(wchar_t *)__s;\n      if (wVar4 == L'\xffffffff') goto LAB_003af2df;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    }\n    local_30 = 0;\n    if (param_3 == wVar4) {\n      if (local_34 <= __s) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        return param_1;\n      }\nLAB_003af5a9:\n      piVar1[2] = (int)(__s + 4);\n      return param_1;\n    }\n    do {\n      __n = (int)local_34 - (int)__s >> 2;\n      if ((int)(0x1fffffff - local_30) < (int)__n) {\n        __n = 0x1fffffff - local_30;\n      }\n      uVar2 = *(uint *)(param_2 + 4);\n      if ((int)__n < 2) {\n        pwVar6 = *(wstring **)param_2;\n        if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }\n        local_30 = local_30 + 1;\n        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;\n        *(uint *)(param_2 + 4) = uVar2 + 1;\n        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;\n        if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }\n        if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }\nLAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      pwVar3 = wmemchr((wchar_t *)__s,param_3,__n);\n      uVar7 = (int)pwVar3 - (int)__s >> 2;\n      if (pwVar3 == (wchar_t *)0x0) {\n        uVar7 = __n;\n      }\n      if (0x1fffffff - uVar2 < uVar7) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n        __throw_length_error("basic_string::append");\n      }\n      uVar9 = uVar7;\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n      wstring::_M_append((wchar_t *)param_2,(uint)__s);\n      local_30 = local_30 + uVar7;\n      pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4);\n      piVar1[2] = (int)pwVar3;\n      pwVar8 = __s;\n      if (pwVar3 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n        wVar4 = *pwVar3;\n      }\n      else {\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }\n      if (0x1ffffffe < local_30) {\n        if (wVar4 == L'\xffffffff') goto LAB_003af538;\n        if (param_3 != wVar4) goto LAB_003af2cf;\n        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n        piVar1[2] = piVar1[2] + 4;\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    } while (param_3 != wVar4);\n    if (__s < local_34) goto LAB_003af5a9;\nLAB_003af418:\n    (**(code **)(*piVar1 + 0x28))(piVar1);\n    if (local_30 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003af2cf:\n  pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\nLAB_003af2df:\n  wios::clear((_Ios_Iostate)pwVar5);\n  return param_1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "wchar_t *pwVar3;" type_identifier (pointer_declarator "*pwVar3" * identifier) ;) (declaration "wchar_t wVar4;" type_identifier identifier ;) (declaration "wistream *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "wistream *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "wstring *pwVar6;" type_identifier (pointer_declarator "*pwVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "wistream *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "wistream *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "uint local_30;" type_identifier identifier ;) (declaration "sentry local_1d [13];" type_identifier (array_declarator "local_1d [13]" identifier [ number_literal ]) ;) (expression_statement "uVar9 = 1;" (assignment_expression "uVar9 = 1" identifier = number_literal) ;) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" identifier = identifier) ;) (labeled_statement "wistream::sentry::sentry(local_1d,(wistream *)param_1,true);" statement_identifier : (ERROR ":" :) (labeled_statement "sentry::sentry(local_1d,(wistream *)param_1,true);" statement_identifier : (ERROR ":" :) (expression_statement "sentry(local_1d,(wistream *)param_1,true);" (call_expression "sentry(local_1d,(wistream *)param_1,true)" identifier (argument_list "(local_1d,(wistream *)param_1,true)" ( identifier , (cast_expression "(wistream *)param_1" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , true ))) ;))) (if_statement "if (local_1d[0] != (sentry)0x0) {\n    *(undefined4 *)(param_2 + 4) = 0;\n    **(undefined4 **)param_2 = 0;\n    pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n    piVar1 = *(int **)(pwVar5 + 0x7c);\n    local_34 = (wistream *)piVar1[3];\n    __s = (wistream *)piVar1[2];\n    if (__s < local_34) {\n      wVar4 = *(wchar_t *)__s;\n      if (wVar4 == L'\xffffffff') goto LAB_003af2df;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    }\n    local_30 = 0;\n    if (param_3 == wVar4) {\n      if (local_34 <= __s) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        return param_1;\n      }\nLAB_003af5a9:\n      piVar1[2] = (int)(__s + 4);\n      return param_1;\n    }\n    do {\n      __n = (int)local_34 - (int)__s >> 2;\n      if ((int)(0x1fffffff - local_30) < (int)__n) {\n        __n = 0x1fffffff - local_30;\n      }\n      uVar2 = *(uint *)(param_2 + 4);\n      if ((int)__n < 2) {\n        pwVar6 = *(wstring **)param_2;\n        if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }\n        local_30 = local_30 + 1;\n        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;\n        *(uint *)(param_2 + 4) = uVar2 + 1;\n        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;\n        if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }\n        if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }\nLAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      pwVar3 = wmemchr((wchar_t *)__s,param_3,__n);\n      uVar7 = (int)pwVar3 - (int)__s >> 2;\n      if (pwVar3 == (wchar_t *)0x0) {\n        uVar7 = __n;\n      }\n      if (0x1fffffff - uVar2 < uVar7) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n        __throw_length_error("basic_string::append");\n      }\n      uVar9 = uVar7;\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n      wstring::_M_append((wchar_t *)param_2,(uint)__s);\n      local_30 = local_30 + uVar7;\n      pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4);\n      piVar1[2] = (int)pwVar3;\n      pwVar8 = __s;\n      if (pwVar3 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n        wVar4 = *pwVar3;\n      }\n      else {\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }\n      if (0x1ffffffe < local_30) {\n        if (wVar4 == L'\xffffffff') goto LAB_003af538;\n        if (param_3 != wVar4) goto LAB_003af2cf;\n        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n        piVar1[2] = piVar1[2] + 4;\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    } while (param_3 != wVar4);\n    if (__s < local_34) goto LAB_003af5a9;\nLAB_003af418:\n    (**(code **)(*piVar1 + 0x28))(piVar1);\n    if (local_30 != 0xffffffff) {\n      return param_1;\n    }\n  }" if (parenthesized_expression "(local_1d[0] != (sentry)0x0)" ( (binary_expression "local_1d[0] != (sentry)0x0" (subscript_expression "local_1d[0]" identifier [ number_literal ]) != (cast_expression "(sentry)0x0" ( (type_descriptor "sentry" type_identifier) ) number_literal)) )) (compound_statement "{\n    *(undefined4 *)(param_2 + 4) = 0;\n    **(undefined4 **)param_2 = 0;\n    pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n    piVar1 = *(int **)(pwVar5 + 0x7c);\n    local_34 = (wistream *)piVar1[3];\n    __s = (wistream *)piVar1[2];\n    if (__s < local_34) {\n      wVar4 = *(wchar_t *)__s;\n      if (wVar4 == L'\xffffffff') goto LAB_003af2df;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    }\n    local_30 = 0;\n    if (param_3 == wVar4) {\n      if (local_34 <= __s) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        return param_1;\n      }\nLAB_003af5a9:\n      piVar1[2] = (int)(__s + 4);\n      return param_1;\n    }\n    do {\n      __n = (int)local_34 - (int)__s >> 2;\n      if ((int)(0x1fffffff - local_30) < (int)__n) {\n        __n = 0x1fffffff - local_30;\n      }\n      uVar2 = *(uint *)(param_2 + 4);\n      if ((int)__n < 2) {\n        pwVar6 = *(wstring **)param_2;\n        if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }\n        local_30 = local_30 + 1;\n        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;\n        *(uint *)(param_2 + 4) = uVar2 + 1;\n        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;\n        if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }\n        if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }\nLAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      pwVar3 = wmemchr((wchar_t *)__s,param_3,__n);\n      uVar7 = (int)pwVar3 - (int)__s >> 2;\n      if (pwVar3 == (wchar_t *)0x0) {\n        uVar7 = __n;\n      }\n      if (0x1fffffff - uVar2 < uVar7) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n        __throw_length_error("basic_string::append");\n      }\n      uVar9 = uVar7;\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n      wstring::_M_append((wchar_t *)param_2,(uint)__s);\n      local_30 = local_30 + uVar7;\n      pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4);\n      piVar1[2] = (int)pwVar3;\n      pwVar8 = __s;\n      if (pwVar3 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n        wVar4 = *pwVar3;\n      }\n      else {\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }\n      if (0x1ffffffe < local_30) {\n        if (wVar4 == L'\xffffffff') goto LAB_003af538;\n        if (param_3 != wVar4) goto LAB_003af2cf;\n        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n        piVar1[2] = piVar1[2] + 4;\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    } while (param_3 != wVar4);\n    if (__s < local_34) goto LAB_003af5a9;\nLAB_003af418:\n    (**(code **)(*piVar1 + 0x28))(piVar1);\n    if (local_30 != 0xffffffff) {\n      return param_1;\n    }\n  }" { (expression_statement "*(undefined4 *)(param_2 + 4) = 0;" (assignment_expression "*(undefined4 *)(param_2 + 4) = 0" (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "**(undefined4 **)param_2 = 0;" (assignment_expression "**(undefined4 **)param_2 = 0" (pointer_expression "**(undefined4 **)param_2" * (pointer_expression "*(undefined4 **)param_2" * (cast_expression "(undefined4 **)param_2" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) = number_literal) ;) (expression_statement "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;) (expression_statement "piVar1 = *(int **)(pwVar5 + 0x7c);" (assignment_expression "piVar1 = *(int **)(pwVar5 + 0x7c)" identifier = (pointer_expression "*(int **)(pwVar5 + 0x7c)" * (cast_expression "(int **)(pwVar5 + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pwVar5 + 0x7c)" ( (binary_expression "pwVar5 + 0x7c" identifier + number_literal) ))))) ;) (expression_statement "local_34 = (wistream *)piVar1[3];" (assignment_expression "local_34 = (wistream *)piVar1[3]" identifier = (cast_expression "(wistream *)piVar1[3]" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "__s = (wistream *)piVar1[2];" (assignment_expression "__s = (wistream *)piVar1[2]" identifier = (cast_expression "(wistream *)piVar1[2]" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (__s < local_34) {\n      wVar4 = *(wchar_t *)__s;\n      if (wVar4 == L'\xffffffff') goto LAB_003af2df;\n    }\n    else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    }" if (parenthesized_expression "(__s < local_34)" ( (binary_expression "__s < local_34" identifier < identifier) )) (compound_statement "{\n      wVar4 = *(wchar_t *)__s;\n      if (wVar4 == L'\xffffffff') goto LAB_003af2df;\n    }" { (expression_statement "wVar4 = *(wchar_t *)__s;" (assignment_expression "wVar4 = *(wchar_t *)__s" identifier = (pointer_expression "*(wchar_t *)__s" * (cast_expression "(wchar_t *)__s" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (wVar4 == L'\xffffffff') goto LAB_003af2df;" if (parenthesized_expression "(wVar4 == L'\xffffffff')" ( (binary_expression "wVar4 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (goto_statement "goto LAB_003af2df;" goto statement_identifier ;)) }) (else_clause "else {\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    }" else (compound_statement "{\n                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */\n      wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    }" { comment (expression_statement "wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1);" (assignment_expression "wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x24))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x24))" ( (pointer_expression "**(code **)(*piVar1 + 0x24)" * (pointer_expression "*(code **)(*piVar1 + 0x24)" * (cast_expression "(code **)(*piVar1 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x24)" ( (binary_expression "*piVar1 + 0x24" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) (if_statement "if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }" if (parenthesized_expression "(wVar4 == L'\xffffffff')" ( (binary_expression "wVar4 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }" { (expression_statement "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;) (goto_statement "goto LAB_003af2df;" goto statement_identifier ;) })) (expression_statement "local_34 = (wistream *)piVar1[3];" (assignment_expression "local_34 = (wistream *)piVar1[3]" identifier = (cast_expression "(wistream *)piVar1[3]" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "__s = (wistream *)piVar1[2];" (assignment_expression "__s = (wistream *)piVar1[2]" identifier = (cast_expression "(wistream *)piVar1[2]" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) }))) (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;) (if_statement "if (param_3 == wVar4) {\n      if (local_34 <= __s) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        return param_1;\n      }\nLAB_003af5a9:\n      piVar1[2] = (int)(__s + 4);\n      return param_1;\n    }" if (parenthesized_expression "(param_3 == wVar4)" ( (binary_expression "param_3 == wVar4" identifier == identifier) )) (compound_statement "{\n      if (local_34 <= __s) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        return param_1;\n      }\nLAB_003af5a9:\n      piVar1[2] = (int)(__s + 4);\n      return param_1;\n    }" { (if_statement "if (local_34 <= __s) {\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        return param_1;\n      }" if (parenthesized_expression "(local_34 <= __s)" ( (binary_expression "local_34 <= __s" identifier <= identifier) )) (compound_statement "{\n                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        return param_1;\n      }" { comment (expression_statement "(**(code **)(*piVar1 + 0x28))(piVar1);" (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier ))) ;) (return_statement "return param_1;" return identifier ;) })) (labeled_statement "LAB_003af5a9:\n      piVar1[2] = (int)(__s + 4);" statement_identifier : (expression_statement "piVar1[2] = (int)(__s + 4);" (assignment_expression "piVar1[2] = (int)(__s + 4)" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)(__s + 4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(__s + 4)" ( (binary_expression "__s + 4" identifier + number_literal) )))) ;)) (return_statement "return param_1;" return identifier ;) })) (do_statement "do {\n      __n = (int)local_34 - (int)__s >> 2;\n      if ((int)(0x1fffffff - local_30) < (int)__n) {\n        __n = 0x1fffffff - local_30;\n      }\n      uVar2 = *(uint *)(param_2 + 4);\n      if ((int)__n < 2) {\n        pwVar6 = *(wstring **)param_2;\n        if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }\n        local_30 = local_30 + 1;\n        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;\n        *(uint *)(param_2 + 4) = uVar2 + 1;\n        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;\n        if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }\n        if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }\nLAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      pwVar3 = wmemchr((wchar_t *)__s,param_3,__n);\n      uVar7 = (int)pwVar3 - (int)__s >> 2;\n      if (pwVar3 == (wchar_t *)0x0) {\n        uVar7 = __n;\n      }\n      if (0x1fffffff - uVar2 < uVar7) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n        __throw_length_error("basic_string::append");\n      }\n      uVar9 = uVar7;\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n      wstring::_M_append((wchar_t *)param_2,(uint)__s);\n      local_30 = local_30 + uVar7;\n      pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4);\n      piVar1[2] = (int)pwVar3;\n      pwVar8 = __s;\n      if (pwVar3 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n        wVar4 = *pwVar3;\n      }\n      else {\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }\n      if (0x1ffffffe < local_30) {\n        if (wVar4 == L'\xffffffff') goto LAB_003af538;\n        if (param_3 != wVar4) goto LAB_003af2cf;\n        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n        piVar1[2] = piVar1[2] + 4;\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    } while (param_3 != wVar4);" do (compound_statement "{\n      __n = (int)local_34 - (int)__s >> 2;\n      if ((int)(0x1fffffff - local_30) < (int)__n) {\n        __n = 0x1fffffff - local_30;\n      }\n      uVar2 = *(uint *)(param_2 + 4);\n      if ((int)__n < 2) {\n        pwVar6 = *(wstring **)param_2;\n        if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }\n        local_30 = local_30 + 1;\n        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;\n        *(uint *)(param_2 + 4) = uVar2 + 1;\n        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;\n        if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }\n        if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }\nLAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      pwVar3 = wmemchr((wchar_t *)__s,param_3,__n);\n      uVar7 = (int)pwVar3 - (int)__s >> 2;\n      if (pwVar3 == (wchar_t *)0x0) {\n        uVar7 = __n;\n      }\n      if (0x1fffffff - uVar2 < uVar7) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n        __throw_length_error("basic_string::append");\n      }\n      uVar9 = uVar7;\n                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */\n      wstring::_M_append((wchar_t *)param_2,(uint)__s);\n      local_30 = local_30 + uVar7;\n      pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4);\n      piVar1[2] = (int)pwVar3;\n      pwVar8 = __s;\n      if (pwVar3 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n        wVar4 = *pwVar3;\n      }\n      else {\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }\n      if (0x1ffffffe < local_30) {\n        if (wVar4 == L'\xffffffff') goto LAB_003af538;\n        if (param_3 != wVar4) goto LAB_003af2cf;\n        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n        piVar1[2] = piVar1[2] + 4;\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }\n      local_34 = (wistream *)piVar1[3];\n      __s = (wistream *)piVar1[2];\n    }" { (expression_statement "__n = (int)local_34 - (int)__s >> 2;" (assignment_expression "__n = (int)local_34 - (int)__s >> 2" identifier = (binary_expression "(int)local_34 - (int)__s >> 2" (binary_expression "(int)local_34 - (int)__s" (cast_expression "(int)local_34" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if ((int)(0x1fffffff - local_30) < (int)__n) {\n        __n = 0x1fffffff - local_30;\n      }" if (parenthesized_expression "((int)(0x1fffffff - local_30) < (int)__n)" ( (binary_expression "(int)(0x1fffffff - local_30) < (int)__n" (cast_expression "(int)(0x1fffffff - local_30)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x1fffffff - local_30)" ( (binary_expression "0x1fffffff - local_30" number_literal - identifier) ))) < (cast_expression "(int)__n" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        __n = 0x1fffffff - local_30;\n      }" { (expression_statement "__n = 0x1fffffff - local_30;" (assignment_expression "__n = 0x1fffffff - local_30" identifier = (binary_expression "0x1fffffff - local_30" number_literal - identifier)) ;) })) (expression_statement "uVar2 = *(uint *)(param_2 + 4);" (assignment_expression "uVar2 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((int)__n < 2) {\n        pwVar6 = *(wstring **)param_2;\n        if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }\n        local_30 = local_30 + 1;\n        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;\n        *(uint *)(param_2 + 4) = uVar2 + 1;\n        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;\n        if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }\n        if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }\nLAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }" if (parenthesized_expression "((int)__n < 2)" ( (binary_expression "(int)__n < 2" (cast_expression "(int)__n" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        pwVar6 = *(wstring **)param_2;\n        if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }\n        local_30 = local_30 + 1;\n        *(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;\n        *(uint *)(param_2 + 4) = uVar2 + 1;\n        *(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;\n        if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }\n        if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }\nLAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }" { (expression_statement "pwVar6 = *(wstring **)param_2;" (assignment_expression "pwVar6 = *(wstring **)param_2" identifier = (pointer_expression "*(wstring **)param_2" * (cast_expression "(wstring **)param_2" ( (type_descriptor "wstring **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (if_statement "if (pwVar6 == param_2 + 8) {\n          uVar7 = 3;\n        }\n        else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }" if (parenthesized_expression "(pwVar6 == param_2 + 8)" ( (binary_expression "pwVar6 == param_2 + 8" identifier == (binary_expression "param_2 + 8" identifier + number_literal)) )) (compound_statement "{\n          uVar7 = 3;\n        }" { (expression_statement "uVar7 = 3;" (assignment_expression "uVar7 = 3" identifier = number_literal) ;) }) (else_clause "else {\n          uVar7 = *(uint *)(param_2 + 8);\n        }" else (compound_statement "{\n          uVar7 = *(uint *)(param_2 + 8);\n        }" { (expression_statement "uVar7 = *(uint *)(param_2 + 8);" (assignment_expression "uVar7 = *(uint *)(param_2 + 8)" identifier = (pointer_expression "*(uint *)(param_2 + 8)" * (cast_expression "(uint *)(param_2 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) }))) (if_statement "if (uVar7 < uVar2 + 1) {\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }" if (parenthesized_expression "(uVar7 < uVar2 + 1)" ( (binary_expression "uVar7 < uVar2 + 1" identifier < (binary_expression "uVar2 + 1" identifier + number_literal)) )) (compound_statement "{\n          wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);\n          __s = (wistream *)piVar1[2];\n          pwVar6 = *(wstring **)param_2;\n          local_34 = (wistream *)piVar1[3];\n        }" { (labeled_statement "wstring::_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);" statement_identifier : (ERROR ":" :) (expression_statement "_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0);" (call_expression "_M_mutate((uint)param_2,uVar2,(wchar_t *)0x0,0)" identifier (argument_list "((uint)param_2,uVar2,(wchar_t *)0x0,0)" ( (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier) , identifier , (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , number_literal ))) ;)) (expression_statement "__s = (wistream *)piVar1[2];" (assignment_expression "__s = (wistream *)piVar1[2]" identifier = (cast_expression "(wistream *)piVar1[2]" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar6 = *(wstring **)param_2;" (assignment_expression "pwVar6 = *(wstring **)param_2" identifier = (pointer_expression "*(wstring **)param_2" * (cast_expression "(wstring **)param_2" ( (type_descriptor "wstring **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "local_34 = (wistream *)piVar1[3];" (assignment_expression "local_34 = (wistream *)piVar1[3]" identifier = (cast_expression "(wistream *)piVar1[3]" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) })) (expression_statement "local_30 = local_30 + 1;" (assignment_expression "local_30 = local_30 + 1" identifier = (binary_expression "local_30 + 1" identifier + number_literal)) ;) (expression_statement "*(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4;" (assignment_expression "*(wchar_t *)(pwVar6 + uVar2 * 4) = wVar4" (pointer_expression "*(wchar_t *)(pwVar6 + uVar2 * 4)" * (cast_expression "(wchar_t *)(pwVar6 + uVar2 * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar6 + uVar2 * 4)" ( (binary_expression "pwVar6 + uVar2 * 4" identifier + (binary_expression "uVar2 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "*(uint *)(param_2 + 4) = uVar2 + 1;" (assignment_expression "*(uint *)(param_2 + 4) = uVar2 + 1" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = (binary_expression "uVar2 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0;" (assignment_expression "*(undefined4 *)(pwVar6 + uVar2 * 4 + 4) = 0" (pointer_expression "*(undefined4 *)(pwVar6 + uVar2 * 4 + 4)" * (cast_expression "(undefined4 *)(pwVar6 + uVar2 * 4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar6 + uVar2 * 4 + 4)" ( (binary_expression "pwVar6 + uVar2 * 4 + 4" (binary_expression "pwVar6 + uVar2 * 4" identifier + (binary_expression "uVar2 * 4" identifier * number_literal)) + number_literal) )))) = number_literal) ;) (if_statement "if (__s < local_34) {\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }\n        else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }" if (parenthesized_expression "(__s < local_34)" ( (binary_expression "__s < local_34" identifier < identifier) )) (compound_statement "{\n          wVar4 = *(wchar_t *)__s;\n          piVar1[2] = (int)(__s + 4);\n        }" { (expression_statement "wVar4 = *(wchar_t *)__s;" (assignment_expression "wVar4 = *(wchar_t *)__s" identifier = (pointer_expression "*(wchar_t *)__s" * (cast_expression "(wchar_t *)__s" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar1[2] = (int)(__s + 4);" (assignment_expression "piVar1[2] = (int)(__s + 4)" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)(__s + 4)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(__s + 4)" ( (binary_expression "__s + 4" identifier + number_literal) )))) ;) }) (else_clause "else {\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }" else (compound_statement "{\n          wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);\n        }" { (expression_statement "wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1);" (assignment_expression "wVar4 = (**(code **)(*piVar1 + 0x28))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }))) (if_statement "if (wVar4 != L'\xffffffff') {\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }" if (parenthesized_expression "(wVar4 != L'\xffffffff')" ( (binary_expression "wVar4 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n          pwVar3 = (wchar_t *)piVar1[2];\n          if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;\n          goto LAB_003af3e2;\n        }" { (expression_statement "pwVar3 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar3 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if ((wchar_t *)piVar1[3] <= pwVar3) goto LAB_003af49f;" if (parenthesized_expression "((wchar_t *)piVar1[3] <= pwVar3)" ( (binary_expression "(wchar_t *)piVar1[3] <= pwVar3" (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ])) <= identifier) )) (goto_statement "goto LAB_003af49f;" goto statement_identifier ;)) (goto_statement "goto LAB_003af3e2;" goto statement_identifier ;) })) (labeled_statement "LAB_003af538:\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);" statement_identifier : (expression_statement "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;)) (goto_statement "goto LAB_003af2df;" goto statement_identifier ;) })) (expression_statement "pwVar3 = wmemchr((wchar_t *)__s,param_3,__n);" (assignment_expression "pwVar3 = wmemchr((wchar_t *)__s,param_3,__n)" identifier = (call_expression "wmemchr((wchar_t *)__s,param_3,__n)" identifier (argument_list "((wchar_t *)__s,param_3,__n)" ( (cast_expression "(wchar_t *)__s" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier )))) ;) (expression_statement "uVar7 = (int)pwVar3 - (int)__s >> 2;" (assignment_expression "uVar7 = (int)pwVar3 - (int)__s >> 2" identifier = (binary_expression "(int)pwVar3 - (int)__s >> 2" (binary_expression "(int)pwVar3 - (int)__s" (cast_expression "(int)pwVar3" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if (pwVar3 == (wchar_t *)0x0) {\n        uVar7 = __n;\n      }" if (parenthesized_expression "(pwVar3 == (wchar_t *)0x0)" ( (binary_expression "pwVar3 == (wchar_t *)0x0" identifier == (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar7 = __n;\n      }" { (expression_statement "uVar7 = __n;" (assignment_expression "uVar7 = __n" identifier = identifier) ;) })) (if_statement "if (0x1fffffff - uVar2 < uVar7) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n        __throw_length_error("basic_string::append");\n      }" if (parenthesized_expression "(0x1fffffff - uVar2 < uVar7)" ( (binary_expression "0x1fffffff - uVar2 < uVar7" (binary_expression "0x1fffffff - uVar2" number_literal - identifier) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */\n        __throw_length_error("basic_string::append");\n      }" { comment comment (expression_statement "__throw_length_error("basic_string::append");" (call_expression "__throw_length_error("basic_string::append")" identifier (argument_list "("basic_string::append")" ( (string_literal ""basic_string::append"" " string_content ") ))) ;) })) (expression_statement "uVar9 = uVar7;" (assignment_expression "uVar9 = uVar7" identifier = identifier) ;) comment (labeled_statement "wstring::_M_append((wchar_t *)param_2,(uint)__s);" statement_identifier : (ERROR ":" :) (expression_statement "_M_append((wchar_t *)param_2,(uint)__s);" (call_expression "_M_append((wchar_t *)param_2,(uint)__s)" identifier (argument_list "((wchar_t *)param_2,(uint)__s)" ( (cast_expression "(wchar_t *)param_2" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(uint)__s" ( (type_descriptor "uint" type_identifier) ) identifier) ))) ;)) (expression_statement "local_30 = local_30 + uVar7;" (assignment_expression "local_30 = local_30 + uVar7" identifier = (binary_expression "local_30 + uVar7" identifier + identifier)) ;) (expression_statement "pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4);" (assignment_expression "pwVar3 = (wchar_t *)(piVar1[2] + uVar7 * 4)" identifier = (cast_expression "(wchar_t *)(piVar1[2] + uVar7 * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1[2] + uVar7 * 4)" ( (binary_expression "piVar1[2] + uVar7 * 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) + (binary_expression "uVar7 * 4" identifier * number_literal)) )))) ;) (expression_statement "piVar1[2] = (int)pwVar3;" (assignment_expression "piVar1[2] = (int)pwVar3" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)pwVar3" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "pwVar8 = __s;" (assignment_expression "pwVar8 = __s" identifier = identifier) ;) (if_statement "if (pwVar3 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n        wVar4 = *pwVar3;\n      }\n      else {\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }" if (parenthesized_expression "(pwVar3 < (wchar_t *)piVar1[3])" ( (binary_expression "pwVar3 < (wchar_t *)piVar1[3]" identifier < (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\nLAB_003af3e2:\n        wVar4 = *pwVar3;\n      }" { (labeled_statement "LAB_003af3e2:\n        wVar4 = *pwVar3;" statement_identifier : (expression_statement "wVar4 = *pwVar3;" (assignment_expression "wVar4 = *pwVar3" identifier = (pointer_expression "*pwVar3" * identifier)) ;)) }) (else_clause "else {\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }" else (compound_statement "{\nLAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);\n      }" { (labeled_statement "LAB_003af49f:\n        wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);" statement_identifier : (expression_statement "wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);" (assignment_expression "wVar4 = (**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9)" identifier = (call_expression "(**(code **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9)" (parenthesized_expression "(**(code **)(*piVar1 + 0x24))" ( (pointer_expression "**(code **)(*piVar1 + 0x24)" * (pointer_expression "*(code **)(*piVar1 + 0x24)" * (cast_expression "(code **)(*piVar1 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x24)" ( (binary_expression "*piVar1 + 0x24" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1,pwVar8,uVar9)" ( identifier , identifier , identifier )))) ;)) }))) (if_statement "if (0x1ffffffe < local_30) {\n        if (wVar4 == L'\xffffffff') goto LAB_003af538;\n        if (param_3 != wVar4) goto LAB_003af2cf;\n        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n        piVar1[2] = piVar1[2] + 4;\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }" if (parenthesized_expression "(0x1ffffffe < local_30)" ( (binary_expression "0x1ffffffe < local_30" number_literal < identifier) )) (compound_statement "{\n        if (wVar4 == L'\xffffffff') goto LAB_003af538;\n        if (param_3 != wVar4) goto LAB_003af2cf;\n        if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n        piVar1[2] = piVar1[2] + 4;\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }" { (if_statement "if (wVar4 == L'\xffffffff') goto LAB_003af538;" if (parenthesized_expression "(wVar4 == L'\xffffffff')" ( (binary_expression "wVar4 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (goto_statement "goto LAB_003af538;" goto statement_identifier ;)) (if_statement "if (param_3 != wVar4) goto LAB_003af2cf;" if (parenthesized_expression "(param_3 != wVar4)" ( (binary_expression "param_3 != wVar4" identifier != identifier) )) (goto_statement "goto LAB_003af2cf;" goto statement_identifier ;)) (if_statement "if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;" if (parenthesized_expression "((uint)piVar1[3] <= (uint)piVar1[2])" ( (binary_expression "(uint)piVar1[3] <= (uint)piVar1[2]" (cast_expression "(uint)piVar1[3]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[3]" identifier [ number_literal ])) <= (cast_expression "(uint)piVar1[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_003af418;" goto statement_identifier ;)) (expression_statement "piVar1[2] = piVar1[2] + 4;" (assignment_expression "piVar1[2] = piVar1[2] + 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (binary_expression "piVar1[2] + 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (local_30 != 0xffffffff) {\n          return param_1;\n        }" if (parenthesized_expression "(local_30 != 0xffffffff)" ( (binary_expression "local_30 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n          return param_1;\n        }" { (return_statement "return param_1;" return identifier ;) })) (goto_statement "goto LAB_003af2cf;" goto statement_identifier ;) })) (if_statement "if (wVar4 == L'\xffffffff') {\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }" if (parenthesized_expression "(wVar4 == L'\xffffffff')" ( (binary_expression "wVar4 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n        pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_003af2df;\n      }" { (expression_statement "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;) (goto_statement "goto LAB_003af2df;" goto statement_identifier ;) })) (expression_statement "local_34 = (wistream *)piVar1[3];" (assignment_expression "local_34 = (wistream *)piVar1[3]" identifier = (cast_expression "(wistream *)piVar1[3]" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "__s = (wistream *)piVar1[2];" (assignment_expression "__s = (wistream *)piVar1[2]" identifier = (cast_expression "(wistream *)piVar1[2]" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(param_3 != wVar4)" ( (binary_expression "param_3 != wVar4" identifier != identifier) )) ;) (if_statement "if (__s < local_34) goto LAB_003af5a9;" if (parenthesized_expression "(__s < local_34)" ( (binary_expression "__s < local_34" identifier < identifier) )) (goto_statement "goto LAB_003af5a9;" goto statement_identifier ;)) (labeled_statement "LAB_003af418:\n    (**(code **)(*piVar1 + 0x28))(piVar1);" statement_identifier : (expression_statement "(**(code **)(*piVar1 + 0x28))(piVar1);" (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier ))) ;)) (if_statement "if (local_30 != 0xffffffff) {\n      return param_1;\n    }" if (parenthesized_expression "(local_30 != 0xffffffff)" ( (binary_expression "local_30 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) })) })) (labeled_statement "LAB_003af2cf:\n  pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);" statement_identifier : (expression_statement "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar5 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;)) (labeled_statement "LAB_003af2df:\n  wios::clear((_Ios_Iostate)pwVar5);" statement_identifier : (labeled_statement "wios::clear((_Ios_Iostate)pwVar5);" statement_identifier : (ERROR ":" :) (expression_statement "clear((_Ios_Iostate)pwVar5);" (call_expression "clear((_Ios_Iostate)pwVar5)" identifier (argument_list "((_Ios_Iostate)pwVar5)" ( (cast_expression "(_Ios_Iostate)pwVar5" ( (type_descriptor "_Ios_Iostate" type_identifier) ) identifier) ))) ;))) (return_statement "return param_1;" return identifier ;) }))
(translation_unit "int * FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)\n\n{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t *pwVar4;\n  wchar_t wVar5;\n  int iVar6;\n  size_t __n;\n  undefined4 *puVar7;\n  wchar_t *local_34;\n  uint local_30;\n  char local_1d [13];\n  \n  FUN_003d4d40(local_1d,param_1,1);\n  if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }\nLAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));\n  return param_1;\n}\n\n" (function_definition "int * FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)\n\n{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t *pwVar4;\n  wchar_t wVar5;\n  int iVar6;\n  size_t __n;\n  undefined4 *puVar7;\n  wchar_t *local_34;\n  uint local_30;\n  char local_1d [13];\n  \n  FUN_003d4d40(local_1d,param_1,1);\n  if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }\nLAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));\n  return param_1;\n}" primitive_type (pointer_declarator "* FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)" * (function_declarator "FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)" identifier (parameter_list "(int *param_1,undefined4 *param_2,wchar_t param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "wchar_t param_3" type_identifier identifier) )))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t *pwVar4;\n  wchar_t wVar5;\n  int iVar6;\n  size_t __n;\n  undefined4 *puVar7;\n  wchar_t *local_34;\n  uint local_30;\n  char local_1d [13];\n  \n  FUN_003d4d40(local_1d,param_1,1);\n  if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }\nLAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));\n  return param_1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "wchar_t *pwVar3;" type_identifier (pointer_declarator "*pwVar3" * identifier) ;) (declaration "wchar_t *pwVar4;" type_identifier (pointer_declarator "*pwVar4" * identifier) ;) (declaration "wchar_t wVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "wchar_t *local_34;" type_identifier (pointer_declarator "*local_34" * identifier) ;) (declaration "uint local_30;" type_identifier identifier ;) (declaration "char local_1d [13];" primitive_type (array_declarator "local_1d [13]" identifier [ number_literal ]) ;) (expression_statement "FUN_003d4d40(local_1d,param_1,1);" (call_expression "FUN_003d4d40(local_1d,param_1,1)" identifier (argument_list "(local_1d,param_1,1)" ( identifier , identifier , number_literal ))) ;) (if_statement "if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" if (parenthesized_expression "(local_1d[0] == '\0')" ( (binary_expression "local_1d[0] == '\0'" (subscript_expression "local_1d[0]" identifier [ number_literal ]) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }" { (labeled_statement "LAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" statement_identifier : (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;)) (expression_statement "uVar2 = 4;" (assignment_expression "uVar2 = 4" identifier = number_literal) ;) }) (else_clause "else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" else (compound_statement "{\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" { (expression_statement "param_2[1] = 0;" (assignment_expression "param_2[1] = 0" (subscript_expression "param_2[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined4 *)*param_2 = 0;" (assignment_expression "*(undefined4 *)*param_2 = 0" (pointer_expression "*(undefined4 *)*param_2" * (cast_expression "(undefined4 *)*param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) = number_literal) ;) (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (expression_statement "piVar1 = *(int **)(iVar6 + 0x7c);" (assignment_expression "piVar1 = *(int **)(iVar6 + 0x7c)" identifier = (pointer_expression "*(int **)(iVar6 + 0x7c)" * (cast_expression "(int **)(iVar6 + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + 0x7c)" ( (binary_expression "iVar6 + 0x7c" identifier + number_literal) ))))) ;) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" identifier = (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" if (parenthesized_expression "(pwVar4 < local_34)" ( (binary_expression "pwVar4 < local_34" identifier < identifier) )) (compound_statement "{\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }" { (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" identifier = (pointer_expression "*pwVar4" * identifier)) ;) (if_statement "if (wVar5 != L'\xffffffff') goto LAB_003af33c;" if (parenthesized_expression "(wVar5 != L'\xffffffff')" ( (binary_expression "wVar5 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (goto_statement "goto LAB_003af33c;" goto statement_identifier ;)) }) (else_clause "else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" else (compound_statement "{\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" { (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x24))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x24))" ( (pointer_expression "**(code **)(*piVar1 + 0x24)" * (pointer_expression "*(code **)(*piVar1 + 0x24)" * (cast_expression "(code **)(*piVar1 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x24)" ( (binary_expression "*piVar1 + 0x24" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) (if_statement "if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }" if (parenthesized_expression "(wVar5 != L'\xffffffff')" ( (binary_expression "wVar5 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }" { (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" identifier = (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (labeled_statement "LAB_003af33c:\n        local_30 = 0;" statement_identifier : (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" identifier = number_literal) ;)) (if_statement "if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }" if (parenthesized_expression "(param_3 == wVar5)" ( (binary_expression "param_3 == wVar5" identifier == identifier) )) (compound_statement "{\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }" { (if_statement "if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }" if (parenthesized_expression "(local_34 <= pwVar4)" ( (binary_expression "local_34 <= pwVar4" identifier <= identifier) )) (compound_statement "{\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }" { (expression_statement "(**(code **)(*piVar1 + 0x28))(piVar1);" (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier ))) ;) (return_statement "return param_1;" return identifier ;) })) (labeled_statement "LAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);" statement_identifier : (expression_statement "piVar1[2] = (int)(pwVar4 + 1);" (assignment_expression "piVar1[2] = (int)(pwVar4 + 1)" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar4 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar4 + 1)" ( (binary_expression "pwVar4 + 1" identifier + number_literal) )))) ;)) (return_statement "return param_1;" return identifier ;) })) (do_statement "do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);" do (compound_statement "{\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        }" { (expression_statement "__n = (int)local_34 - (int)pwVar4 >> 2;" (assignment_expression "__n = (int)local_34 - (int)pwVar4 >> 2" identifier = (binary_expression "(int)local_34 - (int)pwVar4 >> 2" (binary_expression "(int)local_34 - (int)pwVar4" (cast_expression "(int)local_34" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pwVar4" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }" if (parenthesized_expression "((int)(0x1fffffff - local_30) < (int)__n)" ( (binary_expression "(int)(0x1fffffff - local_30) < (int)__n" (cast_expression "(int)(0x1fffffff - local_30)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x1fffffff - local_30)" ( (binary_expression "0x1fffffff - local_30" number_literal - identifier) ))) < (cast_expression "(int)__n" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n            __n = 0x1fffffff - local_30;\n          }" { (expression_statement "__n = 0x1fffffff - local_30;" (assignment_expression "__n = 0x1fffffff - local_30" identifier = (binary_expression "0x1fffffff - local_30" number_literal - identifier)) ;) })) (expression_statement "iVar6 = param_2[1];" (assignment_expression "iVar6 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (if_statement "if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }" if (parenthesized_expression "((int)__n < 2)" ( (binary_expression "(int)__n < 2" (cast_expression "(int)__n" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }" { (expression_statement "puVar7 = (undefined4 *)*param_2;" (assignment_expression "puVar7 = (undefined4 *)*param_2" identifier = (cast_expression "(undefined4 *)*param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }" if (parenthesized_expression "(puVar7 == param_2 + 2)" ( (binary_expression "puVar7 == param_2 + 2" identifier == (binary_expression "param_2 + 2" identifier + number_literal)) )) (compound_statement "{\n              uVar2 = 3;\n            }" { (expression_statement "uVar2 = 3;" (assignment_expression "uVar2 = 3" identifier = number_literal) ;) }) (else_clause "else {\n              uVar2 = param_2[2];\n            }" else (compound_statement "{\n              uVar2 = param_2[2];\n            }" { (expression_statement "uVar2 = param_2[2];" (assignment_expression "uVar2 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) }))) (if_statement "if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }" if (parenthesized_expression "(uVar2 < iVar6 + 1U)" ( (binary_expression "uVar2 < iVar6 + 1U" identifier < (binary_expression "iVar6 + 1U" identifier + number_literal)) )) (compound_statement "{\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }" { (expression_statement "FUN_003b2370(param_2,iVar6,0,0,1);" (call_expression "FUN_003b2370(param_2,iVar6,0,0,1)" identifier (argument_list "(param_2,iVar6,0,0,1)" ( identifier , identifier , number_literal , number_literal , number_literal ))) ;) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (expression_statement "puVar7 = (undefined4 *)*param_2;" (assignment_expression "puVar7 = (undefined4 *)*param_2" identifier = (cast_expression "(undefined4 *)*param_2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" identifier = (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) })) (expression_statement "local_30 = local_30 + 1;" (assignment_expression "local_30 = local_30 + 1" identifier = (binary_expression "local_30 + 1" identifier + number_literal)) ;) (expression_statement "puVar7[iVar6] = wVar5;" (assignment_expression "puVar7[iVar6] = wVar5" (subscript_expression "puVar7[iVar6]" identifier [ identifier ]) = identifier) ;) (expression_statement "param_2[1] = iVar6 + 1U;" (assignment_expression "param_2[1] = iVar6 + 1U" (subscript_expression "param_2[1]" identifier [ number_literal ]) = (binary_expression "iVar6 + 1U" identifier + number_literal)) ;) (expression_statement "puVar7[iVar6 + 1] = 0;" (assignment_expression "puVar7[iVar6 + 1] = 0" (subscript_expression "puVar7[iVar6 + 1]" identifier [ (binary_expression "iVar6 + 1" identifier + number_literal) ]) = number_literal) ;) (if_statement "if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" if (parenthesized_expression "(pwVar4 < local_34)" ( (binary_expression "pwVar4 < local_34" identifier < identifier) )) (compound_statement "{\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }" { (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" identifier = (pointer_expression "*pwVar4" * identifier)) ;) (expression_statement "piVar1[2] = (int)(pwVar4 + 1);" (assignment_expression "piVar1[2] = (int)(pwVar4 + 1)" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar4 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar4 + 1)" ( (binary_expression "pwVar4 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" else (compound_statement "{\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" { (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;) }))) (if_statement "if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }" if (parenthesized_expression "(wVar5 != L'\xffffffff')" ( (binary_expression "wVar5 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }" { (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;" if (parenthesized_expression "((wchar_t *)piVar1[3] <= pwVar4)" ( (binary_expression "(wchar_t *)piVar1[3] <= pwVar4" (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ])) <= identifier) )) (goto_statement "goto LAB_003af49f;" goto statement_identifier ;)) (goto_statement "goto LAB_003af3e2;" goto statement_identifier ;) })) (labeled_statement "LAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" statement_identifier : (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;)) (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" identifier = number_literal) ;) (goto_statement "goto LAB_003af2df;" goto statement_identifier ;) })) (expression_statement "pwVar3 = wmemchr(pwVar4,param_3,__n);" (assignment_expression "pwVar3 = wmemchr(pwVar4,param_3,__n)" identifier = (call_expression "wmemchr(pwVar4,param_3,__n)" identifier (argument_list "(pwVar4,param_3,__n)" ( identifier , identifier , identifier )))) ;) (expression_statement "uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;" (assignment_expression "uVar2 = (int)pwVar3 - (int)pwVar4 >> 2" identifier = (binary_expression "(int)pwVar3 - (int)pwVar4 >> 2" (binary_expression "(int)pwVar3 - (int)pwVar4" (cast_expression "(int)pwVar3" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pwVar4" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (if_statement "if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }" if (parenthesized_expression "(pwVar3 == (wchar_t *)0x0)" ( (binary_expression "pwVar3 == (wchar_t *)0x0" identifier == (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            uVar2 = __n;\n          }" { (expression_statement "uVar2 = __n;" (assignment_expression "uVar2 = __n" identifier = identifier) ;) })) (if_statement "if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }" if (parenthesized_expression "(0x1fffffffU - iVar6 < uVar2)" ( (binary_expression "0x1fffffffU - iVar6 < uVar2" (binary_expression "0x1fffffffU - iVar6" number_literal - identifier) < identifier) )) (compound_statement "{\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }" { (expression_statement "FUN_003f3a70("basic_string::append");" (call_expression "FUN_003f3a70("basic_string::append")" identifier (argument_list "("basic_string::append")" ( (string_literal ""basic_string::append"" " string_content ") ))) ;) })) (expression_statement "FUN_003b3f40(param_2,pwVar4,uVar2);" (call_expression "FUN_003b3f40(param_2,pwVar4,uVar2)" identifier (argument_list "(param_2,pwVar4,uVar2)" ( identifier , identifier , identifier ))) ;) (expression_statement "local_30 = local_30 + uVar2;" (assignment_expression "local_30 = local_30 + uVar2" identifier = (binary_expression "local_30 + uVar2" identifier + identifier)) ;) (expression_statement "pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);" (assignment_expression "pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4)" identifier = (cast_expression "(wchar_t *)(piVar1[2] + uVar2 * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar1[2] + uVar2 * 4)" ( (binary_expression "piVar1[2] + uVar2 * 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) + (binary_expression "uVar2 * 4" identifier * number_literal)) )))) ;) (expression_statement "piVar1[2] = (int)pwVar4;" (assignment_expression "piVar1[2] = (int)pwVar4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (cast_expression "(int)pwVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" if (parenthesized_expression "(pwVar4 < (wchar_t *)piVar1[3])" ( (binary_expression "pwVar4 < (wchar_t *)piVar1[3]" identifier < (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }" { (labeled_statement "LAB_003af3e2:\n            wVar5 = *pwVar4;" statement_identifier : (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" identifier = (pointer_expression "*pwVar4" * identifier)) ;)) }) (else_clause "else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" else (compound_statement "{\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" { (labeled_statement "LAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" statement_identifier : (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1)" identifier = (call_expression "(**(code **)(*piVar1 + 0x24))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x24))" ( (pointer_expression "**(code **)(*piVar1 + 0x24)" * (pointer_expression "*(code **)(*piVar1 + 0x24)" * (cast_expression "(code **)(*piVar1 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x24)" ( (binary_expression "*piVar1 + 0x24" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier )))) ;)) }))) (if_statement "if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }" if (parenthesized_expression "(0x1ffffffe < local_30)" ( (binary_expression "0x1ffffffe < local_30" number_literal < identifier) )) (compound_statement "{\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }" { (if_statement "if (wVar5 == L'\xffffffff') goto LAB_003af538;" if (parenthesized_expression "(wVar5 == L'\xffffffff')" ( (binary_expression "wVar5 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (goto_statement "goto LAB_003af538;" goto statement_identifier ;)) (if_statement "if (param_3 != wVar5) goto LAB_003af2cf;" if (parenthesized_expression "(param_3 != wVar5)" ( (binary_expression "param_3 != wVar5" identifier != identifier) )) (goto_statement "goto LAB_003af2cf;" goto statement_identifier ;)) (if_statement "if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;" if (parenthesized_expression "((uint)piVar1[3] <= (uint)piVar1[2])" ( (binary_expression "(uint)piVar1[3] <= (uint)piVar1[2]" (cast_expression "(uint)piVar1[3]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[3]" identifier [ number_literal ])) <= (cast_expression "(uint)piVar1[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_003af418;" goto statement_identifier ;)) (expression_statement "piVar1[2] = piVar1[2] + 4;" (assignment_expression "piVar1[2] = piVar1[2] + 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) = (binary_expression "piVar1[2] + 4" (subscript_expression "piVar1[2]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (local_30 != 0xffffffff) {\n              return param_1;\n            }" if (parenthesized_expression "(local_30 != 0xffffffff)" ( (binary_expression "local_30 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n              return param_1;\n            }" { (return_statement "return param_1;" return identifier ;) })) (goto_statement "goto LAB_003af2cf;" goto statement_identifier ;) })) (if_statement "if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }" if (parenthesized_expression "(wVar5 == L'\xffffffff')" ( (binary_expression "wVar5 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }" { (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (expression_statement "uVar2 = (-(uint)(local_30 == 0) & 4) + 2;" (assignment_expression "uVar2 = (-(uint)(local_30 == 0) & 4) + 2" identifier = (binary_expression "(-(uint)(local_30 == 0) & 4) + 2" (parenthesized_expression "(-(uint)(local_30 == 0) & 4)" ( (binary_expression "-(uint)(local_30 == 0) & 4" (unary_expression "-(uint)(local_30 == 0)" - (call_expression "(uint)(local_30 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(local_30 == 0)" ( (binary_expression "local_30 == 0" identifier == number_literal) )))) & number_literal) )) + number_literal)) ;) (goto_statement "goto LAB_003af2df;" goto statement_identifier ;) })) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" identifier = (cast_expression "(wchar_t *)piVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" identifier = (cast_expression "(wchar_t *)piVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar1[2]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(param_3 != wVar5)" ( (binary_expression "param_3 != wVar5" identifier != identifier) )) ;) (if_statement "if (pwVar4 < local_34) goto LAB_003af5a9;" if (parenthesized_expression "(pwVar4 < local_34)" ( (binary_expression "pwVar4 < local_34" identifier < identifier) )) (goto_statement "goto LAB_003af5a9;" goto statement_identifier ;)) (labeled_statement "LAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);" statement_identifier : (expression_statement "(**(code **)(*piVar1 + 0x28))(piVar1);" (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" ( (pointer_expression "**(code **)(*piVar1 + 0x28)" * (pointer_expression "*(code **)(*piVar1 + 0x28)" * (cast_expression "(code **)(*piVar1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar1 + 0x28)" ( (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" * identifier) + number_literal) ))))) )) (argument_list "(piVar1)" ( identifier ))) ;)) (if_statement "if (local_30 != 0xffffffff) {\n          return param_1;\n        }" if (parenthesized_expression "(local_30 != 0xffffffff)" ( (binary_expression "local_30 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n          return param_1;\n        }" { (return_statement "return param_1;" return identifier ;) })) (goto_statement "goto LAB_003af2cf;" goto statement_identifier ;) })) (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) }))) (expression_statement "uVar2 = 6;" (assignment_expression "uVar2 = 6" identifier = number_literal) ;) }))) (labeled_statement "LAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));" statement_identifier : (expression_statement "FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));" (call_expression "FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14))" identifier (argument_list "(iVar6,uVar2 | *(uint *)(iVar6 + 0x14))" ( identifier , (binary_expression "uVar2 | *(uint *)(iVar6 + 0x14)" identifier | (pointer_expression "*(uint *)(iVar6 + 0x14)" * (cast_expression "(uint *)(iVar6 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 0x14)" ( (binary_expression "iVar6 + 0x14" identifier + number_literal) ))))) ))) ;)) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (char_literal ' escape_sequence ')) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal L' escape_sequence character character character character ')) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal L' escape_sequence character character character character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;)) (return_statement return IDENT ;) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT - IDENT) ))) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT , LIT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal L' escape_sequence character character character character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) <= IDENT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;)) }))) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal L' escape_sequence character character character character ')) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal L' escape_sequence character character character character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (unary_expression - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) )))) & LIT) )) + LIT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT ))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ;)) (return_statement return IDENT ;) })))
(function_definition "int * FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)\n\n{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t *pwVar4;\n  wchar_t wVar5;\n  int iVar6;\n  size_t __n;\n  undefined4 *puVar7;\n  wchar_t *local_34;\n  uint local_30;\n  char local_1d [13];\n  \n  FUN_003d4d40(local_1d,param_1,1);\n  if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }\nLAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));\n  return param_1;\n}" (primitive_type "int") (pointer_declarator "* FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)" (* "*") (function_declarator "FUN_003af2a0(int *param_1,undefined4 *param_2,wchar_t param_3)" (identifier "FUN_003af2a0") (parameter_list "(int *param_1,undefined4 *param_2,wchar_t param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "wchar_t param_3" (type_identifier "wchar_t") (identifier "param_3")) () ")")))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  wchar_t *pwVar3;\n  wchar_t *pwVar4;\n  wchar_t wVar5;\n  int iVar6;\n  size_t __n;\n  undefined4 *puVar7;\n  wchar_t *local_34;\n  uint local_30;\n  char local_1d [13];\n  \n  FUN_003d4d40(local_1d,param_1,1);\n  if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }\nLAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));\n  return param_1;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "wchar_t *pwVar3;" (type_identifier "wchar_t") (pointer_declarator "*pwVar3" (* "*") (identifier "pwVar3")) (; ";")) (declaration "wchar_t *pwVar4;" (type_identifier "wchar_t") (pointer_declarator "*pwVar4" (* "*") (identifier "pwVar4")) (; ";")) (declaration "wchar_t wVar5;" (type_identifier "wchar_t") (identifier "wVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "undefined4 *puVar7;" (type_identifier "undefined4") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "wchar_t *local_34;" (type_identifier "wchar_t") (pointer_declarator "*local_34" (* "*") (identifier "local_34")) (; ";")) (declaration "uint local_30;" (type_identifier "uint") (identifier "local_30") (; ";")) (declaration "char local_1d [13];" (primitive_type "char") (array_declarator "local_1d [13]" (identifier "local_1d") ([ "[") (number_literal "13") (] "]")) (; ";")) (expression_statement "FUN_003d4d40(local_1d,param_1,1);" (call_expression "FUN_003d4d40(local_1d,param_1,1)" (identifier "FUN_003d4d40") (argument_list "(local_1d,param_1,1)" (( "(") (identifier "local_1d") (, ",") (identifier "param_1") (, ",") (number_literal "1") () ")"))) (; ";")) (if_statement "if (local_1d[0] == '\0') {\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }\n  else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" (if "if") (parenthesized_expression "(local_1d[0] == '\0')" (( "(") (binary_expression "local_1d[0] == '\0'" (subscript_expression "local_1d[0]" (identifier "local_1d") ([ "[") (number_literal "0") (] "]")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\nLAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    uVar2 = 4;\n  }" ({ "{") (labeled_statement "LAB_003af2cf:\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (statement_identifier "LAB_003af2cf") (: ":") (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar6") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";"))) (expression_statement "uVar2 = 4;" (assignment_expression "uVar2 = 4" (identifier "uVar2") (= "=") (number_literal "4")) (; ";")) (} "}")) (else_clause "else {\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" (else "else") (compound_statement "{\n    param_2[1] = 0;\n    *(undefined4 *)*param_2 = 0;\n    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    piVar1 = *(int **)(iVar6 + 0x7c);\n    local_34 = (wchar_t *)piVar1[3];\n    pwVar4 = (wchar_t *)piVar1[2];\n    if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }\n    uVar2 = 6;\n  }" ({ "{") (expression_statement "param_2[1] = 0;" (assignment_expression "param_2[1] = 0" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)*param_2 = 0;" (assignment_expression "*(undefined4 *)*param_2 = 0" (pointer_expression "*(undefined4 *)*param_2" (* "*") (cast_expression "(undefined4 *)*param_2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar6") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";")) (expression_statement "piVar1 = *(int **)(iVar6 + 0x7c);" (assignment_expression "piVar1 = *(int **)(iVar6 + 0x7c)" (identifier "piVar1") (= "=") (pointer_expression "*(int **)(iVar6 + 0x7c)" (* "*") (cast_expression "(int **)(iVar6 + 0x7c)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar6 + 0x7c)" (( "(") (binary_expression "iVar6 + 0x7c" (identifier "iVar6") (+ "+") (number_literal "0x7c")) () ")"))))) (; ";")) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" (identifier "local_34") (= "=") (cast_expression "(wchar_t *)piVar1[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" (identifier "pwVar4") (= "=") (cast_expression "(wchar_t *)piVar1[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (pwVar4 < local_34) {\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }\n    else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" (if "if") (parenthesized_expression "(pwVar4 < local_34)" (( "(") (binary_expression "pwVar4 < local_34" (identifier "pwVar4") (< "<") (identifier "local_34")) () ")")) (compound_statement "{\n      wVar5 = *pwVar4;\n      if (wVar5 != L'\xffffffff') goto LAB_003af33c;\n    }" ({ "{") (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" (identifier "wVar5") (= "=") (pointer_expression "*pwVar4" (* "*") (identifier "pwVar4"))) (; ";")) (if_statement "if (wVar5 != L'\xffffffff') goto LAB_003af33c;" (if "if") (parenthesized_expression "(wVar5 != L'\xffffffff')" (( "(") (binary_expression "wVar5 != L'\xffffffff'" (identifier "wVar5") (!= "!=") (char_literal "L'\xffffffff'" (L' "L'") (escape_sequence "\xffff") (character "f") (character "f") (character "f") (character "f") (' "'"))) () ")")) (goto_statement "goto LAB_003af33c;" (goto "goto") (statement_identifier "LAB_003af33c") (; ";"))) (} "}")) (else_clause "else {\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" (else "else") (compound_statement "{\n                    \n      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n      if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }\n      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n    }" ({ "{") (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1)" (identifier "wVar5") (= "=") (call_expression "(**(code **)(*piVar1 + 0x24))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x24))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0x24)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0x24)" (* "*") (cast_expression "(code **)(*piVar1 + 0x24)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x24)" (( "(") (binary_expression "*piVar1 + 0x24" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x24")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")")))) (; ";")) (if_statement "if (wVar5 != L'\xffffffff') {\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }" (if "if") (parenthesized_expression "(wVar5 != L'\xffffffff')" (( "(") (binary_expression "wVar5 != L'\xffffffff'" (identifier "wVar5") (!= "!=") (char_literal "L'\xffffffff'" (L' "L'") (escape_sequence "\xffff") (character "f") (character "f") (character "f") (character "f") (' "'"))) () ")")) (compound_statement "{\n        local_34 = (wchar_t *)piVar1[3];\n        pwVar4 = (wchar_t *)piVar1[2];\nLAB_003af33c:\n        local_30 = 0;\n        if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }\n        do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);\n        if (pwVar4 < local_34) goto LAB_003af5a9;\nLAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);\n        if (local_30 != 0xffffffff) {\n          return param_1;\n        }\n        goto LAB_003af2cf;\n      }" ({ "{") (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" (identifier "local_34") (= "=") (cast_expression "(wchar_t *)piVar1[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" (identifier "pwVar4") (= "=") (cast_expression "(wchar_t *)piVar1[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (labeled_statement "LAB_003af33c:\n        local_30 = 0;" (statement_identifier "LAB_003af33c") (: ":") (expression_statement "local_30 = 0;" (assignment_expression "local_30 = 0" (identifier "local_30") (= "=") (number_literal "0")) (; ";"))) (if_statement "if (param_3 == wVar5) {\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }" (if "if") (parenthesized_expression "(param_3 == wVar5)" (( "(") (binary_expression "param_3 == wVar5" (identifier "param_3") (== "==") (identifier "wVar5")) () ")")) (compound_statement "{\n          if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }\nLAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);\n          return param_1;\n        }" ({ "{") (if_statement "if (local_34 <= pwVar4) {\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }" (if "if") (parenthesized_expression "(local_34 <= pwVar4)" (( "(") (binary_expression "local_34 <= pwVar4" (identifier "local_34") (<= "<=") (identifier "pwVar4")) () ")")) (compound_statement "{\n                    \n            (**(code **)(*piVar1 + 0x28))(piVar1);\n            return param_1;\n          }" ({ "{") (expression_statement "(**(code **)(*piVar1 + 0x28))(piVar1);" (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0x28)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0x28)" (* "*") (cast_expression "(code **)(*piVar1 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x28)" (( "(") (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")"))) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (labeled_statement "LAB_003af5a9:\n          piVar1[2] = (int)(pwVar4 + 1);" (statement_identifier "LAB_003af5a9") (: ":") (expression_statement "piVar1[2] = (int)(pwVar4 + 1);" (assignment_expression "piVar1[2] = (int)(pwVar4 + 1)" (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)(pwVar4 + 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(pwVar4 + 1)" (( "(") (binary_expression "pwVar4 + 1" (identifier "pwVar4") (+ "+") (number_literal "1")) () ")")))) (; ";"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (do_statement "do {\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        } while (param_3 != wVar5);" (do "do") (compound_statement "{\n          __n = (int)local_34 - (int)pwVar4 >> 2;\n          if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }\n          iVar6 = param_2[1];\n          if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }\n          pwVar3 = wmemchr(pwVar4,param_3,__n);\n          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;\n          if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }\n          if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }\n                    \n          FUN_003b3f40(param_2,pwVar4,uVar2);\n          local_30 = local_30 + uVar2;\n          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);\n          piVar1[2] = (int)pwVar4;\n          if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }\n          if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }\n          if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }\n          local_34 = (wchar_t *)piVar1[3];\n          pwVar4 = (wchar_t *)piVar1[2];\n        }" ({ "{") (expression_statement "__n = (int)local_34 - (int)pwVar4 >> 2;" (assignment_expression "__n = (int)local_34 - (int)pwVar4 >> 2" (identifier "__n") (= "=") (binary_expression "(int)local_34 - (int)pwVar4 >> 2" (binary_expression "(int)local_34 - (int)pwVar4" (cast_expression "(int)local_34" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_34")) (- "-") (cast_expression "(int)pwVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar4"))) (>> ">>") (number_literal "2"))) (; ";")) (if_statement "if ((int)(0x1fffffff - local_30) < (int)__n) {\n            __n = 0x1fffffff - local_30;\n          }" (if "if") (parenthesized_expression "((int)(0x1fffffff - local_30) < (int)__n)" (( "(") (binary_expression "(int)(0x1fffffff - local_30) < (int)__n" (cast_expression "(int)(0x1fffffff - local_30)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x1fffffff - local_30)" (( "(") (binary_expression "0x1fffffff - local_30" (number_literal "0x1fffffff") (- "-") (identifier "local_30")) () ")"))) (< "<") (cast_expression "(int)__n" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__n"))) () ")")) (compound_statement "{\n            __n = 0x1fffffff - local_30;\n          }" ({ "{") (expression_statement "__n = 0x1fffffff - local_30;" (assignment_expression "__n = 0x1fffffff - local_30" (identifier "__n") (= "=") (binary_expression "0x1fffffff - local_30" (number_literal "0x1fffffff") (- "-") (identifier "local_30"))) (; ";")) (} "}"))) (expression_statement "iVar6 = param_2[1];" (assignment_expression "iVar6 = param_2[1]" (identifier "iVar6") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if ((int)__n < 2) {\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }" (if "if") (parenthesized_expression "((int)__n < 2)" (( "(") (binary_expression "(int)__n < 2" (cast_expression "(int)__n" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__n")) (< "<") (number_literal "2")) () ")")) (compound_statement "{\n            puVar7 = (undefined4 *)*param_2;\n            if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }\n            if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }\n            local_30 = local_30 + 1;\n            puVar7[iVar6] = wVar5;\n            param_2[1] = iVar6 + 1U;\n            puVar7[iVar6 + 1] = 0;\n            if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }\n            if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }\nLAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = 2;\n            goto LAB_003af2df;\n          }" ({ "{") (expression_statement "puVar7 = (undefined4 *)*param_2;" (assignment_expression "puVar7 = (undefined4 *)*param_2" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)*param_2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (if_statement "if (puVar7 == param_2 + 2) {\n              uVar2 = 3;\n            }\n            else {\n              uVar2 = param_2[2];\n            }" (if "if") (parenthesized_expression "(puVar7 == param_2 + 2)" (( "(") (binary_expression "puVar7 == param_2 + 2" (identifier "puVar7") (== "==") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2"))) () ")")) (compound_statement "{\n              uVar2 = 3;\n            }" ({ "{") (expression_statement "uVar2 = 3;" (assignment_expression "uVar2 = 3" (identifier "uVar2") (= "=") (number_literal "3")) (; ";")) (} "}")) (else_clause "else {\n              uVar2 = param_2[2];\n            }" (else "else") (compound_statement "{\n              uVar2 = param_2[2];\n            }" ({ "{") (expression_statement "uVar2 = param_2[2];" (assignment_expression "uVar2 = param_2[2]" (identifier "uVar2") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (} "}")))) (if_statement "if (uVar2 < iVar6 + 1U) {\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }" (if "if") (parenthesized_expression "(uVar2 < iVar6 + 1U)" (( "(") (binary_expression "uVar2 < iVar6 + 1U" (identifier "uVar2") (< "<") (binary_expression "iVar6 + 1U" (identifier "iVar6") (+ "+") (number_literal "1U"))) () ")")) (compound_statement "{\n              FUN_003b2370(param_2,iVar6,0,0,1);\n              pwVar4 = (wchar_t *)piVar1[2];\n              puVar7 = (undefined4 *)*param_2;\n              local_34 = (wchar_t *)piVar1[3];\n            }" ({ "{") (expression_statement "FUN_003b2370(param_2,iVar6,0,0,1);" (call_expression "FUN_003b2370(param_2,iVar6,0,0,1)" (identifier "FUN_003b2370") (argument_list "(param_2,iVar6,0,0,1)" (( "(") (identifier "param_2") (, ",") (identifier "iVar6") (, ",") (number_literal "0") (, ",") (number_literal "0") (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" (identifier "pwVar4") (= "=") (cast_expression "(wchar_t *)piVar1[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "puVar7 = (undefined4 *)*param_2;" (assignment_expression "puVar7 = (undefined4 *)*param_2" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)*param_2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" (identifier "local_34") (= "=") (cast_expression "(wchar_t *)piVar1[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (} "}"))) (expression_statement "local_30 = local_30 + 1;" (assignment_expression "local_30 = local_30 + 1" (identifier "local_30") (= "=") (binary_expression "local_30 + 1" (identifier "local_30") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar7[iVar6] = wVar5;" (assignment_expression "puVar7[iVar6] = wVar5" (subscript_expression "puVar7[iVar6]" (identifier "puVar7") ([ "[") (identifier "iVar6") (] "]")) (= "=") (identifier "wVar5")) (; ";")) (expression_statement "param_2[1] = iVar6 + 1U;" (assignment_expression "param_2[1] = iVar6 + 1U" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "iVar6 + 1U" (identifier "iVar6") (+ "+") (number_literal "1U"))) (; ";")) (expression_statement "puVar7[iVar6 + 1] = 0;" (assignment_expression "puVar7[iVar6 + 1] = 0" (subscript_expression "puVar7[iVar6 + 1]" (identifier "puVar7") ([ "[") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1")) (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (pwVar4 < local_34) {\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }\n            else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" (if "if") (parenthesized_expression "(pwVar4 < local_34)" (( "(") (binary_expression "pwVar4 < local_34" (identifier "pwVar4") (< "<") (identifier "local_34")) () ")")) (compound_statement "{\n              wVar5 = *pwVar4;\n              piVar1[2] = (int)(pwVar4 + 1);\n            }" ({ "{") (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" (identifier "wVar5") (= "=") (pointer_expression "*pwVar4" (* "*") (identifier "pwVar4"))) (; ";")) (expression_statement "piVar1[2] = (int)(pwVar4 + 1);" (assignment_expression "piVar1[2] = (int)(pwVar4 + 1)" (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)(pwVar4 + 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(pwVar4 + 1)" (( "(") (binary_expression "pwVar4 + 1" (identifier "pwVar4") (+ "+") (number_literal "1")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" (else "else") (compound_statement "{\n              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);\n            }" ({ "{") (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1)" (identifier "wVar5") (= "=") (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0x28)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0x28)" (* "*") (cast_expression "(code **)(*piVar1 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x28)" (( "(") (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")")))) (; ";")) (} "}")))) (if_statement "if (wVar5 != L'\xffffffff') {\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }" (if "if") (parenthesized_expression "(wVar5 != L'\xffffffff')" (( "(") (binary_expression "wVar5 != L'\xffffffff'" (identifier "wVar5") (!= "!=") (char_literal "L'\xffffffff'" (L' "L'") (escape_sequence "\xffff") (character "f") (character "f") (character "f") (character "f") (' "'"))) () ")")) (compound_statement "{\n              pwVar4 = (wchar_t *)piVar1[2];\n              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;\n              goto LAB_003af3e2;\n            }" ({ "{") (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" (identifier "pwVar4") (= "=") (cast_expression "(wchar_t *)piVar1[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;" (if "if") (parenthesized_expression "((wchar_t *)piVar1[3] <= pwVar4)" (( "(") (binary_expression "(wchar_t *)piVar1[3] <= pwVar4" (cast_expression "(wchar_t *)piVar1[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]"))) (<= "<=") (identifier "pwVar4")) () ")")) (goto_statement "goto LAB_003af49f;" (goto "goto") (statement_identifier "LAB_003af49f") (; ";"))) (goto_statement "goto LAB_003af3e2;" (goto "goto") (statement_identifier "LAB_003af3e2") (; ";")) (} "}"))) (labeled_statement "LAB_003af538:\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (statement_identifier "LAB_003af538") (: ":") (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar6") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";"))) (expression_statement "uVar2 = 2;" (assignment_expression "uVar2 = 2" (identifier "uVar2") (= "=") (number_literal "2")) (; ";")) (goto_statement "goto LAB_003af2df;" (goto "goto") (statement_identifier "LAB_003af2df") (; ";")) (} "}"))) (expression_statement "pwVar3 = wmemchr(pwVar4,param_3,__n);" (assignment_expression "pwVar3 = wmemchr(pwVar4,param_3,__n)" (identifier "pwVar3") (= "=") (call_expression "wmemchr(pwVar4,param_3,__n)" (identifier "wmemchr") (argument_list "(pwVar4,param_3,__n)" (( "(") (identifier "pwVar4") (, ",") (identifier "param_3") (, ",") (identifier "__n") () ")")))) (; ";")) (expression_statement "uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;" (assignment_expression "uVar2 = (int)pwVar3 - (int)pwVar4 >> 2" (identifier "uVar2") (= "=") (binary_expression "(int)pwVar3 - (int)pwVar4 >> 2" (binary_expression "(int)pwVar3 - (int)pwVar4" (cast_expression "(int)pwVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar3")) (- "-") (cast_expression "(int)pwVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar4"))) (>> ">>") (number_literal "2"))) (; ";")) (if_statement "if (pwVar3 == (wchar_t *)0x0) {\n            uVar2 = __n;\n          }" (if "if") (parenthesized_expression "(pwVar3 == (wchar_t *)0x0)" (( "(") (binary_expression "pwVar3 == (wchar_t *)0x0" (identifier "pwVar3") (== "==") (cast_expression "(wchar_t *)0x0" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            uVar2 = __n;\n          }" ({ "{") (expression_statement "uVar2 = __n;" (assignment_expression "uVar2 = __n" (identifier "uVar2") (= "=") (identifier "__n")) (; ";")) (} "}"))) (if_statement "if (0x1fffffffU - iVar6 < uVar2) {\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }" (if "if") (parenthesized_expression "(0x1fffffffU - iVar6 < uVar2)" (( "(") (binary_expression "0x1fffffffU - iVar6 < uVar2" (binary_expression "0x1fffffffU - iVar6" (number_literal "0x1fffffffU") (- "-") (identifier "iVar6")) (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n                    \n                    \n            FUN_003f3a70("basic_string::append");\n          }" ({ "{") (expression_statement "FUN_003f3a70("basic_string::append");" (call_expression "FUN_003f3a70("basic_string::append")" (identifier "FUN_003f3a70") (argument_list "("basic_string::append")" (( "(") (string_literal ""basic_string::append"" (" """) (string_content "basic_string::append") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_003b3f40(param_2,pwVar4,uVar2);" (call_expression "FUN_003b3f40(param_2,pwVar4,uVar2)" (identifier "FUN_003b3f40") (argument_list "(param_2,pwVar4,uVar2)" (( "(") (identifier "param_2") (, ",") (identifier "pwVar4") (, ",") (identifier "uVar2") () ")"))) (; ";")) (expression_statement "local_30 = local_30 + uVar2;" (assignment_expression "local_30 = local_30 + uVar2" (identifier "local_30") (= "=") (binary_expression "local_30 + uVar2" (identifier "local_30") (+ "+") (identifier "uVar2"))) (; ";")) (expression_statement "pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);" (assignment_expression "pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4)" (identifier "pwVar4") (= "=") (cast_expression "(wchar_t *)(piVar1[2] + uVar2 * 4)" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar1[2] + uVar2 * 4)" (( "(") (binary_expression "piVar1[2] + uVar2 * 4" (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")) (+ "+") (binary_expression "uVar2 * 4" (identifier "uVar2") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "piVar1[2] = (int)pwVar4;" (assignment_expression "piVar1[2] = (int)pwVar4" (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)pwVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar4"))) (; ";")) (if_statement "if (pwVar4 < (wchar_t *)piVar1[3]) {\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }\n          else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" (if "if") (parenthesized_expression "(pwVar4 < (wchar_t *)piVar1[3])" (( "(") (binary_expression "pwVar4 < (wchar_t *)piVar1[3]" (identifier "pwVar4") (< "<") (cast_expression "(wchar_t *)piVar1[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]")))) () ")")) (compound_statement "{\nLAB_003af3e2:\n            wVar5 = *pwVar4;\n          }" ({ "{") (labeled_statement "LAB_003af3e2:\n            wVar5 = *pwVar4;" (statement_identifier "LAB_003af3e2") (: ":") (expression_statement "wVar5 = *pwVar4;" (assignment_expression "wVar5 = *pwVar4" (identifier "wVar5") (= "=") (pointer_expression "*pwVar4" (* "*") (identifier "pwVar4"))) (; ";"))) (} "}")) (else_clause "else {\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" (else "else") (compound_statement "{\nLAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);\n          }" ({ "{") (labeled_statement "LAB_003af49f:\n            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" (statement_identifier "LAB_003af49f") (: ":") (expression_statement "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);" (assignment_expression "wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1)" (identifier "wVar5") (= "=") (call_expression "(**(code **)(*piVar1 + 0x24))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x24))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0x24)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0x24)" (* "*") (cast_expression "(code **)(*piVar1 + 0x24)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x24)" (( "(") (binary_expression "*piVar1 + 0x24" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x24")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")")))) (; ";"))) (} "}")))) (if_statement "if (0x1ffffffe < local_30) {\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }" (if "if") (parenthesized_expression "(0x1ffffffe < local_30)" (( "(") (binary_expression "0x1ffffffe < local_30" (number_literal "0x1ffffffe") (< "<") (identifier "local_30")) () ")")) (compound_statement "{\n            if (wVar5 == L'\xffffffff') goto LAB_003af538;\n            if (param_3 != wVar5) goto LAB_003af2cf;\n            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;\n            piVar1[2] = piVar1[2] + 4;\n            if (local_30 != 0xffffffff) {\n              return param_1;\n            }\n            goto LAB_003af2cf;\n          }" ({ "{") (if_statement "if (wVar5 == L'\xffffffff') goto LAB_003af538;" (if "if") (parenthesized_expression "(wVar5 == L'\xffffffff')" (( "(") (binary_expression "wVar5 == L'\xffffffff'" (identifier "wVar5") (== "==") (char_literal "L'\xffffffff'" (L' "L'") (escape_sequence "\xffff") (character "f") (character "f") (character "f") (character "f") (' "'"))) () ")")) (goto_statement "goto LAB_003af538;" (goto "goto") (statement_identifier "LAB_003af538") (; ";"))) (if_statement "if (param_3 != wVar5) goto LAB_003af2cf;" (if "if") (parenthesized_expression "(param_3 != wVar5)" (( "(") (binary_expression "param_3 != wVar5" (identifier "param_3") (!= "!=") (identifier "wVar5")) () ")")) (goto_statement "goto LAB_003af2cf;" (goto "goto") (statement_identifier "LAB_003af2cf") (; ";"))) (if_statement "if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;" (if "if") (parenthesized_expression "((uint)piVar1[3] <= (uint)piVar1[2])" (( "(") (binary_expression "(uint)piVar1[3] <= (uint)piVar1[2]" (cast_expression "(uint)piVar1[3]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]"))) (<= "<=") (cast_expression "(uint)piVar1[2]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")))) () ")")) (goto_statement "goto LAB_003af418;" (goto "goto") (statement_identifier "LAB_003af418") (; ";"))) (expression_statement "piVar1[2] = piVar1[2] + 4;" (assignment_expression "piVar1[2] = piVar1[2] + 4" (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "piVar1[2] + 4" (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "4"))) (; ";")) (if_statement "if (local_30 != 0xffffffff) {\n              return param_1;\n            }" (if "if") (parenthesized_expression "(local_30 != 0xffffffff)" (( "(") (binary_expression "local_30 != 0xffffffff" (identifier "local_30") (!= "!=") (number_literal "0xffffffff")) () ")")) (compound_statement "{\n              return param_1;\n            }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (goto_statement "goto LAB_003af2cf;" (goto "goto") (statement_identifier "LAB_003af2cf") (; ";")) (} "}"))) (if_statement "if (wVar5 == L'\xffffffff') {\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }" (if "if") (parenthesized_expression "(wVar5 == L'\xffffffff')" (( "(") (binary_expression "wVar5 == L'\xffffffff'" (identifier "wVar5") (== "==") (char_literal "L'\xffffffff'" (L' "L'") (escape_sequence "\xffff") (character "f") (character "f") (character "f") (character "f") (' "'"))) () ")")) (compound_statement "{\n            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);\n            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;\n            goto LAB_003af2df;\n          }" ({ "{") (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar6") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";")) (expression_statement "uVar2 = (-(uint)(local_30 == 0) & 4) + 2;" (assignment_expression "uVar2 = (-(uint)(local_30 == 0) & 4) + 2" (identifier "uVar2") (= "=") (binary_expression "(-(uint)(local_30 == 0) & 4) + 2" (parenthesized_expression "(-(uint)(local_30 == 0) & 4)" (( "(") (binary_expression "-(uint)(local_30 == 0) & 4" (unary_expression "-(uint)(local_30 == 0)" (- "-") (call_expression "(uint)(local_30 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(local_30 == 0)" (( "(") (binary_expression "local_30 == 0" (identifier "local_30") (== "==") (number_literal "0")) () ")")))) (& "&") (number_literal "4")) () ")")) (+ "+") (number_literal "2"))) (; ";")) (goto_statement "goto LAB_003af2df;" (goto "goto") (statement_identifier "LAB_003af2df") (; ";")) (} "}"))) (expression_statement "local_34 = (wchar_t *)piVar1[3];" (assignment_expression "local_34 = (wchar_t *)piVar1[3]" (identifier "local_34") (= "=") (cast_expression "(wchar_t *)piVar1[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[3]" (identifier "piVar1") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "pwVar4 = (wchar_t *)piVar1[2];" (assignment_expression "pwVar4 = (wchar_t *)piVar1[2]" (identifier "pwVar4") (= "=") (cast_expression "(wchar_t *)piVar1[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar1[2]" (identifier "piVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 != wVar5)" (( "(") (binary_expression "param_3 != wVar5" (identifier "param_3") (!= "!=") (identifier "wVar5")) () ")")) (; ";")) (if_statement "if (pwVar4 < local_34) goto LAB_003af5a9;" (if "if") (parenthesized_expression "(pwVar4 < local_34)" (( "(") (binary_expression "pwVar4 < local_34" (identifier "pwVar4") (< "<") (identifier "local_34")) () ")")) (goto_statement "goto LAB_003af5a9;" (goto "goto") (statement_identifier "LAB_003af5a9") (; ";"))) (labeled_statement "LAB_003af418:\n        (**(code **)(*piVar1 + 0x28))(piVar1);" (statement_identifier "LAB_003af418") (: ":") (expression_statement "(**(code **)(*piVar1 + 0x28))(piVar1);" (call_expression "(**(code **)(*piVar1 + 0x28))(piVar1)" (parenthesized_expression "(**(code **)(*piVar1 + 0x28))" (( "(") (pointer_expression "**(code **)(*piVar1 + 0x28)" (* "*") (pointer_expression "*(code **)(*piVar1 + 0x28)" (* "*") (cast_expression "(code **)(*piVar1 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar1 + 0x28)" (( "(") (binary_expression "*piVar1 + 0x28" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(piVar1)" (( "(") (identifier "piVar1") () ")"))) (; ";"))) (if_statement "if (local_30 != 0xffffffff) {\n          return param_1;\n        }" (if "if") (parenthesized_expression "(local_30 != 0xffffffff)" (( "(") (binary_expression "local_30 != 0xffffffff" (identifier "local_30") (!= "!=") (number_literal "0xffffffff")) () ")")) (compound_statement "{\n          return param_1;\n        }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (goto_statement "goto LAB_003af2cf;" (goto "goto") (statement_identifier "LAB_003af2cf") (; ";")) (} "}"))) (expression_statement "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar6") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";")) (} "}")))) (expression_statement "uVar2 = 6;" (assignment_expression "uVar2 = 6" (identifier "uVar2") (= "=") (number_literal "6")) (; ";")) (} "}")))) (labeled_statement "LAB_003af2df:\n  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));" (statement_identifier "LAB_003af2df") (: ":") (expression_statement "FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));" (call_expression "FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14))" (identifier "FUN_003d8970") (argument_list "(iVar6,uVar2 | *(uint *)(iVar6 + 0x14))" (( "(") (identifier "iVar6") (, ",") (binary_expression "uVar2 | *(uint *)(iVar6 + 0x14)" (identifier "uVar2") (| "|") (pointer_expression "*(uint *)(iVar6 + 0x14)" (* "*") (cast_expression "(uint *)(iVar6 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 0x14)" (( "(") (binary_expression "iVar6 + 0x14" (identifier "iVar6") (+ "+") (number_literal "0x14")) () ")"))))) () ")"))) (; ";"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::wistream& std::getline<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>
   >(std::wistream&, std::wstring&, wchar_t) */

var_3 *
std::getline<var_2,std::char_traits<var_2>,std::var_1<var_2>>
          (var_3 *var_4,var_5 *var_6,var_2 var_11)

{
  int *piVar1;
  type_1 var_15;
  var_2 *var_17;
  var_2 var_10;
  var_3 *var_8;
  var_3 *var_7;
  size_t __n;
  var_5 *var_13;
  type_1 var_14;
  var_3 *pwVar8;
  type_1 uVar9;
  var_3 *var_9;
  type_1 var_12;
  type_2 local_1d [13];
  
  uVar9 = 1;
  pwVar8 = var_4;
  wistream::sentry::type_2(local_1d,(var_3 *)var_4,true);
  if (local_1d[0] != (type_2)0x0) {
    *(type_3 *)(var_6 + 4) = 0;
    **(type_3 **)var_6 = 0;
    var_7 = var_4 + *(int *)(*(int *)var_4 + -0xc);
    piVar1 = *(int **)(var_7 + 0x7c);
    var_9 = (var_3 *)piVar1[3];
    var_8 = (var_3 *)piVar1[2];
    if (var_8 < var_9) {
      var_10 = *(var_2 *)var_8;
      if (var_10 == L'\xffffffff') goto LAB_003af2df;
    }
    else {
                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */
      var_10 = (**(type_4 **)(*piVar1 + 0x24))(piVar1);
      if (var_10 == L'\xffffffff') {
        var_7 = var_4 + *(int *)(*(int *)var_4 + -0xc);
        goto LAB_003af2df;
      }
      var_9 = (var_3 *)piVar1[3];
      var_8 = (var_3 *)piVar1[2];
    }
    var_12 = 0;
    if (var_11 == var_10) {
      if (var_9 <= var_8) {
                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */
        (**(type_4 **)(*piVar1 + 0x28))(piVar1);
        return var_4;
      }
LAB_003af5a9:
      piVar1[2] = (int)(var_8 + 4);
      return var_4;
    }
    do {
      __n = (int)var_9 - (int)var_8 >> 2;
      if ((int)(0x1fffffff - var_12) < (int)__n) {
        __n = 0x1fffffff - var_12;
      }
      var_15 = *(type_1 *)(var_6 + 4);
      if ((int)__n < 2) {
        var_13 = *(var_5 **)var_6;
        if (var_13 == var_6 + 8) {
          var_14 = 3;
        }
        else {
          var_14 = *(type_1 *)(var_6 + 8);
        }
        if (var_14 < var_15 + 1) {
          wstring::var_16((type_1)var_6,var_15,(var_2 *)0x0,0);
          var_8 = (var_3 *)piVar1[2];
          var_13 = *(var_5 **)var_6;
          var_9 = (var_3 *)piVar1[3];
        }
        var_12 = var_12 + 1;
        *(var_2 *)(var_13 + var_15 * 4) = var_10;
        *(type_1 *)(var_6 + 4) = var_15 + 1;
        *(type_3 *)(var_13 + var_15 * 4 + 4) = 0;
        if (var_8 < var_9) {
          var_10 = *(var_2 *)var_8;
          piVar1[2] = (int)(var_8 + 4);
        }
        else {
          var_10 = (**(type_4 **)(*piVar1 + 0x28))(piVar1);
        }
        if (var_10 != L'\xffffffff') {
          var_17 = (var_2 *)piVar1[2];
          if ((var_2 *)piVar1[3] <= var_17) goto LAB_003af49f;
          goto LAB_003af3e2;
        }
LAB_003af538:
        var_7 = var_4 + *(int *)(*(int *)var_4 + -0xc);
        goto LAB_003af2df;
      }
      var_17 = var_18((var_2 *)var_8,var_11,__n);
      var_14 = (int)var_17 - (int)var_8 >> 2;
      if (var_17 == (var_2 *)0x0) {
        var_14 = __n;
      }
      if (0x1fffffff - var_15 < var_14) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */
        var_19("basic_string::append");
      }
      uVar9 = var_14;
                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */
      wstring::var_20((var_2 *)var_6,(type_1)var_8);
      var_12 = var_12 + var_14;
      var_17 = (var_2 *)(piVar1[2] + var_14 * 4);
      piVar1[2] = (int)var_17;
      pwVar8 = var_8;
      if (var_17 < (var_2 *)piVar1[3]) {
LAB_003af3e2:
        var_10 = *var_17;
      }
      else {
LAB_003af49f:
        var_10 = (**(type_4 **)(*piVar1 + 0x24))(piVar1,pwVar8,uVar9);
      }
      if (0x1ffffffe < var_12) {
        if (var_10 == L'\xffffffff') goto LAB_003af538;
        if (var_11 != var_10) goto LAB_003af2cf;
        if ((type_1)piVar1[3] <= (type_1)piVar1[2]) goto LAB_003af418;
        piVar1[2] = piVar1[2] + 4;
        if (var_12 != 0xffffffff) {
          return var_4;
        }
        goto LAB_003af2cf;
      }
      if (var_10 == L'\xffffffff') {
        var_7 = var_4 + *(int *)(*(int *)var_4 + -0xc);
        goto LAB_003af2df;
      }
      var_9 = (var_3 *)piVar1[3];
      var_8 = (var_3 *)piVar1[2];
    } while (var_11 != var_10);
    if (var_8 < var_9) goto LAB_003af5a9;
LAB_003af418:
    (**(type_4 **)(*piVar1 + 0x28))(piVar1);
    if (var_12 != 0xffffffff) {
      return var_4;
    }
  }
LAB_003af2cf:
  var_7 = var_4 + *(int *)(*(int *)var_4 + -0xc);
LAB_003af2df:
  wios::var_21((type_5)var_7);
  return var_4;
}


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

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

int * MASKED(int *param_1,undefined4 *param_2,wchar_t param_3)

{
  int *piVar1;
  uint uVar2;
  wchar_t *pwVar3;
  wchar_t *pwVar4;
  wchar_t wVar5;
  int iVar6;
  size_t __n;
  undefined4 *puVar7;
  wchar_t *local_34;
  uint local_30;
  char local_1d [13];
  
  FUN_003d4d40(local_1d,param_1,1);
  if (local_1d[0] == '\0') {
LAB_003af2cf:
    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
    uVar2 = 4;
  }
  else {
    param_2[1] = 0;
    *(undefined4 *)*param_2 = 0;
    iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
    piVar1 = *(int **)(iVar6 + 0x7c);
    local_34 = (wchar_t *)piVar1[3];
    pwVar4 = (wchar_t *)piVar1[2];
    if (pwVar4 < local_34) {
      wVar5 = *pwVar4;
      if (wVar5 != L'\xffffffff') goto LAB_003af33c;
    }
    else {
                    /* try { // try from 003af58e to 003af590 has its CatchHandler @ 003af5f5 */
      wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);
      if (wVar5 != L'\xffffffff') {
        local_34 = (wchar_t *)piVar1[3];
        pwVar4 = (wchar_t *)piVar1[2];
LAB_003af33c:
        local_30 = 0;
        if (param_3 == wVar5) {
          if (local_34 <= pwVar4) {
                    /* try { // try from 003af5bf to 003af5c1 has its CatchHandler @ 003af5eb */
            (**(code **)(*piVar1 + 0x28))(piVar1);
            return param_1;
          }
LAB_003af5a9:
          piVar1[2] = (int)(pwVar4 + 1);
          return param_1;
        }
        do {
          __n = (int)local_34 - (int)pwVar4 >> 2;
          if ((int)(0x1fffffff - local_30) < (int)__n) {
            __n = 0x1fffffff - local_30;
          }
          iVar6 = param_2[1];
          if ((int)__n < 2) {
            puVar7 = (undefined4 *)*param_2;
            if (puVar7 == param_2 + 2) {
              uVar2 = 3;
            }
            else {
              uVar2 = param_2[2];
            }
            if (uVar2 < iVar6 + 1U) {
              FUN_003b2370(param_2,iVar6,0,0,1);
              pwVar4 = (wchar_t *)piVar1[2];
              puVar7 = (undefined4 *)*param_2;
              local_34 = (wchar_t *)piVar1[3];
            }
            local_30 = local_30 + 1;
            puVar7[iVar6] = wVar5;
            param_2[1] = iVar6 + 1U;
            puVar7[iVar6 + 1] = 0;
            if (pwVar4 < local_34) {
              wVar5 = *pwVar4;
              piVar1[2] = (int)(pwVar4 + 1);
            }
            else {
              wVar5 = (**(code **)(*piVar1 + 0x28))(piVar1);
            }
            if (wVar5 != L'\xffffffff') {
              pwVar4 = (wchar_t *)piVar1[2];
              if ((wchar_t *)piVar1[3] <= pwVar4) goto LAB_003af49f;
              goto LAB_003af3e2;
            }
LAB_003af538:
            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
            uVar2 = 2;
            goto LAB_003af2df;
          }
          pwVar3 = wmemchr(pwVar4,param_3,__n);
          uVar2 = (int)pwVar3 - (int)pwVar4 >> 2;
          if (pwVar3 == (wchar_t *)0x0) {
            uVar2 = __n;
          }
          if (0x1fffffffU - iVar6 < uVar2) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 003af5e6 to 003af5ea has its CatchHandler @ 003af5f0 */
            FUN_003f3a70("basic_string::append");
          }
                    /* try { // try from 003af3c5 to 003af558 has its CatchHandler @ 003af5f0 */
          FUN_003b3f40(param_2,pwVar4,uVar2);
          local_30 = local_30 + uVar2;
          pwVar4 = (wchar_t *)(piVar1[2] + uVar2 * 4);
          piVar1[2] = (int)pwVar4;
          if (pwVar4 < (wchar_t *)piVar1[3]) {
LAB_003af3e2:
            wVar5 = *pwVar4;
          }
          else {
LAB_003af49f:
            wVar5 = (**(code **)(*piVar1 + 0x24))(piVar1);
          }
          if (0x1ffffffe < local_30) {
            if (wVar5 == L'\xffffffff') goto LAB_003af538;
            if (param_3 != wVar5) goto LAB_003af2cf;
            if ((uint)piVar1[3] <= (uint)piVar1[2]) goto LAB_003af418;
            piVar1[2] = piVar1[2] + 4;
            if (local_30 != 0xffffffff) {
              return param_1;
            }
            goto LAB_003af2cf;
          }
          if (wVar5 == L'\xffffffff') {
            iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
            uVar2 = (-(uint)(local_30 == 0) & 4) + 2;
            goto LAB_003af2df;
          }
          local_34 = (wchar_t *)piVar1[3];
          pwVar4 = (wchar_t *)piVar1[2];
        } while (param_3 != wVar5);
        if (pwVar4 < local_34) goto LAB_003af5a9;
LAB_003af418:
        (**(code **)(*piVar1 + 0x28))(piVar1);
        if (local_30 != 0xffffffff) {
          return param_1;
        }
        goto LAB_003af2cf;
      }
      iVar6 = (int)param_1 + *(int *)(*param_1 + -0xc);
    }
    uVar2 = 6;
  }
LAB_003af2df:
  FUN_003d8970(iVar6,uVar2 | *(uint *)(iVar6 + 0x14));
  return param_1;
}

