
/* WARNING: Removing unreachable block (ram,0x0004b7a0) */

SrcList * sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)

{
  longlong lVar1;
  anon_union_4_2_996c0f8d_for_u1 *paVar2;
  int iVar3;
  anon_union_4_2_996c0f8d_for_u1 *paVar4;
  anon_union_4_2_996c0f8d_for_u1 *paVar5;
  anon_union_4_2_996c0f8d_for_u1 *paVar6;
  anon_union_4_2_996c0f8d_for_u1 *paVar7;
  anon_union_4_2_996c0f8d_for_u1 *paVar8;
  anon_union_4_2_996c0f8d_for_u1 aVar9;
  anon_union_4_2_996c0f8d_for_u1 aVar10;
  anon_union_4_2_996c0f8d_for_u1 aVar11;
  int iVar12;
  uint uVar13;
  code *pcVar14;
  undefined1 *puVar15;
  u32 uVar16;
  undefined4 in_stack_ffffffe4;
  
  puVar15 = &_gp;
  iVar3 = pSrc->nSrc;
  uVar13 = iVar3 + nExtra;
  if (pSrc->nAlloc < uVar13) {
    lVar1 = (longlong)nExtra + (longlong)iVar3 * 2;
    uVar16 = (u32)lVar1;
    if (199 < (int)uVar13) {
      sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);
      return (SrcList *)0x0;
    }
    if (200 < lVar1) {
      uVar16 = 200;
    }
    puVar15 = &_gp;
    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));
    if (pSrc == (SrcList *)0x0) {
      return (SrcList *)0x0;
    }
    iVar3 = pSrc->nSrc;
    pSrc->nAlloc = uVar16;
    uVar13 = iVar3 + nExtra;
  }
  iVar12 = iVar3 + -1;
  if (iStart <= iVar12) {
    paVar6 = &pSrc->a[iVar3 + -1].u1;
    paVar8 = (anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1));
    do {
      paVar4 = paVar6 + -0x10;
      paVar2 = paVar8;
      do {
        paVar7 = paVar2;
        paVar5 = paVar4 + 4;
        aVar11 = paVar4[1];
        aVar10 = paVar4[2];
        aVar9 = paVar4[3];
        *paVar7 = *paVar4;
        paVar7[1] = aVar11;
        paVar7[2] = aVar10;
        paVar7[3] = aVar9;
        paVar4 = paVar5;
        paVar2 = paVar7 + 4;
      } while (paVar5 != paVar6);
      aVar10 = *paVar6;
      iVar12 = iVar12 + -1;
      aVar9 = paVar6[1];
      paVar8 = paVar8 + -0x12;
      paVar6 = paVar6 + -0x12;
      paVar7[4] = aVar10;
      paVar7[5] = aVar9;
    } while (iVar12 != iStart + -1);
  }
  pcVar14 = *(code **)(puVar15 + -0x7e50);
  pSrc->nSrc = uVar13;
  (*pcVar14)(pSrc->a + iStart,0,nExtra * 0x48);
  paVar6 = &pSrc->a[iStart + -1].u1;
  if (iStart < nExtra + iStart) {
    iVar3 = 0;
    do {
      iVar3 = iVar3 + 1;
      paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;
      paVar6 = paVar6 + 0x12;
    } while (iVar3 != (nExtra + iStart) - iStart);
  }
  return pSrc;
}



uint * FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)

{
  longlong lVar1;
  undefined *puVar2;
  uint *puVar3;
  uint uVar4;
  uint *puVar5;
  uint *puVar6;
  uint *puVar7;
  int iVar8;
  uint *puVar9;
  uint *puVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  
  uVar4 = *param_2;
  uVar13 = uVar4 + param_3;
  if (param_2[1] < uVar13) {
    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;
    uVar4 = (uint)lVar1;
    if (199 < (int)uVar13) {
      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);
      return (uint *)0x0;
    }
    if ((0xffffffff < lVar1) ||
       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&
        (uVar13 = uVar4 - 1, 200 < uVar4)))) {
      lVar1 = 200;
      uVar13 = 199;
    }
    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;
    param_2 = (uint *)FUN_000387fc(*param_1,param_2,
                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +
                                   (uVar13 * 9 >> 0x1d |
                                   ((uint)(uVar13 * 9 < uVar13 * 8) +
                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));
    if (param_2 == (uint *)0x0) {
      return (uint *)0x0;
    }
    uVar4 = *param_2;
    param_2[1] = (uint)lVar1;
    uVar13 = uVar4 + param_3;
  }
  iVar8 = uVar4 - 1;
  if (param_4 <= iVar8) {
    puVar7 = param_2 + uVar4 * 0x12;
    puVar10 = param_2 + uVar13 * 0x12 + -0x10;
    do {
      puVar5 = puVar7 + -0x10;
      puVar3 = puVar10;
      do {
        puVar9 = puVar3;
        puVar6 = puVar5 + 4;
        uVar12 = puVar5[1];
        uVar11 = puVar5[2];
        uVar4 = puVar5[3];
        *puVar9 = *puVar5;
        puVar9[1] = uVar12;
        puVar9[2] = uVar11;
        puVar9[3] = uVar4;
        puVar5 = puVar6;
        puVar3 = puVar9 + 4;
      } while (puVar6 != puVar7);
      uVar11 = *puVar7;
      iVar8 = iVar8 + -1;
      uVar4 = puVar7[1];
      puVar10 = puVar10 + -0x12;
      puVar7 = puVar7 + -0x12;
      puVar9[4] = uVar11;
      puVar9[5] = uVar4;
    } while (iVar8 != param_4 + -1);
  }
  puVar2 = PTR_memset_000f5450;
  *param_2 = uVar13;
  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);
  puVar7 = param_2 + param_4 * 0x12;
  if (param_4 < param_3 + param_4) {
    iVar8 = 0;
    do {
      iVar8 = iVar8 + 1;
      puVar7[0xc] = 0xffffffff;
      puVar7 = puVar7 + 0x12;
    } while (iVar8 != (param_3 + param_4) - param_4);
  }
  return param_2;
}


lui gp,0xb
addiu gp,gp,0x1d08
addu gp,gp,t9
lw v0,0x0(a1)
addiu sp,sp,-0x30
lw v1,0x4(a1)
addu t3,v0,a2
sw gp,0x10(sp)
sw s3,0x28(sp)
or s3,a2,zero
sltu v1,v1,t3
sw s2,0x24(sp)
sw s1,0x20(sp)
or s2,a3,zero
sw ra,0x2c(sp)
or s1,a1,zero
beq v1,zero,0x0004b694
_sw s0,0x1c(sp)
mtlo s3
lw t0,0x0(a0)
sra a2,s3,0x1f
li v1,0x2
slti t3,t3,0xc8
mthi a2
madd v0,v1
mflo a3
beq t3,zero,0x0004b7b4
_mfhi a2
or v1,a2,zero
blez a2,0x0004b798
_mflo s0
or v1,zero,zero
li s0,0xc8
addiu v0,s0,-0x1
lw t9,-0x7fb8(gp)
addiu v1,v1,-0x1
sltu a1,v0,s0
addu v1,a1,v1
sll a0,v0,0x3
srl a2,v0,0x1d
sll a1,v1,0x3
addu v0,a0,v0
or a1,a2,a1
addu a1,a1,v1
sltu v1,v0,a0
sll a2,v0,0x3
addu v1,v1,a1
addiu a3,a2,0x50
srl v0,v0,0x1d
sll v1,v1,0x3
sltu a2,a3,a2
or v1,v0,v1
addu a2,a2,v1
addiu t9,t9,-0x7804
or a1,s1,zero
bal 0x000387fc
_or a0,t0,zero
lw gp,0x10(sp)
beq v0,zero,0x0004b778
_or s1,v0,zero
lw v0,0x0(v0)
sw s0,0x4(s1)
addu t3,v0,s3
addiu t2,v0,-0x1
slt v1,t2,s2
bne v1,zero,0x0004b71c
_sll a1,t3,0x3
sll a0,v0,0x3
addu a1,a1,t3
addu a0,a0,v0
sll a1,a1,0x3
sll a0,a0,0x3
addiu a1,a1,-0x40
addu a0,s1,a0
addu a1,s1,a1
addiu t4,s2,-0x1
addiu v0,a0,-0x40
or v1,a1,zero
lw t1,0x0(v0)
addiu v0,v0,0x10
addiu v1,v1,0x10
lw t0,-0xc(v0)
lw a3,-0x8(v0)
lw a2,-0x4(v0)
sw t1,-0x10(v1)
sw t0,-0xc(v1)
sw a3,-0x8(v1)
bne v0,a0,0x0004b6d0
_sw a2,-0x4(v1)
lw a2,0x0(a0)
addiu t2,t2,-0x1
lw v0,0x4(a0)
addiu a1,a1,-0x48
addiu a0,a0,-0x48
sw a2,0x0(v1)
bne t2,t4,0x0004b6c8
_sw v0,0x4(v1)
sll v0,s2,0x3
lw t9,-0x7e50(gp)
sll a2,s3,0x3
sw t3,0x0(s1)
addu v0,v0,s2
addu a2,a2,s3
sll s0,v0,0x3
sll a2,a2,0x3
addiu a0,s0,0x8
or a1,zero,zero
addu a0,s1,a0
jalr t9
_addu s3,s3,s2
slt v0,s2,s3
beq v0,zero,0x0004b778
_addu v0,s1,s0
subu s2,s3,s2
or v1,zero,zero
li a0,-0x1
addiu v1,v1,0x1
sw a0,0x30(v0)
bne v1,s2,0x0004b768
_addiu v0,v0,0x48
lw ra,0x2c(sp)
or v0,s1,zero
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x30
bne a2,zero,0x0004b620
_addiu v0,s0,-0x1
sltiu v0,a3,0xc9
bne v0,zero,0x0004b620
_addiu v0,s0,-0x1
b 0x0004b618
_or v1,zero,zero
lw a1,-0x7fd4(gp)
li a2,0xc8
lw t9,-0x7f94(gp)
or s1,zero,zero
addiu t9,t9,-0x61d8
bal 0x00049e28
_addiu a1,a1,0x76d4
b 0x0004b77c
_lw ra,0x2c(sp)
(translation_unit "uint * FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  longlong lVar1;\n  undefined *puVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  int iVar8;\n  uint *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  \n  uVar4 = *param_2;\n  uVar13 = uVar4 + param_3;\n  if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }\n  iVar8 = uVar4 - 1;\n  if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }\n  puVar2 = PTR_memset_000f5450;\n  *param_2 = uVar13;\n  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar7 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}\n\n" (function_definition "uint * FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  longlong lVar1;\n  undefined *puVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  int iVar8;\n  uint *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  \n  uVar4 = *param_2;\n  uVar13 = uVar4 + param_3;\n  if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }\n  iVar8 = uVar4 - 1;\n  if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }\n  puVar2 = PTR_memset_000f5450;\n  *param_2 = uVar13;\n  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar7 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" type_identifier (pointer_declarator "* FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)" * (function_declarator "FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,int param_3,int param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) )))) (compound_statement "{\n  longlong lVar1;\n  undefined *puVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  int iVar8;\n  uint *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  \n  uVar4 = *param_2;\n  uVar13 = uVar4 + param_3;\n  if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }\n  iVar8 = uVar4 - 1;\n  if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }\n  puVar2 = PTR_memset_000f5450;\n  *param_2 = uVar13;\n  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar7 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "uVar13 = uVar4 + param_3;" (assignment_expression "uVar13 = uVar4 + param_3" identifier = (binary_expression "uVar4 + param_3" identifier + identifier)) ;) (if_statement "if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }" if (parenthesized_expression "(param_2[1] < uVar13)" ( (binary_expression "param_2[1] < uVar13" (subscript_expression "param_2[1]" identifier [ number_literal ]) < identifier) )) (compound_statement "{\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }" { (expression_statement "lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;" (assignment_expression "lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2" identifier = (binary_expression "(longlong)param_3 + (longlong)(int)uVar4 * 2" (cast_expression "(longlong)param_3" ( (type_descriptor "longlong" type_identifier) ) identifier) + (binary_expression "(longlong)(int)uVar4 * 2" (cast_expression "(longlong)(int)uVar4" ( (type_descriptor "longlong" type_identifier) ) (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) * number_literal))) ;) (expression_statement "uVar4 = (uint)lVar1;" (assignment_expression "uVar4 = (uint)lVar1" identifier = (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }" if (parenthesized_expression "(199 < (int)uVar13)" ( (binary_expression "199 < (int)uVar13" number_literal < (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }" { (expression_statement "FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);" (call_expression "FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200)" identifier (argument_list "(param_1,PTR_LAB_000f52cc + 0x76d4,200)" ( identifier , (binary_expression "PTR_LAB_000f52cc + 0x76d4" identifier + number_literal) , number_literal ))) ;) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }" if (parenthesized_expression "((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4))))" ( (binary_expression "(0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))" (parenthesized_expression "(0xffffffff < lVar1)" ( (binary_expression "0xffffffff < lVar1" number_literal < identifier) )) || (parenthesized_expression "((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))" ( (parenthesized_expression "(uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4))" ( (comma_expression "uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)" (assignment_expression "uVar13 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) , (binary_expression "(int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)" (binary_expression "(int)((ulonglong)lVar1 >> 0x20) == 0" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) == number_literal) && (parenthesized_expression "(uVar13 = uVar4 - 1, 200 < uVar4)" ( (comma_expression "uVar13 = uVar4 - 1, 200 < uVar4" (assignment_expression "uVar13 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) , (binary_expression "200 < uVar4" number_literal < identifier)) )))) )) ))) )) (compound_statement "{\n      lVar1 = 200;\n      uVar13 = 199;\n    }" { (expression_statement "lVar1 = 200;" (assignment_expression "lVar1 = 200" identifier = number_literal) ;) (expression_statement "uVar13 = 199;" (assignment_expression "uVar13 = 199" identifier = number_literal) ;) })) (expression_statement "iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;" (assignment_expression "iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1" identifier = (binary_expression "(uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1" (binary_expression "(uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20)" (call_expression "(uint)(uVar13 < (uint)lVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar13 < (uint)lVar1)" ( (binary_expression "uVar13 < (uint)lVar1" identifier < (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ))) + (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) + number_literal)) ;) (expression_statement "param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));" (assignment_expression "param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" identifier = (cast_expression "(uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" identifier (argument_list "(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" ( (pointer_expression "*param_1" * identifier) , identifier , (binary_expression "(uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8)" (call_expression "(uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar13 * 0x48 + 0x50 < uVar13 * 0x48)" ( (binary_expression "uVar13 * 0x48 + 0x50 < uVar13 * 0x48" (binary_expression "uVar13 * 0x48 + 0x50" (binary_expression "uVar13 * 0x48" identifier * number_literal) + number_literal) < (binary_expression "uVar13 * 0x48" identifier * number_literal)) ))) + (parenthesized_expression "(uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8)" ( (binary_expression "uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8" (binary_expression "uVar13 * 9 >> 0x1d" (binary_expression "uVar13 * 9" identifier * number_literal) >> number_literal) | (binary_expression "((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8" (parenthesized_expression "((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8)" ( (binary_expression "(uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8" (binary_expression "(uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8)" (call_expression "(uint)(uVar13 * 9 < uVar13 * 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar13 * 9 < uVar13 * 8)" ( (binary_expression "uVar13 * 9 < uVar13 * 8" (binary_expression "uVar13 * 9" identifier * number_literal) < (binary_expression "uVar13 * 8" identifier * number_literal)) ))) + (parenthesized_expression "(uVar13 >> 0x1d | iVar8 * 8)" ( (binary_expression "uVar13 >> 0x1d | iVar8 * 8" (binary_expression "uVar13 >> 0x1d" identifier >> number_literal) | (binary_expression "iVar8 * 8" identifier * number_literal)) ))) + identifier) )) * number_literal)) ))) ))))) ;) (if_statement "if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }" if (parenthesized_expression "(param_2 == (uint *)0x0)" ( (binary_expression "param_2 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (uint *)0x0;\n    }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "param_2[1] = (uint)lVar1;" (assignment_expression "param_2[1] = (uint)lVar1" (subscript_expression "param_2[1]" identifier [ number_literal ]) = (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar13 = uVar4 + param_3;" (assignment_expression "uVar13 = uVar4 + param_3" identifier = (binary_expression "uVar4 + param_3" identifier + identifier)) ;) })) (expression_statement "iVar8 = uVar4 - 1;" (assignment_expression "iVar8 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) (if_statement "if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }" if (parenthesized_expression "(param_4 <= iVar8)" ( (binary_expression "param_4 <= iVar8" identifier <= identifier) )) (compound_statement "{\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }" { (expression_statement "puVar7 = param_2 + uVar4 * 0x12;" (assignment_expression "puVar7 = param_2 + uVar4 * 0x12" identifier = (binary_expression "param_2 + uVar4 * 0x12" identifier + (binary_expression "uVar4 * 0x12" identifier * number_literal))) ;) (expression_statement "puVar10 = param_2 + uVar13 * 0x12 + -0x10;" (assignment_expression "puVar10 = param_2 + uVar13 * 0x12 + -0x10" identifier = (binary_expression "param_2 + uVar13 * 0x12 + -0x10" (binary_expression "param_2 + uVar13 * 0x12" identifier + (binary_expression "uVar13 * 0x12" identifier * number_literal)) + number_literal)) ;) (do_statement "do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);" do (compound_statement "{\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    }" { (expression_statement "puVar5 = puVar7 + -0x10;" (assignment_expression "puVar5 = puVar7 + -0x10" identifier = (binary_expression "puVar7 + -0x10" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar10;" (assignment_expression "puVar3 = puVar10" identifier = identifier) ;) (do_statement "do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);" do (compound_statement "{\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      }" { (expression_statement "puVar9 = puVar3;" (assignment_expression "puVar9 = puVar3" identifier = identifier) ;) (expression_statement "puVar6 = puVar5 + 4;" (assignment_expression "puVar6 = puVar5 + 4" identifier = (binary_expression "puVar5 + 4" identifier + number_literal)) ;) (expression_statement "uVar12 = puVar5[1];" (assignment_expression "uVar12 = puVar5[1]" identifier = (subscript_expression "puVar5[1]" identifier [ number_literal ])) ;) (expression_statement "uVar11 = puVar5[2];" (assignment_expression "uVar11 = puVar5[2]" identifier = (subscript_expression "puVar5[2]" identifier [ number_literal ])) ;) (expression_statement "uVar4 = puVar5[3];" (assignment_expression "uVar4 = puVar5[3]" identifier = (subscript_expression "puVar5[3]" identifier [ number_literal ])) ;) (expression_statement "*puVar9 = *puVar5;" (assignment_expression "*puVar9 = *puVar5" (pointer_expression "*puVar9" * identifier) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar9[1] = uVar12;" (assignment_expression "puVar9[1] = uVar12" (subscript_expression "puVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9[2] = uVar11;" (assignment_expression "puVar9[2] = uVar11" (subscript_expression "puVar9[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9[3] = uVar4;" (assignment_expression "puVar9[3] = uVar4" (subscript_expression "puVar9[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (expression_statement "puVar3 = puVar9 + 4;" (assignment_expression "puVar3 = puVar9 + 4" identifier = (binary_expression "puVar9 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != puVar7)" ( (binary_expression "puVar6 != puVar7" identifier != identifier) )) ;) (expression_statement "uVar11 = *puVar7;" (assignment_expression "uVar11 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) (expression_statement "iVar8 = iVar8 + -1;" (assignment_expression "iVar8 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = puVar7[1];" (assignment_expression "uVar4 = puVar7[1]" identifier = (subscript_expression "puVar7[1]" identifier [ number_literal ])) ;) (expression_statement "puVar10 = puVar10 + -0x12;" (assignment_expression "puVar10 = puVar10 + -0x12" identifier = (binary_expression "puVar10 + -0x12" identifier + number_literal)) ;) (expression_statement "puVar7 = puVar7 + -0x12;" (assignment_expression "puVar7 = puVar7 + -0x12" identifier = (binary_expression "puVar7 + -0x12" identifier + number_literal)) ;) (expression_statement "puVar9[4] = uVar11;" (assignment_expression "puVar9[4] = uVar11" (subscript_expression "puVar9[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9[5] = uVar4;" (assignment_expression "puVar9[5] = uVar4" (subscript_expression "puVar9[5]" identifier [ number_literal ]) = identifier) ;) }) while (parenthesized_expression "(iVar8 != param_4 + -1)" ( (binary_expression "iVar8 != param_4 + -1" identifier != (binary_expression "param_4 + -1" identifier + number_literal)) )) ;) })) (expression_statement "puVar2 = PTR_memset_000f5450;" (assignment_expression "puVar2 = PTR_memset_000f5450" identifier = identifier) ;) (expression_statement "*param_2 = uVar13;" (assignment_expression "*param_2 = uVar13" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "(*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);" (call_expression "(*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" (parenthesized_expression "(*(code *)puVar2)" ( (pointer_expression "*(code *)puVar2" * (cast_expression "(code *)puVar2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" ( (binary_expression "param_2 + param_4 * 0x12 + 2" (binary_expression "param_2 + param_4 * 0x12" identifier + (binary_expression "param_4 * 0x12" identifier * number_literal)) + number_literal) , number_literal , (binary_expression "param_3 * 0x48" identifier * number_literal) ))) ;) (expression_statement "puVar7 = param_2 + param_4 * 0x12;" (assignment_expression "puVar7 = param_2 + param_4 * 0x12" identifier = (binary_expression "param_2 + param_4 * 0x12" identifier + (binary_expression "param_4 * 0x12" identifier * number_literal))) ;) (if_statement "if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }" if (parenthesized_expression "(param_4 < param_3 + param_4)" ( (binary_expression "param_4 < param_3 + param_4" identifier < (binary_expression "param_3 + param_4" identifier + identifier)) )) (compound_statement "{\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }" { (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);" do (compound_statement "{\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    }" { (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "puVar7[0xc] = 0xffffffff;" (assignment_expression "puVar7[0xc] = 0xffffffff" (subscript_expression "puVar7[0xc]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar7 = puVar7 + 0x12;" (assignment_expression "puVar7 = puVar7 + 0x12" identifier = (binary_expression "puVar7 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar8 != (param_3 + param_4) - param_4)" ( (binary_expression "iVar8 != (param_3 + param_4) - param_4" identifier != (binary_expression "(param_3 + param_4) - param_4" (parenthesized_expression "(param_3 + param_4)" ( (binary_expression "param_3 + param_4" identifier + identifier) )) - identifier)) )) ;) })) (return_statement "return param_2;" return identifier ;) })))
(translation_unit "/* WARNING: Removing unreachable block (ram,0x0004b7a0) */\n\nSrcList * sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)\n\n{\n  longlong lVar1;\n  anon_union_4_2_996c0f8d_for_u1 *paVar2;\n  int iVar3;\n  anon_union_4_2_996c0f8d_for_u1 *paVar4;\n  anon_union_4_2_996c0f8d_for_u1 *paVar5;\n  anon_union_4_2_996c0f8d_for_u1 *paVar6;\n  anon_union_4_2_996c0f8d_for_u1 *paVar7;\n  anon_union_4_2_996c0f8d_for_u1 *paVar8;\n  anon_union_4_2_996c0f8d_for_u1 aVar9;\n  anon_union_4_2_996c0f8d_for_u1 aVar10;\n  anon_union_4_2_996c0f8d_for_u1 aVar11;\n  int iVar12;\n  uint uVar13;\n  code *pcVar14;\n  undefined1 *puVar15;\n  u32 uVar16;\n  undefined4 in_stack_ffffffe4;\n  \n  puVar15 = &_gp;\n  iVar3 = pSrc->nSrc;\n  uVar13 = iVar3 + nExtra;\n  if (pSrc->nAlloc < uVar13) {\n    lVar1 = (longlong)nExtra + (longlong)iVar3 * 2;\n    uVar16 = (u32)lVar1;\n    if (199 < (int)uVar13) {\n      sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);\n      return (SrcList *)0x0;\n    }\n    if (200 < lVar1) {\n      uVar16 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    iVar3 = pSrc->nSrc;\n    pSrc->nAlloc = uVar16;\n    uVar13 = iVar3 + nExtra;\n  }\n  iVar12 = iVar3 + -1;\n  if (iStart <= iVar12) {\n    paVar6 = &pSrc->a[iVar3 + -1].u1;\n    paVar8 = (anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1));\n    do {\n      paVar4 = paVar6 + -0x10;\n      paVar2 = paVar8;\n      do {\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      } while (paVar5 != paVar6);\n      aVar10 = *paVar6;\n      iVar12 = iVar12 + -1;\n      aVar9 = paVar6[1];\n      paVar8 = paVar8 + -0x12;\n      paVar6 = paVar6 + -0x12;\n      paVar7[4] = aVar10;\n      paVar7[5] = aVar9;\n    } while (iVar12 != iStart + -1);\n  }\n  pcVar14 = *(code **)(puVar15 + -0x7e50);\n  pSrc->nSrc = uVar13;\n  (*pcVar14)(pSrc->a + iStart,0,nExtra * 0x48);\n  paVar6 = &pSrc->a[iStart + -1].u1;\n  if (iStart < nExtra + iStart) {\n    iVar3 = 0;\n    do {\n      iVar3 = iVar3 + 1;\n      paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      paVar6 = paVar6 + 0x12;\n    } while (iVar3 != (nExtra + iStart) - iStart);\n  }\n  return pSrc;\n}\n\n" comment (function_definition "SrcList * sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)\n\n{\n  longlong lVar1;\n  anon_union_4_2_996c0f8d_for_u1 *paVar2;\n  int iVar3;\n  anon_union_4_2_996c0f8d_for_u1 *paVar4;\n  anon_union_4_2_996c0f8d_for_u1 *paVar5;\n  anon_union_4_2_996c0f8d_for_u1 *paVar6;\n  anon_union_4_2_996c0f8d_for_u1 *paVar7;\n  anon_union_4_2_996c0f8d_for_u1 *paVar8;\n  anon_union_4_2_996c0f8d_for_u1 aVar9;\n  anon_union_4_2_996c0f8d_for_u1 aVar10;\n  anon_union_4_2_996c0f8d_for_u1 aVar11;\n  int iVar12;\n  uint uVar13;\n  code *pcVar14;\n  undefined1 *puVar15;\n  u32 uVar16;\n  undefined4 in_stack_ffffffe4;\n  \n  puVar15 = &_gp;\n  iVar3 = pSrc->nSrc;\n  uVar13 = iVar3 + nExtra;\n  if (pSrc->nAlloc < uVar13) {\n    lVar1 = (longlong)nExtra + (longlong)iVar3 * 2;\n    uVar16 = (u32)lVar1;\n    if (199 < (int)uVar13) {\n      sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);\n      return (SrcList *)0x0;\n    }\n    if (200 < lVar1) {\n      uVar16 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    iVar3 = pSrc->nSrc;\n    pSrc->nAlloc = uVar16;\n    uVar13 = iVar3 + nExtra;\n  }\n  iVar12 = iVar3 + -1;\n  if (iStart <= iVar12) {\n    paVar6 = &pSrc->a[iVar3 + -1].u1;\n    paVar8 = (anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1));\n    do {\n      paVar4 = paVar6 + -0x10;\n      paVar2 = paVar8;\n      do {\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      } while (paVar5 != paVar6);\n      aVar10 = *paVar6;\n      iVar12 = iVar12 + -1;\n      aVar9 = paVar6[1];\n      paVar8 = paVar8 + -0x12;\n      paVar6 = paVar6 + -0x12;\n      paVar7[4] = aVar10;\n      paVar7[5] = aVar9;\n    } while (iVar12 != iStart + -1);\n  }\n  pcVar14 = *(code **)(puVar15 + -0x7e50);\n  pSrc->nSrc = uVar13;\n  (*pcVar14)(pSrc->a + iStart,0,nExtra * 0x48);\n  paVar6 = &pSrc->a[iStart + -1].u1;\n  if (iStart < nExtra + iStart) {\n    iVar3 = 0;\n    do {\n      iVar3 = iVar3 + 1;\n      paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      paVar6 = paVar6 + 0x12;\n    } while (iVar3 != (nExtra + iStart) - iStart);\n  }\n  return pSrc;\n}" type_identifier (pointer_declarator "* sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)" * (function_declarator "sqlite3SrcListEnlarge(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)" identifier (parameter_list "(Parse *pParse,SrcList *pSrc,int nExtra,int iStart)" ( (parameter_declaration "Parse *pParse" type_identifier (pointer_declarator "*pParse" * identifier)) , (parameter_declaration "SrcList *pSrc" type_identifier (pointer_declarator "*pSrc" * identifier)) , (parameter_declaration "int nExtra" primitive_type identifier) , (parameter_declaration "int iStart" primitive_type identifier) )))) (compound_statement "{\n  longlong lVar1;\n  anon_union_4_2_996c0f8d_for_u1 *paVar2;\n  int iVar3;\n  anon_union_4_2_996c0f8d_for_u1 *paVar4;\n  anon_union_4_2_996c0f8d_for_u1 *paVar5;\n  anon_union_4_2_996c0f8d_for_u1 *paVar6;\n  anon_union_4_2_996c0f8d_for_u1 *paVar7;\n  anon_union_4_2_996c0f8d_for_u1 *paVar8;\n  anon_union_4_2_996c0f8d_for_u1 aVar9;\n  anon_union_4_2_996c0f8d_for_u1 aVar10;\n  anon_union_4_2_996c0f8d_for_u1 aVar11;\n  int iVar12;\n  uint uVar13;\n  code *pcVar14;\n  undefined1 *puVar15;\n  u32 uVar16;\n  undefined4 in_stack_ffffffe4;\n  \n  puVar15 = &_gp;\n  iVar3 = pSrc->nSrc;\n  uVar13 = iVar3 + nExtra;\n  if (pSrc->nAlloc < uVar13) {\n    lVar1 = (longlong)nExtra + (longlong)iVar3 * 2;\n    uVar16 = (u32)lVar1;\n    if (199 < (int)uVar13) {\n      sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);\n      return (SrcList *)0x0;\n    }\n    if (200 < lVar1) {\n      uVar16 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    iVar3 = pSrc->nSrc;\n    pSrc->nAlloc = uVar16;\n    uVar13 = iVar3 + nExtra;\n  }\n  iVar12 = iVar3 + -1;\n  if (iStart <= iVar12) {\n    paVar6 = &pSrc->a[iVar3 + -1].u1;\n    paVar8 = (anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1));\n    do {\n      paVar4 = paVar6 + -0x10;\n      paVar2 = paVar8;\n      do {\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      } while (paVar5 != paVar6);\n      aVar10 = *paVar6;\n      iVar12 = iVar12 + -1;\n      aVar9 = paVar6[1];\n      paVar8 = paVar8 + -0x12;\n      paVar6 = paVar6 + -0x12;\n      paVar7[4] = aVar10;\n      paVar7[5] = aVar9;\n    } while (iVar12 != iStart + -1);\n  }\n  pcVar14 = *(code **)(puVar15 + -0x7e50);\n  pSrc->nSrc = uVar13;\n  (*pcVar14)(pSrc->a + iStart,0,nExtra * 0x48);\n  paVar6 = &pSrc->a[iStart + -1].u1;\n  if (iStart < nExtra + iStart) {\n    iVar3 = 0;\n    do {\n      iVar3 = iVar3 + 1;\n      paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      paVar6 = paVar6 + 0x12;\n    } while (iVar3 != (nExtra + iStart) - iStart);\n  }\n  return pSrc;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "anon_union_4_2_996c0f8d_for_u1 *paVar2;" type_identifier (pointer_declarator "*paVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "anon_union_4_2_996c0f8d_for_u1 *paVar4;" type_identifier (pointer_declarator "*paVar4" * identifier) ;) (declaration "anon_union_4_2_996c0f8d_for_u1 *paVar5;" type_identifier (pointer_declarator "*paVar5" * identifier) ;) (declaration "anon_union_4_2_996c0f8d_for_u1 *paVar6;" type_identifier (pointer_declarator "*paVar6" * identifier) ;) (declaration "anon_union_4_2_996c0f8d_for_u1 *paVar7;" type_identifier (pointer_declarator "*paVar7" * identifier) ;) (declaration "anon_union_4_2_996c0f8d_for_u1 *paVar8;" type_identifier (pointer_declarator "*paVar8" * identifier) ;) (declaration "anon_union_4_2_996c0f8d_for_u1 aVar9;" type_identifier identifier ;) (declaration "anon_union_4_2_996c0f8d_for_u1 aVar10;" type_identifier identifier ;) (declaration "anon_union_4_2_996c0f8d_for_u1 aVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "code *pcVar14;" type_identifier (pointer_declarator "*pcVar14" * identifier) ;) (declaration "undefined1 *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "u32 uVar16;" type_identifier identifier ;) (declaration "undefined4 in_stack_ffffffe4;" type_identifier identifier ;) (expression_statement "puVar15 = &_gp;" (assignment_expression "puVar15 = &_gp" identifier = (pointer_expression "&_gp" & identifier)) ;) (expression_statement "iVar3 = pSrc->nSrc;" (assignment_expression "iVar3 = pSrc->nSrc" identifier = (field_expression "pSrc->nSrc" identifier -> field_identifier)) ;) (expression_statement "uVar13 = iVar3 + nExtra;" (assignment_expression "uVar13 = iVar3 + nExtra" identifier = (binary_expression "iVar3 + nExtra" identifier + identifier)) ;) (if_statement "if (pSrc->nAlloc < uVar13) {\n    lVar1 = (longlong)nExtra + (longlong)iVar3 * 2;\n    uVar16 = (u32)lVar1;\n    if (199 < (int)uVar13) {\n      sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);\n      return (SrcList *)0x0;\n    }\n    if (200 < lVar1) {\n      uVar16 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    iVar3 = pSrc->nSrc;\n    pSrc->nAlloc = uVar16;\n    uVar13 = iVar3 + nExtra;\n  }" if (parenthesized_expression "(pSrc->nAlloc < uVar13)" ( (binary_expression "pSrc->nAlloc < uVar13" (field_expression "pSrc->nAlloc" identifier -> field_identifier) < identifier) )) (compound_statement "{\n    lVar1 = (longlong)nExtra + (longlong)iVar3 * 2;\n    uVar16 = (u32)lVar1;\n    if (199 < (int)uVar13) {\n      sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);\n      return (SrcList *)0x0;\n    }\n    if (200 < lVar1) {\n      uVar16 = 200;\n    }\n    puVar15 = &_gp;\n    pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));\n    if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }\n    iVar3 = pSrc->nSrc;\n    pSrc->nAlloc = uVar16;\n    uVar13 = iVar3 + nExtra;\n  }" { (expression_statement "lVar1 = (longlong)nExtra + (longlong)iVar3 * 2;" (assignment_expression "lVar1 = (longlong)nExtra + (longlong)iVar3 * 2" identifier = (binary_expression "(longlong)nExtra + (longlong)iVar3 * 2" (cast_expression "(longlong)nExtra" ( (type_descriptor "longlong" type_identifier) ) identifier) + (binary_expression "(longlong)iVar3 * 2" (cast_expression "(longlong)iVar3" ( (type_descriptor "longlong" type_identifier) ) identifier) * number_literal))) ;) (expression_statement "uVar16 = (u32)lVar1;" (assignment_expression "uVar16 = (u32)lVar1" identifier = (cast_expression "(u32)lVar1" ( (type_descriptor "u32" type_identifier) ) identifier)) ;) (if_statement "if (199 < (int)uVar13) {\n      sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);\n      return (SrcList *)0x0;\n    }" if (parenthesized_expression "(199 < (int)uVar13)" ( (binary_expression "199 < (int)uVar13" number_literal < (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);\n      return (SrcList *)0x0;\n    }" { (expression_statement "sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200);" (call_expression "sqlite3ErrorMsg(pParse,PTR_LAB_000f52cc + 0x76d4,200)" identifier (argument_list "(pParse,PTR_LAB_000f52cc + 0x76d4,200)" ( identifier , (binary_expression "PTR_LAB_000f52cc + 0x76d4" identifier + number_literal) , number_literal ))) ;) (return_statement "return (SrcList *)0x0;" return (cast_expression "(SrcList *)0x0" ( (type_descriptor "SrcList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if (200 < lVar1) {\n      uVar16 = 200;\n    }" if (parenthesized_expression "(200 < lVar1)" ( (binary_expression "200 < lVar1" number_literal < identifier) )) (compound_statement "{\n      uVar16 = 200;\n    }" { (expression_statement "uVar16 = 200;" (assignment_expression "uVar16 = 200" identifier = number_literal) ;) })) (expression_statement "puVar15 = &_gp;" (assignment_expression "puVar15 = &_gp" identifier = (pointer_expression "&_gp" & identifier)) ;) (expression_statement "pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4));" (assignment_expression "pSrc = (SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4))" identifier = (cast_expression "(SrcList *)sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4))" ( (type_descriptor "SrcList *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "sqlite3DbRealloc(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4))" identifier (argument_list "(pParse->db,pSrc,CONCAT44(&_gp,in_stack_ffffffe4))" ( (field_expression "pParse->db" identifier -> field_identifier) , identifier , (call_expression "CONCAT44(&_gp,in_stack_ffffffe4)" identifier (argument_list "(&_gp,in_stack_ffffffe4)" ( (pointer_expression "&_gp" & identifier) , identifier ))) ))))) ;) (if_statement "if (pSrc == (SrcList *)0x0) {\n      return (SrcList *)0x0;\n    }" if (parenthesized_expression "(pSrc == (SrcList *)0x0)" ( (binary_expression "pSrc == (SrcList *)0x0" identifier == (cast_expression "(SrcList *)0x0" ( (type_descriptor "SrcList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (SrcList *)0x0;\n    }" { (return_statement "return (SrcList *)0x0;" return (cast_expression "(SrcList *)0x0" ( (type_descriptor "SrcList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "iVar3 = pSrc->nSrc;" (assignment_expression "iVar3 = pSrc->nSrc" identifier = (field_expression "pSrc->nSrc" identifier -> field_identifier)) ;) (expression_statement "pSrc->nAlloc = uVar16;" (assignment_expression "pSrc->nAlloc = uVar16" (field_expression "pSrc->nAlloc" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar13 = iVar3 + nExtra;" (assignment_expression "uVar13 = iVar3 + nExtra" identifier = (binary_expression "iVar3 + nExtra" identifier + identifier)) ;) })) (expression_statement "iVar12 = iVar3 + -1;" (assignment_expression "iVar12 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (if_statement "if (iStart <= iVar12) {\n    paVar6 = &pSrc->a[iVar3 + -1].u1;\n    paVar8 = (anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1));\n    do {\n      paVar4 = paVar6 + -0x10;\n      paVar2 = paVar8;\n      do {\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      } while (paVar5 != paVar6);\n      aVar10 = *paVar6;\n      iVar12 = iVar12 + -1;\n      aVar9 = paVar6[1];\n      paVar8 = paVar8 + -0x12;\n      paVar6 = paVar6 + -0x12;\n      paVar7[4] = aVar10;\n      paVar7[5] = aVar9;\n    } while (iVar12 != iStart + -1);\n  }" if (parenthesized_expression "(iStart <= iVar12)" ( (binary_expression "iStart <= iVar12" identifier <= identifier) )) (compound_statement "{\n    paVar6 = &pSrc->a[iVar3 + -1].u1;\n    paVar8 = (anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1));\n    do {\n      paVar4 = paVar6 + -0x10;\n      paVar2 = paVar8;\n      do {\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      } while (paVar5 != paVar6);\n      aVar10 = *paVar6;\n      iVar12 = iVar12 + -1;\n      aVar9 = paVar6[1];\n      paVar8 = paVar8 + -0x12;\n      paVar6 = paVar6 + -0x12;\n      paVar7[4] = aVar10;\n      paVar7[5] = aVar9;\n    } while (iVar12 != iStart + -1);\n  }" { (expression_statement "paVar6 = &pSrc->a[iVar3 + -1].u1;" (assignment_expression "paVar6 = &pSrc->a[iVar3 + -1].u1" identifier = (pointer_expression "&pSrc->a[iVar3 + -1].u1" & (field_expression "pSrc->a[iVar3 + -1].u1" (subscript_expression "pSrc->a[iVar3 + -1]" (field_expression "pSrc->a" identifier -> field_identifier) [ (binary_expression "iVar3 + -1" identifier + number_literal) ]) . field_identifier))) ;) (expression_statement "paVar8 = (anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1));" (assignment_expression "paVar8 = (anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1))" identifier = (cast_expression "(anon_union_4_2_996c0f8d_for_u1 *)(pSrc->a + (uVar13 - 1))" ( (type_descriptor "anon_union_4_2_996c0f8d_for_u1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pSrc->a + (uVar13 - 1))" ( (binary_expression "pSrc->a + (uVar13 - 1)" (field_expression "pSrc->a" identifier -> field_identifier) + (parenthesized_expression "(uVar13 - 1)" ( (binary_expression "uVar13 - 1" identifier - number_literal) ))) )))) ;) (do_statement "do {\n      paVar4 = paVar6 + -0x10;\n      paVar2 = paVar8;\n      do {\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      } while (paVar5 != paVar6);\n      aVar10 = *paVar6;\n      iVar12 = iVar12 + -1;\n      aVar9 = paVar6[1];\n      paVar8 = paVar8 + -0x12;\n      paVar6 = paVar6 + -0x12;\n      paVar7[4] = aVar10;\n      paVar7[5] = aVar9;\n    } while (iVar12 != iStart + -1);" do (compound_statement "{\n      paVar4 = paVar6 + -0x10;\n      paVar2 = paVar8;\n      do {\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      } while (paVar5 != paVar6);\n      aVar10 = *paVar6;\n      iVar12 = iVar12 + -1;\n      aVar9 = paVar6[1];\n      paVar8 = paVar8 + -0x12;\n      paVar6 = paVar6 + -0x12;\n      paVar7[4] = aVar10;\n      paVar7[5] = aVar9;\n    }" { (expression_statement "paVar4 = paVar6 + -0x10;" (assignment_expression "paVar4 = paVar6 + -0x10" identifier = (binary_expression "paVar6 + -0x10" identifier + number_literal)) ;) (expression_statement "paVar2 = paVar8;" (assignment_expression "paVar2 = paVar8" identifier = identifier) ;) (do_statement "do {\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      } while (paVar5 != paVar6);" do (compound_statement "{\n        paVar7 = paVar2;\n        paVar5 = paVar4 + 4;\n        aVar11 = paVar4[1];\n        aVar10 = paVar4[2];\n        aVar9 = paVar4[3];\n        *paVar7 = *paVar4;\n        paVar7[1] = aVar11;\n        paVar7[2] = aVar10;\n        paVar7[3] = aVar9;\n        paVar4 = paVar5;\n        paVar2 = paVar7 + 4;\n      }" { (expression_statement "paVar7 = paVar2;" (assignment_expression "paVar7 = paVar2" identifier = identifier) ;) (expression_statement "paVar5 = paVar4 + 4;" (assignment_expression "paVar5 = paVar4 + 4" identifier = (binary_expression "paVar4 + 4" identifier + number_literal)) ;) (expression_statement "aVar11 = paVar4[1];" (assignment_expression "aVar11 = paVar4[1]" identifier = (subscript_expression "paVar4[1]" identifier [ number_literal ])) ;) (expression_statement "aVar10 = paVar4[2];" (assignment_expression "aVar10 = paVar4[2]" identifier = (subscript_expression "paVar4[2]" identifier [ number_literal ])) ;) (expression_statement "aVar9 = paVar4[3];" (assignment_expression "aVar9 = paVar4[3]" identifier = (subscript_expression "paVar4[3]" identifier [ number_literal ])) ;) (expression_statement "*paVar7 = *paVar4;" (assignment_expression "*paVar7 = *paVar4" (pointer_expression "*paVar7" * identifier) = (pointer_expression "*paVar4" * identifier)) ;) (expression_statement "paVar7[1] = aVar11;" (assignment_expression "paVar7[1] = aVar11" (subscript_expression "paVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "paVar7[2] = aVar10;" (assignment_expression "paVar7[2] = aVar10" (subscript_expression "paVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "paVar7[3] = aVar9;" (assignment_expression "paVar7[3] = aVar9" (subscript_expression "paVar7[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "paVar4 = paVar5;" (assignment_expression "paVar4 = paVar5" identifier = identifier) ;) (expression_statement "paVar2 = paVar7 + 4;" (assignment_expression "paVar2 = paVar7 + 4" identifier = (binary_expression "paVar7 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(paVar5 != paVar6)" ( (binary_expression "paVar5 != paVar6" identifier != identifier) )) ;) (expression_statement "aVar10 = *paVar6;" (assignment_expression "aVar10 = *paVar6" identifier = (pointer_expression "*paVar6" * identifier)) ;) (expression_statement "iVar12 = iVar12 + -1;" (assignment_expression "iVar12 = iVar12 + -1" identifier = (binary_expression "iVar12 + -1" identifier + number_literal)) ;) (expression_statement "aVar9 = paVar6[1];" (assignment_expression "aVar9 = paVar6[1]" identifier = (subscript_expression "paVar6[1]" identifier [ number_literal ])) ;) (expression_statement "paVar8 = paVar8 + -0x12;" (assignment_expression "paVar8 = paVar8 + -0x12" identifier = (binary_expression "paVar8 + -0x12" identifier + number_literal)) ;) (expression_statement "paVar6 = paVar6 + -0x12;" (assignment_expression "paVar6 = paVar6 + -0x12" identifier = (binary_expression "paVar6 + -0x12" identifier + number_literal)) ;) (expression_statement "paVar7[4] = aVar10;" (assignment_expression "paVar7[4] = aVar10" (subscript_expression "paVar7[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "paVar7[5] = aVar9;" (assignment_expression "paVar7[5] = aVar9" (subscript_expression "paVar7[5]" identifier [ number_literal ]) = identifier) ;) }) while (parenthesized_expression "(iVar12 != iStart + -1)" ( (binary_expression "iVar12 != iStart + -1" identifier != (binary_expression "iStart + -1" identifier + number_literal)) )) ;) })) (expression_statement "pcVar14 = *(code **)(puVar15 + -0x7e50);" (assignment_expression "pcVar14 = *(code **)(puVar15 + -0x7e50)" identifier = (pointer_expression "*(code **)(puVar15 + -0x7e50)" * (cast_expression "(code **)(puVar15 + -0x7e50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar15 + -0x7e50)" ( (binary_expression "puVar15 + -0x7e50" identifier + number_literal) ))))) ;) (expression_statement "pSrc->nSrc = uVar13;" (assignment_expression "pSrc->nSrc = uVar13" (field_expression "pSrc->nSrc" identifier -> field_identifier) = identifier) ;) (expression_statement "(*pcVar14)(pSrc->a + iStart,0,nExtra * 0x48);" (call_expression "(*pcVar14)(pSrc->a + iStart,0,nExtra * 0x48)" (parenthesized_expression "(*pcVar14)" ( (pointer_expression "*pcVar14" * identifier) )) (argument_list "(pSrc->a + iStart,0,nExtra * 0x48)" ( (binary_expression "pSrc->a + iStart" (field_expression "pSrc->a" identifier -> field_identifier) + identifier) , number_literal , (binary_expression "nExtra * 0x48" identifier * number_literal) ))) ;) (expression_statement "paVar6 = &pSrc->a[iStart + -1].u1;" (assignment_expression "paVar6 = &pSrc->a[iStart + -1].u1" identifier = (pointer_expression "&pSrc->a[iStart + -1].u1" & (field_expression "pSrc->a[iStart + -1].u1" (subscript_expression "pSrc->a[iStart + -1]" (field_expression "pSrc->a" identifier -> field_identifier) [ (binary_expression "iStart + -1" identifier + number_literal) ]) . field_identifier))) ;) (if_statement "if (iStart < nExtra + iStart) {\n    iVar3 = 0;\n    do {\n      iVar3 = iVar3 + 1;\n      paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      paVar6 = paVar6 + 0x12;\n    } while (iVar3 != (nExtra + iStart) - iStart);\n  }" if (parenthesized_expression "(iStart < nExtra + iStart)" ( (binary_expression "iStart < nExtra + iStart" identifier < (binary_expression "nExtra + iStart" identifier + identifier)) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      iVar3 = iVar3 + 1;\n      paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      paVar6 = paVar6 + 0x12;\n    } while (iVar3 != (nExtra + iStart) - iStart);\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar3 = iVar3 + 1;\n      paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      paVar6 = paVar6 + 0x12;\n    } while (iVar3 != (nExtra + iStart) - iStart);" do (compound_statement "{\n      iVar3 = iVar3 + 1;\n      paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;\n      paVar6 = paVar6 + 0x12;\n    }" { (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff;" (assignment_expression "paVar6[0xc] = (anon_union_4_2_996c0f8d_for_u1)0xffffffff" (subscript_expression "paVar6[0xc]" identifier [ number_literal ]) = (cast_expression "(anon_union_4_2_996c0f8d_for_u1)0xffffffff" ( (type_descriptor "anon_union_4_2_996c0f8d_for_u1" type_identifier) ) number_literal)) ;) (expression_statement "paVar6 = paVar6 + 0x12;" (assignment_expression "paVar6 = paVar6 + 0x12" identifier = (binary_expression "paVar6 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 != (nExtra + iStart) - iStart)" ( (binary_expression "iVar3 != (nExtra + iStart) - iStart" identifier != (binary_expression "(nExtra + iStart) - iStart" (parenthesized_expression "(nExtra + iStart)" ( (binary_expression "nExtra + iStart" identifier + identifier) )) - identifier)) )) ;) })) (return_statement "return pSrc;" return identifier ;) })))
(translation_unit "uint * FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  longlong lVar1;\n  undefined *puVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  int iVar8;\n  uint *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  \n  uVar4 = *param_2;\n  uVar13 = uVar4 + param_3;\n  if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }\n  iVar8 = uVar4 - 1;\n  if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }\n  puVar2 = PTR_memset_000f5450;\n  *param_2 = uVar13;\n  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar7 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}\n\n" (function_definition "uint * FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  longlong lVar1;\n  undefined *puVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  int iVar8;\n  uint *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  \n  uVar4 = *param_2;\n  uVar13 = uVar4 + param_3;\n  if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }\n  iVar8 = uVar4 - 1;\n  if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }\n  puVar2 = PTR_memset_000f5450;\n  *param_2 = uVar13;\n  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar7 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" type_identifier (pointer_declarator "* FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)" * (function_declarator "FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)" identifier (parameter_list "(undefined4 *param_1,uint *param_2,int param_3,int param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) )))) (compound_statement "{\n  longlong lVar1;\n  undefined *puVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  int iVar8;\n  uint *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  \n  uVar4 = *param_2;\n  uVar13 = uVar4 + param_3;\n  if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }\n  iVar8 = uVar4 - 1;\n  if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }\n  puVar2 = PTR_memset_000f5450;\n  *param_2 = uVar13;\n  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar7 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "uVar13 = uVar4 + param_3;" (assignment_expression "uVar13 = uVar4 + param_3" identifier = (binary_expression "uVar4 + param_3" identifier + identifier)) ;) (if_statement "if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }" if (parenthesized_expression "(param_2[1] < uVar13)" ( (binary_expression "param_2[1] < uVar13" (subscript_expression "param_2[1]" identifier [ number_literal ]) < identifier) )) (compound_statement "{\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }" { (expression_statement "lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;" (assignment_expression "lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2" identifier = (binary_expression "(longlong)param_3 + (longlong)(int)uVar4 * 2" (cast_expression "(longlong)param_3" ( (type_descriptor "longlong" type_identifier) ) identifier) + (binary_expression "(longlong)(int)uVar4 * 2" (cast_expression "(longlong)(int)uVar4" ( (type_descriptor "longlong" type_identifier) ) (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) * number_literal))) ;) (expression_statement "uVar4 = (uint)lVar1;" (assignment_expression "uVar4 = (uint)lVar1" identifier = (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }" if (parenthesized_expression "(199 < (int)uVar13)" ( (binary_expression "199 < (int)uVar13" number_literal < (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }" { (expression_statement "FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);" (call_expression "FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200)" identifier (argument_list "(param_1,PTR_LAB_000f52cc + 0x76d4,200)" ( identifier , (binary_expression "PTR_LAB_000f52cc + 0x76d4" identifier + number_literal) , number_literal ))) ;) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (if_statement "if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }" if (parenthesized_expression "((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4))))" ( (binary_expression "(0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))" (parenthesized_expression "(0xffffffff < lVar1)" ( (binary_expression "0xffffffff < lVar1" number_literal < identifier) )) || (parenthesized_expression "((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))" ( (parenthesized_expression "(uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4))" ( (comma_expression "uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)" (assignment_expression "uVar13 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) , (binary_expression "(int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)" (binary_expression "(int)((ulonglong)lVar1 >> 0x20) == 0" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) == number_literal) && (parenthesized_expression "(uVar13 = uVar4 - 1, 200 < uVar4)" ( (comma_expression "uVar13 = uVar4 - 1, 200 < uVar4" (assignment_expression "uVar13 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) , (binary_expression "200 < uVar4" number_literal < identifier)) )))) )) ))) )) (compound_statement "{\n      lVar1 = 200;\n      uVar13 = 199;\n    }" { (expression_statement "lVar1 = 200;" (assignment_expression "lVar1 = 200" identifier = number_literal) ;) (expression_statement "uVar13 = 199;" (assignment_expression "uVar13 = 199" identifier = number_literal) ;) })) (expression_statement "iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;" (assignment_expression "iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1" identifier = (binary_expression "(uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1" (binary_expression "(uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20)" (call_expression "(uint)(uVar13 < (uint)lVar1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar13 < (uint)lVar1)" ( (binary_expression "uVar13 < (uint)lVar1" identifier < (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ))) + (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) + number_literal)) ;) (expression_statement "param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));" (assignment_expression "param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" identifier = (cast_expression "(uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" identifier (argument_list "(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" ( (pointer_expression "*param_1" * identifier) , identifier , (binary_expression "(uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8)" (call_expression "(uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar13 * 0x48 + 0x50 < uVar13 * 0x48)" ( (binary_expression "uVar13 * 0x48 + 0x50 < uVar13 * 0x48" (binary_expression "uVar13 * 0x48 + 0x50" (binary_expression "uVar13 * 0x48" identifier * number_literal) + number_literal) < (binary_expression "uVar13 * 0x48" identifier * number_literal)) ))) + (parenthesized_expression "(uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8)" ( (binary_expression "uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8" (binary_expression "uVar13 * 9 >> 0x1d" (binary_expression "uVar13 * 9" identifier * number_literal) >> number_literal) | (binary_expression "((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8" (parenthesized_expression "((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8)" ( (binary_expression "(uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8" (binary_expression "(uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8)" (call_expression "(uint)(uVar13 * 9 < uVar13 * 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(uVar13 * 9 < uVar13 * 8)" ( (binary_expression "uVar13 * 9 < uVar13 * 8" (binary_expression "uVar13 * 9" identifier * number_literal) < (binary_expression "uVar13 * 8" identifier * number_literal)) ))) + (parenthesized_expression "(uVar13 >> 0x1d | iVar8 * 8)" ( (binary_expression "uVar13 >> 0x1d | iVar8 * 8" (binary_expression "uVar13 >> 0x1d" identifier >> number_literal) | (binary_expression "iVar8 * 8" identifier * number_literal)) ))) + identifier) )) * number_literal)) ))) ))))) ;) (if_statement "if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }" if (parenthesized_expression "(param_2 == (uint *)0x0)" ( (binary_expression "param_2 == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (uint *)0x0;\n    }" { (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "param_2[1] = (uint)lVar1;" (assignment_expression "param_2[1] = (uint)lVar1" (subscript_expression "param_2[1]" identifier [ number_literal ]) = (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar13 = uVar4 + param_3;" (assignment_expression "uVar13 = uVar4 + param_3" identifier = (binary_expression "uVar4 + param_3" identifier + identifier)) ;) })) (expression_statement "iVar8 = uVar4 - 1;" (assignment_expression "iVar8 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) (if_statement "if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }" if (parenthesized_expression "(param_4 <= iVar8)" ( (binary_expression "param_4 <= iVar8" identifier <= identifier) )) (compound_statement "{\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }" { (expression_statement "puVar7 = param_2 + uVar4 * 0x12;" (assignment_expression "puVar7 = param_2 + uVar4 * 0x12" identifier = (binary_expression "param_2 + uVar4 * 0x12" identifier + (binary_expression "uVar4 * 0x12" identifier * number_literal))) ;) (expression_statement "puVar10 = param_2 + uVar13 * 0x12 + -0x10;" (assignment_expression "puVar10 = param_2 + uVar13 * 0x12 + -0x10" identifier = (binary_expression "param_2 + uVar13 * 0x12 + -0x10" (binary_expression "param_2 + uVar13 * 0x12" identifier + (binary_expression "uVar13 * 0x12" identifier * number_literal)) + number_literal)) ;) (do_statement "do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);" do (compound_statement "{\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    }" { (expression_statement "puVar5 = puVar7 + -0x10;" (assignment_expression "puVar5 = puVar7 + -0x10" identifier = (binary_expression "puVar7 + -0x10" identifier + number_literal)) ;) (expression_statement "puVar3 = puVar10;" (assignment_expression "puVar3 = puVar10" identifier = identifier) ;) (do_statement "do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);" do (compound_statement "{\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      }" { (expression_statement "puVar9 = puVar3;" (assignment_expression "puVar9 = puVar3" identifier = identifier) ;) (expression_statement "puVar6 = puVar5 + 4;" (assignment_expression "puVar6 = puVar5 + 4" identifier = (binary_expression "puVar5 + 4" identifier + number_literal)) ;) (expression_statement "uVar12 = puVar5[1];" (assignment_expression "uVar12 = puVar5[1]" identifier = (subscript_expression "puVar5[1]" identifier [ number_literal ])) ;) (expression_statement "uVar11 = puVar5[2];" (assignment_expression "uVar11 = puVar5[2]" identifier = (subscript_expression "puVar5[2]" identifier [ number_literal ])) ;) (expression_statement "uVar4 = puVar5[3];" (assignment_expression "uVar4 = puVar5[3]" identifier = (subscript_expression "puVar5[3]" identifier [ number_literal ])) ;) (expression_statement "*puVar9 = *puVar5;" (assignment_expression "*puVar9 = *puVar5" (pointer_expression "*puVar9" * identifier) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "puVar9[1] = uVar12;" (assignment_expression "puVar9[1] = uVar12" (subscript_expression "puVar9[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9[2] = uVar11;" (assignment_expression "puVar9[2] = uVar11" (subscript_expression "puVar9[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9[3] = uVar4;" (assignment_expression "puVar9[3] = uVar4" (subscript_expression "puVar9[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" identifier = identifier) ;) (expression_statement "puVar3 = puVar9 + 4;" (assignment_expression "puVar3 = puVar9 + 4" identifier = (binary_expression "puVar9 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != puVar7)" ( (binary_expression "puVar6 != puVar7" identifier != identifier) )) ;) (expression_statement "uVar11 = *puVar7;" (assignment_expression "uVar11 = *puVar7" identifier = (pointer_expression "*puVar7" * identifier)) ;) (expression_statement "iVar8 = iVar8 + -1;" (assignment_expression "iVar8 = iVar8 + -1" identifier = (binary_expression "iVar8 + -1" identifier + number_literal)) ;) (expression_statement "uVar4 = puVar7[1];" (assignment_expression "uVar4 = puVar7[1]" identifier = (subscript_expression "puVar7[1]" identifier [ number_literal ])) ;) (expression_statement "puVar10 = puVar10 + -0x12;" (assignment_expression "puVar10 = puVar10 + -0x12" identifier = (binary_expression "puVar10 + -0x12" identifier + number_literal)) ;) (expression_statement "puVar7 = puVar7 + -0x12;" (assignment_expression "puVar7 = puVar7 + -0x12" identifier = (binary_expression "puVar7 + -0x12" identifier + number_literal)) ;) (expression_statement "puVar9[4] = uVar11;" (assignment_expression "puVar9[4] = uVar11" (subscript_expression "puVar9[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar9[5] = uVar4;" (assignment_expression "puVar9[5] = uVar4" (subscript_expression "puVar9[5]" identifier [ number_literal ]) = identifier) ;) }) while (parenthesized_expression "(iVar8 != param_4 + -1)" ( (binary_expression "iVar8 != param_4 + -1" identifier != (binary_expression "param_4 + -1" identifier + number_literal)) )) ;) })) (expression_statement "puVar2 = PTR_memset_000f5450;" (assignment_expression "puVar2 = PTR_memset_000f5450" identifier = identifier) ;) (expression_statement "*param_2 = uVar13;" (assignment_expression "*param_2 = uVar13" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "(*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);" (call_expression "(*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" (parenthesized_expression "(*(code *)puVar2)" ( (pointer_expression "*(code *)puVar2" * (cast_expression "(code *)puVar2" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" ( (binary_expression "param_2 + param_4 * 0x12 + 2" (binary_expression "param_2 + param_4 * 0x12" identifier + (binary_expression "param_4 * 0x12" identifier * number_literal)) + number_literal) , number_literal , (binary_expression "param_3 * 0x48" identifier * number_literal) ))) ;) (expression_statement "puVar7 = param_2 + param_4 * 0x12;" (assignment_expression "puVar7 = param_2 + param_4 * 0x12" identifier = (binary_expression "param_2 + param_4 * 0x12" identifier + (binary_expression "param_4 * 0x12" identifier * number_literal))) ;) (if_statement "if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }" if (parenthesized_expression "(param_4 < param_3 + param_4)" ( (binary_expression "param_4 < param_3 + param_4" identifier < (binary_expression "param_3 + param_4" identifier + identifier)) )) (compound_statement "{\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }" { (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);" do (compound_statement "{\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    }" { (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "puVar7[0xc] = 0xffffffff;" (assignment_expression "puVar7[0xc] = 0xffffffff" (subscript_expression "puVar7[0xc]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar7 = puVar7 + 0x12;" (assignment_expression "puVar7 = puVar7 + 0x12" identifier = (binary_expression "puVar7 + 0x12" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar8 != (param_3 + param_4) - param_4)" ( (binary_expression "iVar8 != (param_3 + param_4) - param_4" identifier != (binary_expression "(param_3 + param_4) - param_4" (parenthesized_expression "(param_3 + param_4)" ( (binary_expression "param_3 + param_4" identifier + identifier) )) - identifier)) )) ;) })) (return_statement "return param_2;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) * LIT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , LIT ))) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) || (parenthesized_expression ( (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT - LIT)) , (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) == LIT) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT - LIT)) , (binary_expression LIT < IDENT)) )))) )) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) + (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (pointer_expression * IDENT) , IDENT , (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression IDENT * LIT) + LIT) < (binary_expression IDENT * LIT)) ))) + (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT * LIT) >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT * LIT) < (binary_expression IDENT * LIT)) ))) + (parenthesized_expression ( (binary_expression (binary_expression IDENT >> LIT) | (binary_expression IDENT * LIT)) ))) + IDENT) )) * LIT)) ))) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) )) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) , LIT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) - IDENT)) )) ;) })) (return_statement return IDENT ;) })))
(function_definition "uint * FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)\n\n{\n  longlong lVar1;\n  undefined *puVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  int iVar8;\n  uint *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  \n  uVar4 = *param_2;\n  uVar13 = uVar4 + param_3;\n  if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }\n  iVar8 = uVar4 - 1;\n  if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }\n  puVar2 = PTR_memset_000f5450;\n  *param_2 = uVar13;\n  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar7 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" (type_identifier "uint") (pointer_declarator "* FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)" (* "*") (function_declarator "FUN_0004b598(undefined4 *param_1,uint *param_2,int param_3,int param_4)" (identifier "FUN_0004b598") (parameter_list "(undefined4 *param_1,uint *param_2,int param_3,int param_4)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")")))) (compound_statement "{\n  longlong lVar1;\n  undefined *puVar2;\n  uint *puVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint *puVar6;\n  uint *puVar7;\n  int iVar8;\n  uint *puVar9;\n  uint *puVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  \n  uVar4 = *param_2;\n  uVar13 = uVar4 + param_3;\n  if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }\n  iVar8 = uVar4 - 1;\n  if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }\n  puVar2 = PTR_memset_000f5450;\n  *param_2 = uVar13;\n  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);\n  puVar7 = param_2 + param_4 * 0x12;\n  if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }\n  return param_2;\n}" ({ "{") (declaration "longlong lVar1;" (type_identifier "longlong") (identifier "lVar1") (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint *puVar3;" (type_identifier "uint") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "uint *puVar6;" (type_identifier "uint") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "uint *puVar7;" (type_identifier "uint") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "uint *puVar9;" (type_identifier "uint") (pointer_declarator "*puVar9" (* "*") (identifier "puVar9")) (; ";")) (declaration "uint *puVar10;" (type_identifier "uint") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" (identifier "uVar4") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "uVar13 = uVar4 + param_3;" (assignment_expression "uVar13 = uVar4 + param_3" (identifier "uVar13") (= "=") (binary_expression "uVar4 + param_3" (identifier "uVar4") (+ "+") (identifier "param_3"))) (; ";")) (if_statement "if (param_2[1] < uVar13) {\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }" (if "if") (parenthesized_expression "(param_2[1] < uVar13)" (( "(") (binary_expression "param_2[1] < uVar13" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (< "<") (identifier "uVar13")) () ")")) (compound_statement "{\n    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;\n    uVar4 = (uint)lVar1;\n    if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }\n    if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }\n    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;\n    param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));\n    if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }\n    uVar4 = *param_2;\n    param_2[1] = (uint)lVar1;\n    uVar13 = uVar4 + param_3;\n  }" ({ "{") (expression_statement "lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;" (assignment_expression "lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2" (identifier "lVar1") (= "=") (binary_expression "(longlong)param_3 + (longlong)(int)uVar4 * 2" (cast_expression "(longlong)param_3" (( "(") (type_descriptor "longlong" (type_identifier "longlong")) () ")") (identifier "param_3")) (+ "+") (binary_expression "(longlong)(int)uVar4 * 2" (cast_expression "(longlong)(int)uVar4" (( "(") (type_descriptor "longlong" (type_identifier "longlong")) () ")") (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4"))) (* "*") (number_literal "2")))) (; ";")) (expression_statement "uVar4 = (uint)lVar1;" (assignment_expression "uVar4 = (uint)lVar1" (identifier "uVar4") (= "=") (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1"))) (; ";")) (if_statement "if (199 < (int)uVar13) {\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }" (if "if") (parenthesized_expression "(199 < (int)uVar13)" (( "(") (binary_expression "199 < (int)uVar13" (number_literal "199") (< "<") (cast_expression "(int)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar13"))) () ")")) (compound_statement "{\n      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);\n      return (uint *)0x0;\n    }" ({ "{") (expression_statement "FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);" (call_expression "FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200)" (identifier "FUN_00049e28") (argument_list "(param_1,PTR_LAB_000f52cc + 0x76d4,200)" (( "(") (identifier "param_1") (, ",") (binary_expression "PTR_LAB_000f52cc + 0x76d4" (identifier "PTR_LAB_000f52cc") (+ "+") (number_literal "0x76d4")) (, ",") (number_literal "200") () ")"))) (; ";")) (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (if_statement "if ((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))) {\n      lVar1 = 200;\n      uVar13 = 199;\n    }" (if "if") (parenthesized_expression "((0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4))))" (( "(") (binary_expression "(0xffffffff < lVar1) ||\n       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))" (parenthesized_expression "(0xffffffff < lVar1)" (( "(") (binary_expression "0xffffffff < lVar1" (number_literal "0xffffffff") (< "<") (identifier "lVar1")) () ")")) (|| "||") (parenthesized_expression "((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)))" (( "(") (parenthesized_expression "(uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4))" (( "(") (comma_expression "uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)" (assignment_expression "uVar13 = uVar4 - 1" (identifier "uVar13") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) (, ",") (binary_expression "(int)((ulonglong)lVar1 >> 0x20) == 0 &&\n        (uVar13 = uVar4 - 1, 200 < uVar4)" (binary_expression "(int)((ulonglong)lVar1 >> 0x20) == 0" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")"))) (== "==") (number_literal "0")) (&& "&&") (parenthesized_expression "(uVar13 = uVar4 - 1, 200 < uVar4)" (( "(") (comma_expression "uVar13 = uVar4 - 1, 200 < uVar4" (assignment_expression "uVar13 = uVar4 - 1" (identifier "uVar13") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) (, ",") (binary_expression "200 < uVar4" (number_literal "200") (< "<") (identifier "uVar4"))) () ")")))) () ")")) () ")"))) () ")")) (compound_statement "{\n      lVar1 = 200;\n      uVar13 = 199;\n    }" ({ "{") (expression_statement "lVar1 = 200;" (assignment_expression "lVar1 = 200" (identifier "lVar1") (= "=") (number_literal "200")) (; ";")) (expression_statement "uVar13 = 199;" (assignment_expression "uVar13 = 199" (identifier "uVar13") (= "=") (number_literal "199")) (; ";")) (} "}"))) (expression_statement "iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;" (assignment_expression "iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1" (identifier "iVar8") (= "=") (binary_expression "(uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1" (binary_expression "(uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20)" (call_expression "(uint)(uVar13 < (uint)lVar1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar13 < (uint)lVar1)" (( "(") (binary_expression "uVar13 < (uint)lVar1" (identifier "uVar13") (< "<") (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1"))) () ")"))) (+ "+") (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));" (assignment_expression "param_2 = (uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" (identifier "param_2") (= "=") (cast_expression "(uint *)FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000387fc(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" (identifier "FUN_000387fc") (argument_list "(*param_1,param_2,\n                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8))" (( "(") (pointer_expression "*param_1" (* "*") (identifier "param_1")) (, ",") (identifier "param_2") (, ",") (binary_expression "(uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +\n                                   (uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8)" (call_expression "(uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar13 * 0x48 + 0x50 < uVar13 * 0x48)" (( "(") (binary_expression "uVar13 * 0x48 + 0x50 < uVar13 * 0x48" (binary_expression "uVar13 * 0x48 + 0x50" (binary_expression "uVar13 * 0x48" (identifier "uVar13") (* "*") (number_literal "0x48")) (+ "+") (number_literal "0x50")) (< "<") (binary_expression "uVar13 * 0x48" (identifier "uVar13") (* "*") (number_literal "0x48"))) () ")"))) (+ "+") (parenthesized_expression "(uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8)" (( "(") (binary_expression "uVar13 * 9 >> 0x1d |\n                                   ((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8" (binary_expression "uVar13 * 9 >> 0x1d" (binary_expression "uVar13 * 9" (identifier "uVar13") (* "*") (number_literal "9")) (>> ">>") (number_literal "0x1d")) (| "|") (binary_expression "((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8" (parenthesized_expression "((uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8)" (( "(") (binary_expression "(uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8" (binary_expression "(uint)(uVar13 * 9 < uVar13 * 8) +\n                                   (uVar13 >> 0x1d | iVar8 * 8)" (call_expression "(uint)(uVar13 * 9 < uVar13 * 8)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(uVar13 * 9 < uVar13 * 8)" (( "(") (binary_expression "uVar13 * 9 < uVar13 * 8" (binary_expression "uVar13 * 9" (identifier "uVar13") (* "*") (number_literal "9")) (< "<") (binary_expression "uVar13 * 8" (identifier "uVar13") (* "*") (number_literal "8"))) () ")"))) (+ "+") (parenthesized_expression "(uVar13 >> 0x1d | iVar8 * 8)" (( "(") (binary_expression "uVar13 >> 0x1d | iVar8 * 8" (binary_expression "uVar13 >> 0x1d" (identifier "uVar13") (>> ">>") (number_literal "0x1d")) (| "|") (binary_expression "iVar8 * 8" (identifier "iVar8") (* "*") (number_literal "8"))) () ")"))) (+ "+") (identifier "iVar8")) () ")")) (* "*") (number_literal "8"))) () ")"))) () ")"))))) (; ";")) (if_statement "if (param_2 == (uint *)0x0) {\n      return (uint *)0x0;\n    }" (if "if") (parenthesized_expression "(param_2 == (uint *)0x0)" (( "(") (binary_expression "param_2 == (uint *)0x0" (identifier "param_2") (== "==") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return (uint *)0x0;\n    }" ({ "{") (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" (identifier "uVar4") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "param_2[1] = (uint)lVar1;" (assignment_expression "param_2[1] = (uint)lVar1" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1"))) (; ";")) (expression_statement "uVar13 = uVar4 + param_3;" (assignment_expression "uVar13 = uVar4 + param_3" (identifier "uVar13") (= "=") (binary_expression "uVar4 + param_3" (identifier "uVar4") (+ "+") (identifier "param_3"))) (; ";")) (} "}"))) (expression_statement "iVar8 = uVar4 - 1;" (assignment_expression "iVar8 = uVar4 - 1" (identifier "iVar8") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (param_4 <= iVar8) {\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }" (if "if") (parenthesized_expression "(param_4 <= iVar8)" (( "(") (binary_expression "param_4 <= iVar8" (identifier "param_4") (<= "<=") (identifier "iVar8")) () ")")) (compound_statement "{\n    puVar7 = param_2 + uVar4 * 0x12;\n    puVar10 = param_2 + uVar13 * 0x12 + -0x10;\n    do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);\n  }" ({ "{") (expression_statement "puVar7 = param_2 + uVar4 * 0x12;" (assignment_expression "puVar7 = param_2 + uVar4 * 0x12" (identifier "puVar7") (= "=") (binary_expression "param_2 + uVar4 * 0x12" (identifier "param_2") (+ "+") (binary_expression "uVar4 * 0x12" (identifier "uVar4") (* "*") (number_literal "0x12")))) (; ";")) (expression_statement "puVar10 = param_2 + uVar13 * 0x12 + -0x10;" (assignment_expression "puVar10 = param_2 + uVar13 * 0x12 + -0x10" (identifier "puVar10") (= "=") (binary_expression "param_2 + uVar13 * 0x12 + -0x10" (binary_expression "param_2 + uVar13 * 0x12" (identifier "param_2") (+ "+") (binary_expression "uVar13 * 0x12" (identifier "uVar13") (* "*") (number_literal "0x12"))) (+ "+") (number_literal "-0x10"))) (; ";")) (do_statement "do {\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    } while (iVar8 != param_4 + -1);" (do "do") (compound_statement "{\n      puVar5 = puVar7 + -0x10;\n      puVar3 = puVar10;\n      do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);\n      uVar11 = *puVar7;\n      iVar8 = iVar8 + -1;\n      uVar4 = puVar7[1];\n      puVar10 = puVar10 + -0x12;\n      puVar7 = puVar7 + -0x12;\n      puVar9[4] = uVar11;\n      puVar9[5] = uVar4;\n    }" ({ "{") (expression_statement "puVar5 = puVar7 + -0x10;" (assignment_expression "puVar5 = puVar7 + -0x10" (identifier "puVar5") (= "=") (binary_expression "puVar7 + -0x10" (identifier "puVar7") (+ "+") (number_literal "-0x10"))) (; ";")) (expression_statement "puVar3 = puVar10;" (assignment_expression "puVar3 = puVar10" (identifier "puVar3") (= "=") (identifier "puVar10")) (; ";")) (do_statement "do {\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      } while (puVar6 != puVar7);" (do "do") (compound_statement "{\n        puVar9 = puVar3;\n        puVar6 = puVar5 + 4;\n        uVar12 = puVar5[1];\n        uVar11 = puVar5[2];\n        uVar4 = puVar5[3];\n        *puVar9 = *puVar5;\n        puVar9[1] = uVar12;\n        puVar9[2] = uVar11;\n        puVar9[3] = uVar4;\n        puVar5 = puVar6;\n        puVar3 = puVar9 + 4;\n      }" ({ "{") (expression_statement "puVar9 = puVar3;" (assignment_expression "puVar9 = puVar3" (identifier "puVar9") (= "=") (identifier "puVar3")) (; ";")) (expression_statement "puVar6 = puVar5 + 4;" (assignment_expression "puVar6 = puVar5 + 4" (identifier "puVar6") (= "=") (binary_expression "puVar5 + 4" (identifier "puVar5") (+ "+") (number_literal "4"))) (; ";")) (expression_statement "uVar12 = puVar5[1];" (assignment_expression "uVar12 = puVar5[1]" (identifier "uVar12") (= "=") (subscript_expression "puVar5[1]" (identifier "puVar5") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar11 = puVar5[2];" (assignment_expression "uVar11 = puVar5[2]" (identifier "uVar11") (= "=") (subscript_expression "puVar5[2]" (identifier "puVar5") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "uVar4 = puVar5[3];" (assignment_expression "uVar4 = puVar5[3]" (identifier "uVar4") (= "=") (subscript_expression "puVar5[3]" (identifier "puVar5") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "*puVar9 = *puVar5;" (assignment_expression "*puVar9 = *puVar5" (pointer_expression "*puVar9" (* "*") (identifier "puVar9")) (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "puVar9[1] = uVar12;" (assignment_expression "puVar9[1] = uVar12" (subscript_expression "puVar9[1]" (identifier "puVar9") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar12")) (; ";")) (expression_statement "puVar9[2] = uVar11;" (assignment_expression "puVar9[2] = uVar11" (subscript_expression "puVar9[2]" (identifier "puVar9") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "puVar9[3] = uVar4;" (assignment_expression "puVar9[3] = uVar4" (subscript_expression "puVar9[3]" (identifier "puVar9") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar5 = puVar6;" (assignment_expression "puVar5 = puVar6" (identifier "puVar5") (= "=") (identifier "puVar6")) (; ";")) (expression_statement "puVar3 = puVar9 + 4;" (assignment_expression "puVar3 = puVar9 + 4" (identifier "puVar3") (= "=") (binary_expression "puVar9 + 4" (identifier "puVar9") (+ "+") (number_literal "4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar6 != puVar7)" (( "(") (binary_expression "puVar6 != puVar7" (identifier "puVar6") (!= "!=") (identifier "puVar7")) () ")")) (; ";")) (expression_statement "uVar11 = *puVar7;" (assignment_expression "uVar11 = *puVar7" (identifier "uVar11") (= "=") (pointer_expression "*puVar7" (* "*") (identifier "puVar7"))) (; ";")) (expression_statement "iVar8 = iVar8 + -1;" (assignment_expression "iVar8 = iVar8 + -1" (identifier "iVar8") (= "=") (binary_expression "iVar8 + -1" (identifier "iVar8") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar4 = puVar7[1];" (assignment_expression "uVar4 = puVar7[1]" (identifier "uVar4") (= "=") (subscript_expression "puVar7[1]" (identifier "puVar7") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar10 = puVar10 + -0x12;" (assignment_expression "puVar10 = puVar10 + -0x12" (identifier "puVar10") (= "=") (binary_expression "puVar10 + -0x12" (identifier "puVar10") (+ "+") (number_literal "-0x12"))) (; ";")) (expression_statement "puVar7 = puVar7 + -0x12;" (assignment_expression "puVar7 = puVar7 + -0x12" (identifier "puVar7") (= "=") (binary_expression "puVar7 + -0x12" (identifier "puVar7") (+ "+") (number_literal "-0x12"))) (; ";")) (expression_statement "puVar9[4] = uVar11;" (assignment_expression "puVar9[4] = uVar11" (subscript_expression "puVar9[4]" (identifier "puVar9") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "puVar9[5] = uVar4;" (assignment_expression "puVar9[5] = uVar4" (subscript_expression "puVar9[5]" (identifier "puVar9") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar8 != param_4 + -1)" (( "(") (binary_expression "iVar8 != param_4 + -1" (identifier "iVar8") (!= "!=") (binary_expression "param_4 + -1" (identifier "param_4") (+ "+") (number_literal "-1"))) () ")")) (; ";")) (} "}"))) (expression_statement "puVar2 = PTR_memset_000f5450;" (assignment_expression "puVar2 = PTR_memset_000f5450" (identifier "puVar2") (= "=") (identifier "PTR_memset_000f5450")) (; ";")) (expression_statement "*param_2 = uVar13;" (assignment_expression "*param_2 = uVar13" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "uVar13")) (; ";")) (expression_statement "(*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);" (call_expression "(*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" (parenthesized_expression "(*(code *)puVar2)" (( "(") (pointer_expression "*(code *)puVar2" (* "*") (cast_expression "(code *)puVar2" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar2"))) () ")")) (argument_list "(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48)" (( "(") (binary_expression "param_2 + param_4 * 0x12 + 2" (binary_expression "param_2 + param_4 * 0x12" (identifier "param_2") (+ "+") (binary_expression "param_4 * 0x12" (identifier "param_4") (* "*") (number_literal "0x12"))) (+ "+") (number_literal "2")) (, ",") (number_literal "0") (, ",") (binary_expression "param_3 * 0x48" (identifier "param_3") (* "*") (number_literal "0x48")) () ")"))) (; ";")) (expression_statement "puVar7 = param_2 + param_4 * 0x12;" (assignment_expression "puVar7 = param_2 + param_4 * 0x12" (identifier "puVar7") (= "=") (binary_expression "param_2 + param_4 * 0x12" (identifier "param_2") (+ "+") (binary_expression "param_4 * 0x12" (identifier "param_4") (* "*") (number_literal "0x12")))) (; ";")) (if_statement "if (param_4 < param_3 + param_4) {\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }" (if "if") (parenthesized_expression "(param_4 < param_3 + param_4)" (( "(") (binary_expression "param_4 < param_3 + param_4" (identifier "param_4") (< "<") (binary_expression "param_3 + param_4" (identifier "param_3") (+ "+") (identifier "param_4"))) () ")")) (compound_statement "{\n    iVar8 = 0;\n    do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);\n  }" ({ "{") (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    } while (iVar8 != (param_3 + param_4) - param_4);" (do "do") (compound_statement "{\n      iVar8 = iVar8 + 1;\n      puVar7[0xc] = 0xffffffff;\n      puVar7 = puVar7 + 0x12;\n    }" ({ "{") (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" (identifier "iVar8") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar7[0xc] = 0xffffffff;" (assignment_expression "puVar7[0xc] = 0xffffffff" (subscript_expression "puVar7[0xc]" (identifier "puVar7") ([ "[") (number_literal "0xc") (] "]")) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "puVar7 = puVar7 + 0x12;" (assignment_expression "puVar7 = puVar7 + 0x12" (identifier "puVar7") (= "=") (binary_expression "puVar7 + 0x12" (identifier "puVar7") (+ "+") (number_literal "0x12"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar8 != (param_3 + param_4) - param_4)" (( "(") (binary_expression "iVar8 != (param_3 + param_4) - param_4" (identifier "iVar8") (!= "!=") (binary_expression "(param_3 + param_4) - param_4" (parenthesized_expression "(param_3 + param_4)" (( "(") (binary_expression "param_3 + param_4" (identifier "param_3") (+ "+") (identifier "param_4")) () ")")) (- "-") (identifier "param_4"))) () ")")) (; ";")) (} "}"))) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}")))
(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)) (number_literal)))) (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (parenthesized_expression (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) right: (number_literal)) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (number_literal) right: (identifier)))))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (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: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) (number_literal) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier))))))) (return_statement (identifier)))))

uint * MASKED(undefined4 *param_1,uint *param_2,int param_3,int param_4)

{
  longlong lVar1;
  undefined *puVar2;
  uint *puVar3;
  uint uVar4;
  uint *puVar5;
  uint *puVar6;
  uint *puVar7;
  int iVar8;
  uint *puVar9;
  uint *puVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  
  uVar4 = *param_2;
  uVar13 = uVar4 + param_3;
  if (param_2[1] < uVar13) {
    lVar1 = (longlong)param_3 + (longlong)(int)uVar4 * 2;
    uVar4 = (uint)lVar1;
    if (199 < (int)uVar13) {
      FUN_00049e28(param_1,PTR_LAB_000f52cc + 0x76d4,200);
      return (uint *)0x0;
    }
    if ((0xffffffff < lVar1) ||
       ((uVar13 = uVar4 - 1, (int)((ulonglong)lVar1 >> 0x20) == 0 &&
        (uVar13 = uVar4 - 1, 200 < uVar4)))) {
      lVar1 = 200;
      uVar13 = 199;
    }
    iVar8 = (uint)(uVar13 < (uint)lVar1) + (int)((ulonglong)lVar1 >> 0x20) + -1;
    param_2 = (uint *)FUN_000387fc(*param_1,param_2,
                                   (uint)(uVar13 * 0x48 + 0x50 < uVar13 * 0x48) +
                                   (uVar13 * 9 >> 0x1d |
                                   ((uint)(uVar13 * 9 < uVar13 * 8) +
                                   (uVar13 >> 0x1d | iVar8 * 8) + iVar8) * 8));
    if (param_2 == (uint *)0x0) {
      return (uint *)0x0;
    }
    uVar4 = *param_2;
    param_2[1] = (uint)lVar1;
    uVar13 = uVar4 + param_3;
  }
  iVar8 = uVar4 - 1;
  if (param_4 <= iVar8) {
    puVar7 = param_2 + uVar4 * 0x12;
    puVar10 = param_2 + uVar13 * 0x12 + -0x10;
    do {
      puVar5 = puVar7 + -0x10;
      puVar3 = puVar10;
      do {
        puVar9 = puVar3;
        puVar6 = puVar5 + 4;
        uVar12 = puVar5[1];
        uVar11 = puVar5[2];
        uVar4 = puVar5[3];
        *puVar9 = *puVar5;
        puVar9[1] = uVar12;
        puVar9[2] = uVar11;
        puVar9[3] = uVar4;
        puVar5 = puVar6;
        puVar3 = puVar9 + 4;
      } while (puVar6 != puVar7);
      uVar11 = *puVar7;
      iVar8 = iVar8 + -1;
      uVar4 = puVar7[1];
      puVar10 = puVar10 + -0x12;
      puVar7 = puVar7 + -0x12;
      puVar9[4] = uVar11;
      puVar9[5] = uVar4;
    } while (iVar8 != param_4 + -1);
  }
  puVar2 = PTR_memset_000f5450;
  *param_2 = uVar13;
  (*(code *)puVar2)(param_2 + param_4 * 0x12 + 2,0,param_3 * 0x48);
  puVar7 = param_2 + param_4 * 0x12;
  if (param_4 < param_3 + param_4) {
    iVar8 = 0;
    do {
      iVar8 = iVar8 + 1;
      puVar7[0xc] = 0xffffffff;
      puVar7 = puVar7 + 0x12;
    } while (iVar8 != (param_3 + param_4) - param_4);
  }
  return param_2;
}

