
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 fts5FreeCursorComponents(Fts5Cursor *pCsr)

{
  char *pcVar1;
  sqlite3_vtab *psVar2;
  sqlite3_stmt *pStmt;
  char *pcVar3;
  int iVar4;
  Fts5Sorter *p;
  Fts5Auxdata *pFVar5;
  Fts5Auxdata *p_00;
  uint uVar6;
  undefined4 *puVar7;
  byte bVar8;
  
  bVar8 = 0;
  psVar2 = (pCsr->base).pVtab;
  sqlite3_free(pCsr->aInstIter);
  sqlite3_free(pCsr->aInst);
  pStmt = pCsr->pStmt;
  if (pStmt != (sqlite3_stmt *)0x0) {
    if (pCsr->ePlan == 5) {
      pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;
      iVar4 = *(int *)(pcVar1 + 0x18);
    }
    else {
      pcVar3 = psVar2[1].zErrMsg;
      pcVar1 = pcVar3 + 8;
      iVar4 = *(int *)(pcVar3 + 0x20);
    }
    if (iVar4 == 0) {
      sqlite3_reset(pStmt);
      *(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;
    }
    else {
      sqlite3_finalize(pStmt);
    }
  }
  p = pCsr->pSorter;
  if (p != (Fts5Sorter *)0x0) {
    sqlite3_finalize(p->pStmt);
    sqlite3_free(p);
  }
  if ((pCsr->ePlan != 2) && (pCsr->pExpr != (Fts5Expr *)0x0)) {
    sqlite3Fts5ExprFree(pCsr->pExpr);
  }
  p_00 = pCsr->pAuxdata;
  while (p_00 != (Fts5Auxdata *)0x0) {
    pFVar5 = p_00->pNext;
    if (p_00->xDelete != (_func_void_void_ptr *)0x0) {
      (*p_00->xDelete)(p_00->pPtr);
    }
    sqlite3_free(p_00);
    p_00 = pFVar5;
  }
  sqlite3_finalize(pCsr->pRankArgStmt);
  sqlite3_free(pCsr->apRankArg);
  if ((pCsr->csrflags & 0x10) != 0) {
    sqlite3_free(pCsr->zRank);
    sqlite3_free(pCsr->zRankArgs);
  }
  pCsr->ePlan = 0;
  pCsr->aInst = (int *)0x0;
  puVar7 = (undefined4 *)((uint)&pCsr->bDesc & 0xfffffffc);
  uVar6 = (uint)((int)pCsr + (0x74 - (int)puVar7)) >> 2;
  for (; uVar6 != 0; uVar6 = uVar6 - 1) {
    *puVar7 = 0;
    puVar7 = puVar7 + (uint)bVar8 * -2 + 1;
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 FUN_0008ff40(int *param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  undefined4 *puVar5;
  byte bVar6;
  
  bVar6 = 0;
  iVar1 = *param_1;
  FUN_000264d0(param_1[0x19]);
  FUN_000264d0(param_1[0x1c]);
  iVar2 = param_1[0xb];
  if (iVar2 != 0) {
    if (param_1[5] == 5) {
      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;
      iVar3 = *(int *)(iVar1 + 0x18);
    }
    else {
      iVar3 = *(int *)(iVar1 + 0x14);
      iVar1 = iVar3 + 8;
      iVar3 = *(int *)(iVar3 + 0x20);
    }
    if (iVar3 == 0) {
      FUN_0008fe60(iVar2);
      *(int *)(iVar1 + 0x18) = iVar2;
    }
    else {
      FUN_0008b430(iVar2);
    }
  }
  puVar5 = (undefined4 *)param_1[0xd];
  if (puVar5 != (undefined4 *)0x0) {
    FUN_0008b430(*puVar5);
    FUN_000264d0(puVar5);
  }
  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {
    FUN_0008b770();
  }
  iVar1 = param_1[0x18];
  while (iVar1 != 0) {
    iVar2 = *(int *)(iVar1 + 0xc);
    if (*(code **)(iVar1 + 8) != (code *)0x0) {
      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));
    }
    FUN_000264d0(iVar1);
    iVar1 = iVar2;
  }
  FUN_0008b430(param_1[0x16]);
  FUN_000264d0(param_1[0x15]);
  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {
    FUN_000264d0(param_1[0x11]);
    FUN_000264d0(param_1[0x12]);
  }
  param_1[5] = 0;
  param_1[0x1c] = 0;
  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);
  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;
      uVar4 != 0; uVar4 = uVar4 - 1) {
    *puVar5 = 0;
    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;
  }
  return;
}


PUSH EBP
PUSH EDI
MOV EDI,EAX
PUSH ESI
PUSH EBX
CALL 0x00014d20
ADD EBX,0xbaf89
SUB ESP,0x18
MOV ESI,dword ptr [EAX]
PUSH dword ptr [EAX + 0x64]
CALL 0x000264d0
POP ECX
PUSH dword ptr [EDI + 0x70]
CALL 0x000264d0
MOV EBP,dword ptr [EDI + 0x2c]
ADD ESP,0x10
TEST EBP,EBP
JZ 0x0008ff9d
CMP dword ptr [EDI + 0x14],0x5
MOV EAX,0x2
JZ 0x00090050
MOV EDX,dword ptr [ESI + 0x14]
LEA ESI,[EDX + EAX*0x4]
MOV ECX,dword ptr [ESI + 0x18]
TEST ECX,ECX
JZ 0x0009006b
SUB ESP,0xc
PUSH EBP
CALL 0x0008b430
ADD ESP,0x10
MOV ESI,dword ptr [EDI + 0x34]
TEST ESI,ESI
JZ 0x0008ffb9
SUB ESP,0xc
PUSH dword ptr [ESI]
CALL 0x0008b430
MOV dword ptr [ESP],ESI
CALL 0x000264d0
ADD ESP,0x10
CMP dword ptr [EDI + 0x14],0x2
JZ 0x0008ffcb
MOV EAX,dword ptr [EDI + 0x30]
TEST EAX,EAX
JZ 0x0008ffcb
CALL 0x0008b770
MOV ESI,dword ptr [EDI + 0x60]
TEST ESI,ESI
JZ 0x0008ffff
LEA ESI,[ESI]
MOV EAX,dword ptr [ESI + 0x8]
MOV EBP,dword ptr [ESI + 0xc]
TEST EAX,EAX
JZ 0x0008ffed
SUB ESP,0xc
PUSH dword ptr [ESI + 0x4]
CALL EAX
ADD ESP,0x10
SUB ESP,0xc
PUSH ESI
MOV ESI,EBP
CALL 0x000264d0
ADD ESP,0x10
TEST EBP,EBP
JNZ 0x0008ffd8
SUB ESP,0xc
PUSH dword ptr [EDI + 0x58]
CALL 0x0008b430
POP EDX
PUSH dword ptr [EDI + 0x54]
CALL 0x000264d0
ADD ESP,0x10
TEST byte ptr [EDI + 0x38],0x10
JNZ 0x00090080
MOV dword ptr [EDI + 0x14],0x0
LEA ECX,[EDI + 0x14]
ADD EDI,0x18
XOR EAX,EAX
MOV dword ptr [EDI + 0x58],0x0
AND EDI,0xfffffffc
SUB ECX,EDI
ADD ECX,0x60
SHR ECX,0x2
STOSD.REP ES:EDI
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,dword ptr [EDI + 0x18]
XOR EAX,EAX
TEST EDX,EDX
MOV EDX,dword ptr [ESI + 0x14]
SETNZ AL
LEA ESI,[EDX + EAX*0x4]
MOV ECX,dword ptr [ESI + 0x18]
TEST ECX,ECX
JNZ 0x0008ff91
SUB ESP,0xc
PUSH EBP
CALL 0x0008fe60
MOV dword ptr [ESI + 0x18],EBP
ADD ESP,0x10
JMP 0x0008ff9d
SUB ESP,0xc
PUSH dword ptr [EDI + 0x44]
CALL 0x000264d0
POP EAX
PUSH dword ptr [EDI + 0x48]
CALL 0x000264d0
ADD ESP,0x10
JMP 0x0009001c
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 FUN_0008ff40(int *param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  byte bVar6;\n  \n  bVar6 = 0;\n  iVar1 = *param_1;\n  FUN_000264d0(param_1[0x19]);\n  FUN_000264d0(param_1[0x1c]);\n  iVar2 = param_1[0xb];\n  if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }\n  puVar5 = (undefined4 *)param_1[0xd];\n  if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }\n  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }\n  iVar1 = param_1[0x18];\n  while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }\n  FUN_0008b430(param_1[0x16]);\n  FUN_000264d0(param_1[0x15]);\n  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }\n  param_1[5] = 0;\n  param_1[0x1c] = 0;\n  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);\n  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 FUN_0008ff40(int *param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  byte bVar6;\n  \n  bVar6 = 0;\n  iVar1 = *param_1;\n  FUN_000264d0(param_1[0x19]);\n  FUN_000264d0(param_1[0x1c]);\n  iVar2 = param_1[0xb];\n  if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }\n  puVar5 = (undefined4 *)param_1[0xd];\n  if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }\n  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }\n  iVar1 = param_1[0x18];\n  while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }\n  FUN_0008b430(param_1[0x16]);\n  FUN_000264d0(param_1[0x15]);\n  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }\n  param_1[5] = 0;\n  param_1[0x1c] = 0;\n  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);\n  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0008ff40(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  byte bVar6;\n  \n  bVar6 = 0;\n  iVar1 = *param_1;\n  FUN_000264d0(param_1[0x19]);\n  FUN_000264d0(param_1[0x1c]);\n  iVar2 = param_1[0xb];\n  if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }\n  puVar5 = (undefined4 *)param_1[0xd];\n  if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }\n  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }\n  iVar1 = param_1[0x18];\n  while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }\n  FUN_0008b430(param_1[0x16]);\n  FUN_000264d0(param_1[0x15]);\n  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }\n  param_1[5] = 0;\n  param_1[0x1c] = 0;\n  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);\n  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "byte bVar6;" type_identifier identifier ;) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = *param_1;" (assignment_expression "iVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "FUN_000264d0(param_1[0x19]);" (call_expression "FUN_000264d0(param_1[0x19])" identifier (argument_list "(param_1[0x19])" ( (subscript_expression "param_1[0x19]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_000264d0(param_1[0x1c]);" (call_expression "FUN_000264d0(param_1[0x1c])" identifier (argument_list "(param_1[0x1c])" ( (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) ))) ;) (expression_statement "iVar2 = param_1[0xb];" (assignment_expression "iVar2 = param_1[0xb]" identifier = (subscript_expression "param_1[0xb]" identifier [ number_literal ])) ;) (if_statement "if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }" { (if_statement "if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" if (parenthesized_expression "(param_1[5] == 5)" ( (binary_expression "param_1[5] == 5" (subscript_expression "param_1[5]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }" { (expression_statement "iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;" (assignment_expression "iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4" identifier = (binary_expression "*(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4" (pointer_expression "*(int *)(iVar1 + 0x14)" * (cast_expression "(int *)(iVar1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) )))) + (binary_expression "(uint)(param_1[6] != 0) * 4" (call_expression "(uint)(param_1[6] != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[6] != 0)" ( (binary_expression "param_1[6] != 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) != number_literal) ))) * number_literal))) ;) (expression_statement "iVar3 = *(int *)(iVar1 + 0x18);" (assignment_expression "iVar3 = *(int *)(iVar1 + 0x18)" identifier = (pointer_expression "*(int *)(iVar1 + 0x18)" * (cast_expression "(int *)(iVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x18)" ( (binary_expression "iVar1 + 0x18" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" else (compound_statement "{\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" { (expression_statement "iVar3 = *(int *)(iVar1 + 0x14);" (assignment_expression "iVar3 = *(int *)(iVar1 + 0x14)" identifier = (pointer_expression "*(int *)(iVar1 + 0x14)" * (cast_expression "(int *)(iVar1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = iVar3 + 8;" (assignment_expression "iVar1 = iVar3 + 8" identifier = (binary_expression "iVar3 + 8" identifier + number_literal)) ;) (expression_statement "iVar3 = *(int *)(iVar3 + 0x20);" (assignment_expression "iVar3 = *(int *)(iVar3 + 0x20)" identifier = (pointer_expression "*(int *)(iVar3 + 0x20)" * (cast_expression "(int *)(iVar3 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x20)" ( (binary_expression "iVar3 + 0x20" identifier + number_literal) ))))) ;) }))) (if_statement "if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }" { (expression_statement "FUN_0008fe60(iVar2);" (call_expression "FUN_0008fe60(iVar2)" identifier (argument_list "(iVar2)" ( identifier ))) ;) (expression_statement "*(int *)(iVar1 + 0x18) = iVar2;" (assignment_expression "*(int *)(iVar1 + 0x18) = iVar2" (pointer_expression "*(int *)(iVar1 + 0x18)" * (cast_expression "(int *)(iVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x18)" ( (binary_expression "iVar1 + 0x18" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      FUN_0008b430(iVar2);\n    }" else (compound_statement "{\n      FUN_0008b430(iVar2);\n    }" { (expression_statement "FUN_0008b430(iVar2);" (call_expression "FUN_0008b430(iVar2)" identifier (argument_list "(iVar2)" ( identifier ))) ;) }))) })) (expression_statement "puVar5 = (undefined4 *)param_1[0xd];" (assignment_expression "puVar5 = (undefined4 *)param_1[0xd]" identifier = (cast_expression "(undefined4 *)param_1[0xd]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0xd]" identifier [ number_literal ]))) ;) (if_statement "if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }" if (parenthesized_expression "(puVar5 != (undefined4 *)0x0)" ( (binary_expression "puVar5 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }" { (expression_statement "FUN_0008b430(*puVar5);" (call_expression "FUN_0008b430(*puVar5)" identifier (argument_list "(*puVar5)" ( (pointer_expression "*puVar5" * identifier) ))) ;) (expression_statement "FUN_000264d0(puVar5);" (call_expression "FUN_000264d0(puVar5)" identifier (argument_list "(puVar5)" ( identifier ))) ;) })) (if_statement "if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }" if (parenthesized_expression "((param_1[5] != 2) && (param_1[0xc] != 0))" ( (binary_expression "(param_1[5] != 2) && (param_1[0xc] != 0)" (parenthesized_expression "(param_1[5] != 2)" ( (binary_expression "param_1[5] != 2" (subscript_expression "param_1[5]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "(param_1[0xc] != 0)" ( (binary_expression "param_1[0xc] != 0" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) != number_literal) ))) )) (compound_statement "{\n    FUN_0008b770();\n  }" { (expression_statement "FUN_0008b770();" (call_expression "FUN_0008b770()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar1 = param_1[0x18];" (assignment_expression "iVar1 = param_1[0x18]" identifier = (subscript_expression "param_1[0x18]" identifier [ number_literal ])) ;) (while_statement "while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }" while (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }" { (expression_statement "iVar2 = *(int *)(iVar1 + 0xc);" (assignment_expression "iVar2 = *(int *)(iVar1 + 0xc)" identifier = (pointer_expression "*(int *)(iVar1 + 0xc)" * (cast_expression "(int *)(iVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }" if (parenthesized_expression "(*(code **)(iVar1 + 8) != (code *)0x0)" ( (binary_expression "*(code **)(iVar1 + 8) != (code *)0x0" (pointer_expression "*(code **)(iVar1 + 8)" * (cast_expression "(code **)(iVar1 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }" { (expression_statement "(**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));" (call_expression "(**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4))" (parenthesized_expression "(**(code **)(iVar1 + 8))" ( (pointer_expression "**(code **)(iVar1 + 8)" * (pointer_expression "*(code **)(iVar1 + 8)" * (cast_expression "(code **)(iVar1 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(iVar1 + 4))" ( (pointer_expression "*(undefined4 *)(iVar1 + 4)" * (cast_expression "(undefined4 *)(iVar1 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))) ))) ;) })) (expression_statement "FUN_000264d0(iVar1);" (call_expression "FUN_000264d0(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "iVar1 = iVar2;" (assignment_expression "iVar1 = iVar2" identifier = identifier) ;) })) (expression_statement "FUN_0008b430(param_1[0x16]);" (call_expression "FUN_0008b430(param_1[0x16])" identifier (argument_list "(param_1[0x16])" ( (subscript_expression "param_1[0x16]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_000264d0(param_1[0x15]);" (call_expression "FUN_000264d0(param_1[0x15])" identifier (argument_list "(param_1[0x15])" ( (subscript_expression "param_1[0x15]" identifier [ number_literal ]) ))) ;) (if_statement "if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0xe) & 0x10) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0xe) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0xe) & 0x10)" ( (binary_expression "*(byte *)(param_1 + 0xe) & 0x10" (pointer_expression "*(byte *)(param_1 + 0xe)" * (cast_expression "(byte *)(param_1 + 0xe)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }" { (expression_statement "FUN_000264d0(param_1[0x11]);" (call_expression "FUN_000264d0(param_1[0x11])" identifier (argument_list "(param_1[0x11])" ( (subscript_expression "param_1[0x11]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_000264d0(param_1[0x12]);" (call_expression "FUN_000264d0(param_1[0x12])" identifier (argument_list "(param_1[0x12])" ( (subscript_expression "param_1[0x12]" identifier [ number_literal ]) ))) ;) })) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x1c] = 0;" (assignment_expression "param_1[0x1c] = 0" (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);" (assignment_expression "puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc)" identifier = (cast_expression "(undefined4 *)((uint)(param_1 + 6) & 0xfffffffc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)(param_1 + 6) & 0xfffffffc)" ( (binary_expression "(uint)(param_1 + 6) & 0xfffffffc" (call_expression "(uint)(param_1 + 6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1 + 6)" ( (binary_expression "param_1 + 6" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }" for ( (assignment_expression "uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2" identifier = (binary_expression "(uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2" (call_expression "(uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)))" ( (binary_expression "(int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))" ( (binary_expression "0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)" number_literal - (cast_expression "(int)((uint)(param_1 + 6) & 0xfffffffc)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(param_1 + 6) & 0xfffffffc)" ( (binary_expression "(uint)(param_1 + 6) & 0xfffffffc" (call_expression "(uint)(param_1 + 6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1 + 6)" ( (binary_expression "param_1 + 6" identifier + number_literal) ))) & number_literal) )))) ))) ))) >> number_literal)) ; (binary_expression "uVar4 != 0" identifier != number_literal) ; (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ) (compound_statement "{\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }" { (expression_statement "*puVar5 = 0;" (assignment_expression "*puVar5 = 0" (pointer_expression "*puVar5" * identifier) = number_literal) ;) (expression_statement "puVar5 = puVar5 + (uint)bVar6 * -2 + 1;" (assignment_expression "puVar5 = puVar5 + (uint)bVar6 * -2 + 1" identifier = (binary_expression "puVar5 + (uint)bVar6 * -2 + 1" (binary_expression "puVar5 + (uint)bVar6 * -2" identifier + (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 fts5FreeCursorComponents(Fts5Cursor *pCsr)\n\n{\n  char *pcVar1;\n  sqlite3_vtab *psVar2;\n  sqlite3_stmt *pStmt;\n  char *pcVar3;\n  int iVar4;\n  Fts5Sorter *p;\n  Fts5Auxdata *pFVar5;\n  Fts5Auxdata *p_00;\n  uint uVar6;\n  undefined4 *puVar7;\n  byte bVar8;\n  \n  bVar8 = 0;\n  psVar2 = (pCsr->base).pVtab;\n  sqlite3_free(pCsr->aInstIter);\n  sqlite3_free(pCsr->aInst);\n  pStmt = pCsr->pStmt;\n  if (pStmt != (sqlite3_stmt *)0x0) {\n    if (pCsr->ePlan == 5) {\n      pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;\n      iVar4 = *(int *)(pcVar1 + 0x18);\n    }\n    else {\n      pcVar3 = psVar2[1].zErrMsg;\n      pcVar1 = pcVar3 + 8;\n      iVar4 = *(int *)(pcVar3 + 0x20);\n    }\n    if (iVar4 == 0) {\n      sqlite3_reset(pStmt);\n      *(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;\n    }\n    else {\n      sqlite3_finalize(pStmt);\n    }\n  }\n  p = pCsr->pSorter;\n  if (p != (Fts5Sorter *)0x0) {\n    sqlite3_finalize(p->pStmt);\n    sqlite3_free(p);\n  }\n  if ((pCsr->ePlan != 2) && (pCsr->pExpr != (Fts5Expr *)0x0)) {\n    sqlite3Fts5ExprFree(pCsr->pExpr);\n  }\n  p_00 = pCsr->pAuxdata;\n  while (p_00 != (Fts5Auxdata *)0x0) {\n    pFVar5 = p_00->pNext;\n    if (p_00->xDelete != (_func_void_void_ptr *)0x0) {\n      (*p_00->xDelete)(p_00->pPtr);\n    }\n    sqlite3_free(p_00);\n    p_00 = pFVar5;\n  }\n  sqlite3_finalize(pCsr->pRankArgStmt);\n  sqlite3_free(pCsr->apRankArg);\n  if ((pCsr->csrflags & 0x10) != 0) {\n    sqlite3_free(pCsr->zRank);\n    sqlite3_free(pCsr->zRankArgs);\n  }\n  pCsr->ePlan = 0;\n  pCsr->aInst = (int *)0x0;\n  puVar7 = (undefined4 *)((uint)&pCsr->bDesc & 0xfffffffc);\n  uVar6 = (uint)((int)pCsr + (0x74 - (int)puVar7)) >> 2;\n  for (; uVar6 != 0; uVar6 = uVar6 - 1) {\n    *puVar7 = 0;\n    puVar7 = puVar7 + (uint)bVar8 * -2 + 1;\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 fts5FreeCursorComponents(Fts5Cursor *pCsr)\n\n{\n  char *pcVar1;\n  sqlite3_vtab *psVar2;\n  sqlite3_stmt *pStmt;\n  char *pcVar3;\n  int iVar4;\n  Fts5Sorter *p;\n  Fts5Auxdata *pFVar5;\n  Fts5Auxdata *p_00;\n  uint uVar6;\n  undefined4 *puVar7;\n  byte bVar8;\n  \n  bVar8 = 0;\n  psVar2 = (pCsr->base).pVtab;\n  sqlite3_free(pCsr->aInstIter);\n  sqlite3_free(pCsr->aInst);\n  pStmt = pCsr->pStmt;\n  if (pStmt != (sqlite3_stmt *)0x0) {\n    if (pCsr->ePlan == 5) {\n      pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;\n      iVar4 = *(int *)(pcVar1 + 0x18);\n    }\n    else {\n      pcVar3 = psVar2[1].zErrMsg;\n      pcVar1 = pcVar3 + 8;\n      iVar4 = *(int *)(pcVar3 + 0x20);\n    }\n    if (iVar4 == 0) {\n      sqlite3_reset(pStmt);\n      *(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;\n    }\n    else {\n      sqlite3_finalize(pStmt);\n    }\n  }\n  p = pCsr->pSorter;\n  if (p != (Fts5Sorter *)0x0) {\n    sqlite3_finalize(p->pStmt);\n    sqlite3_free(p);\n  }\n  if ((pCsr->ePlan != 2) && (pCsr->pExpr != (Fts5Expr *)0x0)) {\n    sqlite3Fts5ExprFree(pCsr->pExpr);\n  }\n  p_00 = pCsr->pAuxdata;\n  while (p_00 != (Fts5Auxdata *)0x0) {\n    pFVar5 = p_00->pNext;\n    if (p_00->xDelete != (_func_void_void_ptr *)0x0) {\n      (*p_00->xDelete)(p_00->pPtr);\n    }\n    sqlite3_free(p_00);\n    p_00 = pFVar5;\n  }\n  sqlite3_finalize(pCsr->pRankArgStmt);\n  sqlite3_free(pCsr->apRankArg);\n  if ((pCsr->csrflags & 0x10) != 0) {\n    sqlite3_free(pCsr->zRank);\n    sqlite3_free(pCsr->zRankArgs);\n  }\n  pCsr->ePlan = 0;\n  pCsr->aInst = (int *)0x0;\n  puVar7 = (undefined4 *)((uint)&pCsr->bDesc & 0xfffffffc);\n  uVar6 = (uint)((int)pCsr + (0x74 - (int)puVar7)) >> 2;\n  for (; uVar6 != 0; uVar6 = uVar6 - 1) {\n    *puVar7 = 0;\n    puVar7 = puVar7 + (uint)bVar8 * -2 + 1;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "fts5FreeCursorComponents(Fts5Cursor *pCsr)" identifier (parameter_list "(Fts5Cursor *pCsr)" ( (parameter_declaration "Fts5Cursor *pCsr" type_identifier (pointer_declarator "*pCsr" * identifier)) ))) (compound_statement "{\n  char *pcVar1;\n  sqlite3_vtab *psVar2;\n  sqlite3_stmt *pStmt;\n  char *pcVar3;\n  int iVar4;\n  Fts5Sorter *p;\n  Fts5Auxdata *pFVar5;\n  Fts5Auxdata *p_00;\n  uint uVar6;\n  undefined4 *puVar7;\n  byte bVar8;\n  \n  bVar8 = 0;\n  psVar2 = (pCsr->base).pVtab;\n  sqlite3_free(pCsr->aInstIter);\n  sqlite3_free(pCsr->aInst);\n  pStmt = pCsr->pStmt;\n  if (pStmt != (sqlite3_stmt *)0x0) {\n    if (pCsr->ePlan == 5) {\n      pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;\n      iVar4 = *(int *)(pcVar1 + 0x18);\n    }\n    else {\n      pcVar3 = psVar2[1].zErrMsg;\n      pcVar1 = pcVar3 + 8;\n      iVar4 = *(int *)(pcVar3 + 0x20);\n    }\n    if (iVar4 == 0) {\n      sqlite3_reset(pStmt);\n      *(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;\n    }\n    else {\n      sqlite3_finalize(pStmt);\n    }\n  }\n  p = pCsr->pSorter;\n  if (p != (Fts5Sorter *)0x0) {\n    sqlite3_finalize(p->pStmt);\n    sqlite3_free(p);\n  }\n  if ((pCsr->ePlan != 2) && (pCsr->pExpr != (Fts5Expr *)0x0)) {\n    sqlite3Fts5ExprFree(pCsr->pExpr);\n  }\n  p_00 = pCsr->pAuxdata;\n  while (p_00 != (Fts5Auxdata *)0x0) {\n    pFVar5 = p_00->pNext;\n    if (p_00->xDelete != (_func_void_void_ptr *)0x0) {\n      (*p_00->xDelete)(p_00->pPtr);\n    }\n    sqlite3_free(p_00);\n    p_00 = pFVar5;\n  }\n  sqlite3_finalize(pCsr->pRankArgStmt);\n  sqlite3_free(pCsr->apRankArg);\n  if ((pCsr->csrflags & 0x10) != 0) {\n    sqlite3_free(pCsr->zRank);\n    sqlite3_free(pCsr->zRankArgs);\n  }\n  pCsr->ePlan = 0;\n  pCsr->aInst = (int *)0x0;\n  puVar7 = (undefined4 *)((uint)&pCsr->bDesc & 0xfffffffc);\n  uVar6 = (uint)((int)pCsr + (0x74 - (int)puVar7)) >> 2;\n  for (; uVar6 != 0; uVar6 = uVar6 - 1) {\n    *puVar7 = 0;\n    puVar7 = puVar7 + (uint)bVar8 * -2 + 1;\n  }\n  return;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "sqlite3_vtab *psVar2;" type_identifier (pointer_declarator "*psVar2" * identifier) ;) (declaration "sqlite3_stmt *pStmt;" type_identifier (pointer_declarator "*pStmt" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "Fts5Sorter *p;" type_identifier (pointer_declarator "*p" * identifier) ;) (declaration "Fts5Auxdata *pFVar5;" type_identifier (pointer_declarator "*pFVar5" * identifier) ;) (declaration "Fts5Auxdata *p_00;" type_identifier (pointer_declarator "*p_00" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "byte bVar8;" type_identifier identifier ;) (expression_statement "bVar8 = 0;" (assignment_expression "bVar8 = 0" identifier = number_literal) ;) (expression_statement "psVar2 = (pCsr->base).pVtab;" (assignment_expression "psVar2 = (pCsr->base).pVtab" identifier = (field_expression "(pCsr->base).pVtab" (parenthesized_expression "(pCsr->base)" ( (field_expression "pCsr->base" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "sqlite3_free(pCsr->aInstIter);" (call_expression "sqlite3_free(pCsr->aInstIter)" identifier (argument_list "(pCsr->aInstIter)" ( (field_expression "pCsr->aInstIter" identifier -> field_identifier) ))) ;) (expression_statement "sqlite3_free(pCsr->aInst);" (call_expression "sqlite3_free(pCsr->aInst)" identifier (argument_list "(pCsr->aInst)" ( (field_expression "pCsr->aInst" identifier -> field_identifier) ))) ;) (expression_statement "pStmt = pCsr->pStmt;" (assignment_expression "pStmt = pCsr->pStmt" identifier = (field_expression "pCsr->pStmt" identifier -> field_identifier)) ;) (if_statement "if (pStmt != (sqlite3_stmt *)0x0) {\n    if (pCsr->ePlan == 5) {\n      pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;\n      iVar4 = *(int *)(pcVar1 + 0x18);\n    }\n    else {\n      pcVar3 = psVar2[1].zErrMsg;\n      pcVar1 = pcVar3 + 8;\n      iVar4 = *(int *)(pcVar3 + 0x20);\n    }\n    if (iVar4 == 0) {\n      sqlite3_reset(pStmt);\n      *(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;\n    }\n    else {\n      sqlite3_finalize(pStmt);\n    }\n  }" if (parenthesized_expression "(pStmt != (sqlite3_stmt *)0x0)" ( (binary_expression "pStmt != (sqlite3_stmt *)0x0" identifier != (cast_expression "(sqlite3_stmt *)0x0" ( (type_descriptor "sqlite3_stmt *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (pCsr->ePlan == 5) {\n      pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;\n      iVar4 = *(int *)(pcVar1 + 0x18);\n    }\n    else {\n      pcVar3 = psVar2[1].zErrMsg;\n      pcVar1 = pcVar3 + 8;\n      iVar4 = *(int *)(pcVar3 + 0x20);\n    }\n    if (iVar4 == 0) {\n      sqlite3_reset(pStmt);\n      *(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;\n    }\n    else {\n      sqlite3_finalize(pStmt);\n    }\n  }" { (if_statement "if (pCsr->ePlan == 5) {\n      pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;\n      iVar4 = *(int *)(pcVar1 + 0x18);\n    }\n    else {\n      pcVar3 = psVar2[1].zErrMsg;\n      pcVar1 = pcVar3 + 8;\n      iVar4 = *(int *)(pcVar3 + 0x20);\n    }" if (parenthesized_expression "(pCsr->ePlan == 5)" ( (binary_expression "pCsr->ePlan == 5" (field_expression "pCsr->ePlan" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n      pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;\n      iVar4 = *(int *)(pcVar1 + 0x18);\n    }" { (expression_statement "pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4;" (assignment_expression "pcVar1 = psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4" identifier = (binary_expression "psVar2[1].zErrMsg + (uint)(pCsr->bDesc != 0) * 4" (field_expression "psVar2[1].zErrMsg" (subscript_expression "psVar2[1]" identifier [ number_literal ]) . field_identifier) + (binary_expression "(uint)(pCsr->bDesc != 0) * 4" (call_expression "(uint)(pCsr->bDesc != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pCsr->bDesc != 0)" ( (binary_expression "pCsr->bDesc != 0" (field_expression "pCsr->bDesc" identifier -> field_identifier) != number_literal) ))) * number_literal))) ;) (expression_statement "iVar4 = *(int *)(pcVar1 + 0x18);" (assignment_expression "iVar4 = *(int *)(pcVar1 + 0x18)" identifier = (pointer_expression "*(int *)(pcVar1 + 0x18)" * (cast_expression "(int *)(pcVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x18)" ( (binary_expression "pcVar1 + 0x18" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      pcVar3 = psVar2[1].zErrMsg;\n      pcVar1 = pcVar3 + 8;\n      iVar4 = *(int *)(pcVar3 + 0x20);\n    }" else (compound_statement "{\n      pcVar3 = psVar2[1].zErrMsg;\n      pcVar1 = pcVar3 + 8;\n      iVar4 = *(int *)(pcVar3 + 0x20);\n    }" { (expression_statement "pcVar3 = psVar2[1].zErrMsg;" (assignment_expression "pcVar3 = psVar2[1].zErrMsg" identifier = (field_expression "psVar2[1].zErrMsg" (subscript_expression "psVar2[1]" identifier [ number_literal ]) . field_identifier)) ;) (expression_statement "pcVar1 = pcVar3 + 8;" (assignment_expression "pcVar1 = pcVar3 + 8" identifier = (binary_expression "pcVar3 + 8" identifier + number_literal)) ;) (expression_statement "iVar4 = *(int *)(pcVar3 + 0x20);" (assignment_expression "iVar4 = *(int *)(pcVar3 + 0x20)" identifier = (pointer_expression "*(int *)(pcVar3 + 0x20)" * (cast_expression "(int *)(pcVar3 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar3 + 0x20)" ( (binary_expression "pcVar3 + 0x20" identifier + number_literal) ))))) ;) }))) (if_statement "if (iVar4 == 0) {\n      sqlite3_reset(pStmt);\n      *(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;\n    }\n    else {\n      sqlite3_finalize(pStmt);\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      sqlite3_reset(pStmt);\n      *(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;\n    }" { (expression_statement "sqlite3_reset(pStmt);" (call_expression "sqlite3_reset(pStmt)" identifier (argument_list "(pStmt)" ( identifier ))) ;) (expression_statement "*(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt;" (assignment_expression "*(sqlite3_stmt **)(pcVar1 + 0x18) = pStmt" (pointer_expression "*(sqlite3_stmt **)(pcVar1 + 0x18)" * (cast_expression "(sqlite3_stmt **)(pcVar1 + 0x18)" ( (type_descriptor "sqlite3_stmt **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar1 + 0x18)" ( (binary_expression "pcVar1 + 0x18" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      sqlite3_finalize(pStmt);\n    }" else (compound_statement "{\n      sqlite3_finalize(pStmt);\n    }" { (expression_statement "sqlite3_finalize(pStmt);" (call_expression "sqlite3_finalize(pStmt)" identifier (argument_list "(pStmt)" ( identifier ))) ;) }))) })) (expression_statement "p = pCsr->pSorter;" (assignment_expression "p = pCsr->pSorter" identifier = (field_expression "pCsr->pSorter" identifier -> field_identifier)) ;) (if_statement "if (p != (Fts5Sorter *)0x0) {\n    sqlite3_finalize(p->pStmt);\n    sqlite3_free(p);\n  }" if (parenthesized_expression "(p != (Fts5Sorter *)0x0)" ( (binary_expression "p != (Fts5Sorter *)0x0" identifier != (cast_expression "(Fts5Sorter *)0x0" ( (type_descriptor "Fts5Sorter *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    sqlite3_finalize(p->pStmt);\n    sqlite3_free(p);\n  }" { (expression_statement "sqlite3_finalize(p->pStmt);" (call_expression "sqlite3_finalize(p->pStmt)" identifier (argument_list "(p->pStmt)" ( (field_expression "p->pStmt" identifier -> field_identifier) ))) ;) (expression_statement "sqlite3_free(p);" (call_expression "sqlite3_free(p)" identifier (argument_list "(p)" ( identifier ))) ;) })) (if_statement "if ((pCsr->ePlan != 2) && (pCsr->pExpr != (Fts5Expr *)0x0)) {\n    sqlite3Fts5ExprFree(pCsr->pExpr);\n  }" if (parenthesized_expression "((pCsr->ePlan != 2) && (pCsr->pExpr != (Fts5Expr *)0x0))" ( (binary_expression "(pCsr->ePlan != 2) && (pCsr->pExpr != (Fts5Expr *)0x0)" (parenthesized_expression "(pCsr->ePlan != 2)" ( (binary_expression "pCsr->ePlan != 2" (field_expression "pCsr->ePlan" identifier -> field_identifier) != number_literal) )) && (parenthesized_expression "(pCsr->pExpr != (Fts5Expr *)0x0)" ( (binary_expression "pCsr->pExpr != (Fts5Expr *)0x0" (field_expression "pCsr->pExpr" identifier -> field_identifier) != (cast_expression "(Fts5Expr *)0x0" ( (type_descriptor "Fts5Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    sqlite3Fts5ExprFree(pCsr->pExpr);\n  }" { (expression_statement "sqlite3Fts5ExprFree(pCsr->pExpr);" (call_expression "sqlite3Fts5ExprFree(pCsr->pExpr)" identifier (argument_list "(pCsr->pExpr)" ( (field_expression "pCsr->pExpr" identifier -> field_identifier) ))) ;) })) (expression_statement "p_00 = pCsr->pAuxdata;" (assignment_expression "p_00 = pCsr->pAuxdata" identifier = (field_expression "pCsr->pAuxdata" identifier -> field_identifier)) ;) (while_statement "while (p_00 != (Fts5Auxdata *)0x0) {\n    pFVar5 = p_00->pNext;\n    if (p_00->xDelete != (_func_void_void_ptr *)0x0) {\n      (*p_00->xDelete)(p_00->pPtr);\n    }\n    sqlite3_free(p_00);\n    p_00 = pFVar5;\n  }" while (parenthesized_expression "(p_00 != (Fts5Auxdata *)0x0)" ( (binary_expression "p_00 != (Fts5Auxdata *)0x0" identifier != (cast_expression "(Fts5Auxdata *)0x0" ( (type_descriptor "Fts5Auxdata *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pFVar5 = p_00->pNext;\n    if (p_00->xDelete != (_func_void_void_ptr *)0x0) {\n      (*p_00->xDelete)(p_00->pPtr);\n    }\n    sqlite3_free(p_00);\n    p_00 = pFVar5;\n  }" { (expression_statement "pFVar5 = p_00->pNext;" (assignment_expression "pFVar5 = p_00->pNext" identifier = (field_expression "p_00->pNext" identifier -> field_identifier)) ;) (if_statement "if (p_00->xDelete != (_func_void_void_ptr *)0x0) {\n      (*p_00->xDelete)(p_00->pPtr);\n    }" if (parenthesized_expression "(p_00->xDelete != (_func_void_void_ptr *)0x0)" ( (binary_expression "p_00->xDelete != (_func_void_void_ptr *)0x0" (field_expression "p_00->xDelete" identifier -> field_identifier) != (cast_expression "(_func_void_void_ptr *)0x0" ( (type_descriptor "_func_void_void_ptr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (*p_00->xDelete)(p_00->pPtr);\n    }" { (expression_statement "(*p_00->xDelete)(p_00->pPtr);" (call_expression "(*p_00->xDelete)(p_00->pPtr)" (parenthesized_expression "(*p_00->xDelete)" ( (pointer_expression "*p_00->xDelete" * (field_expression "p_00->xDelete" identifier -> field_identifier)) )) (argument_list "(p_00->pPtr)" ( (field_expression "p_00->pPtr" identifier -> field_identifier) ))) ;) })) (expression_statement "sqlite3_free(p_00);" (call_expression "sqlite3_free(p_00)" identifier (argument_list "(p_00)" ( identifier ))) ;) (expression_statement "p_00 = pFVar5;" (assignment_expression "p_00 = pFVar5" identifier = identifier) ;) })) (expression_statement "sqlite3_finalize(pCsr->pRankArgStmt);" (call_expression "sqlite3_finalize(pCsr->pRankArgStmt)" identifier (argument_list "(pCsr->pRankArgStmt)" ( (field_expression "pCsr->pRankArgStmt" identifier -> field_identifier) ))) ;) (expression_statement "sqlite3_free(pCsr->apRankArg);" (call_expression "sqlite3_free(pCsr->apRankArg)" identifier (argument_list "(pCsr->apRankArg)" ( (field_expression "pCsr->apRankArg" identifier -> field_identifier) ))) ;) (if_statement "if ((pCsr->csrflags & 0x10) != 0) {\n    sqlite3_free(pCsr->zRank);\n    sqlite3_free(pCsr->zRankArgs);\n  }" if (parenthesized_expression "((pCsr->csrflags & 0x10) != 0)" ( (binary_expression "(pCsr->csrflags & 0x10) != 0" (parenthesized_expression "(pCsr->csrflags & 0x10)" ( (binary_expression "pCsr->csrflags & 0x10" (field_expression "pCsr->csrflags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n    sqlite3_free(pCsr->zRank);\n    sqlite3_free(pCsr->zRankArgs);\n  }" { (expression_statement "sqlite3_free(pCsr->zRank);" (call_expression "sqlite3_free(pCsr->zRank)" identifier (argument_list "(pCsr->zRank)" ( (field_expression "pCsr->zRank" identifier -> field_identifier) ))) ;) (expression_statement "sqlite3_free(pCsr->zRankArgs);" (call_expression "sqlite3_free(pCsr->zRankArgs)" identifier (argument_list "(pCsr->zRankArgs)" ( (field_expression "pCsr->zRankArgs" identifier -> field_identifier) ))) ;) })) (expression_statement "pCsr->ePlan = 0;" (assignment_expression "pCsr->ePlan = 0" (field_expression "pCsr->ePlan" identifier -> field_identifier) = number_literal) ;) (expression_statement "pCsr->aInst = (int *)0x0;" (assignment_expression "pCsr->aInst = (int *)0x0" (field_expression "pCsr->aInst" identifier -> field_identifier) = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar7 = (undefined4 *)((uint)&pCsr->bDesc & 0xfffffffc);" (assignment_expression "puVar7 = (undefined4 *)((uint)&pCsr->bDesc & 0xfffffffc)" identifier = (cast_expression "(undefined4 *)((uint)&pCsr->bDesc & 0xfffffffc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)&pCsr->bDesc & 0xfffffffc)" ( (binary_expression "(uint)&pCsr->bDesc & 0xfffffffc" (binary_expression "(uint)&pCsr->bDesc" (parenthesized_expression "(uint)" ( identifier )) & (field_expression "pCsr->bDesc" identifier -> field_identifier)) & number_literal) )))) ;) (expression_statement "uVar6 = (uint)((int)pCsr + (0x74 - (int)puVar7)) >> 2;" (assignment_expression "uVar6 = (uint)((int)pCsr + (0x74 - (int)puVar7)) >> 2" identifier = (binary_expression "(uint)((int)pCsr + (0x74 - (int)puVar7)) >> 2" (call_expression "(uint)((int)pCsr + (0x74 - (int)puVar7))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)pCsr + (0x74 - (int)puVar7))" ( (binary_expression "(int)pCsr + (0x74 - (int)puVar7)" (cast_expression "(int)pCsr" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(0x74 - (int)puVar7)" ( (binary_expression "0x74 - (int)puVar7" number_literal - (cast_expression "(int)puVar7" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ))) >> number_literal)) ;) (for_statement "for (; uVar6 != 0; uVar6 = uVar6 - 1) {\n    *puVar7 = 0;\n    puVar7 = puVar7 + (uint)bVar8 * -2 + 1;\n  }" for ( ; (binary_expression "uVar6 != 0" identifier != number_literal) ; (assignment_expression "uVar6 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ) (compound_statement "{\n    *puVar7 = 0;\n    puVar7 = puVar7 + (uint)bVar8 * -2 + 1;\n  }" { (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "puVar7 = puVar7 + (uint)bVar8 * -2 + 1;" (assignment_expression "puVar7 = puVar7 + (uint)bVar8 * -2 + 1" identifier = (binary_expression "puVar7 + (uint)bVar8 * -2 + 1" (binary_expression "puVar7 + (uint)bVar8 * -2" identifier + (binary_expression "(uint)bVar8 * -2" (cast_expression "(uint)bVar8" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 FUN_0008ff40(int *param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  byte bVar6;\n  \n  bVar6 = 0;\n  iVar1 = *param_1;\n  FUN_000264d0(param_1[0x19]);\n  FUN_000264d0(param_1[0x1c]);\n  iVar2 = param_1[0xb];\n  if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }\n  puVar5 = (undefined4 *)param_1[0xd];\n  if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }\n  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }\n  iVar1 = param_1[0x18];\n  while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }\n  FUN_0008b430(param_1[0x16]);\n  FUN_000264d0(param_1[0x15]);\n  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }\n  param_1[5] = 0;\n  param_1[0x1c] = 0;\n  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);\n  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_0008ff40(int *param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  byte bVar6;\n  \n  bVar6 = 0;\n  iVar1 = *param_1;\n  FUN_000264d0(param_1[0x19]);\n  FUN_000264d0(param_1[0x1c]);\n  iVar2 = param_1[0xb];\n  if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }\n  puVar5 = (undefined4 *)param_1[0xd];\n  if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }\n  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }\n  iVar1 = param_1[0x18];\n  while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }\n  FUN_0008b430(param_1[0x16]);\n  FUN_000264d0(param_1[0x15]);\n  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }\n  param_1[5] = 0;\n  param_1[0x1c] = 0;\n  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);\n  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_0008ff40(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  byte bVar6;\n  \n  bVar6 = 0;\n  iVar1 = *param_1;\n  FUN_000264d0(param_1[0x19]);\n  FUN_000264d0(param_1[0x1c]);\n  iVar2 = param_1[0xb];\n  if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }\n  puVar5 = (undefined4 *)param_1[0xd];\n  if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }\n  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }\n  iVar1 = param_1[0x18];\n  while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }\n  FUN_0008b430(param_1[0x16]);\n  FUN_000264d0(param_1[0x15]);\n  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }\n  param_1[5] = 0;\n  param_1[0x1c] = 0;\n  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);\n  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "byte bVar6;" type_identifier identifier ;) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;) (expression_statement "iVar1 = *param_1;" (assignment_expression "iVar1 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "FUN_000264d0(param_1[0x19]);" (call_expression "FUN_000264d0(param_1[0x19])" identifier (argument_list "(param_1[0x19])" ( (subscript_expression "param_1[0x19]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_000264d0(param_1[0x1c]);" (call_expression "FUN_000264d0(param_1[0x1c])" identifier (argument_list "(param_1[0x1c])" ( (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) ))) ;) (expression_statement "iVar2 = param_1[0xb];" (assignment_expression "iVar2 = param_1[0xb]" identifier = (subscript_expression "param_1[0xb]" identifier [ number_literal ])) ;) (if_statement "if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }" { (if_statement "if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" if (parenthesized_expression "(param_1[5] == 5)" ( (binary_expression "param_1[5] == 5" (subscript_expression "param_1[5]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }" { (expression_statement "iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;" (assignment_expression "iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4" identifier = (binary_expression "*(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4" (pointer_expression "*(int *)(iVar1 + 0x14)" * (cast_expression "(int *)(iVar1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) )))) + (binary_expression "(uint)(param_1[6] != 0) * 4" (call_expression "(uint)(param_1[6] != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1[6] != 0)" ( (binary_expression "param_1[6] != 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) != number_literal) ))) * number_literal))) ;) (expression_statement "iVar3 = *(int *)(iVar1 + 0x18);" (assignment_expression "iVar3 = *(int *)(iVar1 + 0x18)" identifier = (pointer_expression "*(int *)(iVar1 + 0x18)" * (cast_expression "(int *)(iVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x18)" ( (binary_expression "iVar1 + 0x18" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" else (compound_statement "{\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" { (expression_statement "iVar3 = *(int *)(iVar1 + 0x14);" (assignment_expression "iVar3 = *(int *)(iVar1 + 0x14)" identifier = (pointer_expression "*(int *)(iVar1 + 0x14)" * (cast_expression "(int *)(iVar1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x14)" ( (binary_expression "iVar1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = iVar3 + 8;" (assignment_expression "iVar1 = iVar3 + 8" identifier = (binary_expression "iVar3 + 8" identifier + number_literal)) ;) (expression_statement "iVar3 = *(int *)(iVar3 + 0x20);" (assignment_expression "iVar3 = *(int *)(iVar3 + 0x20)" identifier = (pointer_expression "*(int *)(iVar3 + 0x20)" * (cast_expression "(int *)(iVar3 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x20)" ( (binary_expression "iVar3 + 0x20" identifier + number_literal) ))))) ;) }))) (if_statement "if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }" { (expression_statement "FUN_0008fe60(iVar2);" (call_expression "FUN_0008fe60(iVar2)" identifier (argument_list "(iVar2)" ( identifier ))) ;) (expression_statement "*(int *)(iVar1 + 0x18) = iVar2;" (assignment_expression "*(int *)(iVar1 + 0x18) = iVar2" (pointer_expression "*(int *)(iVar1 + 0x18)" * (cast_expression "(int *)(iVar1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x18)" ( (binary_expression "iVar1 + 0x18" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      FUN_0008b430(iVar2);\n    }" else (compound_statement "{\n      FUN_0008b430(iVar2);\n    }" { (expression_statement "FUN_0008b430(iVar2);" (call_expression "FUN_0008b430(iVar2)" identifier (argument_list "(iVar2)" ( identifier ))) ;) }))) })) (expression_statement "puVar5 = (undefined4 *)param_1[0xd];" (assignment_expression "puVar5 = (undefined4 *)param_1[0xd]" identifier = (cast_expression "(undefined4 *)param_1[0xd]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0xd]" identifier [ number_literal ]))) ;) (if_statement "if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }" if (parenthesized_expression "(puVar5 != (undefined4 *)0x0)" ( (binary_expression "puVar5 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }" { (expression_statement "FUN_0008b430(*puVar5);" (call_expression "FUN_0008b430(*puVar5)" identifier (argument_list "(*puVar5)" ( (pointer_expression "*puVar5" * identifier) ))) ;) (expression_statement "FUN_000264d0(puVar5);" (call_expression "FUN_000264d0(puVar5)" identifier (argument_list "(puVar5)" ( identifier ))) ;) })) (if_statement "if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }" if (parenthesized_expression "((param_1[5] != 2) && (param_1[0xc] != 0))" ( (binary_expression "(param_1[5] != 2) && (param_1[0xc] != 0)" (parenthesized_expression "(param_1[5] != 2)" ( (binary_expression "param_1[5] != 2" (subscript_expression "param_1[5]" identifier [ number_literal ]) != number_literal) )) && (parenthesized_expression "(param_1[0xc] != 0)" ( (binary_expression "param_1[0xc] != 0" (subscript_expression "param_1[0xc]" identifier [ number_literal ]) != number_literal) ))) )) (compound_statement "{\n    FUN_0008b770();\n  }" { (expression_statement "FUN_0008b770();" (call_expression "FUN_0008b770()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iVar1 = param_1[0x18];" (assignment_expression "iVar1 = param_1[0x18]" identifier = (subscript_expression "param_1[0x18]" identifier [ number_literal ])) ;) (while_statement "while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }" while (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }" { (expression_statement "iVar2 = *(int *)(iVar1 + 0xc);" (assignment_expression "iVar2 = *(int *)(iVar1 + 0xc)" identifier = (pointer_expression "*(int *)(iVar1 + 0xc)" * (cast_expression "(int *)(iVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }" if (parenthesized_expression "(*(code **)(iVar1 + 8) != (code *)0x0)" ( (binary_expression "*(code **)(iVar1 + 8) != (code *)0x0" (pointer_expression "*(code **)(iVar1 + 8)" * (cast_expression "(code **)(iVar1 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }" { (expression_statement "(**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));" (call_expression "(**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4))" (parenthesized_expression "(**(code **)(iVar1 + 8))" ( (pointer_expression "**(code **)(iVar1 + 8)" * (pointer_expression "*(code **)(iVar1 + 8)" * (cast_expression "(code **)(iVar1 + 8)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 8)" ( (binary_expression "iVar1 + 8" identifier + number_literal) ))))) )) (argument_list "(*(undefined4 *)(iVar1 + 4))" ( (pointer_expression "*(undefined4 *)(iVar1 + 4)" * (cast_expression "(undefined4 *)(iVar1 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))) ))) ;) })) (expression_statement "FUN_000264d0(iVar1);" (call_expression "FUN_000264d0(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "iVar1 = iVar2;" (assignment_expression "iVar1 = iVar2" identifier = identifier) ;) })) (expression_statement "FUN_0008b430(param_1[0x16]);" (call_expression "FUN_0008b430(param_1[0x16])" identifier (argument_list "(param_1[0x16])" ( (subscript_expression "param_1[0x16]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_000264d0(param_1[0x15]);" (call_expression "FUN_000264d0(param_1[0x15])" identifier (argument_list "(param_1[0x15])" ( (subscript_expression "param_1[0x15]" identifier [ number_literal ]) ))) ;) (if_statement "if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }" if (parenthesized_expression "((*(byte *)(param_1 + 0xe) & 0x10) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0xe) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0xe) & 0x10)" ( (binary_expression "*(byte *)(param_1 + 0xe) & 0x10" (pointer_expression "*(byte *)(param_1 + 0xe)" * (cast_expression "(byte *)(param_1 + 0xe)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xe)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }" { (expression_statement "FUN_000264d0(param_1[0x11]);" (call_expression "FUN_000264d0(param_1[0x11])" identifier (argument_list "(param_1[0x11])" ( (subscript_expression "param_1[0x11]" identifier [ number_literal ]) ))) ;) (expression_statement "FUN_000264d0(param_1[0x12]);" (call_expression "FUN_000264d0(param_1[0x12])" identifier (argument_list "(param_1[0x12])" ( (subscript_expression "param_1[0x12]" identifier [ number_literal ]) ))) ;) })) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x1c] = 0;" (assignment_expression "param_1[0x1c] = 0" (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);" (assignment_expression "puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc)" identifier = (cast_expression "(undefined4 *)((uint)(param_1 + 6) & 0xfffffffc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)(param_1 + 6) & 0xfffffffc)" ( (binary_expression "(uint)(param_1 + 6) & 0xfffffffc" (call_expression "(uint)(param_1 + 6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1 + 6)" ( (binary_expression "param_1 + 6" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }" for ( (assignment_expression "uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2" identifier = (binary_expression "(uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2" (call_expression "(uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)))" ( (binary_expression "(int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))" ( (binary_expression "0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)" number_literal - (cast_expression "(int)((uint)(param_1 + 6) & 0xfffffffc)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(param_1 + 6) & 0xfffffffc)" ( (binary_expression "(uint)(param_1 + 6) & 0xfffffffc" (call_expression "(uint)(param_1 + 6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_1 + 6)" ( (binary_expression "param_1 + 6" identifier + number_literal) ))) & number_literal) )))) ))) ))) >> number_literal)) ; (binary_expression "uVar4 != 0" identifier != number_literal) ; (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ) (compound_statement "{\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }" { (expression_statement "*puVar5 = 0;" (assignment_expression "*puVar5 = 0" (pointer_expression "*puVar5" * identifier) = number_literal) ;) (expression_statement "puVar5 = puVar5 + (uint)bVar6 * -2 + 1;" (assignment_expression "puVar5 = puVar5 + (uint)bVar6 * -2 + 1" identifier = (binary_expression "puVar5 + (uint)bVar6 * -2 + 1" (binary_expression "puVar5 + (uint)bVar6 * -2" identifier + (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) != 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 = (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 == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * IDENT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (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 (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 (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) )))) ;) (for_statement for ( (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) )))) ))) ))) >> LIT)) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT - LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) })) (return_statement return ;) })))
(function_definition "void __regparm3 FUN_0008ff40(int *param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  byte bVar6;\n  \n  bVar6 = 0;\n  iVar1 = *param_1;\n  FUN_000264d0(param_1[0x19]);\n  FUN_000264d0(param_1[0x1c]);\n  iVar2 = param_1[0xb];\n  if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }\n  puVar5 = (undefined4 *)param_1[0xd];\n  if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }\n  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }\n  iVar1 = param_1[0x18];\n  while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }\n  FUN_0008b430(param_1[0x16]);\n  FUN_000264d0(param_1[0x15]);\n  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }\n  param_1[5] = 0;\n  param_1[0x1c] = 0;\n  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);\n  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }\n  return;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_0008ff40(int *param_1)" (identifier "FUN_0008ff40") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  byte bVar6;\n  \n  bVar6 = 0;\n  iVar1 = *param_1;\n  FUN_000264d0(param_1[0x19]);\n  FUN_000264d0(param_1[0x1c]);\n  iVar2 = param_1[0xb];\n  if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }\n  puVar5 = (undefined4 *)param_1[0xd];\n  if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }\n  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }\n  iVar1 = param_1[0x18];\n  while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }\n  FUN_0008b430(param_1[0x16]);\n  FUN_000264d0(param_1[0x15]);\n  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }\n  param_1[5] = 0;\n  param_1[0x1c] = 0;\n  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);\n  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "byte bVar6;" (type_identifier "byte") (identifier "bVar6") (; ";")) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" (identifier "bVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar1 = *param_1;" (assignment_expression "iVar1 = *param_1" (identifier "iVar1") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "FUN_000264d0(param_1[0x19]);" (call_expression "FUN_000264d0(param_1[0x19])" (identifier "FUN_000264d0") (argument_list "(param_1[0x19])" (( "(") (subscript_expression "param_1[0x19]" (identifier "param_1") ([ "[") (number_literal "0x19") (] "]")) () ")"))) (; ";")) (expression_statement "FUN_000264d0(param_1[0x1c]);" (call_expression "FUN_000264d0(param_1[0x1c])" (identifier "FUN_000264d0") (argument_list "(param_1[0x1c])" (( "(") (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]")) () ")"))) (; ";")) (expression_statement "iVar2 = param_1[0xb];" (assignment_expression "iVar2 = param_1[0xb]" (identifier "iVar2") (= "=") (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]"))) (; ";")) (if_statement "if (iVar2 != 0) {\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }\n    if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }\n  }" ({ "{") (if_statement "if (param_1[5] == 5) {\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }\n    else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" (if "if") (parenthesized_expression "(param_1[5] == 5)" (( "(") (binary_expression "param_1[5] == 5" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (== "==") (number_literal "5")) () ")")) (compound_statement "{\n      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;\n      iVar3 = *(int *)(iVar1 + 0x18);\n    }" ({ "{") (expression_statement "iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;" (assignment_expression "iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4" (identifier "iVar1") (= "=") (binary_expression "*(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4" (pointer_expression "*(int *)(iVar1 + 0x14)" (* "*") (cast_expression "(int *)(iVar1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x14)" (( "(") (binary_expression "iVar1 + 0x14" (identifier "iVar1") (+ "+") (number_literal "0x14")) () ")")))) (+ "+") (binary_expression "(uint)(param_1[6] != 0) * 4" (call_expression "(uint)(param_1[6] != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_1[6] != 0)" (( "(") (binary_expression "param_1[6] != 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (!= "!=") (number_literal "0")) () ")"))) (* "*") (number_literal "4")))) (; ";")) (expression_statement "iVar3 = *(int *)(iVar1 + 0x18);" (assignment_expression "iVar3 = *(int *)(iVar1 + 0x18)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar1 + 0x18)" (* "*") (cast_expression "(int *)(iVar1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x18)" (( "(") (binary_expression "iVar1 + 0x18" (identifier "iVar1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" (else "else") (compound_statement "{\n      iVar3 = *(int *)(iVar1 + 0x14);\n      iVar1 = iVar3 + 8;\n      iVar3 = *(int *)(iVar3 + 0x20);\n    }" ({ "{") (expression_statement "iVar3 = *(int *)(iVar1 + 0x14);" (assignment_expression "iVar3 = *(int *)(iVar1 + 0x14)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar1 + 0x14)" (* "*") (cast_expression "(int *)(iVar1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x14)" (( "(") (binary_expression "iVar1 + 0x14" (identifier "iVar1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "iVar1 = iVar3 + 8;" (assignment_expression "iVar1 = iVar3 + 8" (identifier "iVar1") (= "=") (binary_expression "iVar3 + 8" (identifier "iVar3") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "iVar3 = *(int *)(iVar3 + 0x20);" (assignment_expression "iVar3 = *(int *)(iVar3 + 0x20)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar3 + 0x20)" (* "*") (cast_expression "(int *)(iVar3 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x20)" (( "(") (binary_expression "iVar3 + 0x20" (identifier "iVar3") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (iVar3 == 0) {\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }\n    else {\n      FUN_0008b430(iVar2);\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_0008fe60(iVar2);\n      *(int *)(iVar1 + 0x18) = iVar2;\n    }" ({ "{") (expression_statement "FUN_0008fe60(iVar2);" (call_expression "FUN_0008fe60(iVar2)" (identifier "FUN_0008fe60") (argument_list "(iVar2)" (( "(") (identifier "iVar2") () ")"))) (; ";")) (expression_statement "*(int *)(iVar1 + 0x18) = iVar2;" (assignment_expression "*(int *)(iVar1 + 0x18) = iVar2" (pointer_expression "*(int *)(iVar1 + 0x18)" (* "*") (cast_expression "(int *)(iVar1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x18)" (( "(") (binary_expression "iVar1 + 0x18" (identifier "iVar1") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "iVar2")) (; ";")) (} "}")) (else_clause "else {\n      FUN_0008b430(iVar2);\n    }" (else "else") (compound_statement "{\n      FUN_0008b430(iVar2);\n    }" ({ "{") (expression_statement "FUN_0008b430(iVar2);" (call_expression "FUN_0008b430(iVar2)" (identifier "FUN_0008b430") (argument_list "(iVar2)" (( "(") (identifier "iVar2") () ")"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "puVar5 = (undefined4 *)param_1[0xd];" (assignment_expression "puVar5 = (undefined4 *)param_1[0xd]" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)param_1[0xd]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")))) (; ";")) (if_statement "if (puVar5 != (undefined4 *)0x0) {\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }" (if "if") (parenthesized_expression "(puVar5 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar5 != (undefined4 *)0x0" (identifier "puVar5") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    FUN_0008b430(*puVar5);\n    FUN_000264d0(puVar5);\n  }" ({ "{") (expression_statement "FUN_0008b430(*puVar5);" (call_expression "FUN_0008b430(*puVar5)" (identifier "FUN_0008b430") (argument_list "(*puVar5)" (( "(") (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) () ")"))) (; ";")) (expression_statement "FUN_000264d0(puVar5);" (call_expression "FUN_000264d0(puVar5)" (identifier "FUN_000264d0") (argument_list "(puVar5)" (( "(") (identifier "puVar5") () ")"))) (; ";")) (} "}"))) (if_statement "if ((param_1[5] != 2) && (param_1[0xc] != 0)) {\n    FUN_0008b770();\n  }" (if "if") (parenthesized_expression "((param_1[5] != 2) && (param_1[0xc] != 0))" (( "(") (binary_expression "(param_1[5] != 2) && (param_1[0xc] != 0)" (parenthesized_expression "(param_1[5] != 2)" (( "(") (binary_expression "param_1[5] != 2" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (!= "!=") (number_literal "2")) () ")")) (&& "&&") (parenthesized_expression "(param_1[0xc] != 0)" (( "(") (binary_expression "param_1[0xc] != 0" (subscript_expression "param_1[0xc]" (identifier "param_1") ([ "[") (number_literal "0xc") (] "]")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    FUN_0008b770();\n  }" ({ "{") (expression_statement "FUN_0008b770();" (call_expression "FUN_0008b770()" (identifier "FUN_0008b770") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "iVar1 = param_1[0x18];" (assignment_expression "iVar1 = param_1[0x18]" (identifier "iVar1") (= "=") (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]"))) (; ";")) (while_statement "while (iVar1 != 0) {\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }" (while "while") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    iVar2 = *(int *)(iVar1 + 0xc);\n    if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }\n    FUN_000264d0(iVar1);\n    iVar1 = iVar2;\n  }" ({ "{") (expression_statement "iVar2 = *(int *)(iVar1 + 0xc);" (assignment_expression "iVar2 = *(int *)(iVar1 + 0xc)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(iVar1 + 0xc)" (* "*") (cast_expression "(int *)(iVar1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0xc)" (( "(") (binary_expression "iVar1 + 0xc" (identifier "iVar1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (if_statement "if (*(code **)(iVar1 + 8) != (code *)0x0) {\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }" (if "if") (parenthesized_expression "(*(code **)(iVar1 + 8) != (code *)0x0)" (( "(") (binary_expression "*(code **)(iVar1 + 8) != (code *)0x0" (pointer_expression "*(code **)(iVar1 + 8)" (* "*") (cast_expression "(code **)(iVar1 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 8)" (( "(") (binary_expression "iVar1 + 8" (identifier "iVar1") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));\n    }" ({ "{") (expression_statement "(**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));" (call_expression "(**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4))" (parenthesized_expression "(**(code **)(iVar1 + 8))" (( "(") (pointer_expression "**(code **)(iVar1 + 8)" (* "*") (pointer_expression "*(code **)(iVar1 + 8)" (* "*") (cast_expression "(code **)(iVar1 + 8)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 8)" (( "(") (binary_expression "iVar1 + 8" (identifier "iVar1") (+ "+") (number_literal "8")) () ")"))))) () ")")) (argument_list "(*(undefined4 *)(iVar1 + 4))" (( "(") (pointer_expression "*(undefined4 *)(iVar1 + 4)" (* "*") (cast_expression "(undefined4 *)(iVar1 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 4)" (( "(") (binary_expression "iVar1 + 4" (identifier "iVar1") (+ "+") (number_literal "4")) () ")")))) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_000264d0(iVar1);" (call_expression "FUN_000264d0(iVar1)" (identifier "FUN_000264d0") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "iVar1 = iVar2;" (assignment_expression "iVar1 = iVar2" (identifier "iVar1") (= "=") (identifier "iVar2")) (; ";")) (} "}"))) (expression_statement "FUN_0008b430(param_1[0x16]);" (call_expression "FUN_0008b430(param_1[0x16])" (identifier "FUN_0008b430") (argument_list "(param_1[0x16])" (( "(") (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]")) () ")"))) (; ";")) (expression_statement "FUN_000264d0(param_1[0x15]);" (call_expression "FUN_000264d0(param_1[0x15])" (identifier "FUN_000264d0") (argument_list "(param_1[0x15])" (( "(") (subscript_expression "param_1[0x15]" (identifier "param_1") ([ "[") (number_literal "0x15") (] "]")) () ")"))) (; ";")) (if_statement "if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }" (if "if") (parenthesized_expression "((*(byte *)(param_1 + 0xe) & 0x10) != 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0xe) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0xe) & 0x10)" (( "(") (binary_expression "*(byte *)(param_1 + 0xe) & 0x10" (pointer_expression "*(byte *)(param_1 + 0xe)" (* "*") (cast_expression "(byte *)(param_1 + 0xe)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xe)" (( "(") (binary_expression "param_1 + 0xe" (identifier "param_1") (+ "+") (number_literal "0xe")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_000264d0(param_1[0x11]);\n    FUN_000264d0(param_1[0x12]);\n  }" ({ "{") (expression_statement "FUN_000264d0(param_1[0x11]);" (call_expression "FUN_000264d0(param_1[0x11])" (identifier "FUN_000264d0") (argument_list "(param_1[0x11])" (( "(") (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]")) () ")"))) (; ";")) (expression_statement "FUN_000264d0(param_1[0x12]);" (call_expression "FUN_000264d0(param_1[0x12])" (identifier "FUN_000264d0") (argument_list "(param_1[0x12])" (( "(") (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) () ")"))) (; ";")) (} "}"))) (expression_statement "param_1[5] = 0;" (assignment_expression "param_1[5] = 0" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x1c] = 0;" (assignment_expression "param_1[0x1c] = 0" (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);" (assignment_expression "puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc)" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)((uint)(param_1 + 6) & 0xfffffffc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((uint)(param_1 + 6) & 0xfffffffc)" (( "(") (binary_expression "(uint)(param_1 + 6) & 0xfffffffc" (call_expression "(uint)(param_1 + 6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_1 + 6)" (( "(") (binary_expression "param_1 + 6" (identifier "param_1") (+ "+") (number_literal "6")) () ")"))) (& "&") (number_literal "0xfffffffc")) () ")")))) (; ";")) (for_statement "for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;\n      uVar4 != 0; uVar4 = uVar4 - 1) {\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }" (for "for") (( "(") (assignment_expression "uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2" (identifier "uVar4") (= "=") (binary_expression "(uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2" (call_expression "(uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)))" (( "(") (binary_expression "(int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (parenthesized_expression "(0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))" (( "(") (binary_expression "0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc)" (number_literal "0x74") (- "-") (cast_expression "(int)((uint)(param_1 + 6) & 0xfffffffc)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uint)(param_1 + 6) & 0xfffffffc)" (( "(") (binary_expression "(uint)(param_1 + 6) & 0xfffffffc" (call_expression "(uint)(param_1 + 6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_1 + 6)" (( "(") (binary_expression "param_1 + 6" (identifier "param_1") (+ "+") (number_literal "6")) () ")"))) (& "&") (number_literal "0xfffffffc")) () ")")))) () ")"))) () ")"))) (>> ">>") (number_literal "2"))) (; ";") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "uVar4 = uVar4 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) () ")") (compound_statement "{\n    *puVar5 = 0;\n    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;\n  }" ({ "{") (expression_statement "*puVar5 = 0;" (assignment_expression "*puVar5 = 0" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar5 = puVar5 + (uint)bVar6 * -2 + 1;" (assignment_expression "puVar5 = puVar5 + (uint)bVar6 * -2 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + (uint)bVar6 * -2 + 1" (binary_expression "puVar5 + (uint)bVar6 * -2" (identifier "puVar5") (+ "+") (binary_expression "(uint)bVar6 * -2" (cast_expression "(uint)bVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar6")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 function_1(type_1 *pCsr)

{
  char *var_3;
  type_2 *psVar2;
  type_3 *var_2;
  char *var_4;
  int var_5;
  type_4 *var_8;
  type_5 *pFVar5;
  type_5 *var_10;
  type_6 var_11;
  type_7 *var_12;
  type_8 bVar8;
  
  bVar8 = 0;
  psVar2 = (pCsr->base).pVtab;
  var_1(pCsr->aInstIter);
  var_1(pCsr->aInst);
  var_2 = pCsr->var_2;
  if (var_2 != (type_3 *)0x0) {
    if (pCsr->ePlan == 5) {
      var_3 = psVar2[1].zErrMsg + (type_6)(pCsr->bDesc != 0) * 4;
      var_5 = *(int *)(var_3 + 0x18);
    }
    else {
      var_4 = psVar2[1].zErrMsg;
      var_3 = var_4 + 8;
      var_5 = *(int *)(var_4 + 0x20);
    }
    if (var_5 == 0) {
      var_6(var_2);
      *(type_3 **)(var_3 + 0x18) = var_2;
    }
    else {
      var_7(var_2);
    }
  }
  var_8 = pCsr->pSorter;
  if (var_8 != (type_4 *)0x0) {
    var_7(var_8->var_2);
    var_1(var_8);
  }
  if ((pCsr->ePlan != 2) && (pCsr->pExpr != (type_9 *)0x0)) {
    var_9(pCsr->pExpr);
  }
  var_10 = pCsr->pAuxdata;
  while (var_10 != (type_5 *)0x0) {
    pFVar5 = var_10->pNext;
    if (var_10->xDelete != (type_10 *)0x0) {
      (*var_10->xDelete)(var_10->pPtr);
    }
    var_1(var_10);
    var_10 = pFVar5;
  }
  var_7(pCsr->pRankArgStmt);
  var_1(pCsr->apRankArg);
  if ((pCsr->csrflags & 0x10) != 0) {
    var_1(pCsr->zRank);
    var_1(pCsr->zRankArgs);
  }
  pCsr->ePlan = 0;
  pCsr->aInst = (int *)0x0;
  var_12 = (type_7 *)((type_6)&pCsr->bDesc & 0xfffffffc);
  var_11 = (type_6)((int)pCsr + (0x74 - (int)var_12)) >> 2;
  for (; var_11 != 0; var_11 = var_11 - 1) {
    *var_12 = 0;
    var_12 = var_12 + (type_6)bVar8 * -2 + 1;
  }
  return;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __regparm3 MASKED(int *param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  undefined4 *puVar5;
  byte bVar6;
  
  bVar6 = 0;
  iVar1 = *param_1;
  FUN_000264d0(param_1[0x19]);
  FUN_000264d0(param_1[0x1c]);
  iVar2 = param_1[0xb];
  if (iVar2 != 0) {
    if (param_1[5] == 5) {
      iVar1 = *(int *)(iVar1 + 0x14) + (uint)(param_1[6] != 0) * 4;
      iVar3 = *(int *)(iVar1 + 0x18);
    }
    else {
      iVar3 = *(int *)(iVar1 + 0x14);
      iVar1 = iVar3 + 8;
      iVar3 = *(int *)(iVar3 + 0x20);
    }
    if (iVar3 == 0) {
      FUN_0008fe60(iVar2);
      *(int *)(iVar1 + 0x18) = iVar2;
    }
    else {
      FUN_0008b430(iVar2);
    }
  }
  puVar5 = (undefined4 *)param_1[0xd];
  if (puVar5 != (undefined4 *)0x0) {
    FUN_0008b430(*puVar5);
    FUN_000264d0(puVar5);
  }
  if ((param_1[5] != 2) && (param_1[0xc] != 0)) {
    FUN_0008b770();
  }
  iVar1 = param_1[0x18];
  while (iVar1 != 0) {
    iVar2 = *(int *)(iVar1 + 0xc);
    if (*(code **)(iVar1 + 8) != (code *)0x0) {
      (**(code **)(iVar1 + 8))(*(undefined4 *)(iVar1 + 4));
    }
    FUN_000264d0(iVar1);
    iVar1 = iVar2;
  }
  FUN_0008b430(param_1[0x16]);
  FUN_000264d0(param_1[0x15]);
  if ((*(byte *)(param_1 + 0xe) & 0x10) != 0) {
    FUN_000264d0(param_1[0x11]);
    FUN_000264d0(param_1[0x12]);
  }
  param_1[5] = 0;
  param_1[0x1c] = 0;
  puVar5 = (undefined4 *)((uint)(param_1 + 6) & 0xfffffffc);
  for (uVar4 = (uint)((int)param_1 + (0x74 - (int)((uint)(param_1 + 6) & 0xfffffffc))) >> 2;
      uVar4 != 0; uVar4 = uVar4 - 1) {
    *puVar5 = 0;
    puVar5 = puVar5 + (uint)bVar6 * -2 + 1;
  }
  return;
}

