
/* std::wistream::get(wchar_t*, long, wchar_t) */

wistream * __thiscall
std::wistream::get(wistream *this,wchar_t *param_1,long param_2,wchar_t param_3)

{
  long *plVar1;
  int *piVar2;
  wchar_t wVar3;
  int iVar4;
  wchar_t *pwVar5;
  long lVar6;
  long lVar7;
  _Ios_Iostate _Var8;
  sentry local_29;
  _Ios_Iostate _Var9;
  
  *(undefined8 *)(this + 8) = 0;
  sentry::sentry(&local_29,this,true);
  if (local_29 == (sentry)0x0) {
    lVar6 = *(long *)(this + 8);
  }
  else {
    plVar1 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);
    pwVar5 = (wchar_t *)plVar1[2];
    if ((wchar_t *)plVar1[3] <= pwVar5) goto LAB_0029a711;
LAB_0029a6b8:
    lVar6 = *(long *)(this + 8);
    wVar3 = *pwVar5;
    lVar7 = lVar6 + 1;
    pwVar5 = param_1;
    if (lVar7 < param_2) {
      do {
        if (wVar3 == L'\xffffffff') {
          _Var8 = _S_eofbit;
LAB_0029a802:
          if (0 < param_2) {
            *pwVar5 = L'\0';
          }
          _Var9 = _Var8;
          if (lVar6 == 0) {
LAB_0029a7eb:
            _Var8 = _Var9 | _S_failbit;
          }
          else if (_Var8 == _S_goodbit) {
            return this;
          }
          goto LAB_0029a7a5;
        }
        if (param_3 == wVar3) {
          _Var8 = _S_goodbit;
          goto LAB_0029a802;
        }
        param_1 = pwVar5 + 1;
        *pwVar5 = wVar3;
        *(long *)(this + 8) = lVar7;
        piVar2 = (int *)plVar1[2];
        if (piVar2 < (int *)plVar1[3]) {
          iVar4 = *piVar2;
          plVar1[2] = (long)(piVar2 + 1);
        }
        else {
                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */
          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);
        }
        if (iVar4 == -1) {
          lVar7 = *(long *)(this + 8);
          if (param_2 < 1) {
            if (lVar7 != 0) goto LAB_0029a750;
            _Var8 = _S_failbit|_S_eofbit;
          }
          else {
            *param_1 = L'\0';
            _Var8 = _S_eofbit;
            _Var9 = _S_eofbit;
            if (lVar7 == 0) goto LAB_0029a7eb;
          }
          goto LAB_0029a7a5;
        }
        pwVar5 = (wchar_t *)plVar1[2];
        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;
LAB_0029a711:
                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */
        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);
        lVar6 = *(long *)(this + 8);
        lVar7 = lVar6 + 1;
        pwVar5 = param_1;
        if (param_2 <= lVar7) break;
      } while( true );
    }
    if (wVar3 == L'\xffffffff') {
      if (0 < param_2) {
        *param_1 = L'\0';
      }
      _Var8 = _S_failbit|_S_eofbit;
      if (lVar6 != 0) {
LAB_0029a750:
        _Var8 = _S_eofbit;
      }
      goto LAB_0029a7a5;
    }
  }
  if (0 < param_2) {
    *param_1 = L'\0';
  }
  if (lVar6 != 0) {
    return this;
  }
  _Var8 = _S_failbit;
LAB_0029a7a5:
  wios::clear((wios *)(this + *(long *)(*(long *)this + -0x18)),
              _Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));
  return this;
}



long * FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)

{
  long *plVar1;
  int iVar2;
  int *piVar3;
  long lVar4;
  uint uVar5;
  long lVar7;
  char local_29;
  uint uVar6;
  
  param_1[1] = 0;
  FUN_00299dd0(&local_29,param_1,1);
  if (local_29 == '\0') {
    lVar4 = param_1[1];
  }
  else {
    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    piVar3 = (int *)plVar1[2];
    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;
LAB_0029a6b8:
    lVar4 = param_1[1];
    iVar2 = *piVar3;
    lVar7 = lVar4 + 1;
    piVar3 = param_2;
    if (lVar7 < param_3) {
      do {
        if (iVar2 == -1) {
          uVar5 = 2;
LAB_0029a802:
          if (0 < param_3) {
            *piVar3 = 0;
          }
          uVar6 = uVar5;
          if (lVar4 == 0) {
LAB_0029a7eb:
            uVar5 = uVar6 | 4;
          }
          else if (uVar5 == 0) {
            return param_1;
          }
          goto LAB_0029a7a5;
        }
        if (param_4 == iVar2) {
          uVar5 = 0;
          goto LAB_0029a802;
        }
        param_2 = piVar3 + 1;
        *piVar3 = iVar2;
        param_1[1] = lVar7;
        piVar3 = (int *)plVar1[2];
        if (piVar3 < (int *)plVar1[3]) {
          iVar2 = *piVar3;
          plVar1[2] = (long)(piVar3 + 1);
        }
        else {
                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */
          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);
        }
        if (iVar2 == -1) {
          lVar7 = param_1[1];
          if (param_3 < 1) {
            if (lVar7 != 0) goto LAB_0029a750;
            uVar5 = 6;
          }
          else {
            *param_2 = 0;
            uVar5 = 2;
            uVar6 = 2;
            if (lVar7 == 0) goto LAB_0029a7eb;
          }
          goto LAB_0029a7a5;
        }
        piVar3 = (int *)plVar1[2];
        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;
LAB_0029a711:
                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */
        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);
        lVar4 = param_1[1];
        lVar7 = lVar4 + 1;
        piVar3 = param_2;
        if (param_3 <= lVar7) break;
      } while( true );
    }
    if (iVar2 == -1) {
      if (0 < param_3) {
        *param_2 = 0;
      }
      uVar5 = 6;
      if (lVar4 != 0) {
LAB_0029a750:
        uVar5 = 2;
      }
      goto LAB_0029a7a5;
    }
  }
  if (0 < param_3) {
    *param_2 = 0;
  }
  if (lVar4 != 0) {
    return param_1;
  }
  uVar5 = 4;
LAB_0029a7a5:
  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;
  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));
  return param_1;
}


PUSH R14
MOV R14D,ECX
PUSH R13
MOV R13,RDX
MOV EDX,0x1
PUSH R12
MOV R12,RSI
PUSH RBP
MOV RBP,RDI
PUSH RBX
MOV RSI,RBP
SUB RSP,0x10
MOV qword ptr [RDI + 0x8],0x0
LEA RDI,[RSP + 0xf]
CALL 0x00299dd0
CMP byte ptr [RSP + 0xf],0x0
JNZ 0x0029a698
MOV RCX,qword ptr [RBP + 0x8]
TEST R13,R13
JLE 0x0029a67a
MOV dword ptr [R12],0x0
TEST RCX,RCX
JZ 0x0029a7a0
ADD RSP,0x10
MOV RAX,RBP
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + -0x18]
MOV RBX,qword ptr [RBP + RAX*0x1 + 0xe8]
MOV RAX,qword ptr [RBX + 0x10]
CMP qword ptr [RBX + 0x18],RAX
JBE 0x0029a711
NOP word ptr [RAX + RAX*0x1]
MOV RCX,qword ptr [RBP + 0x8]
MOV EAX,dword ptr [RAX]
LEA RDX,[RCX + 0x1]
CMP RDX,R13
JGE 0x0029a730
CMP EAX,-0x1
JZ 0x0029a846
CMP R14D,EAX
JZ 0x0029a800
ADD R12,0x4
MOV dword ptr [R12 + -0x4],EAX
MOV qword ptr [RBP + 0x8],RDX
MOV RDX,qword ptr [RBX + 0x10]
CMP RDX,qword ptr [RBX + 0x18]
JNC 0x0029a7f0
MOV EAX,dword ptr [RDX]
ADD RDX,0x4
MOV qword ptr [RBX + 0x10],RDX
CMP EAX,-0x1
JZ 0x0029a7d0
MOV RAX,qword ptr [RBX + 0x10]
CMP RAX,qword ptr [RBX + 0x18]
JC 0x0029a6b8
MOV RAX,qword ptr [RBX]
MOV RDI,RBX
CALL qword ptr [RAX + 0x48]
MOV RCX,qword ptr [RBP + 0x8]
LEA RDX,[RCX + 0x1]
CMP RDX,R13
JL 0x0029a6c7
NOP word ptr [RAX + RAX*0x1]
CMP EAX,-0x1
JNZ 0x0029a66d
TEST R13,R13
JLE 0x0029a746
MOV dword ptr [R12],0x0
MOV ESI,0x6
TEST RCX,RCX
JZ 0x0029a7a5
MOV ESI,0x2
JMP 0x0029a7a5
MOV ESI,0x4
MOV RAX,qword ptr [RBP]
MOV RDI,qword ptr [RAX + -0x18]
ADD RDI,RBP
OR ESI,dword ptr [RDI + 0x20]
CALL 0x0029d320
ADD RSP,0x10
MOV RAX,RBP
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
MOV RAX,qword ptr [RBP + 0x8]
TEST R13,R13
JLE 0x0029a830
MOV dword ptr [R12],0x0
MOV ESI,0x2
TEST RAX,RAX
JNZ 0x0029a7a5
OR ESI,0x4
JMP 0x0029a7a5
MOV RAX,qword ptr [RBX]
MOV RDI,RBX
CALL qword ptr [RAX + 0x50]
JMP 0x0029a6fe
XOR ESI,ESI
TEST R13,R13
JLE 0x0029a80f
MOV dword ptr [R12],0x0
TEST RCX,RCX
JZ 0x0029a7eb
TEST ESI,ESI
JNZ 0x0029a7a5
ADD RSP,0x10
MOV RAX,RBP
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
TEST RAX,RAX
JNZ 0x0029a750
MOV ESI,0x2
OR ESI,0x4
JMP 0x0029a7a5
MOV ESI,0x2
JMP 0x0029a802
(translation_unit "long * FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)\n\n{\n  long *plVar1;\n  int iVar2;\n  int *piVar3;\n  long lVar4;\n  uint uVar5;\n  long lVar7;\n  char local_29;\n  uint uVar6;\n  \n  param_1[1] = 0;\n  FUN_00299dd0(&local_29,param_1,1);\n  if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_3) {\n    *param_2 = 0;\n  }\n  if (lVar4 != 0) {\n    return param_1;\n  }\n  uVar5 = 4;\nLAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));\n  return param_1;\n}\n\n" (function_definition "long * FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)\n\n{\n  long *plVar1;\n  int iVar2;\n  int *piVar3;\n  long lVar4;\n  uint uVar5;\n  long lVar7;\n  char local_29;\n  uint uVar6;\n  \n  param_1[1] = 0;\n  FUN_00299dd0(&local_29,param_1,1);\n  if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_3) {\n    *param_2 = 0;\n  }\n  if (lVar4 != 0) {\n    return param_1;\n  }\n  uVar5 = 4;\nLAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)" * (function_declarator "FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)" identifier (parameter_list "(long *param_1,int *param_2,long param_3,int param_4)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int param_4" primitive_type identifier) )))) (compound_statement "{\n  long *plVar1;\n  int iVar2;\n  int *piVar3;\n  long lVar4;\n  uint uVar5;\n  long lVar7;\n  char local_29;\n  uint uVar6;\n  \n  param_1[1] = 0;\n  FUN_00299dd0(&local_29,param_1,1);\n  if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_3) {\n    *param_2 = 0;\n  }\n  if (lVar4 != 0) {\n    return param_1;\n  }\n  uVar5 = 4;\nLAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));\n  return param_1;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_29;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "FUN_00299dd0(&local_29,param_1,1);" (call_expression "FUN_00299dd0(&local_29,param_1,1)" identifier (argument_list "(&local_29,param_1,1)" ( (pointer_expression "&local_29" & identifier) , identifier , number_literal ))) ;) (if_statement "if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" if (parenthesized_expression "(local_29 == '\0')" ( (binary_expression "local_29 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    lVar4 = param_1[1];\n  }" { (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" else (compound_statement "{\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" { (expression_statement "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" identifier = (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" * (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" ( (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) + number_literal) ))))) ;) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;" if (parenthesized_expression "((int *)plVar1[3] <= piVar3)" ( (binary_expression "(int *)plVar1[3] <= piVar3" (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ])) <= identifier) )) (goto_statement "goto LAB_0029a711;" goto statement_identifier ;)) (labeled_statement "LAB_0029a6b8:\n    lVar4 = param_1[1];" statement_identifier : (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;)) (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "lVar7 = lVar4 + 1;" (assignment_expression "lVar7 = lVar4 + 1" identifier = (binary_expression "lVar4 + 1" identifier + number_literal)) ;) (expression_statement "piVar3 = param_2;" (assignment_expression "piVar3 = param_2" identifier = identifier) ;) (if_statement "if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }" if (parenthesized_expression "(lVar7 < param_3)" ( (binary_expression "lVar7 < param_3" identifier < identifier) )) (compound_statement "{\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }" { (do_statement "do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );" do (compound_statement "{\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      }" { (if_statement "if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }" { (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;) (labeled_statement "LAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }" statement_identifier : (if_statement "if (0 < param_3) {\n            *piVar3 = 0;\n          }" if (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) (compound_statement "{\n            *piVar3 = 0;\n          }" { (expression_statement "*piVar3 = 0;" (assignment_expression "*piVar3 = 0" (pointer_expression "*piVar3" * identifier) = number_literal) ;) }))) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" identifier = identifier) ;) (if_statement "if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }" if (parenthesized_expression "(lVar4 == 0)" ( (binary_expression "lVar4 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }" { (labeled_statement "LAB_0029a7eb:\n            uVar5 = uVar6 | 4;" statement_identifier : (expression_statement "uVar5 = uVar6 | 4;" (assignment_expression "uVar5 = uVar6 | 4" identifier = (binary_expression "uVar6 | 4" identifier | number_literal)) ;)) }) (else_clause "else if (uVar5 == 0) {\n            return param_1;\n          }" else (if_statement "if (uVar5 == 0) {\n            return param_1;\n          }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n            return param_1;\n          }" { (return_statement "return param_1;" return identifier ;) })))) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) (if_statement "if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }" if (parenthesized_expression "(param_4 == iVar2)" ( (binary_expression "param_4 == iVar2" identifier == identifier) )) (compound_statement "{\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0029a802;" goto statement_identifier ;) })) (expression_statement "param_2 = piVar3 + 1;" (assignment_expression "param_2 = piVar3 + 1" identifier = (binary_expression "piVar3 + 1" identifier + number_literal)) ;) (expression_statement "*piVar3 = iVar2;" (assignment_expression "*piVar3 = iVar2" (pointer_expression "*piVar3" * identifier) = identifier) ;) (expression_statement "param_1[1] = lVar7;" (assignment_expression "param_1[1] = lVar7" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" if (parenthesized_expression "(piVar3 < (int *)plVar1[3])" ( (binary_expression "piVar3 < (int *)plVar1[3]" identifier < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }" { (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "plVar1[2] = (long)(piVar3 + 1);" (assignment_expression "plVar1[2] = (long)(piVar3 + 1)" (subscript_expression "plVar1[2]" identifier [ number_literal ]) = (cast_expression "(long)(piVar3 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(piVar3 + 1)" ( (binary_expression "piVar3 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" else (compound_statement "{\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" { comment (expression_statement "iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);" (assignment_expression "iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" ( (pointer_expression "**(code **)(*plVar1 + 0x50)" * (pointer_expression "*(code **)(*plVar1 + 0x50)" * (cast_expression "(code **)(*plVar1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x50)" ( (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (if_statement "if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }" { (expression_statement "lVar7 = param_1[1];" (assignment_expression "lVar7 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (if_statement "if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" if (parenthesized_expression "(param_3 < 1)" ( (binary_expression "param_3 < 1" identifier < number_literal) )) (compound_statement "{\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }" { (if_statement "if (lVar7 != 0) goto LAB_0029a750;" if (parenthesized_expression "(lVar7 != 0)" ( (binary_expression "lVar7 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0029a750;" goto statement_identifier ;)) (expression_statement "uVar5 = 6;" (assignment_expression "uVar5 = 6" identifier = number_literal) ;) }) (else_clause "else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" else (compound_statement "{\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" { (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;) (expression_statement "uVar6 = 2;" (assignment_expression "uVar6 = 2" identifier = number_literal) ;) (if_statement "if (lVar7 == 0) goto LAB_0029a7eb;" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0029a7eb;" goto statement_identifier ;)) }))) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;" if (parenthesized_expression "(piVar3 < (int *)plVar1[3])" ( (binary_expression "piVar3 < (int *)plVar1[3]" identifier < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_0029a6b8;" goto statement_identifier ;)) (labeled_statement "LAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);" statement_identifier : comment (expression_statement "iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;)) (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = lVar4 + 1;" (assignment_expression "lVar7 = lVar4 + 1" identifier = (binary_expression "lVar4 + 1" identifier + number_literal)) ;) (expression_statement "piVar3 = param_2;" (assignment_expression "piVar3 = param_2" identifier = identifier) ;) (if_statement "if (param_3 <= lVar7) break;" if (parenthesized_expression "(param_3 <= lVar7)" ( (binary_expression "param_3 <= lVar7" identifier <= identifier) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }" { (if_statement "if (0 < param_3) {\n        *param_2 = 0;\n      }" if (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) (compound_statement "{\n        *param_2 = 0;\n      }" { (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) })) (expression_statement "uVar5 = 6;" (assignment_expression "uVar5 = 6" identifier = number_literal) ;) (if_statement "if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }" if (parenthesized_expression "(lVar4 != 0)" ( (binary_expression "lVar4 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_0029a750:\n        uVar5 = 2;\n      }" { (labeled_statement "LAB_0029a750:\n        uVar5 = 2;" statement_identifier : (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;)) })) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) }))) (if_statement "if (0 < param_3) {\n    *param_2 = 0;\n  }" if (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) (compound_statement "{\n    *param_2 = 0;\n  }" { (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) })) (if_statement "if (lVar4 != 0) {\n    return param_1;\n  }" if (parenthesized_expression "(lVar4 != 0)" ( (binary_expression "lVar4 != 0" identifier != number_literal) )) (compound_statement "{\n    return param_1;\n  }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "uVar5 = 4;" (assignment_expression "uVar5 = 4" identifier = number_literal) ;) (labeled_statement "LAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" statement_identifier : (expression_statement "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1" identifier = (binary_expression "*(long *)(*param_1 + -0x18) + (long)param_1" (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) )))) + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;)) (expression_statement "FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));" (call_expression "FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20))" identifier (argument_list "(lVar7,uVar5 | *(uint *)(lVar7 + 0x20))" ( identifier , (binary_expression "uVar5 | *(uint *)(lVar7 + 0x20)" identifier | (pointer_expression "*(uint *)(lVar7 + 0x20)" * (cast_expression "(uint *)(lVar7 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x20)" ( (binary_expression "lVar7 + 0x20" identifier + number_literal) ))))) ))) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* std::wistream::get(wchar_t*, long, wchar_t) */\n\nwistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,long param_2,wchar_t param_3)\n\n{\n  long *plVar1;\n  int *piVar2;\n  wchar_t wVar3;\n  int iVar4;\n  wchar_t *pwVar5;\n  long lVar6;\n  long lVar7;\n  _Ios_Iostate _Var8;\n  sentry local_29;\n  _Ios_Iostate _Var9;\n  \n  *(undefined8 *)(this + 8) = 0;\n  sentry::sentry(&local_29,this,true);\n  if (local_29 == (sentry)0x0) {\n    lVar6 = *(long *)(this + 8);\n  }\n  else {\n    plVar1 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    pwVar5 = (wchar_t *)plVar1[2];\n    if ((wchar_t *)plVar1[3] <= pwVar5) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar6 = *(long *)(this + 8);\n    wVar3 = *pwVar5;\n    lVar7 = lVar6 + 1;\n    pwVar5 = param_1;\n    if (lVar7 < param_2) {\n      do {\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      } while( true );\n    }\n    if (wVar3 == L'\xffffffff') {\n      if (0 < param_2) {\n        *param_1 = L'\0';\n      }\n      _Var8 = _S_failbit|_S_eofbit;\n      if (lVar6 != 0) {\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_2) {\n    *param_1 = L'\0';\n  }\n  if (lVar6 != 0) {\n    return this;\n  }\n  _Var8 = _S_failbit;\nLAB_0029a7a5:\n  wios::clear((wios *)(this + *(long *)(*(long *)this + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));\n  return this;\n}\n\n" comment (ERROR "wistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,long param_2,wchar_t param_3)" (binary_expression "wistream * __thiscall\nstd::wistream::get(wistream *this" (binary_expression "wistream * __thiscall" identifier * identifier) (ERROR "std::wistream::get(wistream" identifier : : identifier : : identifier ( identifier) * identifier) , type_identifier (pointer_declarator "*param_1" * identifier) , (ERROR "long" identifier) identifier , identifier identifier )) (compound_statement "{\n  long *plVar1;\n  int *piVar2;\n  wchar_t wVar3;\n  int iVar4;\n  wchar_t *pwVar5;\n  long lVar6;\n  long lVar7;\n  _Ios_Iostate _Var8;\n  sentry local_29;\n  _Ios_Iostate _Var9;\n  \n  *(undefined8 *)(this + 8) = 0;\n  sentry::sentry(&local_29,this,true);\n  if (local_29 == (sentry)0x0) {\n    lVar6 = *(long *)(this + 8);\n  }\n  else {\n    plVar1 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    pwVar5 = (wchar_t *)plVar1[2];\n    if ((wchar_t *)plVar1[3] <= pwVar5) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar6 = *(long *)(this + 8);\n    wVar3 = *pwVar5;\n    lVar7 = lVar6 + 1;\n    pwVar5 = param_1;\n    if (lVar7 < param_2) {\n      do {\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      } while( true );\n    }\n    if (wVar3 == L'\xffffffff') {\n      if (0 < param_2) {\n        *param_1 = L'\0';\n      }\n      _Var8 = _S_failbit|_S_eofbit;\n      if (lVar6 != 0) {\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_2) {\n    *param_1 = L'\0';\n  }\n  if (lVar6 != 0) {\n    return this;\n  }\n  _Var8 = _S_failbit;\nLAB_0029a7a5:\n  wios::clear((wios *)(this + *(long *)(*(long *)this + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));\n  return this;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "wchar_t wVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "_Ios_Iostate _Var8;" type_identifier identifier ;) (declaration "sentry local_29;" type_identifier identifier ;) (declaration "_Ios_Iostate _Var9;" type_identifier identifier ;) (expression_statement "*(undefined8 *)(this + 8) = 0;" (assignment_expression "*(undefined8 *)(this + 8) = 0" (pointer_expression "*(undefined8 *)(this + 8)" * (cast_expression "(undefined8 *)(this + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) = number_literal) ;) (labeled_statement "sentry::sentry(&local_29,this,true);" statement_identifier : (ERROR ":" :) (expression_statement "sentry(&local_29,this,true);" (call_expression "sentry(&local_29,this,true)" identifier (argument_list "(&local_29,this,true)" ( (pointer_expression "&local_29" & identifier) , identifier , true ))) ;)) (if_statement "if (local_29 == (sentry)0x0) {\n    lVar6 = *(long *)(this + 8);\n  }\n  else {\n    plVar1 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    pwVar5 = (wchar_t *)plVar1[2];\n    if ((wchar_t *)plVar1[3] <= pwVar5) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar6 = *(long *)(this + 8);\n    wVar3 = *pwVar5;\n    lVar7 = lVar6 + 1;\n    pwVar5 = param_1;\n    if (lVar7 < param_2) {\n      do {\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      } while( true );\n    }\n    if (wVar3 == L'\xffffffff') {\n      if (0 < param_2) {\n        *param_1 = L'\0';\n      }\n      _Var8 = _S_failbit|_S_eofbit;\n      if (lVar6 != 0) {\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" if (parenthesized_expression "(local_29 == (sentry)0x0)" ( (binary_expression "local_29 == (sentry)0x0" identifier == (cast_expression "(sentry)0x0" ( (type_descriptor "sentry" type_identifier) ) number_literal)) )) (compound_statement "{\n    lVar6 = *(long *)(this + 8);\n  }" { (expression_statement "lVar6 = *(long *)(this + 8);" (assignment_expression "lVar6 = *(long *)(this + 8)" identifier = (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    plVar1 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    pwVar5 = (wchar_t *)plVar1[2];\n    if ((wchar_t *)plVar1[3] <= pwVar5) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar6 = *(long *)(this + 8);\n    wVar3 = *pwVar5;\n    lVar7 = lVar6 + 1;\n    pwVar5 = param_1;\n    if (lVar7 < param_2) {\n      do {\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      } while( true );\n    }\n    if (wVar3 == L'\xffffffff') {\n      if (0 < param_2) {\n        *param_1 = L'\0';\n      }\n      _Var8 = _S_failbit|_S_eofbit;\n      if (lVar6 != 0) {\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" else (compound_statement "{\n    plVar1 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);\n    pwVar5 = (wchar_t *)plVar1[2];\n    if ((wchar_t *)plVar1[3] <= pwVar5) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar6 = *(long *)(this + 8);\n    wVar3 = *pwVar5;\n    lVar7 = lVar6 + 1;\n    pwVar5 = param_1;\n    if (lVar7 < param_2) {\n      do {\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      } while( true );\n    }\n    if (wVar3 == L'\xffffffff') {\n      if (0 < param_2) {\n        *param_1 = L'\0';\n      }\n      _Var8 = _S_failbit|_S_eofbit;\n      if (lVar6 != 0) {\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" { (expression_statement "plVar1 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8);" (assignment_expression "plVar1 = *(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8)" identifier = (pointer_expression "*(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8)" * (cast_expression "(long **)(this + *(long *)(*(long *)this + -0x18) + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + *(long *)(*(long *)this + -0x18) + 0xe8)" ( (binary_expression "this + *(long *)(*(long *)this + -0x18) + 0xe8" (binary_expression "this + *(long *)(*(long *)this + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)this + -0x18)" * (cast_expression "(long *)(*(long *)this + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)this + -0x18)" ( (binary_expression "*(long *)this + -0x18" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) + number_literal) ))))) ;) (expression_statement "pwVar5 = (wchar_t *)plVar1[2];" (assignment_expression "pwVar5 = (wchar_t *)plVar1[2]" identifier = (cast_expression "(wchar_t *)plVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if ((wchar_t *)plVar1[3] <= pwVar5) goto LAB_0029a711;" if (parenthesized_expression "((wchar_t *)plVar1[3] <= pwVar5)" ( (binary_expression "(wchar_t *)plVar1[3] <= pwVar5" (cast_expression "(wchar_t *)plVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ])) <= identifier) )) (goto_statement "goto LAB_0029a711;" goto statement_identifier ;)) (labeled_statement "LAB_0029a6b8:\n    lVar6 = *(long *)(this + 8);" statement_identifier : (expression_statement "lVar6 = *(long *)(this + 8);" (assignment_expression "lVar6 = *(long *)(this + 8)" identifier = (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) ))))) ;)) (expression_statement "wVar3 = *pwVar5;" (assignment_expression "wVar3 = *pwVar5" identifier = (pointer_expression "*pwVar5" * identifier)) ;) (expression_statement "lVar7 = lVar6 + 1;" (assignment_expression "lVar7 = lVar6 + 1" identifier = (binary_expression "lVar6 + 1" identifier + number_literal)) ;) (expression_statement "pwVar5 = param_1;" (assignment_expression "pwVar5 = param_1" identifier = identifier) ;) (if_statement "if (lVar7 < param_2) {\n      do {\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      } while( true );\n    }" if (parenthesized_expression "(lVar7 < param_2)" ( (binary_expression "lVar7 < param_2" identifier < identifier) )) (compound_statement "{\n      do {\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      } while( true );\n    }" { (do_statement "do {\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      } while( true );" do (compound_statement "{\n        if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }\n        param_1 = pwVar5 + 1;\n        *pwVar5 = wVar3;\n        *(long *)(this + 8) = lVar7;\n        piVar2 = (int *)plVar1[2];\n        if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        pwVar5 = (wchar_t *)plVar1[2];\n        if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar6 = *(long *)(this + 8);\n        lVar7 = lVar6 + 1;\n        pwVar5 = param_1;\n        if (param_2 <= lVar7) break;\n      }" { (if_statement "if (wVar3 == L'\xffffffff') {\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }" if (parenthesized_expression "(wVar3 == L'\xffffffff')" ( (binary_expression "wVar3 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n          _Var8 = _S_eofbit;\nLAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }\n          _Var9 = _Var8;\n          if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }\n          goto LAB_0029a7a5;\n        }" { (expression_statement "_Var8 = _S_eofbit;" (assignment_expression "_Var8 = _S_eofbit" identifier = identifier) ;) (labeled_statement "LAB_0029a802:\n          if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }" statement_identifier : (if_statement "if (0 < param_2) {\n            *pwVar5 = L'\0';\n          }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n            *pwVar5 = L'\0';\n          }" { (expression_statement "*pwVar5 = L'\0';" (assignment_expression "*pwVar5 = L'\0'" (pointer_expression "*pwVar5" * identifier) = (char_literal "L'\0'" L' escape_sequence ')) ;) }))) (expression_statement "_Var9 = _Var8;" (assignment_expression "_Var9 = _Var8" identifier = identifier) ;) (if_statement "if (lVar6 == 0) {\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }\n          else if (_Var8 == _S_goodbit) {\n            return this;\n          }" if (parenthesized_expression "(lVar6 == 0)" ( (binary_expression "lVar6 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;\n          }" { (labeled_statement "LAB_0029a7eb:\n            _Var8 = _Var9 | _S_failbit;" statement_identifier : (expression_statement "_Var8 = _Var9 | _S_failbit;" (assignment_expression "_Var8 = _Var9 | _S_failbit" identifier = (binary_expression "_Var9 | _S_failbit" identifier | identifier)) ;)) }) (else_clause "else if (_Var8 == _S_goodbit) {\n            return this;\n          }" else (if_statement "if (_Var8 == _S_goodbit) {\n            return this;\n          }" if (parenthesized_expression "(_Var8 == _S_goodbit)" ( (binary_expression "_Var8 == _S_goodbit" identifier == identifier) )) (compound_statement "{\n            return this;\n          }" { (return_statement "return this;" return identifier ;) })))) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) (if_statement "if (param_3 == wVar3) {\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }" if (parenthesized_expression "(param_3 == wVar3)" ( (binary_expression "param_3 == wVar3" identifier == identifier) )) (compound_statement "{\n          _Var8 = _S_goodbit;\n          goto LAB_0029a802;\n        }" { (expression_statement "_Var8 = _S_goodbit;" (assignment_expression "_Var8 = _S_goodbit" identifier = identifier) ;) (goto_statement "goto LAB_0029a802;" goto statement_identifier ;) })) (expression_statement "param_1 = pwVar5 + 1;" (assignment_expression "param_1 = pwVar5 + 1" identifier = (binary_expression "pwVar5 + 1" identifier + number_literal)) ;) (expression_statement "*pwVar5 = wVar3;" (assignment_expression "*pwVar5 = wVar3" (pointer_expression "*pwVar5" * identifier) = identifier) ;) (expression_statement "*(long *)(this + 8) = lVar7;" (assignment_expression "*(long *)(this + 8) = lVar7" (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "piVar2 = (int *)plVar1[2];" (assignment_expression "piVar2 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (piVar2 < (int *)plVar1[3]) {\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }\n        else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" if (parenthesized_expression "(piVar2 < (int *)plVar1[3])" ( (binary_expression "piVar2 < (int *)plVar1[3]" identifier < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n          iVar4 = *piVar2;\n          plVar1[2] = (long)(piVar2 + 1);\n        }" { (expression_statement "iVar4 = *piVar2;" (assignment_expression "iVar4 = *piVar2" identifier = (pointer_expression "*piVar2" * identifier)) ;) (expression_statement "plVar1[2] = (long)(piVar2 + 1);" (assignment_expression "plVar1[2] = (long)(piVar2 + 1)" (subscript_expression "plVar1[2]" identifier [ number_literal ]) = (cast_expression "(long)(piVar2 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(piVar2 + 1)" ( (binary_expression "piVar2 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" else (compound_statement "{\n                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */\n          iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" { comment (expression_statement "iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1);" (assignment_expression "iVar4 = (**(code **)(*plVar1 + 0x50))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" ( (pointer_expression "**(code **)(*plVar1 + 0x50)" * (pointer_expression "*(code **)(*plVar1 + 0x50)" * (cast_expression "(code **)(*plVar1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x50)" ( (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (if_statement "if (iVar4 == -1) {\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }" if (parenthesized_expression "(iVar4 == -1)" ( (binary_expression "iVar4 == -1" identifier == number_literal) )) (compound_statement "{\n          lVar7 = *(long *)(this + 8);\n          if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }" { (expression_statement "lVar7 = *(long *)(this + 8);" (assignment_expression "lVar7 = *(long *)(this + 8)" identifier = (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) ))))) ;) (if_statement "if (param_2 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }\n          else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" if (parenthesized_expression "(param_2 < 1)" ( (binary_expression "param_2 < 1" identifier < number_literal) )) (compound_statement "{\n            if (lVar7 != 0) goto LAB_0029a750;\n            _Var8 = _S_failbit|_S_eofbit;\n          }" { (if_statement "if (lVar7 != 0) goto LAB_0029a750;" if (parenthesized_expression "(lVar7 != 0)" ( (binary_expression "lVar7 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0029a750;" goto statement_identifier ;)) (expression_statement "_Var8 = _S_failbit|_S_eofbit;" (assignment_expression "_Var8 = _S_failbit|_S_eofbit" identifier = (binary_expression "_S_failbit|_S_eofbit" identifier | identifier)) ;) }) (else_clause "else {\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" else (compound_statement "{\n            *param_1 = L'\0';\n            _Var8 = _S_eofbit;\n            _Var9 = _S_eofbit;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" { (expression_statement "*param_1 = L'\0';" (assignment_expression "*param_1 = L'\0'" (pointer_expression "*param_1" * identifier) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "_Var8 = _S_eofbit;" (assignment_expression "_Var8 = _S_eofbit" identifier = identifier) ;) (expression_statement "_Var9 = _S_eofbit;" (assignment_expression "_Var9 = _S_eofbit" identifier = identifier) ;) (if_statement "if (lVar7 == 0) goto LAB_0029a7eb;" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0029a7eb;" goto statement_identifier ;)) }))) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) (expression_statement "pwVar5 = (wchar_t *)plVar1[2];" (assignment_expression "pwVar5 = (wchar_t *)plVar1[2]" identifier = (cast_expression "(wchar_t *)plVar1[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (pwVar5 < (wchar_t *)plVar1[3]) goto LAB_0029a6b8;" if (parenthesized_expression "(pwVar5 < (wchar_t *)plVar1[3])" ( (binary_expression "pwVar5 < (wchar_t *)plVar1[3]" identifier < (cast_expression "(wchar_t *)plVar1[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_0029a6b8;" goto statement_identifier ;)) (labeled_statement "LAB_0029a711:\n                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */\n        wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);" statement_identifier : comment (expression_statement "wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "wVar3 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;)) (expression_statement "lVar6 = *(long *)(this + 8);" (assignment_expression "lVar6 = *(long *)(this + 8)" identifier = (pointer_expression "*(long *)(this + 8)" * (cast_expression "(long *)(this + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) ))))) ;) (expression_statement "lVar7 = lVar6 + 1;" (assignment_expression "lVar7 = lVar6 + 1" identifier = (binary_expression "lVar6 + 1" identifier + number_literal)) ;) (expression_statement "pwVar5 = param_1;" (assignment_expression "pwVar5 = param_1" identifier = identifier) ;) (if_statement "if (param_2 <= lVar7) break;" if (parenthesized_expression "(param_2 <= lVar7)" ( (binary_expression "param_2 <= lVar7" identifier <= identifier) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (wVar3 == L'\xffffffff') {\n      if (0 < param_2) {\n        *param_1 = L'\0';\n      }\n      _Var8 = _S_failbit|_S_eofbit;\n      if (lVar6 != 0) {\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }\n      goto LAB_0029a7a5;\n    }" if (parenthesized_expression "(wVar3 == L'\xffffffff')" ( (binary_expression "wVar3 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )) (compound_statement "{\n      if (0 < param_2) {\n        *param_1 = L'\0';\n      }\n      _Var8 = _S_failbit|_S_eofbit;\n      if (lVar6 != 0) {\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }\n      goto LAB_0029a7a5;\n    }" { (if_statement "if (0 < param_2) {\n        *param_1 = L'\0';\n      }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n        *param_1 = L'\0';\n      }" { (expression_statement "*param_1 = L'\0';" (assignment_expression "*param_1 = L'\0'" (pointer_expression "*param_1" * identifier) = (char_literal "L'\0'" L' escape_sequence ')) ;) })) (expression_statement "_Var8 = _S_failbit|_S_eofbit;" (assignment_expression "_Var8 = _S_failbit|_S_eofbit" identifier = (binary_expression "_S_failbit|_S_eofbit" identifier | identifier)) ;) (if_statement "if (lVar6 != 0) {\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }" if (parenthesized_expression "(lVar6 != 0)" ( (binary_expression "lVar6 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_0029a750:\n        _Var8 = _S_eofbit;\n      }" { (labeled_statement "LAB_0029a750:\n        _Var8 = _S_eofbit;" statement_identifier : (expression_statement "_Var8 = _S_eofbit;" (assignment_expression "_Var8 = _S_eofbit" identifier = identifier) ;)) })) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) }))) (if_statement "if (0 < param_2) {\n    *param_1 = L'\0';\n  }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n    *param_1 = L'\0';\n  }" { (expression_statement "*param_1 = L'\0';" (assignment_expression "*param_1 = L'\0'" (pointer_expression "*param_1" * identifier) = (char_literal "L'\0'" L' escape_sequence ')) ;) })) (if_statement "if (lVar6 != 0) {\n    return this;\n  }" if (parenthesized_expression "(lVar6 != 0)" ( (binary_expression "lVar6 != 0" identifier != number_literal) )) (compound_statement "{\n    return this;\n  }" { (return_statement "return this;" return identifier ;) })) (expression_statement "_Var8 = _S_failbit;" (assignment_expression "_Var8 = _S_failbit" identifier = identifier) ;) (labeled_statement "LAB_0029a7a5:\n  wios::clear((wios *)(this + *(long *)(*(long *)this + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));" statement_identifier : (labeled_statement "wios::clear((wios *)(this + *(long *)(*(long *)this + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));" statement_identifier : (ERROR ":" :) (expression_statement "clear((wios *)(this + *(long *)(*(long *)this + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20));" (call_expression "clear((wios *)(this + *(long *)(*(long *)this + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20))" identifier (argument_list "((wios *)(this + *(long *)(*(long *)this + -0x18)),\n              _Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20))" ( (cast_expression "(wios *)(this + *(long *)(*(long *)this + -0x18))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(long *)(*(long *)this + -0x18))" ( (binary_expression "this + *(long *)(*(long *)this + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)this + -0x18)" * (cast_expression "(long *)(*(long *)this + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)this + -0x18)" ( (binary_expression "*(long *)this + -0x18" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) , (binary_expression "_Var8 | *(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20)" identifier | (pointer_expression "*(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20)" * (cast_expression "(_Ios_Iostate *)((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20)" ( (type_descriptor "_Ios_Iostate *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20)" ( (binary_expression "(wios *)(this + *(long *)(*(long *)this + -0x18)) + 0x20" (cast_expression "(wios *)(this + *(long *)(*(long *)this + -0x18))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(long *)(*(long *)this + -0x18))" ( (binary_expression "this + *(long *)(*(long *)this + -0x18)" identifier + (pointer_expression "*(long *)(*(long *)this + -0x18)" * (cast_expression "(long *)(*(long *)this + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)this + -0x18)" ( (binary_expression "*(long *)this + -0x18" (pointer_expression "*(long *)this" * (cast_expression "(long *)this" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) + number_literal) ))))) ))) ;))) (return_statement "return this;" return identifier ;) }))
(translation_unit "long * FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)\n\n{\n  long *plVar1;\n  int iVar2;\n  int *piVar3;\n  long lVar4;\n  uint uVar5;\n  long lVar7;\n  char local_29;\n  uint uVar6;\n  \n  param_1[1] = 0;\n  FUN_00299dd0(&local_29,param_1,1);\n  if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_3) {\n    *param_2 = 0;\n  }\n  if (lVar4 != 0) {\n    return param_1;\n  }\n  uVar5 = 4;\nLAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));\n  return param_1;\n}\n\n" (function_definition "long * FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)\n\n{\n  long *plVar1;\n  int iVar2;\n  int *piVar3;\n  long lVar4;\n  uint uVar5;\n  long lVar7;\n  char local_29;\n  uint uVar6;\n  \n  param_1[1] = 0;\n  FUN_00299dd0(&local_29,param_1,1);\n  if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_3) {\n    *param_2 = 0;\n  }\n  if (lVar4 != 0) {\n    return param_1;\n  }\n  uVar5 = 4;\nLAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)" * (function_declarator "FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)" identifier (parameter_list "(long *param_1,int *param_2,long param_3,int param_4)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "int param_4" primitive_type identifier) )))) (compound_statement "{\n  long *plVar1;\n  int iVar2;\n  int *piVar3;\n  long lVar4;\n  uint uVar5;\n  long lVar7;\n  char local_29;\n  uint uVar6;\n  \n  param_1[1] = 0;\n  FUN_00299dd0(&local_29,param_1,1);\n  if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_3) {\n    *param_2 = 0;\n  }\n  if (lVar4 != 0) {\n    return param_1;\n  }\n  uVar5 = 4;\nLAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));\n  return param_1;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int *piVar3;" primitive_type (pointer_declarator "*piVar3" * identifier) ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_29;" primitive_type identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "FUN_00299dd0(&local_29,param_1,1);" (call_expression "FUN_00299dd0(&local_29,param_1,1)" identifier (argument_list "(&local_29,param_1,1)" ( (pointer_expression "&local_29" & identifier) , identifier , number_literal ))) ;) (if_statement "if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" if (parenthesized_expression "(local_29 == '\0')" ( (binary_expression "local_29 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    lVar4 = param_1[1];\n  }" { (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" else (compound_statement "{\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" { (expression_statement "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" identifier = (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" * (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" ( (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) + number_literal) ))))) ;) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;" if (parenthesized_expression "((int *)plVar1[3] <= piVar3)" ( (binary_expression "(int *)plVar1[3] <= piVar3" (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ])) <= identifier) )) (goto_statement "goto LAB_0029a711;" goto statement_identifier ;)) (labeled_statement "LAB_0029a6b8:\n    lVar4 = param_1[1];" statement_identifier : (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;)) (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "lVar7 = lVar4 + 1;" (assignment_expression "lVar7 = lVar4 + 1" identifier = (binary_expression "lVar4 + 1" identifier + number_literal)) ;) (expression_statement "piVar3 = param_2;" (assignment_expression "piVar3 = param_2" identifier = identifier) ;) (if_statement "if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }" if (parenthesized_expression "(lVar7 < param_3)" ( (binary_expression "lVar7 < param_3" identifier < identifier) )) (compound_statement "{\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }" { (do_statement "do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );" do (compound_statement "{\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      }" { (if_statement "if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }" { (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;) (labeled_statement "LAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }" statement_identifier : (if_statement "if (0 < param_3) {\n            *piVar3 = 0;\n          }" if (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) (compound_statement "{\n            *piVar3 = 0;\n          }" { (expression_statement "*piVar3 = 0;" (assignment_expression "*piVar3 = 0" (pointer_expression "*piVar3" * identifier) = number_literal) ;) }))) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" identifier = identifier) ;) (if_statement "if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }" if (parenthesized_expression "(lVar4 == 0)" ( (binary_expression "lVar4 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }" { (labeled_statement "LAB_0029a7eb:\n            uVar5 = uVar6 | 4;" statement_identifier : (expression_statement "uVar5 = uVar6 | 4;" (assignment_expression "uVar5 = uVar6 | 4" identifier = (binary_expression "uVar6 | 4" identifier | number_literal)) ;)) }) (else_clause "else if (uVar5 == 0) {\n            return param_1;\n          }" else (if_statement "if (uVar5 == 0) {\n            return param_1;\n          }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n            return param_1;\n          }" { (return_statement "return param_1;" return identifier ;) })))) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) (if_statement "if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }" if (parenthesized_expression "(param_4 == iVar2)" ( (binary_expression "param_4 == iVar2" identifier == identifier) )) (compound_statement "{\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0029a802;" goto statement_identifier ;) })) (expression_statement "param_2 = piVar3 + 1;" (assignment_expression "param_2 = piVar3 + 1" identifier = (binary_expression "piVar3 + 1" identifier + number_literal)) ;) (expression_statement "*piVar3 = iVar2;" (assignment_expression "*piVar3 = iVar2" (pointer_expression "*piVar3" * identifier) = identifier) ;) (expression_statement "param_1[1] = lVar7;" (assignment_expression "param_1[1] = lVar7" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" if (parenthesized_expression "(piVar3 < (int *)plVar1[3])" ( (binary_expression "piVar3 < (int *)plVar1[3]" identifier < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (compound_statement "{\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }" { (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" identifier = (pointer_expression "*piVar3" * identifier)) ;) (expression_statement "plVar1[2] = (long)(piVar3 + 1);" (assignment_expression "plVar1[2] = (long)(piVar3 + 1)" (subscript_expression "plVar1[2]" identifier [ number_literal ]) = (cast_expression "(long)(piVar3 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(piVar3 + 1)" ( (binary_expression "piVar3 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" else (compound_statement "{\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" { (expression_statement "iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);" (assignment_expression "iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" ( (pointer_expression "**(code **)(*plVar1 + 0x50)" * (pointer_expression "*(code **)(*plVar1 + 0x50)" * (cast_expression "(code **)(*plVar1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x50)" ( (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;) }))) (if_statement "if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }" { (expression_statement "lVar7 = param_1[1];" (assignment_expression "lVar7 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (if_statement "if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" if (parenthesized_expression "(param_3 < 1)" ( (binary_expression "param_3 < 1" identifier < number_literal) )) (compound_statement "{\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }" { (if_statement "if (lVar7 != 0) goto LAB_0029a750;" if (parenthesized_expression "(lVar7 != 0)" ( (binary_expression "lVar7 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0029a750;" goto statement_identifier ;)) (expression_statement "uVar5 = 6;" (assignment_expression "uVar5 = 6" identifier = number_literal) ;) }) (else_clause "else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" else (compound_statement "{\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" { (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;) (expression_statement "uVar6 = 2;" (assignment_expression "uVar6 = 2" identifier = number_literal) ;) (if_statement "if (lVar7 == 0) goto LAB_0029a7eb;" if (parenthesized_expression "(lVar7 == 0)" ( (binary_expression "lVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0029a7eb;" goto statement_identifier ;)) }))) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" identifier = (cast_expression "(int *)plVar1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[2]" identifier [ number_literal ]))) ;) (if_statement "if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;" if (parenthesized_expression "(piVar3 < (int *)plVar1[3])" ( (binary_expression "piVar3 < (int *)plVar1[3]" identifier < (cast_expression "(int *)plVar1[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar1[3]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_0029a6b8;" goto statement_identifier ;)) (labeled_statement "LAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);" statement_identifier : (expression_statement "iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1)" identifier = (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" ( (pointer_expression "**(code **)(*plVar1 + 0x48)" * (pointer_expression "*(code **)(*plVar1 + 0x48)" * (cast_expression "(code **)(*plVar1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x48)" ( (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier )))) ;)) (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" identifier = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "lVar7 = lVar4 + 1;" (assignment_expression "lVar7 = lVar4 + 1" identifier = (binary_expression "lVar4 + 1" identifier + number_literal)) ;) (expression_statement "piVar3 = param_2;" (assignment_expression "piVar3 = param_2" identifier = identifier) ;) (if_statement "if (param_3 <= lVar7) break;" if (parenthesized_expression "(param_3 <= lVar7)" ( (binary_expression "param_3 <= lVar7" identifier <= identifier) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }" { (if_statement "if (0 < param_3) {\n        *param_2 = 0;\n      }" if (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) (compound_statement "{\n        *param_2 = 0;\n      }" { (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) })) (expression_statement "uVar5 = 6;" (assignment_expression "uVar5 = 6" identifier = number_literal) ;) (if_statement "if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }" if (parenthesized_expression "(lVar4 != 0)" ( (binary_expression "lVar4 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_0029a750:\n        uVar5 = 2;\n      }" { (labeled_statement "LAB_0029a750:\n        uVar5 = 2;" statement_identifier : (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" identifier = number_literal) ;)) })) (goto_statement "goto LAB_0029a7a5;" goto statement_identifier ;) })) }))) (if_statement "if (0 < param_3) {\n    *param_2 = 0;\n  }" if (parenthesized_expression "(0 < param_3)" ( (binary_expression "0 < param_3" number_literal < identifier) )) (compound_statement "{\n    *param_2 = 0;\n  }" { (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" * identifier) = number_literal) ;) })) (if_statement "if (lVar4 != 0) {\n    return param_1;\n  }" if (parenthesized_expression "(lVar4 != 0)" ( (binary_expression "lVar4 != 0" identifier != number_literal) )) (compound_statement "{\n    return param_1;\n  }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "uVar5 = 4;" (assignment_expression "uVar5 = 4" identifier = number_literal) ;) (labeled_statement "LAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" statement_identifier : (expression_statement "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1" identifier = (binary_expression "*(long *)(*param_1 + -0x18) + (long)param_1" (pointer_expression "*(long *)(*param_1 + -0x18)" * (cast_expression "(long *)(*param_1 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0x18)" ( (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" * identifier) + number_literal) )))) + (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;)) (expression_statement "FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));" (call_expression "FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20))" identifier (argument_list "(lVar7,uVar5 | *(uint *)(lVar7 + 0x20))" ( identifier , (binary_expression "uVar5 | *(uint *)(lVar7 + 0x20)" identifier | (pointer_expression "*(uint *)(lVar7 + 0x20)" * (cast_expression "(uint *)(lVar7 + 0x20)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar7 + 0x20)" ( (binary_expression "lVar7 + 0x20" identifier + number_literal) ))))) ))) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) + 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 (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) <= IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;)) }) (else_clause else (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 == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (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 < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (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 == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }))) (goto_statement goto statement_identifier ;) })) (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 < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (goto_statement goto statement_identifier ;)) (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 )))) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (break_statement break ;)) }) while (parenthesized_expression ( BOOL )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) })) (goto_statement goto statement_identifier ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;)) (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 "long * FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)\n\n{\n  long *plVar1;\n  int iVar2;\n  int *piVar3;\n  long lVar4;\n  uint uVar5;\n  long lVar7;\n  char local_29;\n  uint uVar6;\n  \n  param_1[1] = 0;\n  FUN_00299dd0(&local_29,param_1,1);\n  if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_3) {\n    *param_2 = 0;\n  }\n  if (lVar4 != 0) {\n    return param_1;\n  }\n  uVar5 = 4;\nLAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)" (* "*") (function_declarator "FUN_0029a630(long *param_1,int *param_2,long param_3,int param_4)" (identifier "FUN_0029a630") (parameter_list "(long *param_1,int *param_2,long param_3,int param_4)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")")))) (compound_statement "{\n  long *plVar1;\n  int iVar2;\n  int *piVar3;\n  long lVar4;\n  uint uVar5;\n  long lVar7;\n  char local_29;\n  uint uVar6;\n  \n  param_1[1] = 0;\n  FUN_00299dd0(&local_29,param_1,1);\n  if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }\n  if (0 < param_3) {\n    *param_2 = 0;\n  }\n  if (lVar4 != 0) {\n    return param_1;\n  }\n  uVar5 = 4;\nLAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;\n  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));\n  return param_1;\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int *piVar3;" (primitive_type "int") (pointer_declarator "*piVar3" (* "*") (identifier "piVar3")) (; ";")) (declaration "long lVar4;" (sized_type_specifier "long" (long "long")) (identifier "lVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "char local_29;" (primitive_type "char") (identifier "local_29") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_00299dd0(&local_29,param_1,1);" (call_expression "FUN_00299dd0(&local_29,param_1,1)" (identifier "FUN_00299dd0") (argument_list "(&local_29,param_1,1)" (( "(") (pointer_expression "&local_29" (& "&") (identifier "local_29")) (, ",") (identifier "param_1") (, ",") (number_literal "1") () ")"))) (; ";")) (if_statement "if (local_29 == '\0') {\n    lVar4 = param_1[1];\n  }\n  else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" (if "if") (parenthesized_expression "(local_29 == '\0')" (( "(") (binary_expression "local_29 == '\0'" (identifier "local_29") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    lVar4 = param_1[1];\n  }" ({ "{") (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" (identifier "lVar4") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" (else "else") (compound_statement "{\n    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);\n    piVar3 = (int *)plVar1[2];\n    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;\nLAB_0029a6b8:\n    lVar4 = param_1[1];\n    iVar2 = *piVar3;\n    lVar7 = lVar4 + 1;\n    piVar3 = param_2;\n    if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }\n    if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }\n  }" ({ "{") (expression_statement "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);" (assignment_expression "plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (identifier "plVar1") (= "=") (pointer_expression "*(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (* "*") (cast_expression "(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8)" (( "(") (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8" (binary_expression "(long)param_1 + *(long *)(*param_1 + -0x18)" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(long *)(*param_1 + -0x18)" (* "*") (cast_expression "(long *)(*param_1 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0x18)" (( "(") (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0x18")) () ")"))))) (+ "+") (number_literal "0xe8")) () ")"))))) (; ";")) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" (identifier "piVar3") (= "=") (cast_expression "(int *)plVar1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;" (if "if") (parenthesized_expression "((int *)plVar1[3] <= piVar3)" (( "(") (binary_expression "(int *)plVar1[3] <= piVar3" (cast_expression "(int *)plVar1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[3]" (identifier "plVar1") ([ "[") (number_literal "3") (] "]"))) (<= "<=") (identifier "piVar3")) () ")")) (goto_statement "goto LAB_0029a711;" (goto "goto") (statement_identifier "LAB_0029a711") (; ";"))) (labeled_statement "LAB_0029a6b8:\n    lVar4 = param_1[1];" (statement_identifier "LAB_0029a6b8") (: ":") (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" (identifier "lVar4") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";"))) (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" (identifier "iVar2") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (expression_statement "lVar7 = lVar4 + 1;" (assignment_expression "lVar7 = lVar4 + 1" (identifier "lVar7") (= "=") (binary_expression "lVar4 + 1" (identifier "lVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar3 = param_2;" (assignment_expression "piVar3 = param_2" (identifier "piVar3") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (lVar7 < param_3) {\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }" (if "if") (parenthesized_expression "(lVar7 < param_3)" (( "(") (binary_expression "lVar7 < param_3" (identifier "lVar7") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n      do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );\n    }" ({ "{") (do_statement "do {\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      } while( true );" (do "do") (compound_statement "{\n        if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }\n        if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }\n        param_2 = piVar3 + 1;\n        *piVar3 = iVar2;\n        param_1[1] = lVar7;\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }\n        if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }\n        piVar3 = (int *)plVar1[2];\n        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;\nLAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);\n        lVar4 = param_1[1];\n        lVar7 = lVar4 + 1;\n        piVar3 = param_2;\n        if (param_3 <= lVar7) break;\n      }" ({ "{") (if_statement "if (iVar2 == -1) {\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }" (if "if") (parenthesized_expression "(iVar2 == -1)" (( "(") (binary_expression "iVar2 == -1" (identifier "iVar2") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n          uVar5 = 2;\nLAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }\n          uVar6 = uVar5;\n          if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }\n          goto LAB_0029a7a5;\n        }" ({ "{") (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" (identifier "uVar5") (= "=") (number_literal "2")) (; ";")) (labeled_statement "LAB_0029a802:\n          if (0 < param_3) {\n            *piVar3 = 0;\n          }" (statement_identifier "LAB_0029a802") (: ":") (if_statement "if (0 < param_3) {\n            *piVar3 = 0;\n          }" (if "if") (parenthesized_expression "(0 < param_3)" (( "(") (binary_expression "0 < param_3" (number_literal "0") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n            *piVar3 = 0;\n          }" ({ "{") (expression_statement "*piVar3 = 0;" (assignment_expression "*piVar3 = 0" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (= "=") (number_literal "0")) (; ";")) (} "}")))) (expression_statement "uVar6 = uVar5;" (assignment_expression "uVar6 = uVar5" (identifier "uVar6") (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (lVar4 == 0) {\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }\n          else if (uVar5 == 0) {\n            return param_1;\n          }" (if "if") (parenthesized_expression "(lVar4 == 0)" (( "(") (binary_expression "lVar4 == 0" (identifier "lVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0029a7eb:\n            uVar5 = uVar6 | 4;\n          }" ({ "{") (labeled_statement "LAB_0029a7eb:\n            uVar5 = uVar6 | 4;" (statement_identifier "LAB_0029a7eb") (: ":") (expression_statement "uVar5 = uVar6 | 4;" (assignment_expression "uVar5 = uVar6 | 4" (identifier "uVar5") (= "=") (binary_expression "uVar6 | 4" (identifier "uVar6") (| "|") (number_literal "4"))) (; ";"))) (} "}")) (else_clause "else if (uVar5 == 0) {\n            return param_1;\n          }" (else "else") (if_statement "if (uVar5 == 0) {\n            return param_1;\n          }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            return param_1;\n          }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))))) (goto_statement "goto LAB_0029a7a5;" (goto "goto") (statement_identifier "LAB_0029a7a5") (; ";")) (} "}"))) (if_statement "if (param_4 == iVar2) {\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }" (if "if") (parenthesized_expression "(param_4 == iVar2)" (( "(") (binary_expression "param_4 == iVar2" (identifier "param_4") (== "==") (identifier "iVar2")) () ")")) (compound_statement "{\n          uVar5 = 0;\n          goto LAB_0029a802;\n        }" ({ "{") (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_0029a802;" (goto "goto") (statement_identifier "LAB_0029a802") (; ";")) (} "}"))) (expression_statement "param_2 = piVar3 + 1;" (assignment_expression "param_2 = piVar3 + 1" (identifier "param_2") (= "=") (binary_expression "piVar3 + 1" (identifier "piVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*piVar3 = iVar2;" (assignment_expression "*piVar3 = iVar2" (pointer_expression "*piVar3" (* "*") (identifier "piVar3")) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "param_1[1] = lVar7;" (assignment_expression "param_1[1] = lVar7" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar7")) (; ";")) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" (identifier "piVar3") (= "=") (cast_expression "(int *)plVar1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (piVar3 < (int *)plVar1[3]) {\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }\n        else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" (if "if") (parenthesized_expression "(piVar3 < (int *)plVar1[3])" (( "(") (binary_expression "piVar3 < (int *)plVar1[3]" (identifier "piVar3") (< "<") (cast_expression "(int *)plVar1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[3]" (identifier "plVar1") ([ "[") (number_literal "3") (] "]")))) () ")")) (compound_statement "{\n          iVar2 = *piVar3;\n          plVar1[2] = (long)(piVar3 + 1);\n        }" ({ "{") (expression_statement "iVar2 = *piVar3;" (assignment_expression "iVar2 = *piVar3" (identifier "iVar2") (= "=") (pointer_expression "*piVar3" (* "*") (identifier "piVar3"))) (; ";")) (expression_statement "plVar1[2] = (long)(piVar3 + 1);" (assignment_expression "plVar1[2] = (long)(piVar3 + 1)" (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(long)(piVar3 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(piVar3 + 1)" (( "(") (binary_expression "piVar3 + 1" (identifier "piVar3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" (else "else") (compound_statement "{\n                    \n          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);\n        }" ({ "{") (expression_statement "iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);" (assignment_expression "iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1)" (identifier "iVar2") (= "=") (call_expression "(**(code **)(*plVar1 + 0x50))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x50)" (* "*") (cast_expression "(code **)(*plVar1 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x50)" (( "(") (binary_expression "*plVar1 + 0x50" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar1)" (( "(") (identifier "plVar1") () ")")))) (; ";")) (} "}")))) (if_statement "if (iVar2 == -1) {\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }" (if "if") (parenthesized_expression "(iVar2 == -1)" (( "(") (binary_expression "iVar2 == -1" (identifier "iVar2") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n          lVar7 = param_1[1];\n          if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }\n          goto LAB_0029a7a5;\n        }" ({ "{") (expression_statement "lVar7 = param_1[1];" (assignment_expression "lVar7 = param_1[1]" (identifier "lVar7") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (param_3 < 1) {\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }\n          else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" (if "if") (parenthesized_expression "(param_3 < 1)" (( "(") (binary_expression "param_3 < 1" (identifier "param_3") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n            if (lVar7 != 0) goto LAB_0029a750;\n            uVar5 = 6;\n          }" ({ "{") (if_statement "if (lVar7 != 0) goto LAB_0029a750;" (if "if") (parenthesized_expression "(lVar7 != 0)" (( "(") (binary_expression "lVar7 != 0" (identifier "lVar7") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0029a750;" (goto "goto") (statement_identifier "LAB_0029a750") (; ";"))) (expression_statement "uVar5 = 6;" (assignment_expression "uVar5 = 6" (identifier "uVar5") (= "=") (number_literal "6")) (; ";")) (} "}")) (else_clause "else {\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" (else "else") (compound_statement "{\n            *param_2 = 0;\n            uVar5 = 2;\n            uVar6 = 2;\n            if (lVar7 == 0) goto LAB_0029a7eb;\n          }" ({ "{") (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" (identifier "uVar5") (= "=") (number_literal "2")) (; ";")) (expression_statement "uVar6 = 2;" (assignment_expression "uVar6 = 2" (identifier "uVar6") (= "=") (number_literal "2")) (; ";")) (if_statement "if (lVar7 == 0) goto LAB_0029a7eb;" (if "if") (parenthesized_expression "(lVar7 == 0)" (( "(") (binary_expression "lVar7 == 0" (identifier "lVar7") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0029a7eb;" (goto "goto") (statement_identifier "LAB_0029a7eb") (; ";"))) (} "}")))) (goto_statement "goto LAB_0029a7a5;" (goto "goto") (statement_identifier "LAB_0029a7a5") (; ";")) (} "}"))) (expression_statement "piVar3 = (int *)plVar1[2];" (assignment_expression "piVar3 = (int *)plVar1[2]" (identifier "piVar3") (= "=") (cast_expression "(int *)plVar1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[2]" (identifier "plVar1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (if_statement "if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;" (if "if") (parenthesized_expression "(piVar3 < (int *)plVar1[3])" (( "(") (binary_expression "piVar3 < (int *)plVar1[3]" (identifier "piVar3") (< "<") (cast_expression "(int *)plVar1[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar1[3]" (identifier "plVar1") ([ "[") (number_literal "3") (] "]")))) () ")")) (goto_statement "goto LAB_0029a6b8;" (goto "goto") (statement_identifier "LAB_0029a6b8") (; ";"))) (labeled_statement "LAB_0029a711:\n                    \n        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);" (statement_identifier "LAB_0029a711") (: ":") (expression_statement "iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);" (assignment_expression "iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1)" (identifier "iVar2") (= "=") (call_expression "(**(code **)(*plVar1 + 0x48))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x48))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x48)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x48)" (* "*") (cast_expression "(code **)(*plVar1 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x48)" (( "(") (binary_expression "*plVar1 + 0x48" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(plVar1)" (( "(") (identifier "plVar1") () ")")))) (; ";"))) (expression_statement "lVar4 = param_1[1];" (assignment_expression "lVar4 = param_1[1]" (identifier "lVar4") (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "lVar7 = lVar4 + 1;" (assignment_expression "lVar7 = lVar4 + 1" (identifier "lVar7") (= "=") (binary_expression "lVar4 + 1" (identifier "lVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar3 = param_2;" (assignment_expression "piVar3 = param_2" (identifier "piVar3") (= "=") (identifier "param_2")) (; ";")) (if_statement "if (param_3 <= lVar7) break;" (if "if") (parenthesized_expression "(param_3 <= lVar7)" (( "(") (binary_expression "param_3 <= lVar7" (identifier "param_3") (<= "<=") (identifier "lVar7")) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (if_statement "if (iVar2 == -1) {\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }" (if "if") (parenthesized_expression "(iVar2 == -1)" (( "(") (binary_expression "iVar2 == -1" (identifier "iVar2") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n      if (0 < param_3) {\n        *param_2 = 0;\n      }\n      uVar5 = 6;\n      if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }\n      goto LAB_0029a7a5;\n    }" ({ "{") (if_statement "if (0 < param_3) {\n        *param_2 = 0;\n      }" (if "if") (parenthesized_expression "(0 < param_3)" (( "(") (binary_expression "0 < param_3" (number_literal "0") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n        *param_2 = 0;\n      }" ({ "{") (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar5 = 6;" (assignment_expression "uVar5 = 6" (identifier "uVar5") (= "=") (number_literal "6")) (; ";")) (if_statement "if (lVar4 != 0) {\nLAB_0029a750:\n        uVar5 = 2;\n      }" (if "if") (parenthesized_expression "(lVar4 != 0)" (( "(") (binary_expression "lVar4 != 0" (identifier "lVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0029a750:\n        uVar5 = 2;\n      }" ({ "{") (labeled_statement "LAB_0029a750:\n        uVar5 = 2;" (statement_identifier "LAB_0029a750") (: ":") (expression_statement "uVar5 = 2;" (assignment_expression "uVar5 = 2" (identifier "uVar5") (= "=") (number_literal "2")) (; ";"))) (} "}"))) (goto_statement "goto LAB_0029a7a5;" (goto "goto") (statement_identifier "LAB_0029a7a5") (; ";")) (} "}"))) (} "}")))) (if_statement "if (0 < param_3) {\n    *param_2 = 0;\n  }" (if "if") (parenthesized_expression "(0 < param_3)" (( "(") (binary_expression "0 < param_3" (number_literal "0") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n    *param_2 = 0;\n  }" ({ "{") (expression_statement "*param_2 = 0;" (assignment_expression "*param_2 = 0" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (if_statement "if (lVar4 != 0) {\n    return param_1;\n  }" (if "if") (parenthesized_expression "(lVar4 != 0)" (( "(") (binary_expression "lVar4 != 0" (identifier "lVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    return param_1;\n  }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (expression_statement "uVar5 = 4;" (assignment_expression "uVar5 = 4" (identifier "uVar5") (= "=") (number_literal "4")) (; ";")) (labeled_statement "LAB_0029a7a5:\n  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" (statement_identifier "LAB_0029a7a5") (: ":") (expression_statement "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;" (assignment_expression "lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1" (identifier "lVar7") (= "=") (binary_expression "*(long *)(*param_1 + -0x18) + (long)param_1" (pointer_expression "*(long *)(*param_1 + -0x18)" (* "*") (cast_expression "(long *)(*param_1 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0x18)" (( "(") (binary_expression "*param_1 + -0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0x18")) () ")")))) (+ "+") (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")))) (; ";"))) (expression_statement "FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));" (call_expression "FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20))" (identifier "FUN_0029d320") (argument_list "(lVar7,uVar5 | *(uint *)(lVar7 + 0x20))" (( "(") (identifier "lVar7") (, ",") (binary_expression "uVar5 | *(uint *)(lVar7 + 0x20)" (identifier "uVar5") (| "|") (pointer_expression "*(uint *)(lVar7 + 0x20)" (* "*") (cast_expression "(uint *)(lVar7 + 0x20)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar7 + 0x20)" (( "(") (binary_expression "lVar7 + 0x20" (identifier "lVar7") (+ "+") (number_literal "0x20")) () ")"))))) () ")"))) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* std::wistream::get(wchar_t*, long, wchar_t) */

wistream * __thiscall
std::wistream::get(wistream *var_1,type_1 *param_1,long var_6,type_1 var_12)

{
  long *plVar1;
  int *var_13;
  type_1 var_7;
  int var_14;
  type_1 *var_3;
  long var_4;
  long var_5;
  type_2 var_10;
  type_3 var_2;
  type_2 var_8;
  
  *(type_4 *)(var_1 + 8) = 0;
  sentry::type_3(&var_2,var_1,true);
  if (var_2 == (type_3)0x0) {
    var_4 = *(long *)(var_1 + 8);
  }
  else {
    plVar1 = *(long **)(var_1 + *(long *)(*(long *)var_1 + -0x18) + 0xe8);
    var_3 = (type_1 *)plVar1[2];
    if ((type_1 *)plVar1[3] <= var_3) goto LAB_0029a711;
LAB_0029a6b8:
    var_4 = *(long *)(var_1 + 8);
    var_7 = *var_3;
    var_5 = var_4 + 1;
    var_3 = param_1;
    if (var_5 < var_6) {
      do {
        if (var_7 == L'\xffffffff') {
          var_10 = var_15;
LAB_0029a802:
          if (0 < var_6) {
            *var_3 = L'\0';
          }
          var_8 = var_10;
          if (var_4 == 0) {
LAB_0029a7eb:
            var_10 = var_8 | var_9;
          }
          else if (var_10 == var_11) {
            return var_1;
          }
          goto LAB_0029a7a5;
        }
        if (var_12 == var_7) {
          var_10 = var_11;
          goto LAB_0029a802;
        }
        param_1 = var_3 + 1;
        *var_3 = var_7;
        *(long *)(var_1 + 8) = var_5;
        var_13 = (int *)plVar1[2];
        if (var_13 < (int *)plVar1[3]) {
          var_14 = *var_13;
          plVar1[2] = (long)(var_13 + 1);
        }
        else {
                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */
          var_14 = (**(type_5 **)(*plVar1 + 0x50))(plVar1);
        }
        if (var_14 == -1) {
          var_5 = *(long *)(var_1 + 8);
          if (var_6 < 1) {
            if (var_5 != 0) goto LAB_0029a750;
            var_10 = var_9|var_15;
          }
          else {
            *param_1 = L'\0';
            var_10 = var_15;
            var_8 = var_15;
            if (var_5 == 0) goto LAB_0029a7eb;
          }
          goto LAB_0029a7a5;
        }
        var_3 = (type_1 *)plVar1[2];
        if (var_3 < (type_1 *)plVar1[3]) goto LAB_0029a6b8;
LAB_0029a711:
                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */
        var_7 = (**(type_5 **)(*plVar1 + 0x48))(plVar1);
        var_4 = *(long *)(var_1 + 8);
        var_5 = var_4 + 1;
        var_3 = param_1;
        if (var_6 <= var_5) break;
      } while( true );
    }
    if (var_7 == L'\xffffffff') {
      if (0 < var_6) {
        *param_1 = L'\0';
      }
      var_10 = var_9|var_15;
      if (var_4 != 0) {
LAB_0029a750:
        var_10 = var_15;
      }
      goto LAB_0029a7a5;
    }
  }
  if (0 < var_6) {
    *param_1 = L'\0';
  }
  if (var_4 != 0) {
    return var_1;
  }
  var_10 = var_9;
LAB_0029a7a5:
  wios::var_16((type_6 *)(var_1 + *(long *)(*(long *)var_1 + -0x18)),
              var_10 | *(type_2 *)((type_6 *)(var_1 + *(long *)(*(long *)var_1 + -0x18)) + 0x20));
  return var_1;
}


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

long * MASKED(long *param_1,int *param_2,long param_3,int param_4)

{
  long *plVar1;
  int iVar2;
  int *piVar3;
  long lVar4;
  uint uVar5;
  long lVar7;
  char local_29;
  uint uVar6;
  
  param_1[1] = 0;
  FUN_00299dd0(&local_29,param_1,1);
  if (local_29 == '\0') {
    lVar4 = param_1[1];
  }
  else {
    plVar1 = *(long **)((long)param_1 + *(long *)(*param_1 + -0x18) + 0xe8);
    piVar3 = (int *)plVar1[2];
    if ((int *)plVar1[3] <= piVar3) goto LAB_0029a711;
LAB_0029a6b8:
    lVar4 = param_1[1];
    iVar2 = *piVar3;
    lVar7 = lVar4 + 1;
    piVar3 = param_2;
    if (lVar7 < param_3) {
      do {
        if (iVar2 == -1) {
          uVar5 = 2;
LAB_0029a802:
          if (0 < param_3) {
            *piVar3 = 0;
          }
          uVar6 = uVar5;
          if (lVar4 == 0) {
LAB_0029a7eb:
            uVar5 = uVar6 | 4;
          }
          else if (uVar5 == 0) {
            return param_1;
          }
          goto LAB_0029a7a5;
        }
        if (param_4 == iVar2) {
          uVar5 = 0;
          goto LAB_0029a802;
        }
        param_2 = piVar3 + 1;
        *piVar3 = iVar2;
        param_1[1] = lVar7;
        piVar3 = (int *)plVar1[2];
        if (piVar3 < (int *)plVar1[3]) {
          iVar2 = *piVar3;
          plVar1[2] = (long)(piVar3 + 1);
        }
        else {
                    /* try { // try from 0029a7f6 to 0029a7f8 has its CatchHandler @ 0029a84d */
          iVar2 = (**(code **)(*plVar1 + 0x50))(plVar1);
        }
        if (iVar2 == -1) {
          lVar7 = param_1[1];
          if (param_3 < 1) {
            if (lVar7 != 0) goto LAB_0029a750;
            uVar5 = 6;
          }
          else {
            *param_2 = 0;
            uVar5 = 2;
            uVar6 = 2;
            if (lVar7 == 0) goto LAB_0029a7eb;
          }
          goto LAB_0029a7a5;
        }
        piVar3 = (int *)plVar1[2];
        if (piVar3 < (int *)plVar1[3]) goto LAB_0029a6b8;
LAB_0029a711:
                    /* try { // try from 0029a717 to 0029a719 has its CatchHandler @ 0029a84d */
        iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1);
        lVar4 = param_1[1];
        lVar7 = lVar4 + 1;
        piVar3 = param_2;
        if (param_3 <= lVar7) break;
      } while( true );
    }
    if (iVar2 == -1) {
      if (0 < param_3) {
        *param_2 = 0;
      }
      uVar5 = 6;
      if (lVar4 != 0) {
LAB_0029a750:
        uVar5 = 2;
      }
      goto LAB_0029a7a5;
    }
  }
  if (0 < param_3) {
    *param_2 = 0;
  }
  if (lVar4 != 0) {
    return param_1;
  }
  uVar5 = 4;
LAB_0029a7a5:
  lVar7 = *(long *)(*param_1 + -0x18) + (long)param_1;
  FUN_0029d320(lVar7,uVar5 | *(uint *)(lVar7 + 0x20));
  return param_1;
}

