
/* std::ios::copyfmt(std::ios const&) */

ios * __thiscall std::ios::copyfmt(ios *this,ios *param_1)

{
  ios iVar1;
  int iVar2;
  undefined4 uVar3;
  ctype<char> *pcVar4;
  undefined8 uVar5;
  ctype<char> cVar6;
  ios *piVar7;
  long lVar8;
  long lVar9;
  ios *piVar10;
  locale local_30 [8];
  
  if (this == param_1) {
    return this;
  }
  piVar7 = this + 0x40;
  if (*(int *)(param_1 + 0xc0) < 9) {
LAB_00300c81:
    lVar8 = *(long *)(param_1 + 0x28);
  }
  else {
    piVar7 = (ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4);
    lVar8 = (long)*(int *)(param_1 + 0xc0) + -1;
    piVar10 = piVar7;
    if (lVar8 < 0) goto LAB_00300c81;
    do {
      lVar8 = lVar8 + -1;
      *(undefined8 *)piVar10 = 0;
      *(undefined8 *)(piVar10 + 8) = 0;
      piVar10 = piVar10 + 0x10;
    } while (lVar8 != -1);
    lVar8 = *(long *)(param_1 + 0x28);
  }
  if (lVar8 != 0) {
    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {
      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;
    }
    else {
      LOCK();
      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;
      UNLOCK();
    }
  }
  ios_base::_M_call_callbacks((ios_base *)this,0);
  piVar10 = *(ios **)(this + 200);
  if (piVar10 != this + 0x40) {
    if (piVar10 != (ios *)0x0) {
      operator_delete__(piVar10);
    }
    *(undefined8 *)(this + 200) = 0;
  }
  ios_base::_M_dispose_callbacks((ios_base *)this);
  iVar2 = *(int *)(param_1 + 0xc0);
  *(long *)(this + 0x28) = lVar8;
  if (0 < iVar2) {
    lVar8 = *(long *)(param_1 + 200);
    lVar9 = 0;
    do {
      uVar5 = ((undefined8 *)(lVar8 + lVar9))[1];
      *(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9);
      *(undefined8 *)(piVar7 + lVar9 + 8) = uVar5;
      lVar9 = lVar9 + 0x10;
    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);
  }
  uVar3 = *(undefined4 *)(param_1 + 0x18);
  iVar1 = param_1[0xe1];
  *(ios **)(this + 200) = piVar7;
  *(int *)(this + 0xc0) = iVar2;
  *(undefined4 *)(this + 0x18) = uVar3;
  *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);
  *(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8);
  *(undefined8 *)(this + 0xd8) = *(undefined8 *)(param_1 + 0xd8);
  if (iVar1 == (ios)0x0) {
    pcVar4 = *(ctype<char> **)(param_1 + 0xf0);
    if (pcVar4 == (ctype<char> *)0x0) goto LAB_00300efd;
    if (pcVar4[0x38] == (ctype<char>)0x0) {
      cVar6 = (ctype<char>)0x20;
      ctype<char>::_M_widen_init(pcVar4);
      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {
        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);
      }
    }
    else {
      cVar6 = pcVar4[0x59];
    }
    *(ctype<char> *)(param_1 + 0xe0) = cVar6;
    param_1[0xe1] = (ios)0x1;
    iVar1 = this[0xe1];
  }
  else {
    iVar1 = this[0xe1];
    cVar6 = *(ctype<char> *)(param_1 + 0xe0);
  }
  if (iVar1 == (ios)0x0) {
    pcVar4 = *(ctype<char> **)(this + 0xf0);
    if (pcVar4 == (ctype<char> *)0x0) {
LAB_00300efd:
                    /* WARNING: Subroutine does not return */
      __throw_bad_cast();
    }
    if (pcVar4[0x38] == (ctype<char>)0x0) {
      ctype<char>::_M_widen_init(pcVar4);
      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {
        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);
      }
    }
    this[0xe1] = (ios)0x1;
  }
  *(ctype<char> *)(this + 0xe0) = cVar6;
  locale::locale(local_30,(locale *)(param_1 + 0xd0));
  locale::operator=((locale *)(this + 0xd0),local_30);
  locale::~locale(local_30);
  _M_cache_locale(this,(locale *)(this + 0xd0));
  ios_base::_M_call_callbacks((ios_base *)this,2);
  *(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c);
  clear(this,*(_Ios_Iostate *)(this + 0x20));
  return this;
}



long FUN_00300c50(long param_1,long param_2)

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long *plVar4;
  undefined8 uVar5;
  undefined1 uVar6;
  undefined8 *puVar7;
  long lVar8;
  long lVar9;
  undefined8 *puVar10;
  undefined1 local_30 [8];
  
  if (param_1 == param_2) {
    return param_1;
  }
  puVar7 = (undefined8 *)(param_1 + 0x40);
  if (*(int *)(param_2 + 0xc0) < 9) {
LAB_00300c81:
    lVar8 = *(long *)(param_2 + 0x28);
  }
  else {
    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);
    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;
    puVar10 = puVar7;
    if (lVar8 < 0) goto LAB_00300c81;
    do {
      lVar8 = lVar8 + -1;
      *puVar10 = 0;
      puVar10[1] = 0;
      puVar10 = puVar10 + 2;
    } while (lVar8 != -1);
    lVar8 = *(long *)(param_2 + 0x28);
  }
  if (lVar8 != 0) {
    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {
      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;
    }
    else {
      LOCK();
      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;
      UNLOCK();
    }
  }
  FUN_00318c70(param_1,0);
  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {
    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {
      thunk_FUN_002dac60();
    }
    *(undefined8 *)(param_1 + 200) = 0;
  }
  FUN_00318cb0(param_1);
  iVar2 = *(int *)(param_2 + 0xc0);
  *(long *)(param_1 + 0x28) = lVar8;
  if (0 < iVar2) {
    lVar8 = *(long *)(param_2 + 200);
    lVar9 = 0;
    do {
      puVar10 = (undefined8 *)(lVar8 + lVar9);
      uVar5 = puVar10[1];
      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;
      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;
      lVar9 = lVar9 + 0x10;
    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);
  }
  uVar3 = *(undefined4 *)(param_2 + 0x18);
  cVar1 = *(char *)(param_2 + 0xe1);
  *(undefined8 **)(param_1 + 200) = puVar7;
  *(int *)(param_1 + 0xc0) = iVar2;
  *(undefined4 *)(param_1 + 0x18) = uVar3;
  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);
  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);
  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);
  if (cVar1 == '\0') {
    plVar4 = *(long **)(param_2 + 0xf0);
    if (plVar4 == (long *)0x0) goto LAB_00300efd;
    if ((char)plVar4[7] == '\0') {
      uVar6 = 0x20;
      FUN_00319ac0(plVar4);
      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {
        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);
      }
    }
    else {
      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);
    }
    *(undefined1 *)(param_2 + 0xe0) = uVar6;
    *(undefined1 *)(param_2 + 0xe1) = 1;
    cVar1 = *(char *)(param_1 + 0xe1);
  }
  else {
    cVar1 = *(char *)(param_1 + 0xe1);
    uVar6 = *(undefined1 *)(param_2 + 0xe0);
  }
  if (cVar1 == '\0') {
    plVar4 = *(long **)(param_1 + 0xf0);
    if (plVar4 == (long *)0x0) {
LAB_00300efd:
                    /* WARNING: Subroutine does not return */
      FUN_00319450();
    }
    if ((char)plVar4[7] == '\0') {
      FUN_00319ac0(plVar4);
      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {
        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);
      }
    }
    *(undefined1 *)(param_1 + 0xe1) = 1;
  }
  *(undefined1 *)(param_1 + 0xe0) = uVar6;
  FUN_002dca60(local_30,param_2 + 0xd0);
  FUN_002dd110(param_1 + 0xd0,local_30);
  FUN_002dd1a0(local_30);
  FUN_00300bb0(param_1,param_1 + 0xd0);
  FUN_00318c70(param_1,2);
  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);
  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));
  return param_1;
}


PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RDI
SUB RSP,0x10
CMP RDI,RSI
JZ 0x00300dbc
MOV EAX,dword ptr [RSI + 0xc0]
LEA R14,[RDI + 0x40]
MOV RBP,RSI
MOV R12,R14
CMP EAX,0x8
JG 0x00300dd0
MOV R13,qword ptr [RBP + 0x28]
TEST R13,R13
JZ 0x00300c9e
CMP qword ptr [0x0043dee8],0x0
JZ 0x00300e90
ADD.LOCK dword ptr [R13 + 0x14],0x1
MOV RDI,RBX
XOR ESI,ESI
CALL 0x00318c70
MOV RDI,qword ptr [RBX + 0xc8]
CMP RDI,R14
JZ 0x00300cc9
TEST RDI,RDI
JZ 0x00300cbe
CALL 0x002dac30
MOV qword ptr [RBX + 0xc8],0x0
MOV RDI,RBX
CALL 0x00318cb0
MOV ESI,dword ptr [RBP + 0xc0]
MOV qword ptr [RBX + 0x28],R13
TEST ESI,ESI
JLE 0x00300d0b
LEA ECX,[RSI + -0x1]
MOV RAX,qword ptr [RBP + 0xc8]
XOR EDX,EDX
ADD RCX,0x1
SHL RCX,0x4
NOP dword ptr [RAX + RAX*0x1]
MOVDQU XMM0,xmmword ptr [RAX + RDX*0x1]
MOVUPS xmmword ptr [R12 + RDX*0x1],XMM0
ADD RDX,0x10
CMP RCX,RDX
JNZ 0x00300cf8
MOV EAX,dword ptr [RBP + 0x18]
CMP byte ptr [RBP + 0xe1],0x0
MOV qword ptr [RBX + 0xc8],R12
MOV dword ptr [RBX + 0xc0],ESI
MOV dword ptr [RBX + 0x18],EAX
MOV RAX,qword ptr [RBP + 0x10]
MOV qword ptr [RBX + 0x10],RAX
MOV RAX,qword ptr [RBP + 0x8]
MOV qword ptr [RBX + 0x8],RAX
MOV RAX,qword ptr [RBP + 0xd8]
MOV qword ptr [RBX + 0xd8],RAX
JZ 0x00300e30
CMP byte ptr [RBX + 0xe1],0x0
MOVZX R12D,byte ptr [RBP + 0xe0]
JZ 0x00300e6b
MOV byte ptr [RBX + 0xe0],R12B
LEA R12,[RSP + 0x8]
LEA RSI,[RBP + 0xd0]
MOV RDI,R12
LEA R13,[RBX + 0xd0]
CALL 0x002dca60
MOV RSI,R12
MOV RDI,R13
CALL 0x002dd110
MOV RDI,R12
CALL 0x002dd1a0
MOV RSI,R13
MOV RDI,RBX
CALL 0x00300bb0
MOV ESI,0x2
MOV RDI,RBX
CALL 0x00318c70
MOV EAX,dword ptr [RBP + 0x1c]
MOV ESI,dword ptr [RBX + 0x20]
MOV RDI,RBX
MOV dword ptr [RBX + 0x1c],EAX
CALL 0x00300860
ADD RSP,0x10
MOV RAX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
MOVSXD RDI,EAX
SHL RDI,0x4
CALL 0x002d9430
MOV R12,RAX
MOVSXD RAX,dword ptr [RBP + 0xc0]
SUB RAX,0x1
JS 0x00300c81
MOV RDX,R12
NOP dword ptr [RAX + RAX*0x1]
SUB RAX,0x1
MOV qword ptr [RDX],0x0
ADD RDX,0x10
MOV qword ptr [RDX + -0x8],0x0
CMP RAX,-0x1
JNZ 0x00300df8
MOV R13,qword ptr [RBP + 0x28]
TEST R13,R13
JNZ 0x00300c8a
JMP 0x00300c9e
MOV R13,qword ptr [RBP + 0xf0]
TEST R13,R13
JZ 0x00300efd
CMP byte ptr [R13 + 0x38],0x0
JZ 0x00300ec8
MOVZX R12D,byte ptr [R13 + 0x59]
MOV byte ptr [RBP + 0xe0],R12B
MOV byte ptr [RBP + 0xe1],0x1
CMP byte ptr [RBX + 0xe1],0x0
JNZ 0x00300d5e
MOV R13,qword ptr [RBX + 0xf0]
TEST R13,R13
JZ 0x00300efd
CMP byte ptr [R13 + 0x38],0x0
JZ 0x00300ea0
MOV byte ptr [RBX + 0xe1],0x1
JMP 0x00300d5e
ADD dword ptr [R13 + 0x14],0x1
JMP 0x00300c9e
MOV RDI,R13
CALL 0x00319ac0
MOV RAX,qword ptr [R13]
MOV RAX,qword ptr [RAX + 0x30]
CMP RAX,qword ptr [0x0043dfd8]
JZ 0x00300e82
MOV ESI,0x20
MOV RDI,R13
CALL RAX
JMP 0x00300e82
MOV RDI,R13
MOV R12D,0x20
CALL 0x00319ac0
MOV RAX,qword ptr [R13]
MOV RAX,qword ptr [RAX + 0x30]
CMP RAX,qword ptr [0x0043dfd8]
JZ 0x00300e50
MOV ESI,0x20
MOV RDI,R13
CALL RAX
MOV R12D,EAX
JMP 0x00300e50
CALL 0x00319450
(translation_unit "long FUN_00300c50(long param_1,long param_2)\n\n{\n  char cVar1;\n  int iVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  undefined1 uVar6;\n  undefined8 *puVar7;\n  long lVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  undefined1 local_30 [8];\n  \n  if (param_1 == param_2) {\n    return param_1;\n  }\n  puVar7 = (undefined8 *)(param_1 + 0x40);\n  if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  FUN_00318c70(param_1,0);\n  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }\n  FUN_00318cb0(param_1);\n  iVar2 = *(int *)(param_2 + 0xc0);\n  *(long *)(param_1 + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_2 + 0x18);\n  cVar1 = *(char *)(param_2 + 0xe1);\n  *(undefined8 **)(param_1 + 200) = puVar7;\n  *(int *)(param_1 + 0xc0) = iVar2;\n  *(undefined4 *)(param_1 + 0x18) = uVar3;\n  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);\n  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);\n  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }\n  *(undefined1 *)(param_1 + 0xe0) = uVar6;\n  FUN_002dca60(local_30,param_2 + 0xd0);\n  FUN_002dd110(param_1 + 0xd0,local_30);\n  FUN_002dd1a0(local_30);\n  FUN_00300bb0(param_1,param_1 + 0xd0);\n  FUN_00318c70(param_1,2);\n  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);\n  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));\n  return param_1;\n}\n\n" (function_definition "long FUN_00300c50(long param_1,long param_2)\n\n{\n  char cVar1;\n  int iVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  undefined1 uVar6;\n  undefined8 *puVar7;\n  long lVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  undefined1 local_30 [8];\n  \n  if (param_1 == param_2) {\n    return param_1;\n  }\n  puVar7 = (undefined8 *)(param_1 + 0x40);\n  if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  FUN_00318c70(param_1,0);\n  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }\n  FUN_00318cb0(param_1);\n  iVar2 = *(int *)(param_2 + 0xc0);\n  *(long *)(param_1 + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_2 + 0x18);\n  cVar1 = *(char *)(param_2 + 0xe1);\n  *(undefined8 **)(param_1 + 200) = puVar7;\n  *(int *)(param_1 + 0xc0) = iVar2;\n  *(undefined4 *)(param_1 + 0x18) = uVar3;\n  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);\n  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);\n  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }\n  *(undefined1 *)(param_1 + 0xe0) = uVar6;\n  FUN_002dca60(local_30,param_2 + 0xd0);\n  FUN_002dd110(param_1 + 0xd0,local_30);\n  FUN_002dd1a0(local_30);\n  FUN_00300bb0(param_1,param_1 + 0xd0);\n  FUN_00318c70(param_1,2);\n  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);\n  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00300c50(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  undefined1 uVar6;\n  undefined8 *puVar7;\n  long lVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  undefined1 local_30 [8];\n  \n  if (param_1 == param_2) {\n    return param_1;\n  }\n  puVar7 = (undefined8 *)(param_1 + 0x40);\n  if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  FUN_00318c70(param_1,0);\n  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }\n  FUN_00318cb0(param_1);\n  iVar2 = *(int *)(param_2 + 0xc0);\n  *(long *)(param_1 + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_2 + 0x18);\n  cVar1 = *(char *)(param_2 + 0xe1);\n  *(undefined8 **)(param_1 + 200) = puVar7;\n  *(int *)(param_1 + 0xc0) = iVar2;\n  *(undefined4 *)(param_1 + 0x18) = uVar3;\n  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);\n  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);\n  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }\n  *(undefined1 *)(param_1 + 0xe0) = uVar6;\n  FUN_002dca60(local_30,param_2 + 0xd0);\n  FUN_002dd110(param_1 + 0xd0,local_30);\n  FUN_002dd1a0(local_30);\n  FUN_00300bb0(param_1,param_1 + 0xd0);\n  FUN_00318c70(param_1,2);\n  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);\n  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "undefined1 uVar6;" type_identifier identifier ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "undefined1 local_30 [8];" type_identifier (array_declarator "local_30 [8]" identifier [ number_literal ]) ;) (if_statement "if (param_1 == param_2) {\n    return param_1;\n  }" if (parenthesized_expression "(param_1 == param_2)" ( (binary_expression "param_1 == param_2" identifier == identifier) )) (compound_statement "{\n    return param_1;\n  }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "puVar7 = (undefined8 *)(param_1 + 0x40);" (assignment_expression "puVar7 = (undefined8 *)(param_1 + 0x40)" identifier = (cast_expression "(undefined8 *)(param_1 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) ;) (if_statement "if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" if (parenthesized_expression "(*(int *)(param_2 + 0xc0) < 9)" ( (binary_expression "*(int *)(param_2 + 0xc0) < 9" (pointer_expression "*(int *)(param_2 + 0xc0)" * (cast_expression "(int *)(param_2 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc0)" ( (binary_expression "param_2 + 0xc0" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" { (labeled_statement "LAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);" statement_identifier : (expression_statement "lVar8 = *(long *)(param_2 + 0x28);" (assignment_expression "lVar8 = *(long *)(param_2 + 0x28)" identifier = (pointer_expression "*(long *)(param_2 + 0x28)" * (cast_expression "(long *)(param_2 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;)) }) (else_clause "else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" else (compound_statement "{\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" { (expression_statement "puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);" (assignment_expression "puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" identifier = (cast_expression "(undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" identifier (argument_list "((long)*(int *)(param_2 + 0xc0) << 4)" ( (binary_expression "(long)*(int *)(param_2 + 0xc0) << 4" (cast_expression "(long)*(int *)(param_2 + 0xc0)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_2 + 0xc0)" * (cast_expression "(int *)(param_2 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc0)" ( (binary_expression "param_2 + 0xc0" identifier + number_literal) ))))) << number_literal) ))))) ;) (expression_statement "lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;" (assignment_expression "lVar8 = (long)*(int *)(param_2 + 0xc0) + -1" identifier = (binary_expression "(long)*(int *)(param_2 + 0xc0) + -1" (cast_expression "(long)*(int *)(param_2 + 0xc0)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_2 + 0xc0)" * (cast_expression "(int *)(param_2 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc0)" ( (binary_expression "param_2 + 0xc0" identifier + number_literal) ))))) + number_literal)) ;) (expression_statement "puVar10 = puVar7;" (assignment_expression "puVar10 = puVar7" identifier = identifier) ;) (if_statement "if (lVar8 < 0) goto LAB_00300c81;" if (parenthesized_expression "(lVar8 < 0)" ( (binary_expression "lVar8 < 0" identifier < number_literal) )) (goto_statement "goto LAB_00300c81;" goto statement_identifier ;)) (do_statement "do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);" do (compound_statement "{\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    }" { (expression_statement "lVar8 = lVar8 + -1;" (assignment_expression "lVar8 = lVar8 + -1" identifier = (binary_expression "lVar8 + -1" identifier + number_literal)) ;) (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" * identifier) = number_literal) ;) (expression_statement "puVar10[1] = 0;" (assignment_expression "puVar10[1] = 0" (subscript_expression "puVar10[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar10 = puVar10 + 2;" (assignment_expression "puVar10 = puVar10 + 2" identifier = (binary_expression "puVar10 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar8 != -1)" ( (binary_expression "lVar8 != -1" identifier != number_literal) )) ;) (expression_statement "lVar8 = *(long *)(param_2 + 0x28);" (assignment_expression "lVar8 = *(long *)(param_2 + 0x28)" identifier = (pointer_expression "*(long *)(param_2 + 0x28)" * (cast_expression "(long *)(param_2 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;) }))) (if_statement "if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }" if (parenthesized_expression "(lVar8 != 0)" ( (binary_expression "lVar8 != 0" identifier != number_literal) )) (compound_statement "{\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0043dee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0043dee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }" { (expression_statement "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;" (assignment_expression "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;" (assignment_expression "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) })) (expression_statement "FUN_00318c70(param_1,0);" (call_expression "FUN_00318c70(param_1,0)" identifier (argument_list "(param_1,0)" ( identifier , number_literal ))) ;) (if_statement "if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }" if (parenthesized_expression "(*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40))" ( (binary_expression "*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)" (pointer_expression "*(undefined8 **)(param_1 + 200)" * (cast_expression "(undefined8 **)(param_1 + 200)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) )))) != (cast_expression "(undefined8 *)(param_1 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) )) (compound_statement "{\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }" { (if_statement "if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }" if (parenthesized_expression "(*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0)" ( (binary_expression "*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0" (pointer_expression "*(undefined8 **)(param_1 + 200)" * (cast_expression "(undefined8 **)(param_1 + 200)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) )))) != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      thunk_FUN_002dac60();\n    }" { (expression_statement "thunk_FUN_002dac60();" (call_expression "thunk_FUN_002dac60()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*(undefined8 *)(param_1 + 200) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 200) = 0" (pointer_expression "*(undefined8 *)(param_1 + 200)" * (cast_expression "(undefined8 *)(param_1 + 200)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "FUN_00318cb0(param_1);" (call_expression "FUN_00318cb0(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "iVar2 = *(int *)(param_2 + 0xc0);" (assignment_expression "iVar2 = *(int *)(param_2 + 0xc0)" identifier = (pointer_expression "*(int *)(param_2 + 0xc0)" * (cast_expression "(int *)(param_2 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc0)" ( (binary_expression "param_2 + 0xc0" identifier + number_literal) ))))) ;) (expression_statement "*(long *)(param_1 + 0x28) = lVar8;" (assignment_expression "*(long *)(param_1 + 0x28) = lVar8" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }" if (parenthesized_expression "(0 < iVar2)" ( (binary_expression "0 < iVar2" number_literal < identifier) )) (compound_statement "{\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }" { (expression_statement "lVar8 = *(long *)(param_2 + 200);" (assignment_expression "lVar8 = *(long *)(param_2 + 200)" identifier = (pointer_expression "*(long *)(param_2 + 200)" * (cast_expression "(long *)(param_2 + 200)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 200)" ( (binary_expression "param_2 + 200" identifier + number_literal) ))))) ;) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);" do (compound_statement "{\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    }" { (expression_statement "puVar10 = (undefined8 *)(lVar8 + lVar9);" (assignment_expression "puVar10 = (undefined8 *)(lVar8 + lVar9)" identifier = (cast_expression "(undefined8 *)(lVar8 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + lVar9)" ( (binary_expression "lVar8 + lVar9" identifier + identifier) )))) ;) (expression_statement "uVar5 = puVar10[1];" (assignment_expression "uVar5 = puVar10[1]" identifier = (subscript_expression "puVar10[1]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)((long)puVar7 + lVar9) = *puVar10;" (assignment_expression "*(undefined8 *)((long)puVar7 + lVar9) = *puVar10" (pointer_expression "*(undefined8 *)((long)puVar7 + lVar9)" * (cast_expression "(undefined8 *)((long)puVar7 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + lVar9)" ( (binary_expression "(long)puVar7 + lVar9" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*puVar10" * identifier)) ;) (expression_statement "((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;" (assignment_expression "((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5" (subscript_expression "((undefined8 *)((long)puVar7 + lVar9))[1]" (parenthesized_expression "((undefined8 *)((long)puVar7 + lVar9))" ( (cast_expression "(undefined8 *)((long)puVar7 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + lVar9)" ( (binary_expression "(long)puVar7 + lVar9" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "lVar9 = lVar9 + 0x10;" (assignment_expression "lVar9 = lVar9 + 0x10" identifier = (binary_expression "lVar9 + 0x10" identifier + number_literal)) ;) }) while (parenthesized_expression "(((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9)" ( (binary_expression "((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9" (binary_expression "((ulong)(iVar2 - 1) + 1) * 0x10" (parenthesized_expression "((ulong)(iVar2 - 1) + 1)" ( (binary_expression "(ulong)(iVar2 - 1) + 1" (call_expression "(ulong)(iVar2 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(iVar2 - 1)" ( (binary_expression "iVar2 - 1" identifier - number_literal) ))) + number_literal) )) * number_literal) != identifier) )) ;) })) (expression_statement "uVar3 = *(undefined4 *)(param_2 + 0x18);" (assignment_expression "uVar3 = *(undefined4 *)(param_2 + 0x18)" identifier = (pointer_expression "*(undefined4 *)(param_2 + 0x18)" * (cast_expression "(undefined4 *)(param_2 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "cVar1 = *(char *)(param_2 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_2 + 0xe1)" identifier = (pointer_expression "*(char *)(param_2 + 0xe1)" * (cast_expression "(char *)(param_2 + 0xe1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe1)" ( (binary_expression "param_2 + 0xe1" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 **)(param_1 + 200) = puVar7;" (assignment_expression "*(undefined8 **)(param_1 + 200) = puVar7" (pointer_expression "*(undefined8 **)(param_1 + 200)" * (cast_expression "(undefined8 **)(param_1 + 200)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0xc0) = iVar2;" (assignment_expression "*(int *)(param_1 + 0xc0) = iVar2" (pointer_expression "*(int *)(param_1 + 0xc0)" * (cast_expression "(int *)(param_1 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_1 + 0x18) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x18) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x18)" * (cast_expression "(undefined4 *)(param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);" (assignment_expression "*(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10)" (pointer_expression "*(undefined8 *)(param_1 + 0x10)" * (cast_expression "(undefined8 *)(param_1 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);" (assignment_expression "*(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8)" (pointer_expression "*(undefined8 *)(param_1 + 8)" * (cast_expression "(undefined8 *)(param_1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_2 + 8)" * (cast_expression "(undefined8 *)(param_2 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);" (assignment_expression "*(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8)" (pointer_expression "*(undefined8 *)(param_1 + 0xd8)" * (cast_expression "(undefined8 *)(param_1 + 0xd8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xd8)" ( (binary_expression "param_1 + 0xd8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_2 + 0xd8)" * (cast_expression "(undefined8 *)(param_2 + 0xd8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xd8)" ( (binary_expression "param_2 + 0xd8" identifier + number_literal) ))))) ;) (if_statement "if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }" { (expression_statement "plVar4 = *(long **)(param_2 + 0xf0);" (assignment_expression "plVar4 = *(long **)(param_2 + 0xf0)" identifier = (pointer_expression "*(long **)(param_2 + 0xf0)" * (cast_expression "(long **)(param_2 + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0xf0)" ( (binary_expression "param_2 + 0xf0" identifier + number_literal) ))))) ;) (if_statement "if (plVar4 == (long *)0x0) goto LAB_00300efd;" if (parenthesized_expression "(plVar4 == (long *)0x0)" ( (binary_expression "plVar4 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00300efd;" goto statement_identifier ;)) (if_statement "if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" if (parenthesized_expression "((char)plVar4[7] == '\0')" ( (binary_expression "(char)plVar4[7] == '\0'" (cast_expression "(char)plVar4[7]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "plVar4[7]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" { (expression_statement "uVar6 = 0x20;" (assignment_expression "uVar6 = 0x20" identifier = number_literal) ;) (expression_statement "FUN_00319ac0(plVar4);" (call_expression "FUN_00319ac0(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8)" ( (binary_expression "*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8" (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) )))) != (cast_expression "(code *)PTR_FUN_0043dfd8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" { (expression_statement "uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);" (assignment_expression "uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20)" identifier = (call_expression "(**(code **)(*plVar4 + 0x30))(plVar4,0x20)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" ( (pointer_expression "**(code **)(*plVar4 + 0x30)" * (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,0x20)" ( identifier , number_literal )))) ;) })) }) (else_clause "else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" else (compound_statement "{\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" { (expression_statement "uVar6 = *(undefined1 *)((long)plVar4 + 0x59);" (assignment_expression "uVar6 = *(undefined1 *)((long)plVar4 + 0x59)" identifier = (pointer_expression "*(undefined1 *)((long)plVar4 + 0x59)" * (cast_expression "(undefined1 *)((long)plVar4 + 0x59)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar4 + 0x59)" ( (binary_expression "(long)plVar4 + 0x59" (cast_expression "(long)plVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) }))) (expression_statement "*(undefined1 *)(param_2 + 0xe0) = uVar6;" (assignment_expression "*(undefined1 *)(param_2 + 0xe0) = uVar6" (pointer_expression "*(undefined1 *)(param_2 + 0xe0)" * (cast_expression "(undefined1 *)(param_2 + 0xe0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe0)" ( (binary_expression "param_2 + 0xe0" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 *)(param_2 + 0xe1) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0xe1) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0xe1)" * (cast_expression "(undefined1 *)(param_2 + 0xe1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe1)" ( (binary_expression "param_2 + 0xe1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "cVar1 = *(char *)(param_1 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_1 + 0xe1)" identifier = (pointer_expression "*(char *)(param_1 + 0xe1)" * (cast_expression "(char *)(param_1 + 0xe1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe1)" ( (binary_expression "param_1 + 0xe1" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" else (compound_statement "{\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" { (expression_statement "cVar1 = *(char *)(param_1 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_1 + 0xe1)" identifier = (pointer_expression "*(char *)(param_1 + 0xe1)" * (cast_expression "(char *)(param_1 + 0xe1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe1)" ( (binary_expression "param_1 + 0xe1" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *(undefined1 *)(param_2 + 0xe0);" (assignment_expression "uVar6 = *(undefined1 *)(param_2 + 0xe0)" identifier = (pointer_expression "*(undefined1 *)(param_2 + 0xe0)" * (cast_expression "(undefined1 *)(param_2 + 0xe0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe0)" ( (binary_expression "param_2 + 0xe0" identifier + number_literal) ))))) ;) }))) (if_statement "if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }" { (expression_statement "plVar4 = *(long **)(param_1 + 0xf0);" (assignment_expression "plVar4 = *(long **)(param_1 + 0xf0)" identifier = (pointer_expression "*(long **)(param_1 + 0xf0)" * (cast_expression "(long **)(param_1 + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xf0)" ( (binary_expression "param_1 + 0xf0" identifier + number_literal) ))))) ;) (if_statement "if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      FUN_00319450();\n    }" if (parenthesized_expression "(plVar4 == (long *)0x0)" ( (binary_expression "plVar4 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      FUN_00319450();\n    }" { (labeled_statement "LAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      FUN_00319450();" statement_identifier : comment (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" identifier (argument_list "()" ( ))) ;)) })) (if_statement "if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" if (parenthesized_expression "((char)plVar4[7] == '\0')" ( (binary_expression "(char)plVar4[7] == '\0'" (cast_expression "(char)plVar4[7]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "plVar4[7]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" { (expression_statement "FUN_00319ac0(plVar4);" (call_expression "FUN_00319ac0(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8)" ( (binary_expression "*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8" (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) )))) != (cast_expression "(code *)PTR_FUN_0043dfd8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" { (expression_statement "(**(code **)(*plVar4 + 0x30))(plVar4,0x20);" (call_expression "(**(code **)(*plVar4 + 0x30))(plVar4,0x20)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" ( (pointer_expression "**(code **)(*plVar4 + 0x30)" * (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,0x20)" ( identifier , number_literal ))) ;) })) })) (expression_statement "*(undefined1 *)(param_1 + 0xe1) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0xe1) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0xe1)" * (cast_expression "(undefined1 *)(param_1 + 0xe1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe1)" ( (binary_expression "param_1 + 0xe1" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "*(undefined1 *)(param_1 + 0xe0) = uVar6;" (assignment_expression "*(undefined1 *)(param_1 + 0xe0) = uVar6" (pointer_expression "*(undefined1 *)(param_1 + 0xe0)" * (cast_expression "(undefined1 *)(param_1 + 0xe0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe0)" ( (binary_expression "param_1 + 0xe0" identifier + number_literal) )))) = identifier) ;) (expression_statement "FUN_002dca60(local_30,param_2 + 0xd0);" (call_expression "FUN_002dca60(local_30,param_2 + 0xd0)" identifier (argument_list "(local_30,param_2 + 0xd0)" ( identifier , (binary_expression "param_2 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_002dd110(param_1 + 0xd0,local_30);" (call_expression "FUN_002dd110(param_1 + 0xd0,local_30)" identifier (argument_list "(param_1 + 0xd0,local_30)" ( (binary_expression "param_1 + 0xd0" identifier + number_literal) , identifier ))) ;) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" identifier (argument_list "(local_30)" ( identifier ))) ;) (expression_statement "FUN_00300bb0(param_1,param_1 + 0xd0);" (call_expression "FUN_00300bb0(param_1,param_1 + 0xd0)" identifier (argument_list "(param_1,param_1 + 0xd0)" ( identifier , (binary_expression "param_1 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_00318c70(param_1,2);" (call_expression "FUN_00318c70(param_1,2)" identifier (argument_list "(param_1,2)" ( identifier , number_literal ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);" (assignment_expression "*(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c)" (pointer_expression "*(undefined4 *)(param_1 + 0x1c)" * (cast_expression "(undefined4 *)(param_1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(param_2 + 0x1c)" * (cast_expression "(undefined4 *)(param_2 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));" (call_expression "FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20))" identifier (argument_list "(param_1,*(undefined4 *)(param_1 + 0x20))" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x20)" * (cast_expression "(undefined4 *)(param_1 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) ))) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* std::ios::copyfmt(std::ios const&) */\n\nios * __thiscall std::ios::copyfmt(ios *this,ios *param_1)\n\n{\n  ios iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  ctype<char> *pcVar4;\n  undefined8 uVar5;\n  ctype<char> cVar6;\n  ios *piVar7;\n  long lVar8;\n  long lVar9;\n  ios *piVar10;\n  locale local_30 [8];\n  \n  if (this == param_1) {\n    return this;\n  }\n  piVar7 = this + 0x40;\n  if (*(int *)(param_1 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_1 + 0x28);\n  }\n  else {\n    piVar7 = (ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_1 + 0xc0) + -1;\n    piVar10 = piVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *(undefined8 *)piVar10 = 0;\n      *(undefined8 *)(piVar10 + 8) = 0;\n      piVar10 = piVar10 + 0x10;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_1 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  ios_base::_M_call_callbacks((ios_base *)this,0);\n  piVar10 = *(ios **)(this + 200);\n  if (piVar10 != this + 0x40) {\n    if (piVar10 != (ios *)0x0) {\n      operator_delete__(piVar10);\n    }\n    *(undefined8 *)(this + 200) = 0;\n  }\n  ios_base::_M_dispose_callbacks((ios_base *)this);\n  iVar2 = *(int *)(param_1 + 0xc0);\n  *(long *)(this + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_1 + 200);\n    lVar9 = 0;\n    do {\n      uVar5 = ((undefined8 *)(lVar8 + lVar9))[1];\n      *(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9);\n      *(undefined8 *)(piVar7 + lVar9 + 8) = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_1 + 0x18);\n  iVar1 = param_1[0xe1];\n  *(ios **)(this + 200) = piVar7;\n  *(int *)(this + 0xc0) = iVar2;\n  *(undefined4 *)(this + 0x18) = uVar3;\n  *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);\n  *(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8);\n  *(undefined8 *)(this + 0xd8) = *(undefined8 *)(param_1 + 0xd8);\n  if (iVar1 == (ios)0x0) {\n    pcVar4 = *(ctype<char> **)(param_1 + 0xf0);\n    if (pcVar4 == (ctype<char> *)0x0) goto LAB_00300efd;\n    if (pcVar4[0x38] == (ctype<char>)0x0) {\n      cVar6 = (ctype<char>)0x20;\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    else {\n      cVar6 = pcVar4[0x59];\n    }\n    *(ctype<char> *)(param_1 + 0xe0) = cVar6;\n    param_1[0xe1] = (ios)0x1;\n    iVar1 = this[0xe1];\n  }\n  else {\n    iVar1 = this[0xe1];\n    cVar6 = *(ctype<char> *)(param_1 + 0xe0);\n  }\n  if (iVar1 == (ios)0x0) {\n    pcVar4 = *(ctype<char> **)(this + 0xf0);\n    if (pcVar4 == (ctype<char> *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      __throw_bad_cast();\n    }\n    if (pcVar4[0x38] == (ctype<char>)0x0) {\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    this[0xe1] = (ios)0x1;\n  }\n  *(ctype<char> *)(this + 0xe0) = cVar6;\n  locale::locale(local_30,(locale *)(param_1 + 0xd0));\n  locale::operator=((locale *)(this + 0xd0),local_30);\n  locale::~locale(local_30);\n  _M_cache_locale(this,(locale *)(this + 0xd0));\n  ios_base::_M_call_callbacks((ios_base *)this,2);\n  *(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c);\n  clear(this,*(_Ios_Iostate *)(this + 0x20));\n  return this;\n}\n\n" comment (ERROR "ios * __thiscall std::ios::copyfmt(ios *this,ios *param_1)" (binary_expression "ios * __thiscall std::ios::copyfmt(ios *this,ios *param_1" (binary_expression "ios * __thiscall std::ios::copyfmt(ios *this" (binary_expression "ios * __thiscall" identifier * identifier) (ERROR "std::ios::copyfmt(ios" identifier : : identifier : : identifier ( identifier) * identifier) (ERROR ",ios" , identifier) * identifier) )) (compound_statement "{\n  ios iVar1;\n  int iVar2;\n  undefined4 uVar3;\n  ctype<char> *pcVar4;\n  undefined8 uVar5;\n  ctype<char> cVar6;\n  ios *piVar7;\n  long lVar8;\n  long lVar9;\n  ios *piVar10;\n  locale local_30 [8];\n  \n  if (this == param_1) {\n    return this;\n  }\n  piVar7 = this + 0x40;\n  if (*(int *)(param_1 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_1 + 0x28);\n  }\n  else {\n    piVar7 = (ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_1 + 0xc0) + -1;\n    piVar10 = piVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *(undefined8 *)piVar10 = 0;\n      *(undefined8 *)(piVar10 + 8) = 0;\n      piVar10 = piVar10 + 0x10;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_1 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  ios_base::_M_call_callbacks((ios_base *)this,0);\n  piVar10 = *(ios **)(this + 200);\n  if (piVar10 != this + 0x40) {\n    if (piVar10 != (ios *)0x0) {\n      operator_delete__(piVar10);\n    }\n    *(undefined8 *)(this + 200) = 0;\n  }\n  ios_base::_M_dispose_callbacks((ios_base *)this);\n  iVar2 = *(int *)(param_1 + 0xc0);\n  *(long *)(this + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_1 + 200);\n    lVar9 = 0;\n    do {\n      uVar5 = ((undefined8 *)(lVar8 + lVar9))[1];\n      *(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9);\n      *(undefined8 *)(piVar7 + lVar9 + 8) = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_1 + 0x18);\n  iVar1 = param_1[0xe1];\n  *(ios **)(this + 200) = piVar7;\n  *(int *)(this + 0xc0) = iVar2;\n  *(undefined4 *)(this + 0x18) = uVar3;\n  *(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);\n  *(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8);\n  *(undefined8 *)(this + 0xd8) = *(undefined8 *)(param_1 + 0xd8);\n  if (iVar1 == (ios)0x0) {\n    pcVar4 = *(ctype<char> **)(param_1 + 0xf0);\n    if (pcVar4 == (ctype<char> *)0x0) goto LAB_00300efd;\n    if (pcVar4[0x38] == (ctype<char>)0x0) {\n      cVar6 = (ctype<char>)0x20;\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    else {\n      cVar6 = pcVar4[0x59];\n    }\n    *(ctype<char> *)(param_1 + 0xe0) = cVar6;\n    param_1[0xe1] = (ios)0x1;\n    iVar1 = this[0xe1];\n  }\n  else {\n    iVar1 = this[0xe1];\n    cVar6 = *(ctype<char> *)(param_1 + 0xe0);\n  }\n  if (iVar1 == (ios)0x0) {\n    pcVar4 = *(ctype<char> **)(this + 0xf0);\n    if (pcVar4 == (ctype<char> *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      __throw_bad_cast();\n    }\n    if (pcVar4[0x38] == (ctype<char>)0x0) {\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    this[0xe1] = (ios)0x1;\n  }\n  *(ctype<char> *)(this + 0xe0) = cVar6;\n  locale::locale(local_30,(locale *)(param_1 + 0xd0));\n  locale::operator=((locale *)(this + 0xd0),local_30);\n  locale::~locale(local_30);\n  _M_cache_locale(this,(locale *)(this + 0xd0));\n  ios_base::_M_call_callbacks((ios_base *)this,2);\n  *(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c);\n  clear(this,*(_Ios_Iostate *)(this + 0x20));\n  return this;\n}" { (declaration "ios iVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (expression_statement "ctype<char> *pcVar4;" (binary_expression "ctype<char> *pcVar4" (binary_expression "ctype<char" identifier < identifier) > (pointer_expression "*pcVar4" * identifier)) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (expression_statement "ctype<char> cVar6;" (binary_expression "ctype<char> cVar6" (binary_expression "ctype<char" identifier < identifier) > identifier) ;) (declaration "ios *piVar7;" type_identifier (pointer_declarator "*piVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "ios *piVar10;" type_identifier (pointer_declarator "*piVar10" * identifier) ;) (declaration "locale local_30 [8];" type_identifier (array_declarator "local_30 [8]" identifier [ number_literal ]) ;) (if_statement "if (this == param_1) {\n    return this;\n  }" if (parenthesized_expression "(this == param_1)" ( (binary_expression "this == param_1" identifier == identifier) )) (compound_statement "{\n    return this;\n  }" { (return_statement "return this;" return identifier ;) })) (expression_statement "piVar7 = this + 0x40;" (assignment_expression "piVar7 = this + 0x40" identifier = (binary_expression "this + 0x40" identifier + number_literal)) ;) (if_statement "if (*(int *)(param_1 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_1 + 0x28);\n  }\n  else {\n    piVar7 = (ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_1 + 0xc0) + -1;\n    piVar10 = piVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *(undefined8 *)piVar10 = 0;\n      *(undefined8 *)(piVar10 + 8) = 0;\n      piVar10 = piVar10 + 0x10;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_1 + 0x28);\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0xc0) < 9)" ( (binary_expression "*(int *)(param_1 + 0xc0) < 9" (pointer_expression "*(int *)(param_1 + 0xc0)" * (cast_expression "(int *)(param_1 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\nLAB_00300c81:\n    lVar8 = *(long *)(param_1 + 0x28);\n  }" { (labeled_statement "LAB_00300c81:\n    lVar8 = *(long *)(param_1 + 0x28);" statement_identifier : (expression_statement "lVar8 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar8 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;)) }) (else_clause "else {\n    piVar7 = (ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_1 + 0xc0) + -1;\n    piVar10 = piVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *(undefined8 *)piVar10 = 0;\n      *(undefined8 *)(piVar10 + 8) = 0;\n      piVar10 = piVar10 + 0x10;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_1 + 0x28);\n  }" else (compound_statement "{\n    piVar7 = (ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_1 + 0xc0) + -1;\n    piVar10 = piVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *(undefined8 *)piVar10 = 0;\n      *(undefined8 *)(piVar10 + 8) = 0;\n      piVar10 = piVar10 + 0x10;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_1 + 0x28);\n  }" { (expression_statement "piVar7 = (ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4);" (assignment_expression "piVar7 = (ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4)" identifier = (cast_expression "(ios *)operator_new__((long)*(int *)(param_1 + 0xc0) << 4)" ( (type_descriptor "ios *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((long)*(int *)(param_1 + 0xc0) << 4)" identifier (argument_list "((long)*(int *)(param_1 + 0xc0) << 4)" ( (binary_expression "(long)*(int *)(param_1 + 0xc0) << 4" (cast_expression "(long)*(int *)(param_1 + 0xc0)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_1 + 0xc0)" * (cast_expression "(int *)(param_1 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) ))))) << number_literal) ))))) ;) (expression_statement "lVar8 = (long)*(int *)(param_1 + 0xc0) + -1;" (assignment_expression "lVar8 = (long)*(int *)(param_1 + 0xc0) + -1" identifier = (binary_expression "(long)*(int *)(param_1 + 0xc0) + -1" (cast_expression "(long)*(int *)(param_1 + 0xc0)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_1 + 0xc0)" * (cast_expression "(int *)(param_1 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) ))))) + number_literal)) ;) (expression_statement "piVar10 = piVar7;" (assignment_expression "piVar10 = piVar7" identifier = identifier) ;) (if_statement "if (lVar8 < 0) goto LAB_00300c81;" if (parenthesized_expression "(lVar8 < 0)" ( (binary_expression "lVar8 < 0" identifier < number_literal) )) (goto_statement "goto LAB_00300c81;" goto statement_identifier ;)) (do_statement "do {\n      lVar8 = lVar8 + -1;\n      *(undefined8 *)piVar10 = 0;\n      *(undefined8 *)(piVar10 + 8) = 0;\n      piVar10 = piVar10 + 0x10;\n    } while (lVar8 != -1);" do (compound_statement "{\n      lVar8 = lVar8 + -1;\n      *(undefined8 *)piVar10 = 0;\n      *(undefined8 *)(piVar10 + 8) = 0;\n      piVar10 = piVar10 + 0x10;\n    }" { (expression_statement "lVar8 = lVar8 + -1;" (assignment_expression "lVar8 = lVar8 + -1" identifier = (binary_expression "lVar8 + -1" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)piVar10 = 0;" (assignment_expression "*(undefined8 *)piVar10 = 0" (pointer_expression "*(undefined8 *)piVar10" * (cast_expression "(undefined8 *)piVar10" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = number_literal) ;) (expression_statement "*(undefined8 *)(piVar10 + 8) = 0;" (assignment_expression "*(undefined8 *)(piVar10 + 8) = 0" (pointer_expression "*(undefined8 *)(piVar10 + 8)" * (cast_expression "(undefined8 *)(piVar10 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar10 + 8)" ( (binary_expression "piVar10 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "piVar10 = piVar10 + 0x10;" (assignment_expression "piVar10 = piVar10 + 0x10" identifier = (binary_expression "piVar10 + 0x10" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar8 != -1)" ( (binary_expression "lVar8 != -1" identifier != number_literal) )) ;) (expression_statement "lVar8 = *(long *)(param_1 + 0x28);" (assignment_expression "lVar8 = *(long *)(param_1 + 0x28)" identifier = (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) }))) (if_statement "if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }" if (parenthesized_expression "(lVar8 != 0)" ( (binary_expression "lVar8 != 0" identifier != number_literal) )) (compound_statement "{\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0043dee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0043dee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }" { (expression_statement "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;" (assignment_expression "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;" (assignment_expression "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) })) (labeled_statement "ios_base::_M_call_callbacks((ios_base *)this,0);" statement_identifier : (ERROR ":" :) (expression_statement "_M_call_callbacks((ios_base *)this,0);" (call_expression "_M_call_callbacks((ios_base *)this,0)" identifier (argument_list "((ios_base *)this,0)" ( (cast_expression "(ios_base *)this" ( (type_descriptor "ios_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal ))) ;)) (expression_statement "piVar10 = *(ios **)(this + 200);" (assignment_expression "piVar10 = *(ios **)(this + 200)" identifier = (pointer_expression "*(ios **)(this + 200)" * (cast_expression "(ios **)(this + 200)" ( (type_descriptor "ios **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 200)" ( (binary_expression "this + 200" identifier + number_literal) ))))) ;) (if_statement "if (piVar10 != this + 0x40) {\n    if (piVar10 != (ios *)0x0) {\n      operator_delete__(piVar10);\n    }\n    *(undefined8 *)(this + 200) = 0;\n  }" if (parenthesized_expression "(piVar10 != this + 0x40)" ( (binary_expression "piVar10 != this + 0x40" identifier != (binary_expression "this + 0x40" identifier + number_literal)) )) (compound_statement "{\n    if (piVar10 != (ios *)0x0) {\n      operator_delete__(piVar10);\n    }\n    *(undefined8 *)(this + 200) = 0;\n  }" { (if_statement "if (piVar10 != (ios *)0x0) {\n      operator_delete__(piVar10);\n    }" if (parenthesized_expression "(piVar10 != (ios *)0x0)" ( (binary_expression "piVar10 != (ios *)0x0" identifier != (cast_expression "(ios *)0x0" ( (type_descriptor "ios *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      operator_delete__(piVar10);\n    }" { (expression_statement "operator_delete__(piVar10);" (call_expression "operator_delete__(piVar10)" identifier (argument_list "(piVar10)" ( identifier ))) ;) })) (expression_statement "*(undefined8 *)(this + 200) = 0;" (assignment_expression "*(undefined8 *)(this + 200) = 0" (pointer_expression "*(undefined8 *)(this + 200)" * (cast_expression "(undefined8 *)(this + 200)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 200)" ( (binary_expression "this + 200" identifier + number_literal) )))) = number_literal) ;) })) (labeled_statement "ios_base::_M_dispose_callbacks((ios_base *)this);" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose_callbacks((ios_base *)this);" (call_expression "_M_dispose_callbacks((ios_base *)this)" identifier (argument_list "((ios_base *)this)" ( (cast_expression "(ios_base *)this" ( (type_descriptor "ios_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;)) (expression_statement "iVar2 = *(int *)(param_1 + 0xc0);" (assignment_expression "iVar2 = *(int *)(param_1 + 0xc0)" identifier = (pointer_expression "*(int *)(param_1 + 0xc0)" * (cast_expression "(int *)(param_1 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) ))))) ;) (expression_statement "*(long *)(this + 0x28) = lVar8;" (assignment_expression "*(long *)(this + 0x28) = lVar8" (pointer_expression "*(long *)(this + 0x28)" * (cast_expression "(long *)(this + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x28)" ( (binary_expression "this + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0 < iVar2) {\n    lVar8 = *(long *)(param_1 + 200);\n    lVar9 = 0;\n    do {\n      uVar5 = ((undefined8 *)(lVar8 + lVar9))[1];\n      *(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9);\n      *(undefined8 *)(piVar7 + lVar9 + 8) = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }" if (parenthesized_expression "(0 < iVar2)" ( (binary_expression "0 < iVar2" number_literal < identifier) )) (compound_statement "{\n    lVar8 = *(long *)(param_1 + 200);\n    lVar9 = 0;\n    do {\n      uVar5 = ((undefined8 *)(lVar8 + lVar9))[1];\n      *(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9);\n      *(undefined8 *)(piVar7 + lVar9 + 8) = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }" { (expression_statement "lVar8 = *(long *)(param_1 + 200);" (assignment_expression "lVar8 = *(long *)(param_1 + 200)" identifier = (pointer_expression "*(long *)(param_1 + 200)" * (cast_expression "(long *)(param_1 + 200)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) ))))) ;) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" identifier = number_literal) ;) (do_statement "do {\n      uVar5 = ((undefined8 *)(lVar8 + lVar9))[1];\n      *(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9);\n      *(undefined8 *)(piVar7 + lVar9 + 8) = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);" do (compound_statement "{\n      uVar5 = ((undefined8 *)(lVar8 + lVar9))[1];\n      *(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9);\n      *(undefined8 *)(piVar7 + lVar9 + 8) = uVar5;\n      lVar9 = lVar9 + 0x10;\n    }" { (expression_statement "uVar5 = ((undefined8 *)(lVar8 + lVar9))[1];" (assignment_expression "uVar5 = ((undefined8 *)(lVar8 + lVar9))[1]" identifier = (subscript_expression "((undefined8 *)(lVar8 + lVar9))[1]" (parenthesized_expression "((undefined8 *)(lVar8 + lVar9))" ( (cast_expression "(undefined8 *)(lVar8 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + lVar9)" ( (binary_expression "lVar8 + lVar9" identifier + identifier) ))) )) [ number_literal ])) ;) (expression_statement "*(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9);" (assignment_expression "*(undefined8 *)(piVar7 + lVar9) = *(undefined8 *)(lVar8 + lVar9)" (pointer_expression "*(undefined8 *)(piVar7 + lVar9)" * (cast_expression "(undefined8 *)(piVar7 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar7 + lVar9)" ( (binary_expression "piVar7 + lVar9" identifier + identifier) )))) = (pointer_expression "*(undefined8 *)(lVar8 + lVar9)" * (cast_expression "(undefined8 *)(lVar8 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + lVar9)" ( (binary_expression "lVar8 + lVar9" identifier + identifier) ))))) ;) (expression_statement "*(undefined8 *)(piVar7 + lVar9 + 8) = uVar5;" (assignment_expression "*(undefined8 *)(piVar7 + lVar9 + 8) = uVar5" (pointer_expression "*(undefined8 *)(piVar7 + lVar9 + 8)" * (cast_expression "(undefined8 *)(piVar7 + lVar9 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar7 + lVar9 + 8)" ( (binary_expression "piVar7 + lVar9 + 8" (binary_expression "piVar7 + lVar9" identifier + identifier) + number_literal) )))) = identifier) ;) (expression_statement "lVar9 = lVar9 + 0x10;" (assignment_expression "lVar9 = lVar9 + 0x10" identifier = (binary_expression "lVar9 + 0x10" identifier + number_literal)) ;) }) while (parenthesized_expression "(((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9)" ( (binary_expression "((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9" (binary_expression "((ulong)(iVar2 - 1) + 1) * 0x10" (parenthesized_expression "((ulong)(iVar2 - 1) + 1)" ( (binary_expression "(ulong)(iVar2 - 1) + 1" (call_expression "(ulong)(iVar2 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(iVar2 - 1)" ( (binary_expression "iVar2 - 1" identifier - number_literal) ))) + number_literal) )) * number_literal) != identifier) )) ;) })) (expression_statement "uVar3 = *(undefined4 *)(param_1 + 0x18);" (assignment_expression "uVar3 = *(undefined4 *)(param_1 + 0x18)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x18)" * (cast_expression "(undefined4 *)(param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = param_1[0xe1];" (assignment_expression "iVar1 = param_1[0xe1]" identifier = (subscript_expression "param_1[0xe1]" identifier [ number_literal ])) ;) (expression_statement "*(ios **)(this + 200) = piVar7;" (assignment_expression "*(ios **)(this + 200) = piVar7" (pointer_expression "*(ios **)(this + 200)" * (cast_expression "(ios **)(this + 200)" ( (type_descriptor "ios **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 200)" ( (binary_expression "this + 200" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(this + 0xc0) = iVar2;" (assignment_expression "*(int *)(this + 0xc0) = iVar2" (pointer_expression "*(int *)(this + 0xc0)" * (cast_expression "(int *)(this + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xc0)" ( (binary_expression "this + 0xc0" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(this + 0x18) = uVar3;" (assignment_expression "*(undefined4 *)(this + 0x18) = uVar3" (pointer_expression "*(undefined4 *)(this + 0x18)" * (cast_expression "(undefined4 *)(this + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10);" (assignment_expression "*(undefined8 *)(this + 0x10) = *(undefined8 *)(param_1 + 0x10)" (pointer_expression "*(undefined8 *)(this + 0x10)" * (cast_expression "(undefined8 *)(this + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_1 + 0x10)" * (cast_expression "(undefined8 *)(param_1 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8);" (assignment_expression "*(undefined8 *)(this + 8) = *(undefined8 *)(param_1 + 8)" (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) )))) = (pointer_expression "*(undefined8 *)(param_1 + 8)" * (cast_expression "(undefined8 *)(param_1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(this + 0xd8) = *(undefined8 *)(param_1 + 0xd8);" (assignment_expression "*(undefined8 *)(this + 0xd8) = *(undefined8 *)(param_1 + 0xd8)" (pointer_expression "*(undefined8 *)(this + 0xd8)" * (cast_expression "(undefined8 *)(this + 0xd8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xd8)" ( (binary_expression "this + 0xd8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_1 + 0xd8)" * (cast_expression "(undefined8 *)(param_1 + 0xd8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xd8)" ( (binary_expression "param_1 + 0xd8" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 == (ios)0x0) {\n    pcVar4 = *(ctype<char> **)(param_1 + 0xf0);\n    if (pcVar4 == (ctype<char> *)0x0) goto LAB_00300efd;\n    if (pcVar4[0x38] == (ctype<char>)0x0) {\n      cVar6 = (ctype<char>)0x20;\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    else {\n      cVar6 = pcVar4[0x59];\n    }\n    *(ctype<char> *)(param_1 + 0xe0) = cVar6;\n    param_1[0xe1] = (ios)0x1;\n    iVar1 = this[0xe1];\n  }\n  else {\n    iVar1 = this[0xe1];\n    cVar6 = *(ctype<char> *)(param_1 + 0xe0);\n  }" if (parenthesized_expression "(iVar1 == (ios)0x0)" ( (binary_expression "iVar1 == (ios)0x0" identifier == (cast_expression "(ios)0x0" ( (type_descriptor "ios" type_identifier) ) number_literal)) )) (compound_statement "{\n    pcVar4 = *(ctype<char> **)(param_1 + 0xf0);\n    if (pcVar4 == (ctype<char> *)0x0) goto LAB_00300efd;\n    if (pcVar4[0x38] == (ctype<char>)0x0) {\n      cVar6 = (ctype<char>)0x20;\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    else {\n      cVar6 = pcVar4[0x59];\n    }\n    *(ctype<char> *)(param_1 + 0xe0) = cVar6;\n    param_1[0xe1] = (ios)0x1;\n    iVar1 = this[0xe1];\n  }" { (expression_statement "pcVar4 = *(ctype<char> **)(param_1 + 0xf0);" (assignment_expression "pcVar4 = *(ctype<char> **)(param_1 + 0xf0)" identifier = (pointer_expression "*(ctype<char> **)(param_1 + 0xf0)" * (call_expression "(ctype<char> **)(param_1 + 0xf0)" (parenthesized_expression "(ctype<char> **)" ( (binary_expression "ctype<char> **" (binary_expression "ctype<char" identifier < identifier) > (pointer_expression "**" * (pointer_expression "*" * identifier))) )) (argument_list "(param_1 + 0xf0)" ( (binary_expression "param_1 + 0xf0" identifier + number_literal) ))))) ;) (if_statement "if (pcVar4 == (ctype<char> *)0x0) goto LAB_00300efd;" if (parenthesized_expression "(pcVar4 == (ctype<char> *)0x0)" ( (binary_expression "pcVar4 == (ctype<char> *)0x0)" identifier == (parenthesized_expression "(ctype<char> *)0x0)" ( (binary_expression "ctype<char> *)0x0" (binary_expression "ctype<char" identifier < identifier) > (pointer_expression "*)0x0" * (ERROR ")" )) number_literal)) ))) )) (goto_statement "goto LAB_00300efd;" goto statement_identifier ;)) (if_statement "if (pcVar4[0x38] == (ctype<char>)0x0) {\n      cVar6 = (ctype<char>)0x20;\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    else {\n      cVar6 = pcVar4[0x59];\n    }" if (parenthesized_expression "(pcVar4[0x38] == (ctype<char>)0x0)" ( (binary_expression "pcVar4[0x38] == (ctype<char>)0x0)" (subscript_expression "pcVar4[0x38]" identifier [ number_literal ]) == (parenthesized_expression "(ctype<char>)0x0)" ( (binary_expression "ctype<char>)0x0" (binary_expression "ctype<char" identifier < identifier) > (ERROR ")" )) number_literal) ))) )) (compound_statement "{\n      cVar6 = (ctype<char>)0x20;\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }" { (expression_statement "cVar6 = (ctype<char>)0x20;" (assignment_expression "cVar6 = (ctype<char>)0x20" identifier = (parenthesized_expression "(ctype<char>)0x20" ( (binary_expression "ctype<char>)0x20" (binary_expression "ctype<char" identifier < identifier) > (ERROR ")" )) number_literal) ))) ;) (expression_statement "ctype<char>::_M_widen_init(pcVar4);" (binary_expression "ctype<char>::_M_widen_init(pcVar4)" (binary_expression "ctype<char" identifier < identifier) > (ERROR "::" : :) (call_expression "_M_widen_init(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier )))) ;) (if_statement "if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }" if (parenthesized_expression "(*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8)" ( (binary_expression "*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8" (pointer_expression "*(code **)(*(long *)pcVar4 + 0x30)" * (cast_expression "(code **)(*(long *)pcVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pcVar4 + 0x30)" ( (binary_expression "*(long *)pcVar4 + 0x30" (pointer_expression "*(long *)pcVar4" * (cast_expression "(long *)pcVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) != (cast_expression "(code *)PTR_do_widen_0043dfd8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }" { (expression_statement "cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);" (assignment_expression "cVar6 = (ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20)" identifier = (call_expression "(ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20)" (call_expression "(ctype<char>)(**(code **)(*(long *)pcVar4 + 0x30))" (parenthesized_expression "(ctype<char>)" ( (binary_expression "ctype<char>" (binary_expression "ctype<char" identifier < identifier) > identifier) )) (argument_list "(**(code **)(*(long *)pcVar4 + 0x30))" ( (pointer_expression "**(code **)(*(long *)pcVar4 + 0x30)" * (pointer_expression "*(code **)(*(long *)pcVar4 + 0x30)" * (cast_expression "(code **)(*(long *)pcVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pcVar4 + 0x30)" ( (binary_expression "*(long *)pcVar4 + 0x30" (pointer_expression "*(long *)pcVar4" * (cast_expression "(long *)pcVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) (argument_list "(pcVar4,0x20)" ( identifier , number_literal )))) ;) })) }) (else_clause "else {\n      cVar6 = pcVar4[0x59];\n    }" else (compound_statement "{\n      cVar6 = pcVar4[0x59];\n    }" { (expression_statement "cVar6 = pcVar4[0x59];" (assignment_expression "cVar6 = pcVar4[0x59]" identifier = (subscript_expression "pcVar4[0x59]" identifier [ number_literal ])) ;) }))) (expression_statement "*(ctype<char> *)(param_1 + 0xe0) = cVar6;" (assignment_expression "*(ctype<char> *)(param_1 + 0xe0) = cVar6" (pointer_expression "*(ctype<char> *)(param_1 + 0xe0)" * (call_expression "(ctype<char> *)(param_1 + 0xe0)" (parenthesized_expression "(ctype<char> *)" ( (binary_expression "ctype<char> *" (binary_expression "ctype<char" identifier < identifier) > (pointer_expression "*" * identifier)) )) (argument_list "(param_1 + 0xe0)" ( (binary_expression "param_1 + 0xe0" identifier + number_literal) )))) = identifier) ;) (expression_statement "param_1[0xe1] = (ios)0x1;" (assignment_expression "param_1[0xe1] = (ios)0x1" (subscript_expression "param_1[0xe1]" identifier [ number_literal ]) = (cast_expression "(ios)0x1" ( (type_descriptor "ios" type_identifier) ) number_literal)) ;) (expression_statement "iVar1 = this[0xe1];" (assignment_expression "iVar1 = this[0xe1]" identifier = (subscript_expression "this[0xe1]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    iVar1 = this[0xe1];\n    cVar6 = *(ctype<char> *)(param_1 + 0xe0);\n  }" else (compound_statement "{\n    iVar1 = this[0xe1];\n    cVar6 = *(ctype<char> *)(param_1 + 0xe0);\n  }" { (expression_statement "iVar1 = this[0xe1];" (assignment_expression "iVar1 = this[0xe1]" identifier = (subscript_expression "this[0xe1]" identifier [ number_literal ])) ;) (expression_statement "cVar6 = *(ctype<char> *)(param_1 + 0xe0);" (assignment_expression "cVar6 = *(ctype<char> *)(param_1 + 0xe0)" identifier = (pointer_expression "*(ctype<char> *)(param_1 + 0xe0)" * (call_expression "(ctype<char> *)(param_1 + 0xe0)" (parenthesized_expression "(ctype<char> *)" ( (binary_expression "ctype<char> *" (binary_expression "ctype<char" identifier < identifier) > (pointer_expression "*" * identifier)) )) (argument_list "(param_1 + 0xe0)" ( (binary_expression "param_1 + 0xe0" identifier + number_literal) ))))) ;) }))) (if_statement "if (iVar1 == (ios)0x0) {\n    pcVar4 = *(ctype<char> **)(this + 0xf0);\n    if (pcVar4 == (ctype<char> *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      __throw_bad_cast();\n    }\n    if (pcVar4[0x38] == (ctype<char>)0x0) {\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    this[0xe1] = (ios)0x1;\n  }" if (parenthesized_expression "(iVar1 == (ios)0x0)" ( (binary_expression "iVar1 == (ios)0x0" identifier == (cast_expression "(ios)0x0" ( (type_descriptor "ios" type_identifier) ) number_literal)) )) (compound_statement "{\n    pcVar4 = *(ctype<char> **)(this + 0xf0);\n    if (pcVar4 == (ctype<char> *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      __throw_bad_cast();\n    }\n    if (pcVar4[0x38] == (ctype<char>)0x0) {\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }\n    this[0xe1] = (ios)0x1;\n  }" { (expression_statement "pcVar4 = *(ctype<char> **)(this + 0xf0);" (assignment_expression "pcVar4 = *(ctype<char> **)(this + 0xf0)" identifier = (pointer_expression "*(ctype<char> **)(this + 0xf0)" * (call_expression "(ctype<char> **)(this + 0xf0)" (parenthesized_expression "(ctype<char> **)" ( (binary_expression "ctype<char> **" (binary_expression "ctype<char" identifier < identifier) > (pointer_expression "**" * (pointer_expression "*" * identifier))) )) (argument_list "(this + 0xf0)" ( (binary_expression "this + 0xf0" identifier + number_literal) ))))) ;) (if_statement "if (pcVar4 == (ctype<char> *)0x0) {\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      __throw_bad_cast();\n    }" if (parenthesized_expression "(pcVar4 == (ctype<char> *)0x0)" ( (binary_expression "pcVar4 == (ctype<char> *)0x0)" identifier == (parenthesized_expression "(ctype<char> *)0x0)" ( (binary_expression "ctype<char> *)0x0" (binary_expression "ctype<char" identifier < identifier) > (pointer_expression "*)0x0" * (ERROR ")" )) number_literal)) ))) )) (compound_statement "{\nLAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      __throw_bad_cast();\n    }" { (labeled_statement "LAB_00300efd:\n                    /* WARNING: Subroutine does not return */\n      __throw_bad_cast();" statement_identifier : comment (expression_statement "__throw_bad_cast();" (call_expression "__throw_bad_cast()" identifier (argument_list "()" ( ))) ;)) })) (if_statement "if (pcVar4[0x38] == (ctype<char>)0x0) {\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }" if (parenthesized_expression "(pcVar4[0x38] == (ctype<char>)0x0)" ( (binary_expression "pcVar4[0x38] == (ctype<char>)0x0)" (subscript_expression "pcVar4[0x38]" identifier [ number_literal ]) == (parenthesized_expression "(ctype<char>)0x0)" ( (binary_expression "ctype<char>)0x0" (binary_expression "ctype<char" identifier < identifier) > (ERROR ")" )) number_literal) ))) )) (compound_statement "{\n      ctype<char>::_M_widen_init(pcVar4);\n      if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }\n    }" { (expression_statement "ctype<char>::_M_widen_init(pcVar4);" (binary_expression "ctype<char>::_M_widen_init(pcVar4)" (binary_expression "ctype<char" identifier < identifier) > (ERROR "::" : :) (call_expression "_M_widen_init(pcVar4)" identifier (argument_list "(pcVar4)" ( identifier )))) ;) (if_statement "if (*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8) {\n        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }" if (parenthesized_expression "(*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8)" ( (binary_expression "*(code **)(*(long *)pcVar4 + 0x30) != (code *)PTR_do_widen_0043dfd8" (pointer_expression "*(code **)(*(long *)pcVar4 + 0x30)" * (cast_expression "(code **)(*(long *)pcVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pcVar4 + 0x30)" ( (binary_expression "*(long *)pcVar4 + 0x30" (pointer_expression "*(long *)pcVar4" * (cast_expression "(long *)pcVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) != (cast_expression "(code *)PTR_do_widen_0043dfd8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        (**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);\n      }" { (expression_statement "(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20);" (call_expression "(**(code **)(*(long *)pcVar4 + 0x30))(pcVar4,0x20)" (parenthesized_expression "(**(code **)(*(long *)pcVar4 + 0x30))" ( (pointer_expression "**(code **)(*(long *)pcVar4 + 0x30)" * (pointer_expression "*(code **)(*(long *)pcVar4 + 0x30)" * (cast_expression "(code **)(*(long *)pcVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pcVar4 + 0x30)" ( (binary_expression "*(long *)pcVar4 + 0x30" (pointer_expression "*(long *)pcVar4" * (cast_expression "(long *)pcVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pcVar4,0x20)" ( identifier , number_literal ))) ;) })) })) (expression_statement "this[0xe1] = (ios)0x1;" (assignment_expression "this[0xe1] = (ios)0x1" (subscript_expression "this[0xe1]" identifier [ number_literal ]) = (cast_expression "(ios)0x1" ( (type_descriptor "ios" type_identifier) ) number_literal)) ;) })) (expression_statement "*(ctype<char> *)(this + 0xe0) = cVar6;" (assignment_expression "*(ctype<char> *)(this + 0xe0) = cVar6" (pointer_expression "*(ctype<char> *)(this + 0xe0)" * (call_expression "(ctype<char> *)(this + 0xe0)" (parenthesized_expression "(ctype<char> *)" ( (binary_expression "ctype<char> *" (binary_expression "ctype<char" identifier < identifier) > (pointer_expression "*" * identifier)) )) (argument_list "(this + 0xe0)" ( (binary_expression "this + 0xe0" identifier + number_literal) )))) = identifier) ;) (labeled_statement "locale::locale(local_30,(locale *)(param_1 + 0xd0));" statement_identifier : (ERROR ":" :) (expression_statement "locale(local_30,(locale *)(param_1 + 0xd0));" (call_expression "locale(local_30,(locale *)(param_1 + 0xd0))" identifier (argument_list "(local_30,(locale *)(param_1 + 0xd0))" ( identifier , (cast_expression "(locale *)(param_1 + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xd0)" ( (binary_expression "param_1 + 0xd0" identifier + number_literal) ))) ))) ;)) (labeled_statement "locale::operator=((locale *)(this + 0xd0),local_30);" statement_identifier : (ERROR ":" :) (expression_statement "operator=((locale *)(this + 0xd0),local_30);" (assignment_expression "operator=((locale *)(this + 0xd0),local_30)" identifier = (parenthesized_expression "((locale *)(this + 0xd0),local_30)" ( (comma_expression "(locale *)(this + 0xd0),local_30" (cast_expression "(locale *)(this + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xd0)" ( (binary_expression "this + 0xd0" identifier + number_literal) ))) , identifier) ))) ;)) (labeled_statement "locale::~locale(local_30);" statement_identifier : (ERROR ":" :) (expression_statement "~locale(local_30);" (unary_expression "~locale(local_30)" ~ (call_expression "locale(local_30)" identifier (argument_list "(local_30)" ( identifier )))) ;)) (expression_statement "_M_cache_locale(this,(locale *)(this + 0xd0));" (call_expression "_M_cache_locale(this,(locale *)(this + 0xd0))" identifier (argument_list "(this,(locale *)(this + 0xd0))" ( identifier , (cast_expression "(locale *)(this + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0xd0)" ( (binary_expression "this + 0xd0" identifier + number_literal) ))) ))) ;) (labeled_statement "ios_base::_M_call_callbacks((ios_base *)this,2);" statement_identifier : (ERROR ":" :) (expression_statement "_M_call_callbacks((ios_base *)this,2);" (call_expression "_M_call_callbacks((ios_base *)this,2)" identifier (argument_list "((ios_base *)this,2)" ( (cast_expression "(ios_base *)this" ( (type_descriptor "ios_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal ))) ;)) (expression_statement "*(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c);" (assignment_expression "*(undefined4 *)(this + 0x1c) = *(undefined4 *)(param_1 + 0x1c)" (pointer_expression "*(undefined4 *)(this + 0x1c)" * (cast_expression "(undefined4 *)(this + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x1c)" ( (binary_expression "this + 0x1c" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(param_1 + 0x1c)" * (cast_expression "(undefined4 *)(param_1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "clear(this,*(_Ios_Iostate *)(this + 0x20));" (call_expression "clear(this,*(_Ios_Iostate *)(this + 0x20))" identifier (argument_list "(this,*(_Ios_Iostate *)(this + 0x20))" ( identifier , (pointer_expression "*(_Ios_Iostate *)(this + 0x20)" * (cast_expression "(_Ios_Iostate *)(this + 0x20)" ( (type_descriptor "_Ios_Iostate *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x20)" ( (binary_expression "this + 0x20" identifier + number_literal) )))) ))) ;) (return_statement "return this;" return identifier ;) }))
(translation_unit "long FUN_00300c50(long param_1,long param_2)\n\n{\n  char cVar1;\n  int iVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  undefined1 uVar6;\n  undefined8 *puVar7;\n  long lVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  undefined1 local_30 [8];\n  \n  if (param_1 == param_2) {\n    return param_1;\n  }\n  puVar7 = (undefined8 *)(param_1 + 0x40);\n  if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  FUN_00318c70(param_1,0);\n  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }\n  FUN_00318cb0(param_1);\n  iVar2 = *(int *)(param_2 + 0xc0);\n  *(long *)(param_1 + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_2 + 0x18);\n  cVar1 = *(char *)(param_2 + 0xe1);\n  *(undefined8 **)(param_1 + 200) = puVar7;\n  *(int *)(param_1 + 0xc0) = iVar2;\n  *(undefined4 *)(param_1 + 0x18) = uVar3;\n  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);\n  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);\n  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }\n  *(undefined1 *)(param_1 + 0xe0) = uVar6;\n  FUN_002dca60(local_30,param_2 + 0xd0);\n  FUN_002dd110(param_1 + 0xd0,local_30);\n  FUN_002dd1a0(local_30);\n  FUN_00300bb0(param_1,param_1 + 0xd0);\n  FUN_00318c70(param_1,2);\n  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);\n  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));\n  return param_1;\n}\n\n" (function_definition "long FUN_00300c50(long param_1,long param_2)\n\n{\n  char cVar1;\n  int iVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  undefined1 uVar6;\n  undefined8 *puVar7;\n  long lVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  undefined1 local_30 [8];\n  \n  if (param_1 == param_2) {\n    return param_1;\n  }\n  puVar7 = (undefined8 *)(param_1 + 0x40);\n  if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  FUN_00318c70(param_1,0);\n  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }\n  FUN_00318cb0(param_1);\n  iVar2 = *(int *)(param_2 + 0xc0);\n  *(long *)(param_1 + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_2 + 0x18);\n  cVar1 = *(char *)(param_2 + 0xe1);\n  *(undefined8 **)(param_1 + 200) = puVar7;\n  *(int *)(param_1 + 0xc0) = iVar2;\n  *(undefined4 *)(param_1 + 0x18) = uVar3;\n  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);\n  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);\n  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }\n  *(undefined1 *)(param_1 + 0xe0) = uVar6;\n  FUN_002dca60(local_30,param_2 + 0xd0);\n  FUN_002dd110(param_1 + 0xd0,local_30);\n  FUN_002dd1a0(local_30);\n  FUN_00300bb0(param_1,param_1 + 0xd0);\n  FUN_00318c70(param_1,2);\n  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);\n  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" long) (function_declarator "FUN_00300c50(long param_1,long param_2)" identifier (parameter_list "(long param_1,long param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  undefined1 uVar6;\n  undefined8 *puVar7;\n  long lVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  undefined1 local_30 [8];\n  \n  if (param_1 == param_2) {\n    return param_1;\n  }\n  puVar7 = (undefined8 *)(param_1 + 0x40);\n  if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  FUN_00318c70(param_1,0);\n  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }\n  FUN_00318cb0(param_1);\n  iVar2 = *(int *)(param_2 + 0xc0);\n  *(long *)(param_1 + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_2 + 0x18);\n  cVar1 = *(char *)(param_2 + 0xe1);\n  *(undefined8 **)(param_1 + 200) = puVar7;\n  *(int *)(param_1 + 0xc0) = iVar2;\n  *(undefined4 *)(param_1 + 0x18) = uVar3;\n  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);\n  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);\n  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }\n  *(undefined1 *)(param_1 + 0xe0) = uVar6;\n  FUN_002dca60(local_30,param_2 + 0xd0);\n  FUN_002dd110(param_1 + 0xd0,local_30);\n  FUN_002dd1a0(local_30);\n  FUN_00300bb0(param_1,param_1 + 0xd0);\n  FUN_00318c70(param_1,2);\n  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);\n  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));\n  return param_1;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "undefined1 uVar6;" type_identifier identifier ;) (declaration "undefined8 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "undefined1 local_30 [8];" type_identifier (array_declarator "local_30 [8]" identifier [ number_literal ]) ;) (if_statement "if (param_1 == param_2) {\n    return param_1;\n  }" if (parenthesized_expression "(param_1 == param_2)" ( (binary_expression "param_1 == param_2" identifier == identifier) )) (compound_statement "{\n    return param_1;\n  }" { (return_statement "return param_1;" return identifier ;) })) (expression_statement "puVar7 = (undefined8 *)(param_1 + 0x40);" (assignment_expression "puVar7 = (undefined8 *)(param_1 + 0x40)" identifier = (cast_expression "(undefined8 *)(param_1 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) ;) (if_statement "if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" if (parenthesized_expression "(*(int *)(param_2 + 0xc0) < 9)" ( (binary_expression "*(int *)(param_2 + 0xc0) < 9" (pointer_expression "*(int *)(param_2 + 0xc0)" * (cast_expression "(int *)(param_2 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc0)" ( (binary_expression "param_2 + 0xc0" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" { (labeled_statement "LAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);" statement_identifier : (expression_statement "lVar8 = *(long *)(param_2 + 0x28);" (assignment_expression "lVar8 = *(long *)(param_2 + 0x28)" identifier = (pointer_expression "*(long *)(param_2 + 0x28)" * (cast_expression "(long *)(param_2 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;)) }) (else_clause "else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" else (compound_statement "{\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" { (expression_statement "puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);" (assignment_expression "puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" identifier = (cast_expression "(undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" identifier (argument_list "((long)*(int *)(param_2 + 0xc0) << 4)" ( (binary_expression "(long)*(int *)(param_2 + 0xc0) << 4" (cast_expression "(long)*(int *)(param_2 + 0xc0)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_2 + 0xc0)" * (cast_expression "(int *)(param_2 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc0)" ( (binary_expression "param_2 + 0xc0" identifier + number_literal) ))))) << number_literal) ))))) ;) (expression_statement "lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;" (assignment_expression "lVar8 = (long)*(int *)(param_2 + 0xc0) + -1" identifier = (binary_expression "(long)*(int *)(param_2 + 0xc0) + -1" (cast_expression "(long)*(int *)(param_2 + 0xc0)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(param_2 + 0xc0)" * (cast_expression "(int *)(param_2 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc0)" ( (binary_expression "param_2 + 0xc0" identifier + number_literal) ))))) + number_literal)) ;) (expression_statement "puVar10 = puVar7;" (assignment_expression "puVar10 = puVar7" identifier = identifier) ;) (if_statement "if (lVar8 < 0) goto LAB_00300c81;" if (parenthesized_expression "(lVar8 < 0)" ( (binary_expression "lVar8 < 0" identifier < number_literal) )) (goto_statement "goto LAB_00300c81;" goto statement_identifier ;)) (do_statement "do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);" do (compound_statement "{\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    }" { (expression_statement "lVar8 = lVar8 + -1;" (assignment_expression "lVar8 = lVar8 + -1" identifier = (binary_expression "lVar8 + -1" identifier + number_literal)) ;) (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" * identifier) = number_literal) ;) (expression_statement "puVar10[1] = 0;" (assignment_expression "puVar10[1] = 0" (subscript_expression "puVar10[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar10 = puVar10 + 2;" (assignment_expression "puVar10 = puVar10 + 2" identifier = (binary_expression "puVar10 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(lVar8 != -1)" ( (binary_expression "lVar8 != -1" identifier != number_literal) )) ;) (expression_statement "lVar8 = *(long *)(param_2 + 0x28);" (assignment_expression "lVar8 = *(long *)(param_2 + 0x28)" identifier = (pointer_expression "*(long *)(param_2 + 0x28)" * (cast_expression "(long *)(param_2 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) ))))) ;) }))) (if_statement "if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }" if (parenthesized_expression "(lVar8 != 0)" ( (binary_expression "lVar8 != 0" identifier != number_literal) )) (compound_statement "{\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_0043dee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_0043dee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }" { (expression_statement "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;" (assignment_expression "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;" (assignment_expression "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) = (binary_expression "*(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" * (cast_expression "(int *)(lVar8 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x14)" ( (binary_expression "lVar8 + 0x14" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) })) (expression_statement "FUN_00318c70(param_1,0);" (call_expression "FUN_00318c70(param_1,0)" identifier (argument_list "(param_1,0)" ( identifier , number_literal ))) ;) (if_statement "if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }" if (parenthesized_expression "(*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40))" ( (binary_expression "*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)" (pointer_expression "*(undefined8 **)(param_1 + 200)" * (cast_expression "(undefined8 **)(param_1 + 200)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) )))) != (cast_expression "(undefined8 *)(param_1 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) )) (compound_statement "{\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }" { (if_statement "if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }" if (parenthesized_expression "(*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0)" ( (binary_expression "*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0" (pointer_expression "*(undefined8 **)(param_1 + 200)" * (cast_expression "(undefined8 **)(param_1 + 200)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) )))) != (cast_expression "(undefined8 *)0x0" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      thunk_FUN_002dac60();\n    }" { (expression_statement "thunk_FUN_002dac60();" (call_expression "thunk_FUN_002dac60()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*(undefined8 *)(param_1 + 200) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 200) = 0" (pointer_expression "*(undefined8 *)(param_1 + 200)" * (cast_expression "(undefined8 *)(param_1 + 200)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "FUN_00318cb0(param_1);" (call_expression "FUN_00318cb0(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "iVar2 = *(int *)(param_2 + 0xc0);" (assignment_expression "iVar2 = *(int *)(param_2 + 0xc0)" identifier = (pointer_expression "*(int *)(param_2 + 0xc0)" * (cast_expression "(int *)(param_2 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc0)" ( (binary_expression "param_2 + 0xc0" identifier + number_literal) ))))) ;) (expression_statement "*(long *)(param_1 + 0x28) = lVar8;" (assignment_expression "*(long *)(param_1 + 0x28) = lVar8" (pointer_expression "*(long *)(param_1 + 0x28)" * (cast_expression "(long *)(param_1 + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }" if (parenthesized_expression "(0 < iVar2)" ( (binary_expression "0 < iVar2" number_literal < identifier) )) (compound_statement "{\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }" { (expression_statement "lVar8 = *(long *)(param_2 + 200);" (assignment_expression "lVar8 = *(long *)(param_2 + 200)" identifier = (pointer_expression "*(long *)(param_2 + 200)" * (cast_expression "(long *)(param_2 + 200)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 200)" ( (binary_expression "param_2 + 200" identifier + number_literal) ))))) ;) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);" do (compound_statement "{\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    }" { (expression_statement "puVar10 = (undefined8 *)(lVar8 + lVar9);" (assignment_expression "puVar10 = (undefined8 *)(lVar8 + lVar9)" identifier = (cast_expression "(undefined8 *)(lVar8 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + lVar9)" ( (binary_expression "lVar8 + lVar9" identifier + identifier) )))) ;) (expression_statement "uVar5 = puVar10[1];" (assignment_expression "uVar5 = puVar10[1]" identifier = (subscript_expression "puVar10[1]" identifier [ number_literal ])) ;) (expression_statement "*(undefined8 *)((long)puVar7 + lVar9) = *puVar10;" (assignment_expression "*(undefined8 *)((long)puVar7 + lVar9) = *puVar10" (pointer_expression "*(undefined8 *)((long)puVar7 + lVar9)" * (cast_expression "(undefined8 *)((long)puVar7 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + lVar9)" ( (binary_expression "(long)puVar7 + lVar9" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) )))) = (pointer_expression "*puVar10" * identifier)) ;) (expression_statement "((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;" (assignment_expression "((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5" (subscript_expression "((undefined8 *)((long)puVar7 + lVar9))[1]" (parenthesized_expression "((undefined8 *)((long)puVar7 + lVar9))" ( (cast_expression "(undefined8 *)((long)puVar7 + lVar9)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar7 + lVar9)" ( (binary_expression "(long)puVar7 + lVar9" (cast_expression "(long)puVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) )) [ number_literal ]) = identifier) ;) (expression_statement "lVar9 = lVar9 + 0x10;" (assignment_expression "lVar9 = lVar9 + 0x10" identifier = (binary_expression "lVar9 + 0x10" identifier + number_literal)) ;) }) while (parenthesized_expression "(((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9)" ( (binary_expression "((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9" (binary_expression "((ulong)(iVar2 - 1) + 1) * 0x10" (parenthesized_expression "((ulong)(iVar2 - 1) + 1)" ( (binary_expression "(ulong)(iVar2 - 1) + 1" (call_expression "(ulong)(iVar2 - 1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(iVar2 - 1)" ( (binary_expression "iVar2 - 1" identifier - number_literal) ))) + number_literal) )) * number_literal) != identifier) )) ;) })) (expression_statement "uVar3 = *(undefined4 *)(param_2 + 0x18);" (assignment_expression "uVar3 = *(undefined4 *)(param_2 + 0x18)" identifier = (pointer_expression "*(undefined4 *)(param_2 + 0x18)" * (cast_expression "(undefined4 *)(param_2 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "cVar1 = *(char *)(param_2 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_2 + 0xe1)" identifier = (pointer_expression "*(char *)(param_2 + 0xe1)" * (cast_expression "(char *)(param_2 + 0xe1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe1)" ( (binary_expression "param_2 + 0xe1" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 **)(param_1 + 200) = puVar7;" (assignment_expression "*(undefined8 **)(param_1 + 200) = puVar7" (pointer_expression "*(undefined8 **)(param_1 + 200)" * (cast_expression "(undefined8 **)(param_1 + 200)" ( (type_descriptor "undefined8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 200)" ( (binary_expression "param_1 + 200" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0xc0) = iVar2;" (assignment_expression "*(int *)(param_1 + 0xc0) = iVar2" (pointer_expression "*(int *)(param_1 + 0xc0)" * (cast_expression "(int *)(param_1 + 0xc0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc0)" ( (binary_expression "param_1 + 0xc0" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(param_1 + 0x18) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x18) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x18)" * (cast_expression "(undefined4 *)(param_1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);" (assignment_expression "*(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10)" (pointer_expression "*(undefined8 *)(param_1 + 0x10)" * (cast_expression "(undefined8 *)(param_1 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);" (assignment_expression "*(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8)" (pointer_expression "*(undefined8 *)(param_1 + 8)" * (cast_expression "(undefined8 *)(param_1 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_2 + 8)" * (cast_expression "(undefined8 *)(param_2 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);" (assignment_expression "*(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8)" (pointer_expression "*(undefined8 *)(param_1 + 0xd8)" * (cast_expression "(undefined8 *)(param_1 + 0xd8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xd8)" ( (binary_expression "param_1 + 0xd8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(param_2 + 0xd8)" * (cast_expression "(undefined8 *)(param_2 + 0xd8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xd8)" ( (binary_expression "param_2 + 0xd8" identifier + number_literal) ))))) ;) (if_statement "if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }" { (expression_statement "plVar4 = *(long **)(param_2 + 0xf0);" (assignment_expression "plVar4 = *(long **)(param_2 + 0xf0)" identifier = (pointer_expression "*(long **)(param_2 + 0xf0)" * (cast_expression "(long **)(param_2 + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0xf0)" ( (binary_expression "param_2 + 0xf0" identifier + number_literal) ))))) ;) (if_statement "if (plVar4 == (long *)0x0) goto LAB_00300efd;" if (parenthesized_expression "(plVar4 == (long *)0x0)" ( (binary_expression "plVar4 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00300efd;" goto statement_identifier ;)) (if_statement "if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" if (parenthesized_expression "((char)plVar4[7] == '\0')" ( (binary_expression "(char)plVar4[7] == '\0'" (cast_expression "(char)plVar4[7]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "plVar4[7]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" { (expression_statement "uVar6 = 0x20;" (assignment_expression "uVar6 = 0x20" identifier = number_literal) ;) (expression_statement "FUN_00319ac0(plVar4);" (call_expression "FUN_00319ac0(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8)" ( (binary_expression "*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8" (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) )))) != (cast_expression "(code *)PTR_FUN_0043dfd8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" { (expression_statement "uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);" (assignment_expression "uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20)" identifier = (call_expression "(**(code **)(*plVar4 + 0x30))(plVar4,0x20)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" ( (pointer_expression "**(code **)(*plVar4 + 0x30)" * (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,0x20)" ( identifier , number_literal )))) ;) })) }) (else_clause "else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" else (compound_statement "{\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" { (expression_statement "uVar6 = *(undefined1 *)((long)plVar4 + 0x59);" (assignment_expression "uVar6 = *(undefined1 *)((long)plVar4 + 0x59)" identifier = (pointer_expression "*(undefined1 *)((long)plVar4 + 0x59)" * (cast_expression "(undefined1 *)((long)plVar4 + 0x59)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar4 + 0x59)" ( (binary_expression "(long)plVar4 + 0x59" (cast_expression "(long)plVar4" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) }))) (expression_statement "*(undefined1 *)(param_2 + 0xe0) = uVar6;" (assignment_expression "*(undefined1 *)(param_2 + 0xe0) = uVar6" (pointer_expression "*(undefined1 *)(param_2 + 0xe0)" * (cast_expression "(undefined1 *)(param_2 + 0xe0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe0)" ( (binary_expression "param_2 + 0xe0" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 *)(param_2 + 0xe1) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0xe1) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0xe1)" * (cast_expression "(undefined1 *)(param_2 + 0xe1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe1)" ( (binary_expression "param_2 + 0xe1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "cVar1 = *(char *)(param_1 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_1 + 0xe1)" identifier = (pointer_expression "*(char *)(param_1 + 0xe1)" * (cast_expression "(char *)(param_1 + 0xe1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe1)" ( (binary_expression "param_1 + 0xe1" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" else (compound_statement "{\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" { (expression_statement "cVar1 = *(char *)(param_1 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_1 + 0xe1)" identifier = (pointer_expression "*(char *)(param_1 + 0xe1)" * (cast_expression "(char *)(param_1 + 0xe1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe1)" ( (binary_expression "param_1 + 0xe1" identifier + number_literal) ))))) ;) (expression_statement "uVar6 = *(undefined1 *)(param_2 + 0xe0);" (assignment_expression "uVar6 = *(undefined1 *)(param_2 + 0xe0)" identifier = (pointer_expression "*(undefined1 *)(param_2 + 0xe0)" * (cast_expression "(undefined1 *)(param_2 + 0xe0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe0)" ( (binary_expression "param_2 + 0xe0" identifier + number_literal) ))))) ;) }))) (if_statement "if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }" if (parenthesized_expression "(cVar1 == '\0')" ( (binary_expression "cVar1 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }" { (expression_statement "plVar4 = *(long **)(param_1 + 0xf0);" (assignment_expression "plVar4 = *(long **)(param_1 + 0xf0)" identifier = (pointer_expression "*(long **)(param_1 + 0xf0)" * (cast_expression "(long **)(param_1 + 0xf0)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xf0)" ( (binary_expression "param_1 + 0xf0" identifier + number_literal) ))))) ;) (if_statement "if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }" if (parenthesized_expression "(plVar4 == (long *)0x0)" ( (binary_expression "plVar4 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }" { (labeled_statement "LAB_00300efd:\n                    \n      FUN_00319450();" statement_identifier : (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" identifier (argument_list "()" ( ))) ;)) })) (if_statement "if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" if (parenthesized_expression "((char)plVar4[7] == '\0')" ( (binary_expression "(char)plVar4[7] == '\0'" (cast_expression "(char)plVar4[7]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "plVar4[7]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" { (expression_statement "FUN_00319ac0(plVar4);" (call_expression "FUN_00319ac0(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8)" ( (binary_expression "*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8" (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) )))) != (cast_expression "(code *)PTR_FUN_0043dfd8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" { (expression_statement "(**(code **)(*plVar4 + 0x30))(plVar4,0x20);" (call_expression "(**(code **)(*plVar4 + 0x30))(plVar4,0x20)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" ( (pointer_expression "**(code **)(*plVar4 + 0x30)" * (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,0x20)" ( identifier , number_literal ))) ;) })) })) (expression_statement "*(undefined1 *)(param_1 + 0xe1) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0xe1) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0xe1)" * (cast_expression "(undefined1 *)(param_1 + 0xe1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe1)" ( (binary_expression "param_1 + 0xe1" identifier + number_literal) )))) = number_literal) ;) })) (expression_statement "*(undefined1 *)(param_1 + 0xe0) = uVar6;" (assignment_expression "*(undefined1 *)(param_1 + 0xe0) = uVar6" (pointer_expression "*(undefined1 *)(param_1 + 0xe0)" * (cast_expression "(undefined1 *)(param_1 + 0xe0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe0)" ( (binary_expression "param_1 + 0xe0" identifier + number_literal) )))) = identifier) ;) (expression_statement "FUN_002dca60(local_30,param_2 + 0xd0);" (call_expression "FUN_002dca60(local_30,param_2 + 0xd0)" identifier (argument_list "(local_30,param_2 + 0xd0)" ( identifier , (binary_expression "param_2 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_002dd110(param_1 + 0xd0,local_30);" (call_expression "FUN_002dd110(param_1 + 0xd0,local_30)" identifier (argument_list "(param_1 + 0xd0,local_30)" ( (binary_expression "param_1 + 0xd0" identifier + number_literal) , identifier ))) ;) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" identifier (argument_list "(local_30)" ( identifier ))) ;) (expression_statement "FUN_00300bb0(param_1,param_1 + 0xd0);" (call_expression "FUN_00300bb0(param_1,param_1 + 0xd0)" identifier (argument_list "(param_1,param_1 + 0xd0)" ( identifier , (binary_expression "param_1 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_00318c70(param_1,2);" (call_expression "FUN_00318c70(param_1,2)" identifier (argument_list "(param_1,2)" ( identifier , number_literal ))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);" (assignment_expression "*(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c)" (pointer_expression "*(undefined4 *)(param_1 + 0x1c)" * (cast_expression "(undefined4 *)(param_1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(param_2 + 0x1c)" * (cast_expression "(undefined4 *)(param_2 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x1c)" ( (binary_expression "param_2 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));" (call_expression "FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20))" identifier (argument_list "(param_1,*(undefined4 *)(param_1 + 0x20))" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x20)" * (cast_expression "(undefined4 *)(param_1 + 0x20)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) ))) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) << LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) )) [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) ))) + LIT) )) * LIT) != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (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 IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (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 , LIT )))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (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 IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , LIT ))) ;) })) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( 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_00300c50(long param_1,long param_2)\n\n{\n  char cVar1;\n  int iVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  undefined1 uVar6;\n  undefined8 *puVar7;\n  long lVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  undefined1 local_30 [8];\n  \n  if (param_1 == param_2) {\n    return param_1;\n  }\n  puVar7 = (undefined8 *)(param_1 + 0x40);\n  if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  FUN_00318c70(param_1,0);\n  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }\n  FUN_00318cb0(param_1);\n  iVar2 = *(int *)(param_2 + 0xc0);\n  *(long *)(param_1 + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_2 + 0x18);\n  cVar1 = *(char *)(param_2 + 0xe1);\n  *(undefined8 **)(param_1 + 200) = puVar7;\n  *(int *)(param_1 + 0xc0) = iVar2;\n  *(undefined4 *)(param_1 + 0x18) = uVar3;\n  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);\n  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);\n  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }\n  *(undefined1 *)(param_1 + 0xe0) = uVar6;\n  FUN_002dca60(local_30,param_2 + 0xd0);\n  FUN_002dd110(param_1 + 0xd0,local_30);\n  FUN_002dd1a0(local_30);\n  FUN_00300bb0(param_1,param_1 + 0xd0);\n  FUN_00318c70(param_1,2);\n  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);\n  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));\n  return param_1;\n}" (sized_type_specifier "long" (long "long")) (function_declarator "FUN_00300c50(long param_1,long param_2)" (identifier "FUN_00300c50") (parameter_list "(long param_1,long param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  char cVar1;\n  int iVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  undefined8 uVar5;\n  undefined1 uVar6;\n  undefined8 *puVar7;\n  long lVar8;\n  long lVar9;\n  undefined8 *puVar10;\n  undefined1 local_30 [8];\n  \n  if (param_1 == param_2) {\n    return param_1;\n  }\n  puVar7 = (undefined8 *)(param_1 + 0x40);\n  if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }\n  FUN_00318c70(param_1,0);\n  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }\n  FUN_00318cb0(param_1);\n  iVar2 = *(int *)(param_2 + 0xc0);\n  *(long *)(param_1 + 0x28) = lVar8;\n  if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }\n  uVar3 = *(undefined4 *)(param_2 + 0x18);\n  cVar1 = *(char *)(param_2 + 0xe1);\n  *(undefined8 **)(param_1 + 200) = puVar7;\n  *(int *)(param_1 + 0xc0) = iVar2;\n  *(undefined4 *)(param_1 + 0x18) = uVar3;\n  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);\n  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);\n  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }\n  if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }\n  *(undefined1 *)(param_1 + 0xe0) = uVar6;\n  FUN_002dca60(local_30,param_2 + 0xd0);\n  FUN_002dd110(param_1 + 0xd0,local_30);\n  FUN_002dd1a0(local_30);\n  FUN_00300bb0(param_1,param_1 + 0xd0);\n  FUN_00318c70(param_1,2);\n  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);\n  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));\n  return param_1;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "undefined1 uVar6;" (type_identifier "undefined1") (identifier "uVar6") (; ";")) (declaration "undefined8 *puVar7;" (type_identifier "undefined8") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "undefined8 *puVar10;" (type_identifier "undefined8") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "undefined1 local_30 [8];" (type_identifier "undefined1") (array_declarator "local_30 [8]" (identifier "local_30") ([ "[") (number_literal "8") (] "]")) (; ";")) (if_statement "if (param_1 == param_2) {\n    return param_1;\n  }" (if "if") (parenthesized_expression "(param_1 == param_2)" (( "(") (binary_expression "param_1 == param_2" (identifier "param_1") (== "==") (identifier "param_2")) () ")")) (compound_statement "{\n    return param_1;\n  }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (expression_statement "puVar7 = (undefined8 *)(param_1 + 0x40);" (assignment_expression "puVar7 = (undefined8 *)(param_1 + 0x40)" (identifier "puVar7") (= "=") (cast_expression "(undefined8 *)(param_1 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (; ";")) (if_statement "if (*(int *)(param_2 + 0xc0) < 9) {\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }\n  else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0xc0) < 9)" (( "(") (binary_expression "*(int *)(param_2 + 0xc0) < 9" (pointer_expression "*(int *)(param_2 + 0xc0)" (* "*") (cast_expression "(int *)(param_2 + 0xc0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc0)" (( "(") (binary_expression "param_2 + 0xc0" (identifier "param_2") (+ "+") (number_literal "0xc0")) () ")")))) (< "<") (number_literal "9")) () ")")) (compound_statement "{\nLAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" ({ "{") (labeled_statement "LAB_00300c81:\n    lVar8 = *(long *)(param_2 + 0x28);" (statement_identifier "LAB_00300c81") (: ":") (expression_statement "lVar8 = *(long *)(param_2 + 0x28);" (assignment_expression "lVar8 = *(long *)(param_2 + 0x28)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)(param_2 + 0x28)" (* "*") (cast_expression "(long *)(param_2 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")"))))) (; ";"))) (} "}")) (else_clause "else {\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" (else "else") (compound_statement "{\n    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);\n    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;\n    puVar10 = puVar7;\n    if (lVar8 < 0) goto LAB_00300c81;\n    do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);\n    lVar8 = *(long *)(param_2 + 0x28);\n  }" ({ "{") (expression_statement "puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);" (assignment_expression "puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" (identifier "puVar7") (= "=") (cast_expression "(undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4)" (identifier "thunk_FUN_002d9490") (argument_list "((long)*(int *)(param_2 + 0xc0) << 4)" (( "(") (binary_expression "(long)*(int *)(param_2 + 0xc0) << 4" (cast_expression "(long)*(int *)(param_2 + 0xc0)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(param_2 + 0xc0)" (* "*") (cast_expression "(int *)(param_2 + 0xc0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc0)" (( "(") (binary_expression "param_2 + 0xc0" (identifier "param_2") (+ "+") (number_literal "0xc0")) () ")"))))) (<< "<<") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;" (assignment_expression "lVar8 = (long)*(int *)(param_2 + 0xc0) + -1" (identifier "lVar8") (= "=") (binary_expression "(long)*(int *)(param_2 + 0xc0) + -1" (cast_expression "(long)*(int *)(param_2 + 0xc0)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(param_2 + 0xc0)" (* "*") (cast_expression "(int *)(param_2 + 0xc0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc0)" (( "(") (binary_expression "param_2 + 0xc0" (identifier "param_2") (+ "+") (number_literal "0xc0")) () ")"))))) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar10 = puVar7;" (assignment_expression "puVar10 = puVar7" (identifier "puVar10") (= "=") (identifier "puVar7")) (; ";")) (if_statement "if (lVar8 < 0) goto LAB_00300c81;" (if "if") (parenthesized_expression "(lVar8 < 0)" (( "(") (binary_expression "lVar8 < 0" (identifier "lVar8") (< "<") (number_literal "0")) () ")")) (goto_statement "goto LAB_00300c81;" (goto "goto") (statement_identifier "LAB_00300c81") (; ";"))) (do_statement "do {\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    } while (lVar8 != -1);" (do "do") (compound_statement "{\n      lVar8 = lVar8 + -1;\n      *puVar10 = 0;\n      puVar10[1] = 0;\n      puVar10 = puVar10 + 2;\n    }" ({ "{") (expression_statement "lVar8 = lVar8 + -1;" (assignment_expression "lVar8 = lVar8 + -1" (identifier "lVar8") (= "=") (binary_expression "lVar8 + -1" (identifier "lVar8") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*puVar10 = 0;" (assignment_expression "*puVar10 = 0" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10[1] = 0;" (assignment_expression "puVar10[1] = 0" (subscript_expression "puVar10[1]" (identifier "puVar10") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = puVar10 + 2;" (assignment_expression "puVar10 = puVar10 + 2" (identifier "puVar10") (= "=") (binary_expression "puVar10 + 2" (identifier "puVar10") (+ "+") (number_literal "2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(lVar8 != -1)" (( "(") (binary_expression "lVar8 != -1" (identifier "lVar8") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (expression_statement "lVar8 = *(long *)(param_2 + 0x28);" (assignment_expression "lVar8 = *(long *)(param_2 + 0x28)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)(param_2 + 0x28)" (* "*") (cast_expression "(long *)(param_2 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (lVar8 != 0) {\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }" (if "if") (parenthesized_expression "(lVar8 != 0)" (( "(") (binary_expression "lVar8 != 0" (identifier "lVar8") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }\n  }" ({ "{") (if_statement "if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }\n    else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_0043dee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_0043dee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_0043dee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n    }" ({ "{") (expression_statement "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;" (assignment_expression "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" (* "*") (cast_expression "(int *)(lVar8 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x14)" (( "(") (binary_expression "lVar8 + 0x14" (identifier "lVar8") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "*(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" (* "*") (cast_expression "(int *)(lVar8 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x14)" (( "(") (binary_expression "lVar8 + 0x14" (identifier "lVar8") (+ "+") (number_literal "0x14")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" (else "else") (compound_statement "{\n      LOCK();\n      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;\n      UNLOCK();\n    }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;" (assignment_expression "*(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" (* "*") (cast_expression "(int *)(lVar8 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x14)" (( "(") (binary_expression "lVar8 + 0x14" (identifier "lVar8") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "*(int *)(lVar8 + 0x14) + 1" (pointer_expression "*(int *)(lVar8 + 0x14)" (* "*") (cast_expression "(int *)(lVar8 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + 0x14)" (( "(") (binary_expression "lVar8 + 0x14" (identifier "lVar8") (+ "+") (number_literal "0x14")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "FUN_00318c70(param_1,0);" (call_expression "FUN_00318c70(param_1,0)" (identifier "FUN_00318c70") (argument_list "(param_1,0)" (( "(") (identifier "param_1") (, ",") (number_literal "0") () ")"))) (; ";")) (if_statement "if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }" (if "if") (parenthesized_expression "(*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40))" (( "(") (binary_expression "*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)" (pointer_expression "*(undefined8 **)(param_1 + 200)" (* "*") (cast_expression "(undefined8 **)(param_1 + 200)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 200)" (( "(") (binary_expression "param_1 + 200" (identifier "param_1") (+ "+") (number_literal "200")) () ")")))) (!= "!=") (cast_expression "(undefined8 *)(param_1 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) () ")")) (compound_statement "{\n    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }\n    *(undefined8 *)(param_1 + 200) = 0;\n  }" ({ "{") (if_statement "if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {\n      thunk_FUN_002dac60();\n    }" (if "if") (parenthesized_expression "(*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0)" (( "(") (binary_expression "*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0" (pointer_expression "*(undefined8 **)(param_1 + 200)" (* "*") (cast_expression "(undefined8 **)(param_1 + 200)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 200)" (( "(") (binary_expression "param_1 + 200" (identifier "param_1") (+ "+") (number_literal "200")) () ")")))) (!= "!=") (cast_expression "(undefined8 *)0x0" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      thunk_FUN_002dac60();\n    }" ({ "{") (expression_statement "thunk_FUN_002dac60();" (call_expression "thunk_FUN_002dac60()" (identifier "thunk_FUN_002dac60") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "*(undefined8 *)(param_1 + 200) = 0;" (assignment_expression "*(undefined8 *)(param_1 + 200) = 0" (pointer_expression "*(undefined8 *)(param_1 + 200)" (* "*") (cast_expression "(undefined8 *)(param_1 + 200)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 200)" (( "(") (binary_expression "param_1 + 200" (identifier "param_1") (+ "+") (number_literal "200")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "FUN_00318cb0(param_1);" (call_expression "FUN_00318cb0(param_1)" (identifier "FUN_00318cb0") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "iVar2 = *(int *)(param_2 + 0xc0);" (assignment_expression "iVar2 = *(int *)(param_2 + 0xc0)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(param_2 + 0xc0)" (* "*") (cast_expression "(int *)(param_2 + 0xc0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc0)" (( "(") (binary_expression "param_2 + 0xc0" (identifier "param_2") (+ "+") (number_literal "0xc0")) () ")"))))) (; ";")) (expression_statement "*(long *)(param_1 + 0x28) = lVar8;" (assignment_expression "*(long *)(param_1 + 0x28) = lVar8" (pointer_expression "*(long *)(param_1 + 0x28)" (* "*") (cast_expression "(long *)(param_1 + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "lVar8")) (; ";")) (if_statement "if (0 < iVar2) {\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }" (if "if") (parenthesized_expression "(0 < iVar2)" (( "(") (binary_expression "0 < iVar2" (number_literal "0") (< "<") (identifier "iVar2")) () ")")) (compound_statement "{\n    lVar8 = *(long *)(param_2 + 200);\n    lVar9 = 0;\n    do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);\n  }" ({ "{") (expression_statement "lVar8 = *(long *)(param_2 + 200);" (assignment_expression "lVar8 = *(long *)(param_2 + 200)" (identifier "lVar8") (= "=") (pointer_expression "*(long *)(param_2 + 200)" (* "*") (cast_expression "(long *)(param_2 + 200)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 200)" (( "(") (binary_expression "param_2 + 200" (identifier "param_2") (+ "+") (number_literal "200")) () ")"))))) (; ";")) (expression_statement "lVar9 = 0;" (assignment_expression "lVar9 = 0" (identifier "lVar9") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);" (do "do") (compound_statement "{\n      puVar10 = (undefined8 *)(lVar8 + lVar9);\n      uVar5 = puVar10[1];\n      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;\n      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;\n      lVar9 = lVar9 + 0x10;\n    }" ({ "{") (expression_statement "puVar10 = (undefined8 *)(lVar8 + lVar9);" (assignment_expression "puVar10 = (undefined8 *)(lVar8 + lVar9)" (identifier "puVar10") (= "=") (cast_expression "(undefined8 *)(lVar8 + lVar9)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar8 + lVar9)" (( "(") (binary_expression "lVar8 + lVar9" (identifier "lVar8") (+ "+") (identifier "lVar9")) () ")")))) (; ";")) (expression_statement "uVar5 = puVar10[1];" (assignment_expression "uVar5 = puVar10[1]" (identifier "uVar5") (= "=") (subscript_expression "puVar10[1]" (identifier "puVar10") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "*(undefined8 *)((long)puVar7 + lVar9) = *puVar10;" (assignment_expression "*(undefined8 *)((long)puVar7 + lVar9) = *puVar10" (pointer_expression "*(undefined8 *)((long)puVar7 + lVar9)" (* "*") (cast_expression "(undefined8 *)((long)puVar7 + lVar9)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar7 + lVar9)" (( "(") (binary_expression "(long)puVar7 + lVar9" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (+ "+") (identifier "lVar9")) () ")")))) (= "=") (pointer_expression "*puVar10" (* "*") (identifier "puVar10"))) (; ";")) (expression_statement "((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;" (assignment_expression "((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5" (subscript_expression "((undefined8 *)((long)puVar7 + lVar9))[1]" (parenthesized_expression "((undefined8 *)((long)puVar7 + lVar9))" (( "(") (cast_expression "(undefined8 *)((long)puVar7 + lVar9)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar7 + lVar9)" (( "(") (binary_expression "(long)puVar7 + lVar9" (cast_expression "(long)puVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar7")) (+ "+") (identifier "lVar9")) () ")"))) () ")")) ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar5")) (; ";")) (expression_statement "lVar9 = lVar9 + 0x10;" (assignment_expression "lVar9 = lVar9 + 0x10" (identifier "lVar9") (= "=") (binary_expression "lVar9 + 0x10" (identifier "lVar9") (+ "+") (number_literal "0x10"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9)" (( "(") (binary_expression "((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9" (binary_expression "((ulong)(iVar2 - 1) + 1) * 0x10" (parenthesized_expression "((ulong)(iVar2 - 1) + 1)" (( "(") (binary_expression "(ulong)(iVar2 - 1) + 1" (call_expression "(ulong)(iVar2 - 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(iVar2 - 1)" (( "(") (binary_expression "iVar2 - 1" (identifier "iVar2") (- "-") (number_literal "1")) () ")"))) (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "0x10")) (!= "!=") (identifier "lVar9")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar3 = *(undefined4 *)(param_2 + 0x18);" (assignment_expression "uVar3 = *(undefined4 *)(param_2 + 0x18)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(param_2 + 0x18)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "cVar1 = *(char *)(param_2 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_2 + 0xe1)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(param_2 + 0xe1)" (* "*") (cast_expression "(char *)(param_2 + 0xe1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xe1)" (( "(") (binary_expression "param_2 + 0xe1" (identifier "param_2") (+ "+") (number_literal "0xe1")) () ")"))))) (; ";")) (expression_statement "*(undefined8 **)(param_1 + 200) = puVar7;" (assignment_expression "*(undefined8 **)(param_1 + 200) = puVar7" (pointer_expression "*(undefined8 **)(param_1 + 200)" (* "*") (cast_expression "(undefined8 **)(param_1 + 200)" (( "(") (type_descriptor "undefined8 **" (type_identifier "undefined8") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 200)" (( "(") (binary_expression "param_1 + 200" (identifier "param_1") (+ "+") (number_literal "200")) () ")")))) (= "=") (identifier "puVar7")) (; ";")) (expression_statement "*(int *)(param_1 + 0xc0) = iVar2;" (assignment_expression "*(int *)(param_1 + 0xc0) = iVar2" (pointer_expression "*(int *)(param_1 + 0xc0)" (* "*") (cast_expression "(int *)(param_1 + 0xc0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc0)" (( "(") (binary_expression "param_1 + 0xc0" (identifier "param_1") (+ "+") (number_literal "0xc0")) () ")")))) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x18) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x18) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x18)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "*(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);" (assignment_expression "*(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10)" (pointer_expression "*(undefined8 *)(param_1 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)(param_2 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "*(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);" (assignment_expression "*(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8)" (pointer_expression "*(undefined8 *)(param_1 + 8)" (* "*") (cast_expression "(undefined8 *)(param_1 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)(param_2 + 8)" (* "*") (cast_expression "(undefined8 *)(param_2 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "*(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);" (assignment_expression "*(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8)" (pointer_expression "*(undefined8 *)(param_1 + 0xd8)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0xd8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xd8)" (( "(") (binary_expression "param_1 + 0xd8" (identifier "param_1") (+ "+") (number_literal "0xd8")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)(param_2 + 0xd8)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0xd8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xd8)" (( "(") (binary_expression "param_2 + 0xd8" (identifier "param_2") (+ "+") (number_literal "0xd8")) () ")"))))) (; ";")) (if_statement "if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }\n  else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    plVar4 = *(long **)(param_2 + 0xf0);\n    if (plVar4 == (long *)0x0) goto LAB_00300efd;\n    if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }\n    *(undefined1 *)(param_2 + 0xe0) = uVar6;\n    *(undefined1 *)(param_2 + 0xe1) = 1;\n    cVar1 = *(char *)(param_1 + 0xe1);\n  }" ({ "{") (expression_statement "plVar4 = *(long **)(param_2 + 0xf0);" (assignment_expression "plVar4 = *(long **)(param_2 + 0xf0)" (identifier "plVar4") (= "=") (pointer_expression "*(long **)(param_2 + 0xf0)" (* "*") (cast_expression "(long **)(param_2 + 0xf0)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0xf0)" (( "(") (binary_expression "param_2 + 0xf0" (identifier "param_2") (+ "+") (number_literal "0xf0")) () ")"))))) (; ";")) (if_statement "if (plVar4 == (long *)0x0) goto LAB_00300efd;" (if "if") (parenthesized_expression "(plVar4 == (long *)0x0)" (( "(") (binary_expression "plVar4 == (long *)0x0" (identifier "plVar4") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00300efd;" (goto "goto") (statement_identifier "LAB_00300efd") (; ";"))) (if_statement "if ((char)plVar4[7] == '\0') {\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" (if "if") (parenthesized_expression "((char)plVar4[7] == '\0')" (( "(") (binary_expression "(char)plVar4[7] == '\0'" (cast_expression "(char)plVar4[7]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "plVar4[7]" (identifier "plVar4") ([ "[") (number_literal "7") (] "]"))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      uVar6 = 0x20;\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" ({ "{") (expression_statement "uVar6 = 0x20;" (assignment_expression "uVar6 = 0x20" (identifier "uVar6") (= "=") (number_literal "0x20")) (; ";")) (expression_statement "FUN_00319ac0(plVar4);" (call_expression "FUN_00319ac0(plVar4)" (identifier "FUN_00319ac0") (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")"))) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8" (pointer_expression "*(code **)(*plVar4 + 0x30)" (* "*") (cast_expression "(code **)(*plVar4 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x30)" (( "(") (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x30")) () ")")))) (!= "!=") (cast_expression "(code *)PTR_FUN_0043dfd8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_0043dfd8"))) () ")")) (compound_statement "{\n        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" ({ "{") (expression_statement "uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);" (assignment_expression "uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20)" (identifier "uVar6") (= "=") (call_expression "(**(code **)(*plVar4 + 0x30))(plVar4,0x20)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x30)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x30)" (* "*") (cast_expression "(code **)(*plVar4 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x30)" (( "(") (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x30")) () ")"))))) () ")")) (argument_list "(plVar4,0x20)" (( "(") (identifier "plVar4") (, ",") (number_literal "0x20") () ")")))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" (else "else") (compound_statement "{\n      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);\n    }" ({ "{") (expression_statement "uVar6 = *(undefined1 *)((long)plVar4 + 0x59);" (assignment_expression "uVar6 = *(undefined1 *)((long)plVar4 + 0x59)" (identifier "uVar6") (= "=") (pointer_expression "*(undefined1 *)((long)plVar4 + 0x59)" (* "*") (cast_expression "(undefined1 *)((long)plVar4 + 0x59)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar4 + 0x59)" (( "(") (binary_expression "(long)plVar4 + 0x59" (cast_expression "(long)plVar4" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar4")) (+ "+") (number_literal "0x59")) () ")"))))) (; ";")) (} "}")))) (expression_statement "*(undefined1 *)(param_2 + 0xe0) = uVar6;" (assignment_expression "*(undefined1 *)(param_2 + 0xe0) = uVar6" (pointer_expression "*(undefined1 *)(param_2 + 0xe0)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0xe0)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xe0)" (( "(") (binary_expression "param_2 + 0xe0" (identifier "param_2") (+ "+") (number_literal "0xe0")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "*(undefined1 *)(param_2 + 0xe1) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0xe1) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0xe1)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0xe1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xe1)" (( "(") (binary_expression "param_2 + 0xe1" (identifier "param_2") (+ "+") (number_literal "0xe1")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "cVar1 = *(char *)(param_1 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_1 + 0xe1)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(param_1 + 0xe1)" (* "*") (cast_expression "(char *)(param_1 + 0xe1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe1)" (( "(") (binary_expression "param_1 + 0xe1" (identifier "param_1") (+ "+") (number_literal "0xe1")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" (else "else") (compound_statement "{\n    cVar1 = *(char *)(param_1 + 0xe1);\n    uVar6 = *(undefined1 *)(param_2 + 0xe0);\n  }" ({ "{") (expression_statement "cVar1 = *(char *)(param_1 + 0xe1);" (assignment_expression "cVar1 = *(char *)(param_1 + 0xe1)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(param_1 + 0xe1)" (* "*") (cast_expression "(char *)(param_1 + 0xe1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe1)" (( "(") (binary_expression "param_1 + 0xe1" (identifier "param_1") (+ "+") (number_literal "0xe1")) () ")"))))) (; ";")) (expression_statement "uVar6 = *(undefined1 *)(param_2 + 0xe0);" (assignment_expression "uVar6 = *(undefined1 *)(param_2 + 0xe0)" (identifier "uVar6") (= "=") (pointer_expression "*(undefined1 *)(param_2 + 0xe0)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0xe0)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xe0)" (( "(") (binary_expression "param_2 + 0xe0" (identifier "param_2") (+ "+") (number_literal "0xe0")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (cVar1 == '\0') {\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }" (if "if") (parenthesized_expression "(cVar1 == '\0')" (( "(") (binary_expression "cVar1 == '\0'" (identifier "cVar1") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    plVar4 = *(long **)(param_1 + 0xf0);\n    if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }\n    if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }\n    *(undefined1 *)(param_1 + 0xe1) = 1;\n  }" ({ "{") (expression_statement "plVar4 = *(long **)(param_1 + 0xf0);" (assignment_expression "plVar4 = *(long **)(param_1 + 0xf0)" (identifier "plVar4") (= "=") (pointer_expression "*(long **)(param_1 + 0xf0)" (* "*") (cast_expression "(long **)(param_1 + 0xf0)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xf0)" (( "(") (binary_expression "param_1 + 0xf0" (identifier "param_1") (+ "+") (number_literal "0xf0")) () ")"))))) (; ";")) (if_statement "if (plVar4 == (long *)0x0) {\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }" (if "if") (parenthesized_expression "(plVar4 == (long *)0x0)" (( "(") (binary_expression "plVar4 == (long *)0x0" (identifier "plVar4") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\nLAB_00300efd:\n                    \n      FUN_00319450();\n    }" ({ "{") (labeled_statement "LAB_00300efd:\n                    \n      FUN_00319450();" (statement_identifier "LAB_00300efd") (: ":") (expression_statement "FUN_00319450();" (call_expression "FUN_00319450()" (identifier "FUN_00319450") (argument_list "()" (( "(") () ")"))) (; ";"))) (} "}"))) (if_statement "if ((char)plVar4[7] == '\0') {\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" (if "if") (parenthesized_expression "((char)plVar4[7] == '\0')" (( "(") (binary_expression "(char)plVar4[7] == '\0'" (cast_expression "(char)plVar4[7]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "plVar4[7]" (identifier "plVar4") ([ "[") (number_literal "7") (] "]"))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      FUN_00319ac0(plVar4);\n      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }\n    }" ({ "{") (expression_statement "FUN_00319ac0(plVar4);" (call_expression "FUN_00319ac0(plVar4)" (identifier "FUN_00319ac0") (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")"))) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8" (pointer_expression "*(code **)(*plVar4 + 0x30)" (* "*") (cast_expression "(code **)(*plVar4 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x30)" (( "(") (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x30")) () ")")))) (!= "!=") (cast_expression "(code *)PTR_FUN_0043dfd8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_0043dfd8"))) () ")")) (compound_statement "{\n        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);\n      }" ({ "{") (expression_statement "(**(code **)(*plVar4 + 0x30))(plVar4,0x20);" (call_expression "(**(code **)(*plVar4 + 0x30))(plVar4,0x20)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x30)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x30)" (* "*") (cast_expression "(code **)(*plVar4 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x30)" (( "(") (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x30")) () ")"))))) () ")")) (argument_list "(plVar4,0x20)" (( "(") (identifier "plVar4") (, ",") (number_literal "0x20") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "*(undefined1 *)(param_1 + 0xe1) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0xe1) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0xe1)" (* "*") (cast_expression "(undefined1 *)(param_1 + 0xe1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe1)" (( "(") (binary_expression "param_1 + 0xe1" (identifier "param_1") (+ "+") (number_literal "0xe1")) () ")")))) (= "=") (number_literal "1")) (; ";")) (} "}"))) (expression_statement "*(undefined1 *)(param_1 + 0xe0) = uVar6;" (assignment_expression "*(undefined1 *)(param_1 + 0xe0) = uVar6" (pointer_expression "*(undefined1 *)(param_1 + 0xe0)" (* "*") (cast_expression "(undefined1 *)(param_1 + 0xe0)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe0)" (( "(") (binary_expression "param_1 + 0xe0" (identifier "param_1") (+ "+") (number_literal "0xe0")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "FUN_002dca60(local_30,param_2 + 0xd0);" (call_expression "FUN_002dca60(local_30,param_2 + 0xd0)" (identifier "FUN_002dca60") (argument_list "(local_30,param_2 + 0xd0)" (( "(") (identifier "local_30") (, ",") (binary_expression "param_2 + 0xd0" (identifier "param_2") (+ "+") (number_literal "0xd0")) () ")"))) (; ";")) (expression_statement "FUN_002dd110(param_1 + 0xd0,local_30);" (call_expression "FUN_002dd110(param_1 + 0xd0,local_30)" (identifier "FUN_002dd110") (argument_list "(param_1 + 0xd0,local_30)" (( "(") (binary_expression "param_1 + 0xd0" (identifier "param_1") (+ "+") (number_literal "0xd0")) (, ",") (identifier "local_30") () ")"))) (; ";")) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" (identifier "FUN_002dd1a0") (argument_list "(local_30)" (( "(") (identifier "local_30") () ")"))) (; ";")) (expression_statement "FUN_00300bb0(param_1,param_1 + 0xd0);" (call_expression "FUN_00300bb0(param_1,param_1 + 0xd0)" (identifier "FUN_00300bb0") (argument_list "(param_1,param_1 + 0xd0)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_1 + 0xd0" (identifier "param_1") (+ "+") (number_literal "0xd0")) () ")"))) (; ";")) (expression_statement "FUN_00318c70(param_1,2);" (call_expression "FUN_00318c70(param_1,2)" (identifier "FUN_00318c70") (argument_list "(param_1,2)" (( "(") (identifier "param_1") (, ",") (number_literal "2") () ")"))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);" (assignment_expression "*(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c)" (pointer_expression "*(undefined4 *)(param_1 + 0x1c)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x1c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(param_2 + 0x1c)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x1c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x1c)" (( "(") (binary_expression "param_2 + 0x1c" (identifier "param_2") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));" (call_expression "FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20))" (identifier "FUN_00300860") (argument_list "(param_1,*(undefined4 *)(param_1 + 0x20))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0x20)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x20)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) () ")"))) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* std::ios::copyfmt(std::ios const&) */

type_1 * __thiscall std::type_1::copyfmt(type_1 *var_4,type_1 *var_5)

{
  type_1 var_18;
  int var_15;
  type_2 uVar3;
  var_1<var_2> *var_19;
  type_3 uVar5;
  var_1<var_2> var_3;
  type_1 *var_17;
  long var_7;
  long var_16;
  type_1 *var_8;
  type_4 local_30 [8];
  
  if (var_4 == var_5) {
    return var_4;
  }
  var_17 = var_4 + 0x40;
  if (*(int *)(var_5 + 0xc0) < 9) {
LAB_00300c81:
    var_7 = *(long *)(var_5 + 0x28);
  }
  else {
    var_17 = (type_1 *)var_6((long)*(int *)(var_5 + 0xc0) << 4);
    var_7 = (long)*(int *)(var_5 + 0xc0) + -1;
    var_8 = var_17;
    if (var_7 < 0) goto LAB_00300c81;
    do {
      var_7 = var_7 + -1;
      *(type_3 *)var_8 = 0;
      *(type_3 *)(var_8 + 8) = 0;
      var_8 = var_8 + 0x10;
    } while (var_7 != -1);
    var_7 = *(long *)(var_5 + 0x28);
  }
  if (var_7 != 0) {
    if (var_9 == (type_5 *)0x0) {
      *(int *)(var_7 + 0x14) = *(int *)(var_7 + 0x14) + 1;
    }
    else {
      var_10();
      *(int *)(var_7 + 0x14) = *(int *)(var_7 + 0x14) + 1;
      var_11();
    }
  }
  ios_base::var_12((type_6 *)var_4,0);
  var_8 = *(type_1 **)(var_4 + 200);
  if (var_8 != var_4 + 0x40) {
    if (var_8 != (type_1 *)0x0) {
      var_13(var_8);
    }
    *(type_3 *)(var_4 + 200) = 0;
  }
  ios_base::var_14((type_6 *)var_4);
  var_15 = *(int *)(var_5 + 0xc0);
  *(long *)(var_4 + 0x28) = var_7;
  if (0 < var_15) {
    var_7 = *(long *)(var_5 + 200);
    var_16 = 0;
    do {
      uVar5 = ((type_3 *)(var_7 + var_16))[1];
      *(type_3 *)(var_17 + var_16) = *(type_3 *)(var_7 + var_16);
      *(type_3 *)(var_17 + var_16 + 8) = uVar5;
      var_16 = var_16 + 0x10;
    } while (((ulong)(var_15 - 1) + 1) * 0x10 != var_16);
  }
  uVar3 = *(type_2 *)(var_5 + 0x18);
  var_18 = var_5[0xe1];
  *(type_1 **)(var_4 + 200) = var_17;
  *(int *)(var_4 + 0xc0) = var_15;
  *(type_2 *)(var_4 + 0x18) = uVar3;
  *(type_3 *)(var_4 + 0x10) = *(type_3 *)(var_5 + 0x10);
  *(type_3 *)(var_4 + 8) = *(type_3 *)(var_5 + 8);
  *(type_3 *)(var_4 + 0xd8) = *(type_3 *)(var_5 + 0xd8);
  if (var_18 == (type_1)0x0) {
    var_19 = *(var_1<var_2> **var_21)(var_5 + 0xf0);
    if (var_19 == (var_1<var_2> *)0x0) goto LAB_00300efd;
    if (var_19[0x38] == (var_1<var_2>)0x0) {
      var_3 = (var_1<var_2>)0x20;
      var_1<var_2>::var_20(var_19);
      if (*(type_7 **)(*(long *)var_19 + 0x30) != (type_7 *)PTR_do_widen_0043dfd8) {
        var_3 = (var_1<var_2>var_21)(**(type_7 **)(*(long *)var_19 + 0x30))(var_19,0x20);
      }
    }
    else {
      var_3 = var_19[0x59];
    }
    *(var_1<var_2> *var_21)(var_5 + 0xe0) = var_3;
    var_5[0xe1] = (type_1)0x1;
    var_18 = var_4[0xe1];
  }
  else {
    var_18 = var_4[0xe1];
    var_3 = *(var_1<var_2> *var_21)(var_5 + 0xe0);
  }
  if (var_18 == (type_1)0x0) {
    var_19 = *(var_1<var_2> **var_21)(var_4 + 0xf0);
    if (var_19 == (var_1<var_2> *)0x0) {
LAB_00300efd:
                    /* WARNING: Subroutine does not return */
      var_22();
    }
    if (var_19[0x38] == (var_1<var_2>)0x0) {
      var_1<var_2>::var_20(var_19);
      if (*(type_7 **)(*(long *)var_19 + 0x30) != (type_7 *)PTR_do_widen_0043dfd8) {
        (**(type_7 **)(*(long *)var_19 + 0x30))(var_19,0x20);
      }
    }
    var_4[0xe1] = (type_1)0x1;
  }
  *(var_1<var_2> *var_21)(var_4 + 0xe0) = var_3;
  locale::type_4(local_30,(type_4 *)(var_5 + 0xd0));
  locale::operator=((type_4 *)(var_4 + 0xd0),local_30);
  locale::~type_4(local_30);
  var_23(var_4,(type_4 *)(var_4 + 0xd0));
  ios_base::var_12((type_6 *)var_4,2);
  *(type_2 *)(var_4 + 0x1c) = *(type_2 *)(var_5 + 0x1c);
  var_24(var_4,*(type_8 *)(var_4 + 0x20));
  return var_4;
}


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

{
  char cVar1;
  int iVar2;
  undefined4 uVar3;
  long *plVar4;
  undefined8 uVar5;
  undefined1 uVar6;
  undefined8 *puVar7;
  long lVar8;
  long lVar9;
  undefined8 *puVar10;
  undefined1 local_30 [8];
  
  if (param_1 == param_2) {
    return param_1;
  }
  puVar7 = (undefined8 *)(param_1 + 0x40);
  if (*(int *)(param_2 + 0xc0) < 9) {
LAB_00300c81:
    lVar8 = *(long *)(param_2 + 0x28);
  }
  else {
    puVar7 = (undefined8 *)thunk_FUN_002d9490((long)*(int *)(param_2 + 0xc0) << 4);
    lVar8 = (long)*(int *)(param_2 + 0xc0) + -1;
    puVar10 = puVar7;
    if (lVar8 < 0) goto LAB_00300c81;
    do {
      lVar8 = lVar8 + -1;
      *puVar10 = 0;
      puVar10[1] = 0;
      puVar10 = puVar10 + 2;
    } while (lVar8 != -1);
    lVar8 = *(long *)(param_2 + 0x28);
  }
  if (lVar8 != 0) {
    if (PTR___pthread_key_create_0043dee8 == (undefined *)0x0) {
      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;
    }
    else {
      LOCK();
      *(int *)(lVar8 + 0x14) = *(int *)(lVar8 + 0x14) + 1;
      UNLOCK();
    }
  }
  FUN_00318c70(param_1,0);
  if (*(undefined8 **)(param_1 + 200) != (undefined8 *)(param_1 + 0x40)) {
    if (*(undefined8 **)(param_1 + 200) != (undefined8 *)0x0) {
      thunk_FUN_002dac60();
    }
    *(undefined8 *)(param_1 + 200) = 0;
  }
  FUN_00318cb0(param_1);
  iVar2 = *(int *)(param_2 + 0xc0);
  *(long *)(param_1 + 0x28) = lVar8;
  if (0 < iVar2) {
    lVar8 = *(long *)(param_2 + 200);
    lVar9 = 0;
    do {
      puVar10 = (undefined8 *)(lVar8 + lVar9);
      uVar5 = puVar10[1];
      *(undefined8 *)((long)puVar7 + lVar9) = *puVar10;
      ((undefined8 *)((long)puVar7 + lVar9))[1] = uVar5;
      lVar9 = lVar9 + 0x10;
    } while (((ulong)(iVar2 - 1) + 1) * 0x10 != lVar9);
  }
  uVar3 = *(undefined4 *)(param_2 + 0x18);
  cVar1 = *(char *)(param_2 + 0xe1);
  *(undefined8 **)(param_1 + 200) = puVar7;
  *(int *)(param_1 + 0xc0) = iVar2;
  *(undefined4 *)(param_1 + 0x18) = uVar3;
  *(undefined8 *)(param_1 + 0x10) = *(undefined8 *)(param_2 + 0x10);
  *(undefined8 *)(param_1 + 8) = *(undefined8 *)(param_2 + 8);
  *(undefined8 *)(param_1 + 0xd8) = *(undefined8 *)(param_2 + 0xd8);
  if (cVar1 == '\0') {
    plVar4 = *(long **)(param_2 + 0xf0);
    if (plVar4 == (long *)0x0) goto LAB_00300efd;
    if ((char)plVar4[7] == '\0') {
      uVar6 = 0x20;
      FUN_00319ac0(plVar4);
      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {
        uVar6 = (**(code **)(*plVar4 + 0x30))(plVar4,0x20);
      }
    }
    else {
      uVar6 = *(undefined1 *)((long)plVar4 + 0x59);
    }
    *(undefined1 *)(param_2 + 0xe0) = uVar6;
    *(undefined1 *)(param_2 + 0xe1) = 1;
    cVar1 = *(char *)(param_1 + 0xe1);
  }
  else {
    cVar1 = *(char *)(param_1 + 0xe1);
    uVar6 = *(undefined1 *)(param_2 + 0xe0);
  }
  if (cVar1 == '\0') {
    plVar4 = *(long **)(param_1 + 0xf0);
    if (plVar4 == (long *)0x0) {
LAB_00300efd:
                    /* WARNING: Subroutine does not return */
      FUN_00319450();
    }
    if ((char)plVar4[7] == '\0') {
      FUN_00319ac0(plVar4);
      if (*(code **)(*plVar4 + 0x30) != (code *)PTR_FUN_0043dfd8) {
        (**(code **)(*plVar4 + 0x30))(plVar4,0x20);
      }
    }
    *(undefined1 *)(param_1 + 0xe1) = 1;
  }
  *(undefined1 *)(param_1 + 0xe0) = uVar6;
  FUN_002dca60(local_30,param_2 + 0xd0);
  FUN_002dd110(param_1 + 0xd0,local_30);
  FUN_002dd1a0(local_30);
  FUN_00300bb0(param_1,param_1 + 0xd0);
  FUN_00318c70(param_1,2);
  *(undefined4 *)(param_1 + 0x1c) = *(undefined4 *)(param_2 + 0x1c);
  FUN_00300860(param_1,*(undefined4 *)(param_1 + 0x20));
  return param_1;
}

