
void BZ2_compressBlock(EState *s,int is_last_block)

{
  int iVar1;
  int iVar2;
  uint32_t uVar3;
  uint uVar4;
  uint8_t *puVar5;
  int32_t in_t0;
  
  iVar2 = s->nblock;
  iVar1 = s->blockNo;
  if (0 < iVar2) {
    uVar4 = s->blockCRC;
    s->blockCRC = ~uVar4;
    s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4;
    if (1 < iVar1) {
      s->posZ = s->zbits;
    }
    in_t0 = BZ2_blockSort(s);
    iVar2 = s->nblock;
    iVar1 = s->blockNo;
  }
  puVar5 = (uint8_t *)((int)s->arr2 + iVar2);
  s->zbits = puVar5;
  s->posZ = puVar5;
  s->state_out_pos = puVar5;
  if (iVar1 == 1) {
    s->bsLive = 0;
    s->bsBuff = 0;
    bsPutU32(s,s->blockSize100k + 0x425a6830);
    iVar2 = s->nblock;
  }
  if (0 < iVar2) {
    bsPutU32(s,0x31415926);
    iVar1 = s->bsLive;
    if (iVar1 < 8) {
      uVar4 = s->bsBuff;
    }
    else {
      uVar4 = s->bsBuff;
      do {
        puVar5 = s->posZ;
        s->posZ = puVar5 + 1;
        *puVar5 = (uint8_t)(uVar4 >> 0x18);
        iVar1 = s->bsLive + -8;
        uVar4 = s->bsBuff << 8;
        s->bsLive = iVar1;
        s->bsBuff = uVar4;
      } while (7 < iVar1);
    }
    s->bsLive = iVar1 + 0x10;
    s->bsBuff = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;
    bsPutU32(s,s->blockCRC);
    iVar1 = s->bsLive;
    if (iVar1 < 8) {
      uVar4 = s->bsBuff;
    }
    else {
      puVar5 = s->posZ;
      s->posZ = puVar5 + 1;
      *puVar5 = *(uint8_t *)&s->bsBuff;
      uVar4 = s->bsBuff << 8;
      iVar1 = s->bsLive + -8;
      s->bsBuff = uVar4;
    }
    iVar1 = iVar1 + 1;
    s->bsLive = iVar1;
    while (7 < iVar1) {
      puVar5 = s->posZ;
      s->posZ = puVar5 + 1;
      *puVar5 = (uint8_t)(uVar4 >> 0x18);
      uVar3 = s->bsBuff;
      iVar1 = s->bsLive + -8;
      uVar4 = uVar3 << 8;
      s->bsLive = iVar1;
      s->bsBuff = uVar4;
      if (iVar1 < 8) break;
      puVar5 = s->posZ;
      s->posZ = puVar5 + 1;
      *puVar5 = (uint8_t)(uVar3 >> 0x10);
      iVar1 = s->bsLive + -8;
      uVar4 = s->bsBuff << 8;
      s->bsLive = iVar1;
      s->bsBuff = uVar4;
    }
    s->bsLive = iVar1 + 0x18;
    s->bsBuff = in_t0 << (8U - iVar1 & 0x1f) | uVar4;
    generateMTFValues(s);
    sendMTFValues(s);
  }
  if (is_last_block != 0) {
    bsPutU32(s,0x17724538);
    iVar1 = s->bsLive;
    if (iVar1 < 8) {
      uVar4 = s->bsBuff;
    }
    else {
      uVar4 = s->bsBuff;
      do {
        puVar5 = s->posZ;
        s->posZ = puVar5 + 1;
        *puVar5 = (uint8_t)(uVar4 >> 0x18);
        iVar1 = s->bsLive + -8;
        uVar4 = s->bsBuff << 8;
        s->bsLive = iVar1;
        s->bsBuff = uVar4;
      } while (7 < iVar1);
    }
    s->bsLive = iVar1 + 0x10;
    s->bsBuff = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;
    bsPutU32(s,s->combinedCRC);
    bsFinishWrite(s);
    return;
  }
  return;
}



void FUN_0009b820(int param_1,int param_2)

{
  int iVar1;
  undefined1 *puVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int in_t0;
  
  iVar3 = *(int *)(param_1 + 0x34);
  iVar1 = *(int *)(param_1 + 0x58);
  if (0 < iVar3) {
    uVar4 = *(uint *)(param_1 + 0x50);
    *(uint *)(param_1 + 0x50) = ~uVar4;
    *(uint *)(param_1 + 0x54) =
         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;
    if (1 < iVar1) {
      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);
    }
    in_t0 = FUN_0009a768(param_1);
    iVar3 = *(int *)(param_1 + 0x34);
    iVar1 = *(int *)(param_1 + 0x58);
  }
  iVar5 = *(int *)(param_1 + 0xc) + iVar3;
  *(int *)(param_1 + 0x28) = iVar5;
  *(int *)(param_1 + 0x3c) = iVar5;
  *(int *)(param_1 + 0x40) = iVar5;
  if (iVar1 == 1) {
    *(undefined4 *)(param_1 + 0x48) = 0;
    *(undefined4 *)(param_1 + 0x44) = 0;
    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);
    iVar3 = *(int *)(param_1 + 0x34);
  }
  if (0 < iVar3) {
    FUN_00099e98(param_1,0x31415926);
    iVar1 = *(int *)(param_1 + 0x48);
    if (iVar1 < 8) {
      uVar4 = *(uint *)(param_1 + 0x44);
    }
    else {
      uVar4 = *(uint *)(param_1 + 0x44);
      do {
        puVar2 = *(undefined1 **)(param_1 + 0x3c);
        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
        *puVar2 = (char)(uVar4 >> 0x18);
        iVar1 = *(int *)(param_1 + 0x48) + -8;
        uVar4 = *(int *)(param_1 + 0x44) << 8;
        *(int *)(param_1 + 0x48) = iVar1;
        *(uint *)(param_1 + 0x44) = uVar4;
      } while (7 < iVar1);
    }
    *(int *)(param_1 + 0x48) = iVar1 + 0x10;
    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;
    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));
    iVar1 = *(int *)(param_1 + 0x48);
    if (iVar1 < 8) {
      uVar4 = *(uint *)(param_1 + 0x44);
    }
    else {
      puVar2 = *(undefined1 **)(param_1 + 0x3c);
      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
      *puVar2 = *(undefined1 *)(param_1 + 0x44);
      uVar4 = *(int *)(param_1 + 0x44) << 8;
      iVar1 = *(int *)(param_1 + 0x48) + -8;
      *(uint *)(param_1 + 0x44) = uVar4;
    }
    iVar1 = iVar1 + 1;
    *(int *)(param_1 + 0x48) = iVar1;
    while (7 < iVar1) {
      puVar2 = *(undefined1 **)(param_1 + 0x3c);
      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
      *puVar2 = (char)(uVar4 >> 0x18);
      iVar3 = *(int *)(param_1 + 0x44);
      iVar1 = *(int *)(param_1 + 0x48) + -8;
      uVar4 = iVar3 << 8;
      *(int *)(param_1 + 0x48) = iVar1;
      *(uint *)(param_1 + 0x44) = uVar4;
      if (iVar1 < 8) break;
      puVar2 = *(undefined1 **)(param_1 + 0x3c);
      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
      *puVar2 = (char)((uint)iVar3 >> 0x10);
      iVar1 = *(int *)(param_1 + 0x48) + -8;
      uVar4 = *(int *)(param_1 + 0x44) << 8;
      *(int *)(param_1 + 0x48) = iVar1;
      *(uint *)(param_1 + 0x44) = uVar4;
    }
    *(int *)(param_1 + 0x48) = iVar1 + 0x18;
    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;
    FUN_00099f5c(param_1);
    FUN_0009a850(param_1);
  }
  if (param_2 != 0) {
    FUN_00099e98(param_1,0x17724538);
    iVar1 = *(int *)(param_1 + 0x48);
    if (iVar1 < 8) {
      uVar4 = *(uint *)(param_1 + 0x44);
    }
    else {
      uVar4 = *(uint *)(param_1 + 0x44);
      do {
        puVar2 = *(undefined1 **)(param_1 + 0x3c);
        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
        *puVar2 = (char)(uVar4 >> 0x18);
        iVar1 = *(int *)(param_1 + 0x48) + -8;
        uVar4 = *(int *)(param_1 + 0x44) << 8;
        *(int *)(param_1 + 0x48) = iVar1;
        *(uint *)(param_1 + 0x44) = uVar4;
      } while (7 < iVar1);
    }
    *(int *)(param_1 + 0x48) = iVar1 + 0x10;
    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;
    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));
    FUN_00099e50();
    return;
  }
  return;
}


lui gp,0x9
addiu gp,gp,0x6930
addu gp,gp,t9
addiu sp,sp,-0x28
lw v1,0x34(a0)
lw v0,0x58(a0)
sw gp,0x10(sp)
sw s1,0x20(sp)
or s1,a1,zero
sw s0,0x1c(sp)
or s0,a0,zero
blez v1,0x0009b8a0
_sw ra,0x24(sp)
lw v1,0x54(a0)
slti v0,v0,0x2
lw a0,0x50(a0)
rotr v1,v1,0x1f
nor a0,zero,a0
xor v1,v1,a0
sw a0,0x50(s0)
bne v0,zero,0x0009b880
_sw v1,0x54(s0)
lw v0,0x28(s0)
sw v0,0x3c(s0)
lw t9,-0x7728(gp)
addiu t9,t9,-0x5898
bal 0x0009a768
_or a0,s0,zero
or t0,v0,zero
lw gp,0x10(sp)
lw v1,0x34(s0)
lw v0,0x58(s0)
lw a0,0xc(s0)
li a1,0x1
addu a0,a0,v1
sw a0,0x28(s0)
sw a0,0x3c(s0)
bne v0,a1,0x0009b8ec
_sw a0,0x40(s0)
lui v0,0x425a
lw t9,-0x7728(gp)
lbu a1,0x6(s0)
or a0,s0,zero
addiu v0,v0,0x6830
sw zero,0x48(s0)
addiu t9,t9,-0x6168
sw zero,0x44(s0)
bal 0x00099e98
_addu a1,a1,v0
lw gp,0x10(sp)
lw v1,0x34(s0)
blez v1,0x0009b9ec
_lw t9,-0x7728(gp)
lui a1,0x3141
or a0,s0,zero
addiu t9,t9,-0x6168
bal 0x00099e98
_addiu a1,a1,0x5926
lw v0,0x48(s0)
slti v1,v0,0x8
bne v1,zero,0x0009b958
_li a2,0x10
lw v1,0x44(s0)
lw v0,0x3c(s0)
srl v1,v1,0x18
addiu a0,v0,0x1
sw a0,0x3c(s0)
sb v1,0x0(v0)
lw v0,0x48(s0)
lw v1,0x44(s0)
addiu v0,v0,-0x8
sll v1,v1,0x8
slti a0,v0,0x8
sw v0,0x48(s0)
beq a0,zero,0x0009b91c
_sw v1,0x44(s0)
b 0x0009b95c
_li a2,0x10
lw v1,0x44(s0)
lw a1,0x50(s0)
subu a0,a2,v0
li a2,0x5359
addiu v0,v0,0x10
sllv a2,a2,a0
sw v0,0x48(s0)
or a0,s0,zero
or v1,a2,v1
bal 0x00099e98
_sw v1,0x44(s0)
lw v0,0x48(s0)
slti v1,v0,0x8
beq v1,zero,0x0009bb28
_lw gp,0x10(sp)
lw v1,0x44(s0)
addiu v0,v0,0x1
slti a0,v0,0x8
beq a0,zero,0x0009bab8
_sw v0,0x48(s0)
li a0,0x8
lw t9,-0x7728(gp)
addiu a1,v0,0x18
subu v0,a0,v0
addiu t9,t9,-0x60a4
sw a1,0x48(s0)
sllv t0,t0,v0
or a0,s0,zero
or v1,t0,v1
bal 0x00099f5c
_sw v1,0x44(s0)
lw gp,0x10(sp)
lw t9,-0x7728(gp)
addiu t9,t9,-0x57b0
bal 0x0009a850
_or a0,s0,zero
lw gp,0x10(sp)
beq s1,zero,0x0009ba58
_lw t9,-0x7728(gp)
lui a1,0x1772
or a0,s0,zero
addiu t9,t9,-0x6168
bal 0x00099e98
_addiu a1,a1,0x4538
lw v0,0x48(s0)
slti v1,v0,0x8
bne v1,zero,0x0009ba6c
_li a2,0x10
lw v1,0x44(s0)
lw v0,0x3c(s0)
srl v1,v1,0x18
addiu a0,v0,0x1
sw a0,0x3c(s0)
sb v1,0x0(v0)
lw v0,0x48(s0)
lw v1,0x44(s0)
addiu v0,v0,-0x8
sll v1,v1,0x8
slti a0,v0,0x8
sw v0,0x48(s0)
beq a0,zero,0x0009ba1c
_sw v1,0x44(s0)
b 0x0009ba70
_li a2,0x10
lw ra,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x28
lw v1,0x44(s0)
lw a1,0x54(s0)
subu a0,a2,v0
li a2,0x5090
addiu v0,v0,0x10
sllv a2,a2,a0
sw v0,0x48(s0)
or a0,s0,zero
or v1,a2,v1
bal 0x00099e98
_sw v1,0x44(s0)
lw gp,0x10(sp)
lw ra,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
lw t9,-0x7728(gp)
addiu t9,t9,-0x61b0
b 0x00099e50
_addiu sp,sp,0x28
lw v0,0x3c(s0)
srl v1,v1,0x18
addiu a0,v0,0x1
sw a0,0x3c(s0)
sb v1,0x0(v0)
lw v0,0x48(s0)
lw v1,0x44(s0)
addiu v0,v0,-0x8
sll v1,v1,0x8
slti a0,v0,0x8
sw v0,0x48(s0)
bne a0,zero,0x0009b9a8
_sw v1,0x44(s0)
lw v0,0x3c(s0)
srl v1,v1,0x18
addiu a0,v0,0x1
sw a0,0x3c(s0)
sb v1,0x0(v0)
lw v0,0x48(s0)
lw v1,0x44(s0)
addiu v0,v0,-0x8
sll v1,v1,0x8
slti a0,v0,0x8
sw v0,0x48(s0)
beq a0,zero,0x0009bab8
_sw v1,0x44(s0)
b 0x0009b9ac
_li a0,0x8
lw v0,0x3c(s0)
lbu v1,0x44(s0)
addiu a0,v0,0x1
sw a0,0x3c(s0)
sb v1,0x0(v0)
lw v1,0x44(s0)
lw v0,0x48(s0)
sll v1,v1,0x8
addiu v0,v0,-0x8
b 0x0009b998
_sw v1,0x44(s0)
(translation_unit "void FUN_0009b820(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int in_t0;\n  \n  iVar3 = *(int *)(param_1 + 0x34);\n  iVar1 = *(int *)(param_1 + 0x58);\n  if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }\n  iVar5 = *(int *)(param_1 + 0xc) + iVar3;\n  *(int *)(param_1 + 0x28) = iVar5;\n  *(int *)(param_1 + 0x3c) = iVar5;\n  *(int *)(param_1 + 0x40) = iVar5;\n  if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }\n  if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }\n  if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0009b820(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int in_t0;\n  \n  iVar3 = *(int *)(param_1 + 0x34);\n  iVar1 = *(int *)(param_1 + 0x58);\n  if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }\n  iVar5 = *(int *)(param_1 + 0xc) + iVar3;\n  *(int *)(param_1 + 0x28) = iVar5;\n  *(int *)(param_1 + 0x3c) = iVar5;\n  *(int *)(param_1 + 0x40) = iVar5;\n  if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }\n  if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }\n  if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0009b820(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int in_t0;\n  \n  iVar3 = *(int *)(param_1 + 0x34);\n  iVar1 = *(int *)(param_1 + 0x58);\n  if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }\n  iVar5 = *(int *)(param_1 + 0xc) + iVar3;\n  *(int *)(param_1 + 0x28) = iVar5;\n  *(int *)(param_1 + 0x3c) = iVar5;\n  *(int *)(param_1 + 0x40) = iVar5;\n  if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }\n  if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }\n  if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined1 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int in_t0;" primitive_type identifier ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x58);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x58)" identifier = (pointer_expression "*(int *)(param_1 + 0x58)" * (cast_expression "(int *)(param_1 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) ))))) ;) (if_statement "if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x50);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x50)" identifier = (pointer_expression "*(uint *)(param_1 + 0x50)" * (cast_expression "(uint *)(param_1 + 0x50)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "*(uint *)(param_1 + 0x50) = ~uVar4;" (assignment_expression "*(uint *)(param_1 + 0x50) = ~uVar4" (pointer_expression "*(uint *)(param_1 + 0x50)" * (cast_expression "(uint *)(param_1 + 0x50)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) = (unary_expression "~uVar4" ~ identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;" (assignment_expression "*(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4" (binary_expression "*(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f)" (binary_expression "*(int *)(param_1 + 0x54) * 2" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) * number_literal) - (parenthesized_expression "(*(int *)(param_1 + 0x54) >> 0x1f)" ( (binary_expression "*(int *)(param_1 + 0x54) >> 0x1f" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) >> number_literal) ))) ^ (unary_expression "~uVar4" ~ identifier))) ;) (if_statement "if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }" if (parenthesized_expression "(1 < iVar1)" ( (binary_expression "1 < iVar1" number_literal < identifier) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);" (assignment_expression "*(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28)" (pointer_expression "*(undefined4 *)(param_1 + 0x3c)" * (cast_expression "(undefined4 *)(param_1 + 0x3c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(param_1 + 0x28)" * (cast_expression "(undefined4 *)(param_1 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) })) (expression_statement "in_t0 = FUN_0009a768(param_1);" (assignment_expression "in_t0 = FUN_0009a768(param_1)" identifier = (call_expression "FUN_0009a768(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x58);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x58)" identifier = (pointer_expression "*(int *)(param_1 + 0x58)" * (cast_expression "(int *)(param_1 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) ))))) ;) })) (expression_statement "iVar5 = *(int *)(param_1 + 0xc) + iVar3;" (assignment_expression "iVar5 = *(int *)(param_1 + 0xc) + iVar3" identifier = (binary_expression "*(int *)(param_1 + 0xc) + iVar3" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) + identifier)) ;) (expression_statement "*(int *)(param_1 + 0x28) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x28) = iVar5" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x3c) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x3c) = iVar5" (pointer_expression "*(int *)(param_1 + 0x3c)" * (cast_expression "(int *)(param_1 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x40) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x40) = iVar5" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = identifier) ;) (if_statement "if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }" if (parenthesized_expression "(iVar1 == 1)" ( (binary_expression "iVar1 == 1" identifier == number_literal) )) (compound_statement "{\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }" { (expression_statement "*(undefined4 *)(param_1 + 0x48) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x48) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x48)" * (cast_expression "(undefined4 *)(param_1 + 0x48)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x44) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x44) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x44)" * (cast_expression "(undefined4 *)(param_1 + 0x44)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);" (call_expression "FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830)" identifier (argument_list "(param_1,*(byte *)(param_1 + 6) + 0x425a6830)" ( identifier , (binary_expression "*(byte *)(param_1 + 6) + 0x425a6830" (pointer_expression "*(byte *)(param_1 + 6)" * (cast_expression "(byte *)(param_1 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 6)" ( (binary_expression "param_1 + 6" identifier + number_literal) )))) + number_literal) ))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) })) (if_statement "if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }" { (expression_statement "FUN_00099e98(param_1,0x31415926);" (call_expression "FUN_00099e98(param_1,0x31415926)" identifier (argument_list "(param_1,0x31415926)" ( identifier , number_literal ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" identifier = (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" else (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (do_statement "do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);" do (compound_statement "{\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      }" { (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" * identifier) = (cast_expression "(char)(uVar4 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" identifier = (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) }) while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) ;) }))) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x10;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x10" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = (binary_expression "iVar1 + 0x10" identifier + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = (binary_expression "0x5359 << (0x10U - iVar1 & 0x1f) | uVar4" (binary_expression "0x5359 << (0x10U - iVar1 & 0x1f)" number_literal << (parenthesized_expression "(0x10U - iVar1 & 0x1f)" ( (binary_expression "0x10U - iVar1 & 0x1f" (binary_expression "0x10U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));" (call_expression "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50))" identifier (argument_list "(param_1,*(undefined4 *)(param_1 + 0x50))" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x50)" * (cast_expression "(undefined4 *)(param_1 + 0x50)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" identifier = (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" else (compound_statement "{\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" { (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = *(undefined1 *)(param_1 + 0x44);" (assignment_expression "*puVar2 = *(undefined1 *)(param_1 + 0x44)" (pointer_expression "*puVar2" * identifier) = (pointer_expression "*(undefined1 *)(param_1 + 0x44)" * (cast_expression "(undefined1 *)(param_1 + 0x44)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" identifier = (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) }))) (expression_statement "iVar1 = iVar1 + 1;" (assignment_expression "iVar1 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (while_statement "while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) (compound_statement "{\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" { (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" * identifier) = (cast_expression "(char)(uVar4 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x44);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x44)" identifier = (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar4 = iVar3 << 8;" (assignment_expression "uVar4 = iVar3 << 8" identifier = (binary_expression "iVar3 << 8" identifier << number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) (if_statement "if (iVar1 < 8) break;" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = (char)((uint)iVar3 >> 0x10);" (assignment_expression "*puVar2 = (char)((uint)iVar3 >> 0x10)" (pointer_expression "*puVar2" * identifier) = (cast_expression "(char)((uint)iVar3 >> 0x10)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((uint)iVar3 >> 0x10)" ( (binary_expression "(uint)iVar3 >> 0x10" (cast_expression "(uint)iVar3" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" identifier = (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x18;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x18" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = (binary_expression "iVar1 + 0x18" identifier + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = (binary_expression "in_t0 << (8U - iVar1 & 0x1f) | uVar4" (binary_expression "in_t0 << (8U - iVar1 & 0x1f)" identifier << (parenthesized_expression "(8U - iVar1 & 0x1f)" ( (binary_expression "8U - iVar1 & 0x1f" (binary_expression "8U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "FUN_00099f5c(param_1);" (call_expression "FUN_00099f5c(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "FUN_0009a850(param_1);" (call_expression "FUN_0009a850(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) })) (if_statement "if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }" { (expression_statement "FUN_00099e98(param_1,0x17724538);" (call_expression "FUN_00099e98(param_1,0x17724538)" identifier (argument_list "(param_1,0x17724538)" ( identifier , number_literal ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" identifier = (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" else (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (do_statement "do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);" do (compound_statement "{\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      }" { (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" * identifier) = (cast_expression "(char)(uVar4 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" identifier = (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) }) while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) ;) }))) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x10;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x10" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = (binary_expression "iVar1 + 0x10" identifier + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = (binary_expression "0x5090 << (0x10U - iVar1 & 0x1f) | uVar4" (binary_expression "0x5090 << (0x10U - iVar1 & 0x1f)" number_literal << (parenthesized_expression "(0x10U - iVar1 & 0x1f)" ( (binary_expression "0x10U - iVar1 & 0x1f" (binary_expression "0x10U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));" (call_expression "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54))" identifier (argument_list "(param_1,*(undefined4 *)(param_1 + 0x54))" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x54)" * (cast_expression "(undefined4 *)(param_1 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_00099e50();" (call_expression "FUN_00099e50()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void BZ2_compressBlock(EState *s,int is_last_block)\n\n{\n  int iVar1;\n  int iVar2;\n  uint32_t uVar3;\n  uint uVar4;\n  uint8_t *puVar5;\n  int32_t in_t0;\n  \n  iVar2 = s->nblock;\n  iVar1 = s->blockNo;\n  if (0 < iVar2) {\n    uVar4 = s->blockCRC;\n    s->blockCRC = ~uVar4;\n    s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      s->posZ = s->zbits;\n    }\n    in_t0 = BZ2_blockSort(s);\n    iVar2 = s->nblock;\n    iVar1 = s->blockNo;\n  }\n  puVar5 = (uint8_t *)((int)s->arr2 + iVar2);\n  s->zbits = puVar5;\n  s->posZ = puVar5;\n  s->state_out_pos = puVar5;\n  if (iVar1 == 1) {\n    s->bsLive = 0;\n    s->bsBuff = 0;\n    bsPutU32(s,s->blockSize100k + 0x425a6830);\n    iVar2 = s->nblock;\n  }\n  if (0 < iVar2) {\n    bsPutU32(s,0x31415926);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->blockCRC);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = *(uint8_t *)&s->bsBuff;\n      uVar4 = s->bsBuff << 8;\n      iVar1 = s->bsLive + -8;\n      s->bsBuff = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    s->bsLive = iVar1;\n    while (7 < iVar1) {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar4 >> 0x18);\n      uVar3 = s->bsBuff;\n      iVar1 = s->bsLive + -8;\n      uVar4 = uVar3 << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n      if (iVar1 < 8) break;\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar3 >> 0x10);\n      iVar1 = s->bsLive + -8;\n      uVar4 = s->bsBuff << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n    }\n    s->bsLive = iVar1 + 0x18;\n    s->bsBuff = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    generateMTFValues(s);\n    sendMTFValues(s);\n  }\n  if (is_last_block != 0) {\n    bsPutU32(s,0x17724538);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->combinedCRC);\n    bsFinishWrite(s);\n    return;\n  }\n  return;\n}\n\n" (function_definition "void BZ2_compressBlock(EState *s,int is_last_block)\n\n{\n  int iVar1;\n  int iVar2;\n  uint32_t uVar3;\n  uint uVar4;\n  uint8_t *puVar5;\n  int32_t in_t0;\n  \n  iVar2 = s->nblock;\n  iVar1 = s->blockNo;\n  if (0 < iVar2) {\n    uVar4 = s->blockCRC;\n    s->blockCRC = ~uVar4;\n    s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      s->posZ = s->zbits;\n    }\n    in_t0 = BZ2_blockSort(s);\n    iVar2 = s->nblock;\n    iVar1 = s->blockNo;\n  }\n  puVar5 = (uint8_t *)((int)s->arr2 + iVar2);\n  s->zbits = puVar5;\n  s->posZ = puVar5;\n  s->state_out_pos = puVar5;\n  if (iVar1 == 1) {\n    s->bsLive = 0;\n    s->bsBuff = 0;\n    bsPutU32(s,s->blockSize100k + 0x425a6830);\n    iVar2 = s->nblock;\n  }\n  if (0 < iVar2) {\n    bsPutU32(s,0x31415926);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->blockCRC);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = *(uint8_t *)&s->bsBuff;\n      uVar4 = s->bsBuff << 8;\n      iVar1 = s->bsLive + -8;\n      s->bsBuff = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    s->bsLive = iVar1;\n    while (7 < iVar1) {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar4 >> 0x18);\n      uVar3 = s->bsBuff;\n      iVar1 = s->bsLive + -8;\n      uVar4 = uVar3 << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n      if (iVar1 < 8) break;\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar3 >> 0x10);\n      iVar1 = s->bsLive + -8;\n      uVar4 = s->bsBuff << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n    }\n    s->bsLive = iVar1 + 0x18;\n    s->bsBuff = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    generateMTFValues(s);\n    sendMTFValues(s);\n  }\n  if (is_last_block != 0) {\n    bsPutU32(s,0x17724538);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->combinedCRC);\n    bsFinishWrite(s);\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "BZ2_compressBlock(EState *s,int is_last_block)" identifier (parameter_list "(EState *s,int is_last_block)" ( (parameter_declaration "EState *s" type_identifier (pointer_declarator "*s" * identifier)) , (parameter_declaration "int is_last_block" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  uint32_t uVar3;\n  uint uVar4;\n  uint8_t *puVar5;\n  int32_t in_t0;\n  \n  iVar2 = s->nblock;\n  iVar1 = s->blockNo;\n  if (0 < iVar2) {\n    uVar4 = s->blockCRC;\n    s->blockCRC = ~uVar4;\n    s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      s->posZ = s->zbits;\n    }\n    in_t0 = BZ2_blockSort(s);\n    iVar2 = s->nblock;\n    iVar1 = s->blockNo;\n  }\n  puVar5 = (uint8_t *)((int)s->arr2 + iVar2);\n  s->zbits = puVar5;\n  s->posZ = puVar5;\n  s->state_out_pos = puVar5;\n  if (iVar1 == 1) {\n    s->bsLive = 0;\n    s->bsBuff = 0;\n    bsPutU32(s,s->blockSize100k + 0x425a6830);\n    iVar2 = s->nblock;\n  }\n  if (0 < iVar2) {\n    bsPutU32(s,0x31415926);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->blockCRC);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = *(uint8_t *)&s->bsBuff;\n      uVar4 = s->bsBuff << 8;\n      iVar1 = s->bsLive + -8;\n      s->bsBuff = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    s->bsLive = iVar1;\n    while (7 < iVar1) {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar4 >> 0x18);\n      uVar3 = s->bsBuff;\n      iVar1 = s->bsLive + -8;\n      uVar4 = uVar3 << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n      if (iVar1 < 8) break;\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar3 >> 0x10);\n      iVar1 = s->bsLive + -8;\n      uVar4 = s->bsBuff << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n    }\n    s->bsLive = iVar1 + 0x18;\n    s->bsBuff = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    generateMTFValues(s);\n    sendMTFValues(s);\n  }\n  if (is_last_block != 0) {\n    bsPutU32(s,0x17724538);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->combinedCRC);\n    bsFinishWrite(s);\n    return;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uint32_t uVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint8_t *puVar5;" primitive_type (pointer_declarator "*puVar5" * identifier) ;) (declaration "int32_t in_t0;" primitive_type identifier ;) (expression_statement "iVar2 = s->nblock;" (assignment_expression "iVar2 = s->nblock" identifier = (field_expression "s->nblock" identifier -> field_identifier)) ;) (expression_statement "iVar1 = s->blockNo;" (assignment_expression "iVar1 = s->blockNo" identifier = (field_expression "s->blockNo" identifier -> field_identifier)) ;) (if_statement "if (0 < iVar2) {\n    uVar4 = s->blockCRC;\n    s->blockCRC = ~uVar4;\n    s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      s->posZ = s->zbits;\n    }\n    in_t0 = BZ2_blockSort(s);\n    iVar2 = s->nblock;\n    iVar1 = s->blockNo;\n  }" if (parenthesized_expression "(0 < iVar2)" ( (binary_expression "0 < iVar2" number_literal < identifier) )) (compound_statement "{\n    uVar4 = s->blockCRC;\n    s->blockCRC = ~uVar4;\n    s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      s->posZ = s->zbits;\n    }\n    in_t0 = BZ2_blockSort(s);\n    iVar2 = s->nblock;\n    iVar1 = s->blockNo;\n  }" { (expression_statement "uVar4 = s->blockCRC;" (assignment_expression "uVar4 = s->blockCRC" identifier = (field_expression "s->blockCRC" identifier -> field_identifier)) ;) (expression_statement "s->blockCRC = ~uVar4;" (assignment_expression "s->blockCRC = ~uVar4" (field_expression "s->blockCRC" identifier -> field_identifier) = (unary_expression "~uVar4" ~ identifier)) ;) (expression_statement "s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4;" (assignment_expression "s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4" (field_expression "s->combinedCRC" identifier -> field_identifier) = (binary_expression "s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~uVar4" (binary_expression "s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f)" (binary_expression "s->combinedCRC * 2" (field_expression "s->combinedCRC" identifier -> field_identifier) * number_literal) - (parenthesized_expression "((int)s->combinedCRC >> 0x1f)" ( (binary_expression "(int)s->combinedCRC >> 0x1f" (cast_expression "(int)s->combinedCRC" ( (type_descriptor "int" primitive_type) ) (field_expression "s->combinedCRC" identifier -> field_identifier)) >> number_literal) ))) ^ (unary_expression "~uVar4" ~ identifier))) ;) (if_statement "if (1 < iVar1) {\n      s->posZ = s->zbits;\n    }" if (parenthesized_expression "(1 < iVar1)" ( (binary_expression "1 < iVar1" number_literal < identifier) )) (compound_statement "{\n      s->posZ = s->zbits;\n    }" { (expression_statement "s->posZ = s->zbits;" (assignment_expression "s->posZ = s->zbits" (field_expression "s->posZ" identifier -> field_identifier) = (field_expression "s->zbits" identifier -> field_identifier)) ;) })) (expression_statement "in_t0 = BZ2_blockSort(s);" (assignment_expression "in_t0 = BZ2_blockSort(s)" identifier = (call_expression "BZ2_blockSort(s)" identifier (argument_list "(s)" ( identifier )))) ;) (expression_statement "iVar2 = s->nblock;" (assignment_expression "iVar2 = s->nblock" identifier = (field_expression "s->nblock" identifier -> field_identifier)) ;) (expression_statement "iVar1 = s->blockNo;" (assignment_expression "iVar1 = s->blockNo" identifier = (field_expression "s->blockNo" identifier -> field_identifier)) ;) })) (expression_statement "puVar5 = (uint8_t *)((int)s->arr2 + iVar2);" (assignment_expression "puVar5 = (uint8_t *)((int)s->arr2 + iVar2)" identifier = (cast_expression "(uint8_t *)((int)s->arr2 + iVar2)" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)s->arr2 + iVar2)" ( (binary_expression "(int)s->arr2 + iVar2" (cast_expression "(int)s->arr2" ( (type_descriptor "int" primitive_type) ) (field_expression "s->arr2" identifier -> field_identifier)) + identifier) )))) ;) (expression_statement "s->zbits = puVar5;" (assignment_expression "s->zbits = puVar5" (field_expression "s->zbits" identifier -> field_identifier) = identifier) ;) (expression_statement "s->posZ = puVar5;" (assignment_expression "s->posZ = puVar5" (field_expression "s->posZ" identifier -> field_identifier) = identifier) ;) (expression_statement "s->state_out_pos = puVar5;" (assignment_expression "s->state_out_pos = puVar5" (field_expression "s->state_out_pos" identifier -> field_identifier) = identifier) ;) (if_statement "if (iVar1 == 1) {\n    s->bsLive = 0;\n    s->bsBuff = 0;\n    bsPutU32(s,s->blockSize100k + 0x425a6830);\n    iVar2 = s->nblock;\n  }" if (parenthesized_expression "(iVar1 == 1)" ( (binary_expression "iVar1 == 1" identifier == number_literal) )) (compound_statement "{\n    s->bsLive = 0;\n    s->bsBuff = 0;\n    bsPutU32(s,s->blockSize100k + 0x425a6830);\n    iVar2 = s->nblock;\n  }" { (expression_statement "s->bsLive = 0;" (assignment_expression "s->bsLive = 0" (field_expression "s->bsLive" identifier -> field_identifier) = number_literal) ;) (expression_statement "s->bsBuff = 0;" (assignment_expression "s->bsBuff = 0" (field_expression "s->bsBuff" identifier -> field_identifier) = number_literal) ;) (expression_statement "bsPutU32(s,s->blockSize100k + 0x425a6830);" (call_expression "bsPutU32(s,s->blockSize100k + 0x425a6830)" identifier (argument_list "(s,s->blockSize100k + 0x425a6830)" ( identifier , (binary_expression "s->blockSize100k + 0x425a6830" (field_expression "s->blockSize100k" identifier -> field_identifier) + number_literal) ))) ;) (expression_statement "iVar2 = s->nblock;" (assignment_expression "iVar2 = s->nblock" identifier = (field_expression "s->nblock" identifier -> field_identifier)) ;) })) (if_statement "if (0 < iVar2) {\n    bsPutU32(s,0x31415926);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->blockCRC);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = *(uint8_t *)&s->bsBuff;\n      uVar4 = s->bsBuff << 8;\n      iVar1 = s->bsLive + -8;\n      s->bsBuff = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    s->bsLive = iVar1;\n    while (7 < iVar1) {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar4 >> 0x18);\n      uVar3 = s->bsBuff;\n      iVar1 = s->bsLive + -8;\n      uVar4 = uVar3 << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n      if (iVar1 < 8) break;\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar3 >> 0x10);\n      iVar1 = s->bsLive + -8;\n      uVar4 = s->bsBuff << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n    }\n    s->bsLive = iVar1 + 0x18;\n    s->bsBuff = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    generateMTFValues(s);\n    sendMTFValues(s);\n  }" if (parenthesized_expression "(0 < iVar2)" ( (binary_expression "0 < iVar2" number_literal < identifier) )) (compound_statement "{\n    bsPutU32(s,0x31415926);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->blockCRC);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = *(uint8_t *)&s->bsBuff;\n      uVar4 = s->bsBuff << 8;\n      iVar1 = s->bsLive + -8;\n      s->bsBuff = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    s->bsLive = iVar1;\n    while (7 < iVar1) {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar4 >> 0x18);\n      uVar3 = s->bsBuff;\n      iVar1 = s->bsLive + -8;\n      uVar4 = uVar3 << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n      if (iVar1 < 8) break;\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar3 >> 0x10);\n      iVar1 = s->bsLive + -8;\n      uVar4 = s->bsBuff << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n    }\n    s->bsLive = iVar1 + 0x18;\n    s->bsBuff = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    generateMTFValues(s);\n    sendMTFValues(s);\n  }" { (expression_statement "bsPutU32(s,0x31415926);" (call_expression "bsPutU32(s,0x31415926)" identifier (argument_list "(s,0x31415926)" ( identifier , number_literal ))) ;) (expression_statement "iVar1 = s->bsLive;" (assignment_expression "iVar1 = s->bsLive" identifier = (field_expression "s->bsLive" identifier -> field_identifier)) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = s->bsBuff;\n    }" { (expression_statement "uVar4 = s->bsBuff;" (assignment_expression "uVar4 = s->bsBuff" identifier = (field_expression "s->bsBuff" identifier -> field_identifier)) ;) }) (else_clause "else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }" else (compound_statement "{\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }" { (expression_statement "uVar4 = s->bsBuff;" (assignment_expression "uVar4 = s->bsBuff" identifier = (field_expression "s->bsBuff" identifier -> field_identifier)) ;) (do_statement "do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);" do (compound_statement "{\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      }" { (expression_statement "puVar5 = s->posZ;" (assignment_expression "puVar5 = s->posZ" identifier = (field_expression "s->posZ" identifier -> field_identifier)) ;) (expression_statement "s->posZ = puVar5 + 1;" (assignment_expression "s->posZ = puVar5 + 1" (field_expression "s->posZ" identifier -> field_identifier) = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar5 = (uint8_t)(uVar4 >> 0x18);" (assignment_expression "*puVar5 = (uint8_t)(uVar4 >> 0x18)" (pointer_expression "*puVar5" * identifier) = (cast_expression "(uint8_t)(uVar4 >> 0x18)" ( (type_descriptor "uint8_t" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "iVar1 = s->bsLive + -8;" (assignment_expression "iVar1 = s->bsLive + -8" identifier = (binary_expression "s->bsLive + -8" (field_expression "s->bsLive" identifier -> field_identifier) + number_literal)) ;) (expression_statement "uVar4 = s->bsBuff << 8;" (assignment_expression "uVar4 = s->bsBuff << 8" identifier = (binary_expression "s->bsBuff << 8" (field_expression "s->bsBuff" identifier -> field_identifier) << number_literal)) ;) (expression_statement "s->bsLive = iVar1;" (assignment_expression "s->bsLive = iVar1" (field_expression "s->bsLive" identifier -> field_identifier) = identifier) ;) (expression_statement "s->bsBuff = uVar4;" (assignment_expression "s->bsBuff = uVar4" (field_expression "s->bsBuff" identifier -> field_identifier) = identifier) ;) }) while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) ;) }))) (expression_statement "s->bsLive = iVar1 + 0x10;" (assignment_expression "s->bsLive = iVar1 + 0x10" (field_expression "s->bsLive" identifier -> field_identifier) = (binary_expression "iVar1 + 0x10" identifier + number_literal)) ;) (expression_statement "s->bsBuff = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;" (assignment_expression "s->bsBuff = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4" (field_expression "s->bsBuff" identifier -> field_identifier) = (binary_expression "0x5359 << (0x10U - iVar1 & 0x1f) | uVar4" (binary_expression "0x5359 << (0x10U - iVar1 & 0x1f)" number_literal << (parenthesized_expression "(0x10U - iVar1 & 0x1f)" ( (binary_expression "0x10U - iVar1 & 0x1f" (binary_expression "0x10U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "bsPutU32(s,s->blockCRC);" (call_expression "bsPutU32(s,s->blockCRC)" identifier (argument_list "(s,s->blockCRC)" ( identifier , (field_expression "s->blockCRC" identifier -> field_identifier) ))) ;) (expression_statement "iVar1 = s->bsLive;" (assignment_expression "iVar1 = s->bsLive" identifier = (field_expression "s->bsLive" identifier -> field_identifier)) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = *(uint8_t *)&s->bsBuff;\n      uVar4 = s->bsBuff << 8;\n      iVar1 = s->bsLive + -8;\n      s->bsBuff = uVar4;\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = s->bsBuff;\n    }" { (expression_statement "uVar4 = s->bsBuff;" (assignment_expression "uVar4 = s->bsBuff" identifier = (field_expression "s->bsBuff" identifier -> field_identifier)) ;) }) (else_clause "else {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = *(uint8_t *)&s->bsBuff;\n      uVar4 = s->bsBuff << 8;\n      iVar1 = s->bsLive + -8;\n      s->bsBuff = uVar4;\n    }" else (compound_statement "{\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = *(uint8_t *)&s->bsBuff;\n      uVar4 = s->bsBuff << 8;\n      iVar1 = s->bsLive + -8;\n      s->bsBuff = uVar4;\n    }" { (expression_statement "puVar5 = s->posZ;" (assignment_expression "puVar5 = s->posZ" identifier = (field_expression "s->posZ" identifier -> field_identifier)) ;) (expression_statement "s->posZ = puVar5 + 1;" (assignment_expression "s->posZ = puVar5 + 1" (field_expression "s->posZ" identifier -> field_identifier) = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar5 = *(uint8_t *)&s->bsBuff;" (assignment_expression "*puVar5 = *(uint8_t *)&s->bsBuff" (pointer_expression "*puVar5" * identifier) = (pointer_expression "*(uint8_t *)&s->bsBuff" * (cast_expression "(uint8_t *)&s->bsBuff" ( (type_descriptor "uint8_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&s->bsBuff" & (field_expression "s->bsBuff" identifier -> field_identifier))))) ;) (expression_statement "uVar4 = s->bsBuff << 8;" (assignment_expression "uVar4 = s->bsBuff << 8" identifier = (binary_expression "s->bsBuff << 8" (field_expression "s->bsBuff" identifier -> field_identifier) << number_literal)) ;) (expression_statement "iVar1 = s->bsLive + -8;" (assignment_expression "iVar1 = s->bsLive + -8" identifier = (binary_expression "s->bsLive + -8" (field_expression "s->bsLive" identifier -> field_identifier) + number_literal)) ;) (expression_statement "s->bsBuff = uVar4;" (assignment_expression "s->bsBuff = uVar4" (field_expression "s->bsBuff" identifier -> field_identifier) = identifier) ;) }))) (expression_statement "iVar1 = iVar1 + 1;" (assignment_expression "iVar1 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) (expression_statement "s->bsLive = iVar1;" (assignment_expression "s->bsLive = iVar1" (field_expression "s->bsLive" identifier -> field_identifier) = identifier) ;) (while_statement "while (7 < iVar1) {\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar4 >> 0x18);\n      uVar3 = s->bsBuff;\n      iVar1 = s->bsLive + -8;\n      uVar4 = uVar3 << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n      if (iVar1 < 8) break;\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar3 >> 0x10);\n      iVar1 = s->bsLive + -8;\n      uVar4 = s->bsBuff << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n    }" while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) (compound_statement "{\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar4 >> 0x18);\n      uVar3 = s->bsBuff;\n      iVar1 = s->bsLive + -8;\n      uVar4 = uVar3 << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n      if (iVar1 < 8) break;\n      puVar5 = s->posZ;\n      s->posZ = puVar5 + 1;\n      *puVar5 = (uint8_t)(uVar3 >> 0x10);\n      iVar1 = s->bsLive + -8;\n      uVar4 = s->bsBuff << 8;\n      s->bsLive = iVar1;\n      s->bsBuff = uVar4;\n    }" { (expression_statement "puVar5 = s->posZ;" (assignment_expression "puVar5 = s->posZ" identifier = (field_expression "s->posZ" identifier -> field_identifier)) ;) (expression_statement "s->posZ = puVar5 + 1;" (assignment_expression "s->posZ = puVar5 + 1" (field_expression "s->posZ" identifier -> field_identifier) = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar5 = (uint8_t)(uVar4 >> 0x18);" (assignment_expression "*puVar5 = (uint8_t)(uVar4 >> 0x18)" (pointer_expression "*puVar5" * identifier) = (cast_expression "(uint8_t)(uVar4 >> 0x18)" ( (type_descriptor "uint8_t" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "uVar3 = s->bsBuff;" (assignment_expression "uVar3 = s->bsBuff" identifier = (field_expression "s->bsBuff" identifier -> field_identifier)) ;) (expression_statement "iVar1 = s->bsLive + -8;" (assignment_expression "iVar1 = s->bsLive + -8" identifier = (binary_expression "s->bsLive + -8" (field_expression "s->bsLive" identifier -> field_identifier) + number_literal)) ;) (expression_statement "uVar4 = uVar3 << 8;" (assignment_expression "uVar4 = uVar3 << 8" identifier = (binary_expression "uVar3 << 8" identifier << number_literal)) ;) (expression_statement "s->bsLive = iVar1;" (assignment_expression "s->bsLive = iVar1" (field_expression "s->bsLive" identifier -> field_identifier) = identifier) ;) (expression_statement "s->bsBuff = uVar4;" (assignment_expression "s->bsBuff = uVar4" (field_expression "s->bsBuff" identifier -> field_identifier) = identifier) ;) (if_statement "if (iVar1 < 8) break;" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar5 = s->posZ;" (assignment_expression "puVar5 = s->posZ" identifier = (field_expression "s->posZ" identifier -> field_identifier)) ;) (expression_statement "s->posZ = puVar5 + 1;" (assignment_expression "s->posZ = puVar5 + 1" (field_expression "s->posZ" identifier -> field_identifier) = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar5 = (uint8_t)(uVar3 >> 0x10);" (assignment_expression "*puVar5 = (uint8_t)(uVar3 >> 0x10)" (pointer_expression "*puVar5" * identifier) = (cast_expression "(uint8_t)(uVar3 >> 0x10)" ( (type_descriptor "uint8_t" primitive_type) ) (parenthesized_expression "(uVar3 >> 0x10)" ( (binary_expression "uVar3 >> 0x10" identifier >> number_literal) )))) ;) (expression_statement "iVar1 = s->bsLive + -8;" (assignment_expression "iVar1 = s->bsLive + -8" identifier = (binary_expression "s->bsLive + -8" (field_expression "s->bsLive" identifier -> field_identifier) + number_literal)) ;) (expression_statement "uVar4 = s->bsBuff << 8;" (assignment_expression "uVar4 = s->bsBuff << 8" identifier = (binary_expression "s->bsBuff << 8" (field_expression "s->bsBuff" identifier -> field_identifier) << number_literal)) ;) (expression_statement "s->bsLive = iVar1;" (assignment_expression "s->bsLive = iVar1" (field_expression "s->bsLive" identifier -> field_identifier) = identifier) ;) (expression_statement "s->bsBuff = uVar4;" (assignment_expression "s->bsBuff = uVar4" (field_expression "s->bsBuff" identifier -> field_identifier) = identifier) ;) })) (expression_statement "s->bsLive = iVar1 + 0x18;" (assignment_expression "s->bsLive = iVar1 + 0x18" (field_expression "s->bsLive" identifier -> field_identifier) = (binary_expression "iVar1 + 0x18" identifier + number_literal)) ;) (expression_statement "s->bsBuff = in_t0 << (8U - iVar1 & 0x1f) | uVar4;" (assignment_expression "s->bsBuff = in_t0 << (8U - iVar1 & 0x1f) | uVar4" (field_expression "s->bsBuff" identifier -> field_identifier) = (binary_expression "in_t0 << (8U - iVar1 & 0x1f) | uVar4" (binary_expression "in_t0 << (8U - iVar1 & 0x1f)" identifier << (parenthesized_expression "(8U - iVar1 & 0x1f)" ( (binary_expression "8U - iVar1 & 0x1f" (binary_expression "8U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "generateMTFValues(s);" (call_expression "generateMTFValues(s)" identifier (argument_list "(s)" ( identifier ))) ;) (expression_statement "sendMTFValues(s);" (call_expression "sendMTFValues(s)" identifier (argument_list "(s)" ( identifier ))) ;) })) (if_statement "if (is_last_block != 0) {\n    bsPutU32(s,0x17724538);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->combinedCRC);\n    bsFinishWrite(s);\n    return;\n  }" if (parenthesized_expression "(is_last_block != 0)" ( (binary_expression "is_last_block != 0" identifier != number_literal) )) (compound_statement "{\n    bsPutU32(s,0x17724538);\n    iVar1 = s->bsLive;\n    if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }\n    s->bsLive = iVar1 + 0x10;\n    s->bsBuff = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    bsPutU32(s,s->combinedCRC);\n    bsFinishWrite(s);\n    return;\n  }" { (expression_statement "bsPutU32(s,0x17724538);" (call_expression "bsPutU32(s,0x17724538)" identifier (argument_list "(s,0x17724538)" ( identifier , number_literal ))) ;) (expression_statement "iVar1 = s->bsLive;" (assignment_expression "iVar1 = s->bsLive" identifier = (field_expression "s->bsLive" identifier -> field_identifier)) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = s->bsBuff;\n    }\n    else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = s->bsBuff;\n    }" { (expression_statement "uVar4 = s->bsBuff;" (assignment_expression "uVar4 = s->bsBuff" identifier = (field_expression "s->bsBuff" identifier -> field_identifier)) ;) }) (else_clause "else {\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }" else (compound_statement "{\n      uVar4 = s->bsBuff;\n      do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);\n    }" { (expression_statement "uVar4 = s->bsBuff;" (assignment_expression "uVar4 = s->bsBuff" identifier = (field_expression "s->bsBuff" identifier -> field_identifier)) ;) (do_statement "do {\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      } while (7 < iVar1);" do (compound_statement "{\n        puVar5 = s->posZ;\n        s->posZ = puVar5 + 1;\n        *puVar5 = (uint8_t)(uVar4 >> 0x18);\n        iVar1 = s->bsLive + -8;\n        uVar4 = s->bsBuff << 8;\n        s->bsLive = iVar1;\n        s->bsBuff = uVar4;\n      }" { (expression_statement "puVar5 = s->posZ;" (assignment_expression "puVar5 = s->posZ" identifier = (field_expression "s->posZ" identifier -> field_identifier)) ;) (expression_statement "s->posZ = puVar5 + 1;" (assignment_expression "s->posZ = puVar5 + 1" (field_expression "s->posZ" identifier -> field_identifier) = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (expression_statement "*puVar5 = (uint8_t)(uVar4 >> 0x18);" (assignment_expression "*puVar5 = (uint8_t)(uVar4 >> 0x18)" (pointer_expression "*puVar5" * identifier) = (cast_expression "(uint8_t)(uVar4 >> 0x18)" ( (type_descriptor "uint8_t" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "iVar1 = s->bsLive + -8;" (assignment_expression "iVar1 = s->bsLive + -8" identifier = (binary_expression "s->bsLive + -8" (field_expression "s->bsLive" identifier -> field_identifier) + number_literal)) ;) (expression_statement "uVar4 = s->bsBuff << 8;" (assignment_expression "uVar4 = s->bsBuff << 8" identifier = (binary_expression "s->bsBuff << 8" (field_expression "s->bsBuff" identifier -> field_identifier) << number_literal)) ;) (expression_statement "s->bsLive = iVar1;" (assignment_expression "s->bsLive = iVar1" (field_expression "s->bsLive" identifier -> field_identifier) = identifier) ;) (expression_statement "s->bsBuff = uVar4;" (assignment_expression "s->bsBuff = uVar4" (field_expression "s->bsBuff" identifier -> field_identifier) = identifier) ;) }) while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) ;) }))) (expression_statement "s->bsLive = iVar1 + 0x10;" (assignment_expression "s->bsLive = iVar1 + 0x10" (field_expression "s->bsLive" identifier -> field_identifier) = (binary_expression "iVar1 + 0x10" identifier + number_literal)) ;) (expression_statement "s->bsBuff = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;" (assignment_expression "s->bsBuff = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4" (field_expression "s->bsBuff" identifier -> field_identifier) = (binary_expression "0x5090 << (0x10U - iVar1 & 0x1f) | uVar4" (binary_expression "0x5090 << (0x10U - iVar1 & 0x1f)" number_literal << (parenthesized_expression "(0x10U - iVar1 & 0x1f)" ( (binary_expression "0x10U - iVar1 & 0x1f" (binary_expression "0x10U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "bsPutU32(s,s->combinedCRC);" (call_expression "bsPutU32(s,s->combinedCRC)" identifier (argument_list "(s,s->combinedCRC)" ( identifier , (field_expression "s->combinedCRC" identifier -> field_identifier) ))) ;) (expression_statement "bsFinishWrite(s);" (call_expression "bsFinishWrite(s)" identifier (argument_list "(s)" ( identifier ))) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0009b820(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int in_t0;\n  \n  iVar3 = *(int *)(param_1 + 0x34);\n  iVar1 = *(int *)(param_1 + 0x58);\n  if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }\n  iVar5 = *(int *)(param_1 + 0xc) + iVar3;\n  *(int *)(param_1 + 0x28) = iVar5;\n  *(int *)(param_1 + 0x3c) = iVar5;\n  *(int *)(param_1 + 0x40) = iVar5;\n  if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }\n  if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }\n  if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0009b820(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int in_t0;\n  \n  iVar3 = *(int *)(param_1 + 0x34);\n  iVar1 = *(int *)(param_1 + 0x58);\n  if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }\n  iVar5 = *(int *)(param_1 + 0xc) + iVar3;\n  *(int *)(param_1 + 0x28) = iVar5;\n  *(int *)(param_1 + 0x3c) = iVar5;\n  *(int *)(param_1 + 0x40) = iVar5;\n  if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }\n  if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }\n  if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0009b820(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int in_t0;\n  \n  iVar3 = *(int *)(param_1 + 0x34);\n  iVar1 = *(int *)(param_1 + 0x58);\n  if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }\n  iVar5 = *(int *)(param_1 + 0xc) + iVar3;\n  *(int *)(param_1 + 0x28) = iVar5;\n  *(int *)(param_1 + 0x3c) = iVar5;\n  *(int *)(param_1 + 0x40) = iVar5;\n  if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }\n  if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }\n  if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined1 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int in_t0;" primitive_type identifier ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x58);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x58)" identifier = (pointer_expression "*(int *)(param_1 + 0x58)" * (cast_expression "(int *)(param_1 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) ))))) ;) (if_statement "if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x50);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x50)" identifier = (pointer_expression "*(uint *)(param_1 + 0x50)" * (cast_expression "(uint *)(param_1 + 0x50)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "*(uint *)(param_1 + 0x50) = ~uVar4;" (assignment_expression "*(uint *)(param_1 + 0x50) = ~uVar4" (pointer_expression "*(uint *)(param_1 + 0x50)" * (cast_expression "(uint *)(param_1 + 0x50)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) = (unary_expression "~uVar4" ~ identifier)) ;) (expression_statement "*(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;" (assignment_expression "*(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4" (pointer_expression "*(uint *)(param_1 + 0x54)" * (cast_expression "(uint *)(param_1 + 0x54)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4" (binary_expression "*(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f)" (binary_expression "*(int *)(param_1 + 0x54) * 2" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) * number_literal) - (parenthesized_expression "(*(int *)(param_1 + 0x54) >> 0x1f)" ( (binary_expression "*(int *)(param_1 + 0x54) >> 0x1f" (pointer_expression "*(int *)(param_1 + 0x54)" * (cast_expression "(int *)(param_1 + 0x54)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) >> number_literal) ))) ^ (unary_expression "~uVar4" ~ identifier))) ;) (if_statement "if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }" if (parenthesized_expression "(1 < iVar1)" ( (binary_expression "1 < iVar1" number_literal < identifier) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);" (assignment_expression "*(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28)" (pointer_expression "*(undefined4 *)(param_1 + 0x3c)" * (cast_expression "(undefined4 *)(param_1 + 0x3c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(param_1 + 0x28)" * (cast_expression "(undefined4 *)(param_1 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) })) (expression_statement "in_t0 = FUN_0009a768(param_1);" (assignment_expression "in_t0 = FUN_0009a768(param_1)" identifier = (call_expression "FUN_0009a768(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x58);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x58)" identifier = (pointer_expression "*(int *)(param_1 + 0x58)" * (cast_expression "(int *)(param_1 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) ))))) ;) })) (expression_statement "iVar5 = *(int *)(param_1 + 0xc) + iVar3;" (assignment_expression "iVar5 = *(int *)(param_1 + 0xc) + iVar3" identifier = (binary_expression "*(int *)(param_1 + 0xc) + iVar3" (pointer_expression "*(int *)(param_1 + 0xc)" * (cast_expression "(int *)(param_1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) + identifier)) ;) (expression_statement "*(int *)(param_1 + 0x28) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x28) = iVar5" (pointer_expression "*(int *)(param_1 + 0x28)" * (cast_expression "(int *)(param_1 + 0x28)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x3c) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x3c) = iVar5" (pointer_expression "*(int *)(param_1 + 0x3c)" * (cast_expression "(int *)(param_1 + 0x3c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(int *)(param_1 + 0x40) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x40) = iVar5" (pointer_expression "*(int *)(param_1 + 0x40)" * (cast_expression "(int *)(param_1 + 0x40)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = identifier) ;) (if_statement "if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }" if (parenthesized_expression "(iVar1 == 1)" ( (binary_expression "iVar1 == 1" identifier == number_literal) )) (compound_statement "{\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }" { (expression_statement "*(undefined4 *)(param_1 + 0x48) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x48) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x48)" * (cast_expression "(undefined4 *)(param_1 + 0x48)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_1 + 0x44) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x44) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x44)" * (cast_expression "(undefined4 *)(param_1 + 0x44)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);" (call_expression "FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830)" identifier (argument_list "(param_1,*(byte *)(param_1 + 6) + 0x425a6830)" ( identifier , (binary_expression "*(byte *)(param_1 + 6) + 0x425a6830" (pointer_expression "*(byte *)(param_1 + 6)" * (cast_expression "(byte *)(param_1 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 6)" ( (binary_expression "param_1 + 6" identifier + number_literal) )))) + number_literal) ))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" identifier = (pointer_expression "*(int *)(param_1 + 0x34)" * (cast_expression "(int *)(param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x34)" ( (binary_expression "param_1 + 0x34" identifier + number_literal) ))))) ;) })) (if_statement "if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }" { (expression_statement "FUN_00099e98(param_1,0x31415926);" (call_expression "FUN_00099e98(param_1,0x31415926)" identifier (argument_list "(param_1,0x31415926)" ( identifier , number_literal ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" identifier = (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" else (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (do_statement "do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);" do (compound_statement "{\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      }" { (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" * identifier) = (cast_expression "(char)(uVar4 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" identifier = (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) }) while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) ;) }))) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x10;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x10" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = (binary_expression "iVar1 + 0x10" identifier + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = (binary_expression "0x5359 << (0x10U - iVar1 & 0x1f) | uVar4" (binary_expression "0x5359 << (0x10U - iVar1 & 0x1f)" number_literal << (parenthesized_expression "(0x10U - iVar1 & 0x1f)" ( (binary_expression "0x10U - iVar1 & 0x1f" (binary_expression "0x10U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));" (call_expression "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50))" identifier (argument_list "(param_1,*(undefined4 *)(param_1 + 0x50))" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x50)" * (cast_expression "(undefined4 *)(param_1 + 0x50)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" identifier = (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" else (compound_statement "{\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" { (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = *(undefined1 *)(param_1 + 0x44);" (assignment_expression "*puVar2 = *(undefined1 *)(param_1 + 0x44)" (pointer_expression "*puVar2" * identifier) = (pointer_expression "*(undefined1 *)(param_1 + 0x44)" * (cast_expression "(undefined1 *)(param_1 + 0x44)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" identifier = (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) }))) (expression_statement "iVar1 = iVar1 + 1;" (assignment_expression "iVar1 = iVar1 + 1" identifier = (binary_expression "iVar1 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (while_statement "while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) (compound_statement "{\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" { (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" * identifier) = (cast_expression "(char)(uVar4 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x44);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x44)" identifier = (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar4 = iVar3 << 8;" (assignment_expression "uVar4 = iVar3 << 8" identifier = (binary_expression "iVar3 << 8" identifier << number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) (if_statement "if (iVar1 < 8) break;" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = (char)((uint)iVar3 >> 0x10);" (assignment_expression "*puVar2 = (char)((uint)iVar3 >> 0x10)" (pointer_expression "*puVar2" * identifier) = (cast_expression "(char)((uint)iVar3 >> 0x10)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((uint)iVar3 >> 0x10)" ( (binary_expression "(uint)iVar3 >> 0x10" (cast_expression "(uint)iVar3" ( (type_descriptor "uint" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" identifier = (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x18;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x18" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = (binary_expression "iVar1 + 0x18" identifier + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = (binary_expression "in_t0 << (8U - iVar1 & 0x1f) | uVar4" (binary_expression "in_t0 << (8U - iVar1 & 0x1f)" identifier << (parenthesized_expression "(8U - iVar1 & 0x1f)" ( (binary_expression "8U - iVar1 & 0x1f" (binary_expression "8U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "FUN_00099f5c(param_1);" (call_expression "FUN_00099f5c(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "FUN_0009a850(param_1);" (call_expression "FUN_0009a850(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) })) (if_statement "if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }" if (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) (compound_statement "{\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }" { (expression_statement "FUN_00099e98(param_1,0x17724538);" (call_expression "FUN_00099e98(param_1,0x17724538)" identifier (argument_list "(param_1,0x17724538)" ( identifier , number_literal ))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" identifier = (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) ))))) ;) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" if (parenthesized_expression "(iVar1 < 8)" ( (binary_expression "iVar1 < 8" identifier < number_literal) )) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" else (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" { (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" identifier = (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) ))))) ;) (do_statement "do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);" do (compound_statement "{\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      }" { (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" identifier = (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) ))))) ;) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" * (cast_expression "(undefined1 **)(param_1 + 0x3c)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x3c)" ( (binary_expression "param_1 + 0x3c" identifier + number_literal) )))) = (binary_expression "puVar2 + 1" identifier + number_literal)) ;) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" * identifier) = (cast_expression "(char)(uVar4 >> 0x18)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar4 >> 0x18)" ( (binary_expression "uVar4 >> 0x18" identifier >> number_literal) )))) ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" identifier = (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" identifier = (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" * (cast_expression "(int *)(param_1 + 0x44)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) << number_literal)) ;) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = identifier) ;) }) while (parenthesized_expression "(7 < iVar1)" ( (binary_expression "7 < iVar1" number_literal < identifier) )) ;) }))) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x10;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x10" (pointer_expression "*(int *)(param_1 + 0x48)" * (cast_expression "(int *)(param_1 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = (binary_expression "iVar1 + 0x10" identifier + number_literal)) ;) (expression_statement "*(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" * (cast_expression "(uint *)(param_1 + 0x44)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x44)" ( (binary_expression "param_1 + 0x44" identifier + number_literal) )))) = (binary_expression "0x5090 << (0x10U - iVar1 & 0x1f) | uVar4" (binary_expression "0x5090 << (0x10U - iVar1 & 0x1f)" number_literal << (parenthesized_expression "(0x10U - iVar1 & 0x1f)" ( (binary_expression "0x10U - iVar1 & 0x1f" (binary_expression "0x10U - iVar1" number_literal - identifier) & number_literal) ))) | identifier)) ;) (expression_statement "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));" (call_expression "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54))" identifier (argument_list "(param_1,*(undefined4 *)(param_1 + 0x54))" ( identifier , (pointer_expression "*(undefined4 *)(param_1 + 0x54)" * (cast_expression "(undefined4 *)(param_1 + 0x54)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) )))) ))) ;) (expression_statement "FUN_00099e50();" (call_expression "FUN_00099e50()" identifier (argument_list "()" ( ))) ;) (return_statement "return;" return ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (unary_expression ~ IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT) - (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT) ))) ^ (unary_expression ~ IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }) while (parenthesized_expression ( (binary_expression LIT < IDENT) )) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))) | IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (while_statement while (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))) | IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }) while (parenthesized_expression ( (binary_expression LIT < IDENT) )) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))) | IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return ;) })) (return_statement return ;) })))
(function_definition "void FUN_0009b820(int param_1,int param_2)\n\n{\n  int iVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int in_t0;\n  \n  iVar3 = *(int *)(param_1 + 0x34);\n  iVar1 = *(int *)(param_1 + 0x58);\n  if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }\n  iVar5 = *(int *)(param_1 + 0xc) + iVar3;\n  *(int *)(param_1 + 0x28) = iVar5;\n  *(int *)(param_1 + 0x3c) = iVar5;\n  *(int *)(param_1 + 0x40) = iVar5;\n  if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }\n  if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }\n  if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0009b820(int param_1,int param_2)" (identifier "FUN_0009b820") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  int iVar1;\n  undefined1 *puVar2;\n  int iVar3;\n  uint uVar4;\n  int iVar5;\n  int in_t0;\n  \n  iVar3 = *(int *)(param_1 + 0x34);\n  iVar1 = *(int *)(param_1 + 0x58);\n  if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }\n  iVar5 = *(int *)(param_1 + 0xc) + iVar3;\n  *(int *)(param_1 + 0x28) = iVar5;\n  *(int *)(param_1 + 0x3c) = iVar5;\n  *(int *)(param_1 + 0x40) = iVar5;\n  if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }\n  if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }\n  if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "undefined1 *puVar2;" (type_identifier "undefined1") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int in_t0;" (primitive_type "int") (identifier "in_t0") (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x34)" (* "*") (cast_expression "(int *)(param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x58);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x58)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x58)" (* "*") (cast_expression "(int *)(param_1 + 0x58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (if_statement "if (0 < iVar3) {\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }" (if "if") (parenthesized_expression "(0 < iVar3)" (( "(") (binary_expression "0 < iVar3" (number_literal "0") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n    uVar4 = *(uint *)(param_1 + 0x50);\n    *(uint *)(param_1 + 0x50) = ~uVar4;\n    *(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;\n    if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }\n    in_t0 = FUN_0009a768(param_1);\n    iVar3 = *(int *)(param_1 + 0x34);\n    iVar1 = *(int *)(param_1 + 0x58);\n  }" ({ "{") (expression_statement "uVar4 = *(uint *)(param_1 + 0x50);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x50)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x50)" (* "*") (cast_expression "(uint *)(param_1 + 0x50)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")"))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x50) = ~uVar4;" (assignment_expression "*(uint *)(param_1 + 0x50) = ~uVar4" (pointer_expression "*(uint *)(param_1 + 0x50)" (* "*") (cast_expression "(uint *)(param_1 + 0x50)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (unary_expression "~uVar4" (~ "~") (identifier "uVar4"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;" (assignment_expression "*(uint *)(param_1 + 0x54) =\n         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4" (pointer_expression "*(uint *)(param_1 + 0x54)" (* "*") (cast_expression "(uint *)(param_1 + 0x54)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4" (binary_expression "*(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f)" (binary_expression "*(int *)(param_1 + 0x54) * 2" (pointer_expression "*(int *)(param_1 + 0x54)" (* "*") (cast_expression "(int *)(param_1 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (* "*") (number_literal "2")) (- "-") (parenthesized_expression "(*(int *)(param_1 + 0x54) >> 0x1f)" (( "(") (binary_expression "*(int *)(param_1 + 0x54) >> 0x1f" (pointer_expression "*(int *)(param_1 + 0x54)" (* "*") (cast_expression "(int *)(param_1 + 0x54)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) (>> ">>") (number_literal "0x1f")) () ")"))) (^ "^") (unary_expression "~uVar4" (~ "~") (identifier "uVar4")))) (; ";")) (if_statement "if (1 < iVar1) {\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }" (if "if") (parenthesized_expression "(1 < iVar1)" (( "(") (binary_expression "1 < iVar1" (number_literal "1") (< "<") (identifier "iVar1")) () ")")) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);\n    }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);" (assignment_expression "*(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28)" (pointer_expression "*(undefined4 *)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(param_1 + 0x28)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (} "}"))) (expression_statement "in_t0 = FUN_0009a768(param_1);" (assignment_expression "in_t0 = FUN_0009a768(param_1)" (identifier "in_t0") (= "=") (call_expression "FUN_0009a768(param_1)" (identifier "FUN_0009a768") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x34)" (* "*") (cast_expression "(int *)(param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x58);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x58)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x58)" (* "*") (cast_expression "(int *)(param_1 + 0x58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (} "}"))) (expression_statement "iVar5 = *(int *)(param_1 + 0xc) + iVar3;" (assignment_expression "iVar5 = *(int *)(param_1 + 0xc) + iVar3" (identifier "iVar5") (= "=") (binary_expression "*(int *)(param_1 + 0xc) + iVar3" (pointer_expression "*(int *)(param_1 + 0xc)" (* "*") (cast_expression "(int *)(param_1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (identifier "iVar3"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x28) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x28) = iVar5" (pointer_expression "*(int *)(param_1 + 0x28)" (* "*") (cast_expression "(int *)(param_1 + 0x28)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "iVar5")) (; ";")) (expression_statement "*(int *)(param_1 + 0x3c) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x3c) = iVar5" (pointer_expression "*(int *)(param_1 + 0x3c)" (* "*") (cast_expression "(int *)(param_1 + 0x3c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (= "=") (identifier "iVar5")) (; ";")) (expression_statement "*(int *)(param_1 + 0x40) = iVar5;" (assignment_expression "*(int *)(param_1 + 0x40) = iVar5" (pointer_expression "*(int *)(param_1 + 0x40)" (* "*") (cast_expression "(int *)(param_1 + 0x40)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "iVar5")) (; ";")) (if_statement "if (iVar1 == 1) {\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }" (if "if") (parenthesized_expression "(iVar1 == 1)" (( "(") (binary_expression "iVar1 == 1" (identifier "iVar1") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    *(undefined4 *)(param_1 + 0x48) = 0;\n    *(undefined4 *)(param_1 + 0x44) = 0;\n    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);\n    iVar3 = *(int *)(param_1 + 0x34);\n  }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0x48) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x48) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x48)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x48)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x44) = 0;" (assignment_expression "*(undefined4 *)(param_1 + 0x44) = 0" (pointer_expression "*(undefined4 *)(param_1 + 0x44)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x44)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);" (call_expression "FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830)" (identifier "FUN_00099e98") (argument_list "(param_1,*(byte *)(param_1 + 6) + 0x425a6830)" (( "(") (identifier "param_1") (, ",") (binary_expression "*(byte *)(param_1 + 6) + 0x425a6830" (pointer_expression "*(byte *)(param_1 + 6)" (* "*") (cast_expression "(byte *)(param_1 + 6)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 6)" (( "(") (binary_expression "param_1 + 6" (identifier "param_1") (+ "+") (number_literal "6")) () ")")))) (+ "+") (number_literal "0x425a6830")) () ")"))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x34);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x34)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x34)" (* "*") (cast_expression "(int *)(param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x34)" (( "(") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (0 < iVar3) {\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }" (if "if") (parenthesized_expression "(0 < iVar3)" (( "(") (binary_expression "0 < iVar3" (number_literal "0") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n    FUN_00099e98(param_1,0x31415926);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    iVar1 = iVar1 + 1;\n    *(int *)(param_1 + 0x48) = iVar1;\n    while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x18;\n    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;\n    FUN_00099f5c(param_1);\n    FUN_0009a850(param_1);\n  }" ({ "{") (expression_statement "FUN_00099e98(param_1,0x31415926);" (call_expression "FUN_00099e98(param_1,0x31415926)" (identifier "FUN_00099e98") (argument_list "(param_1,0x31415926)" (( "(") (identifier "param_1") (, ",") (number_literal "0x31415926") () ")"))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")"))))) (; ";")) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" (if "if") (parenthesized_expression "(iVar1 < 8)" (( "(") (binary_expression "iVar1 < 8" (identifier "iVar1") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" ({ "{") (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" (else "else") (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" ({ "{") (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) (; ";")) (do_statement "do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);" (do "do") (compound_statement "{\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      }" ({ "{") (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")"))))) (; ";")) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (cast_expression "(char)(uVar4 >> 0x18)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "(uVar4 >> 0x18)" (( "(") (binary_expression "uVar4 >> 0x18" (identifier "uVar4") (>> ">>") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" (identifier "iVar1") (= "=") (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (+ "+") (number_literal "-8"))) (; ";")) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" (identifier "uVar4") (= "=") (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (<< "<<") (number_literal "8"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(7 < iVar1)" (( "(") (binary_expression "7 < iVar1" (number_literal "7") (< "<") (identifier "iVar1")) () ")")) (; ";")) (} "}")))) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x10;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x10" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (binary_expression "iVar1 + 0x10" (identifier "iVar1") (+ "+") (number_literal "0x10"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (binary_expression "0x5359 << (0x10U - iVar1 & 0x1f) | uVar4" (binary_expression "0x5359 << (0x10U - iVar1 & 0x1f)" (number_literal "0x5359") (<< "<<") (parenthesized_expression "(0x10U - iVar1 & 0x1f)" (( "(") (binary_expression "0x10U - iVar1 & 0x1f" (binary_expression "0x10U - iVar1" (number_literal "0x10U") (- "-") (identifier "iVar1")) (& "&") (number_literal "0x1f")) () ")"))) (| "|") (identifier "uVar4"))) (; ";")) (expression_statement "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));" (call_expression "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50))" (identifier "FUN_00099e98") (argument_list "(param_1,*(undefined4 *)(param_1 + 0x50))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0x50)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x50)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")")))) () ")"))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")"))))) (; ";")) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" (if "if") (parenthesized_expression "(iVar1 < 8)" (( "(") (binary_expression "iVar1 < 8" (identifier "iVar1") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" ({ "{") (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" (else "else") (compound_statement "{\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = *(undefined1 *)(param_1 + 0x44);\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" ({ "{") (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")"))))) (; ";")) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar2 = *(undefined1 *)(param_1 + 0x44);" (assignment_expression "*puVar2 = *(undefined1 *)(param_1 + 0x44)" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (pointer_expression "*(undefined1 *)(param_1 + 0x44)" (* "*") (cast_expression "(undefined1 *)(param_1 + 0x44)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" (identifier "uVar4") (= "=") (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (<< "<<") (number_literal "8"))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" (identifier "iVar1") (= "=") (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (+ "+") (number_literal "-8"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (} "}")))) (expression_statement "iVar1 = iVar1 + 1;" (assignment_expression "iVar1 = iVar1 + 1" (identifier "iVar1") (= "=") (binary_expression "iVar1 + 1" (identifier "iVar1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "iVar1")) (; ";")) (while_statement "while (7 < iVar1) {\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" (while "while") (parenthesized_expression "(7 < iVar1)" (( "(") (binary_expression "7 < iVar1" (number_literal "7") (< "<") (identifier "iVar1")) () ")")) (compound_statement "{\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)(uVar4 >> 0x18);\n      iVar3 = *(int *)(param_1 + 0x44);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = iVar3 << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n      if (iVar1 < 8) break;\n      puVar2 = *(undefined1 **)(param_1 + 0x3c);\n      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n      *puVar2 = (char)((uint)iVar3 >> 0x10);\n      iVar1 = *(int *)(param_1 + 0x48) + -8;\n      uVar4 = *(int *)(param_1 + 0x44) << 8;\n      *(int *)(param_1 + 0x48) = iVar1;\n      *(uint *)(param_1 + 0x44) = uVar4;\n    }" ({ "{") (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")"))))) (; ";")) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (cast_expression "(char)(uVar4 >> 0x18)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "(uVar4 >> 0x18)" (( "(") (binary_expression "uVar4 >> 0x18" (identifier "uVar4") (>> ">>") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x44);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x44)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" (identifier "iVar1") (= "=") (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (+ "+") (number_literal "-8"))) (; ";")) (expression_statement "uVar4 = iVar3 << 8;" (assignment_expression "uVar4 = iVar3 << 8" (identifier "uVar4") (= "=") (binary_expression "iVar3 << 8" (identifier "iVar3") (<< "<<") (number_literal "8"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (iVar1 < 8) break;" (if "if") (parenthesized_expression "(iVar1 < 8)" (( "(") (binary_expression "iVar1 < 8" (identifier "iVar1") (< "<") (number_literal "8")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")"))))) (; ";")) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar2 = (char)((uint)iVar3 >> 0x10);" (assignment_expression "*puVar2 = (char)((uint)iVar3 >> 0x10)" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (cast_expression "(char)((uint)iVar3 >> 0x10)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((uint)iVar3 >> 0x10)" (( "(") (binary_expression "(uint)iVar3 >> 0x10" (cast_expression "(uint)iVar3" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "iVar3")) (>> ">>") (number_literal "0x10")) () ")")))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" (identifier "iVar1") (= "=") (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (+ "+") (number_literal "-8"))) (; ";")) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" (identifier "uVar4") (= "=") (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (<< "<<") (number_literal "8"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (} "}"))) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x18;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x18" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (binary_expression "iVar1 + 0x18" (identifier "iVar1") (+ "+") (number_literal "0x18"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (binary_expression "in_t0 << (8U - iVar1 & 0x1f) | uVar4" (binary_expression "in_t0 << (8U - iVar1 & 0x1f)" (identifier "in_t0") (<< "<<") (parenthesized_expression "(8U - iVar1 & 0x1f)" (( "(") (binary_expression "8U - iVar1 & 0x1f" (binary_expression "8U - iVar1" (number_literal "8U") (- "-") (identifier "iVar1")) (& "&") (number_literal "0x1f")) () ")"))) (| "|") (identifier "uVar4"))) (; ";")) (expression_statement "FUN_00099f5c(param_1);" (call_expression "FUN_00099f5c(param_1)" (identifier "FUN_00099f5c") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "FUN_0009a850(param_1);" (call_expression "FUN_0009a850(param_1)" (identifier "FUN_0009a850") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (} "}"))) (if_statement "if (param_2 != 0) {\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }" (if "if") (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00099e98(param_1,0x17724538);\n    iVar1 = *(int *)(param_1 + 0x48);\n    if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }\n    *(int *)(param_1 + 0x48) = iVar1 + 0x10;\n    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;\n    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));\n    FUN_00099e50();\n    return;\n  }" ({ "{") (expression_statement "FUN_00099e98(param_1,0x17724538);" (call_expression "FUN_00099e98(param_1,0x17724538)" (identifier "FUN_00099e98") (argument_list "(param_1,0x17724538)" (( "(") (identifier "param_1") (, ",") (number_literal "0x17724538") () ")"))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x48);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")"))))) (; ";")) (if_statement "if (iVar1 < 8) {\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }\n    else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" (if "if") (parenthesized_expression "(iVar1 < 8)" (( "(") (binary_expression "iVar1 < 8" (identifier "iVar1") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n    }" ({ "{") (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" (else "else") (compound_statement "{\n      uVar4 = *(uint *)(param_1 + 0x44);\n      do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);\n    }" ({ "{") (expression_statement "uVar4 = *(uint *)(param_1 + 0x44);" (assignment_expression "uVar4 = *(uint *)(param_1 + 0x44)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")"))))) (; ";")) (do_statement "do {\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      } while (7 < iVar1);" (do "do") (compound_statement "{\n        puVar2 = *(undefined1 **)(param_1 + 0x3c);\n        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;\n        *puVar2 = (char)(uVar4 >> 0x18);\n        iVar1 = *(int *)(param_1 + 0x48) + -8;\n        uVar4 = *(int *)(param_1 + 0x44) << 8;\n        *(int *)(param_1 + 0x48) = iVar1;\n        *(uint *)(param_1 + 0x44) = uVar4;\n      }" ({ "{") (expression_statement "puVar2 = *(undefined1 **)(param_1 + 0x3c);" (assignment_expression "puVar2 = *(undefined1 **)(param_1 + 0x3c)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")"))))) (; ";")) (expression_statement "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;" (assignment_expression "*(undefined1 **)(param_1 + 0x3c) = puVar2 + 1" (pointer_expression "*(undefined1 **)(param_1 + 0x3c)" (* "*") (cast_expression "(undefined1 **)(param_1 + 0x3c)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x3c)" (( "(") (binary_expression "param_1 + 0x3c" (identifier "param_1") (+ "+") (number_literal "0x3c")) () ")")))) (= "=") (binary_expression "puVar2 + 1" (identifier "puVar2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar2 = (char)(uVar4 >> 0x18);" (assignment_expression "*puVar2 = (char)(uVar4 >> 0x18)" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (cast_expression "(char)(uVar4 >> 0x18)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "(uVar4 >> 0x18)" (( "(") (binary_expression "uVar4 >> 0x18" (identifier "uVar4") (>> ">>") (number_literal "0x18")) () ")")))) (; ";")) (expression_statement "iVar1 = *(int *)(param_1 + 0x48) + -8;" (assignment_expression "iVar1 = *(int *)(param_1 + 0x48) + -8" (identifier "iVar1") (= "=") (binary_expression "*(int *)(param_1 + 0x48) + -8" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (+ "+") (number_literal "-8"))) (; ";")) (expression_statement "uVar4 = *(int *)(param_1 + 0x44) << 8;" (assignment_expression "uVar4 = *(int *)(param_1 + 0x44) << 8" (identifier "uVar4") (= "=") (binary_expression "*(int *)(param_1 + 0x44) << 8" (pointer_expression "*(int *)(param_1 + 0x44)" (* "*") (cast_expression "(int *)(param_1 + 0x44)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (<< "<<") (number_literal "8"))) (; ";")) (expression_statement "*(int *)(param_1 + 0x48) = iVar1;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "iVar1")) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(7 < iVar1)" (( "(") (binary_expression "7 < iVar1" (number_literal "7") (< "<") (identifier "iVar1")) () ")")) (; ";")) (} "}")))) (expression_statement "*(int *)(param_1 + 0x48) = iVar1 + 0x10;" (assignment_expression "*(int *)(param_1 + 0x48) = iVar1 + 0x10" (pointer_expression "*(int *)(param_1 + 0x48)" (* "*") (cast_expression "(int *)(param_1 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (binary_expression "iVar1 + 0x10" (identifier "iVar1") (+ "+") (number_literal "0x10"))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;" (assignment_expression "*(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4" (pointer_expression "*(uint *)(param_1 + 0x44)" (* "*") (cast_expression "(uint *)(param_1 + 0x44)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x44)" (( "(") (binary_expression "param_1 + 0x44" (identifier "param_1") (+ "+") (number_literal "0x44")) () ")")))) (= "=") (binary_expression "0x5090 << (0x10U - iVar1 & 0x1f) | uVar4" (binary_expression "0x5090 << (0x10U - iVar1 & 0x1f)" (number_literal "0x5090") (<< "<<") (parenthesized_expression "(0x10U - iVar1 & 0x1f)" (( "(") (binary_expression "0x10U - iVar1 & 0x1f" (binary_expression "0x10U - iVar1" (number_literal "0x10U") (- "-") (identifier "iVar1")) (& "&") (number_literal "0x1f")) () ")"))) (| "|") (identifier "uVar4"))) (; ";")) (expression_statement "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));" (call_expression "FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54))" (identifier "FUN_00099e98") (argument_list "(param_1,*(undefined4 *)(param_1 + 0x54))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(param_1 + 0x54)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x54)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")")))) () ")"))) (; ";")) (expression_statement "FUN_00099e50();" (call_expression "FUN_00099e50()" (identifier "FUN_00099e50") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *s,int var_11)

{
  int var_2;
  int var_1;
  uint32_t var_7;
  type_2 var_6;
  uint8_t *var_5;
  int32_t var_8;
  
  var_1 = s->nblock;
  var_2 = s->blockNo;
  if (0 < var_1) {
    var_6 = s->blockCRC;
    s->blockCRC = ~var_6;
    s->combinedCRC = s->combinedCRC * 2 - ((int)s->combinedCRC >> 0x1f) ^ ~var_6;
    if (1 < var_2) {
      s->posZ = s->zbits;
    }
    var_8 = var_3(s);
    var_1 = s->nblock;
    var_2 = s->blockNo;
  }
  var_5 = (uint8_t *)((int)s->arr2 + var_1);
  s->zbits = var_5;
  s->posZ = var_5;
  s->state_out_pos = var_5;
  if (var_2 == 1) {
    s->bsLive = 0;
    s->bsBuff = 0;
    var_4(s,s->blockSize100k + 0x425a6830);
    var_1 = s->nblock;
  }
  if (0 < var_1) {
    var_4(s,0x31415926);
    var_2 = s->bsLive;
    if (var_2 < 8) {
      var_6 = s->bsBuff;
    }
    else {
      var_6 = s->bsBuff;
      do {
        var_5 = s->posZ;
        s->posZ = var_5 + 1;
        *var_5 = (uint8_t)(var_6 >> 0x18);
        var_2 = s->bsLive + -8;
        var_6 = s->bsBuff << 8;
        s->bsLive = var_2;
        s->bsBuff = var_6;
      } while (7 < var_2);
    }
    s->bsLive = var_2 + 0x10;
    s->bsBuff = 0x5359 << (0x10U - var_2 & 0x1f) | var_6;
    var_4(s,s->blockCRC);
    var_2 = s->bsLive;
    if (var_2 < 8) {
      var_6 = s->bsBuff;
    }
    else {
      var_5 = s->posZ;
      s->posZ = var_5 + 1;
      *var_5 = *(uint8_t *)&s->bsBuff;
      var_6 = s->bsBuff << 8;
      var_2 = s->bsLive + -8;
      s->bsBuff = var_6;
    }
    var_2 = var_2 + 1;
    s->bsLive = var_2;
    while (7 < var_2) {
      var_5 = s->posZ;
      s->posZ = var_5 + 1;
      *var_5 = (uint8_t)(var_6 >> 0x18);
      var_7 = s->bsBuff;
      var_2 = s->bsLive + -8;
      var_6 = var_7 << 8;
      s->bsLive = var_2;
      s->bsBuff = var_6;
      if (var_2 < 8) break;
      var_5 = s->posZ;
      s->posZ = var_5 + 1;
      *var_5 = (uint8_t)(var_7 >> 0x10);
      var_2 = s->bsLive + -8;
      var_6 = s->bsBuff << 8;
      s->bsLive = var_2;
      s->bsBuff = var_6;
    }
    s->bsLive = var_2 + 0x18;
    s->bsBuff = var_8 << (8U - var_2 & 0x1f) | var_6;
    var_9(s);
    var_10(s);
  }
  if (var_11 != 0) {
    var_4(s,0x17724538);
    var_2 = s->bsLive;
    if (var_2 < 8) {
      var_6 = s->bsBuff;
    }
    else {
      var_6 = s->bsBuff;
      do {
        var_5 = s->posZ;
        s->posZ = var_5 + 1;
        *var_5 = (uint8_t)(var_6 >> 0x18);
        var_2 = s->bsLive + -8;
        var_6 = s->bsBuff << 8;
        s->bsLive = var_2;
        s->bsBuff = var_6;
      } while (7 < var_2);
    }
    s->bsLive = var_2 + 0x10;
    s->bsBuff = 0x5090 << (0x10U - var_2 & 0x1f) | var_6;
    var_4(s,s->combinedCRC);
    var_12(s);
    return;
  }
  return;
}


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

void MASKED(int param_1,int param_2)

{
  int iVar1;
  undefined1 *puVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  int in_t0;
  
  iVar3 = *(int *)(param_1 + 0x34);
  iVar1 = *(int *)(param_1 + 0x58);
  if (0 < iVar3) {
    uVar4 = *(uint *)(param_1 + 0x50);
    *(uint *)(param_1 + 0x50) = ~uVar4;
    *(uint *)(param_1 + 0x54) =
         *(int *)(param_1 + 0x54) * 2 - (*(int *)(param_1 + 0x54) >> 0x1f) ^ ~uVar4;
    if (1 < iVar1) {
      *(undefined4 *)(param_1 + 0x3c) = *(undefined4 *)(param_1 + 0x28);
    }
    in_t0 = FUN_0009a768(param_1);
    iVar3 = *(int *)(param_1 + 0x34);
    iVar1 = *(int *)(param_1 + 0x58);
  }
  iVar5 = *(int *)(param_1 + 0xc) + iVar3;
  *(int *)(param_1 + 0x28) = iVar5;
  *(int *)(param_1 + 0x3c) = iVar5;
  *(int *)(param_1 + 0x40) = iVar5;
  if (iVar1 == 1) {
    *(undefined4 *)(param_1 + 0x48) = 0;
    *(undefined4 *)(param_1 + 0x44) = 0;
    FUN_00099e98(param_1,*(byte *)(param_1 + 6) + 0x425a6830);
    iVar3 = *(int *)(param_1 + 0x34);
  }
  if (0 < iVar3) {
    FUN_00099e98(param_1,0x31415926);
    iVar1 = *(int *)(param_1 + 0x48);
    if (iVar1 < 8) {
      uVar4 = *(uint *)(param_1 + 0x44);
    }
    else {
      uVar4 = *(uint *)(param_1 + 0x44);
      do {
        puVar2 = *(undefined1 **)(param_1 + 0x3c);
        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
        *puVar2 = (char)(uVar4 >> 0x18);
        iVar1 = *(int *)(param_1 + 0x48) + -8;
        uVar4 = *(int *)(param_1 + 0x44) << 8;
        *(int *)(param_1 + 0x48) = iVar1;
        *(uint *)(param_1 + 0x44) = uVar4;
      } while (7 < iVar1);
    }
    *(int *)(param_1 + 0x48) = iVar1 + 0x10;
    *(uint *)(param_1 + 0x44) = 0x5359 << (0x10U - iVar1 & 0x1f) | uVar4;
    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x50));
    iVar1 = *(int *)(param_1 + 0x48);
    if (iVar1 < 8) {
      uVar4 = *(uint *)(param_1 + 0x44);
    }
    else {
      puVar2 = *(undefined1 **)(param_1 + 0x3c);
      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
      *puVar2 = *(undefined1 *)(param_1 + 0x44);
      uVar4 = *(int *)(param_1 + 0x44) << 8;
      iVar1 = *(int *)(param_1 + 0x48) + -8;
      *(uint *)(param_1 + 0x44) = uVar4;
    }
    iVar1 = iVar1 + 1;
    *(int *)(param_1 + 0x48) = iVar1;
    while (7 < iVar1) {
      puVar2 = *(undefined1 **)(param_1 + 0x3c);
      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
      *puVar2 = (char)(uVar4 >> 0x18);
      iVar3 = *(int *)(param_1 + 0x44);
      iVar1 = *(int *)(param_1 + 0x48) + -8;
      uVar4 = iVar3 << 8;
      *(int *)(param_1 + 0x48) = iVar1;
      *(uint *)(param_1 + 0x44) = uVar4;
      if (iVar1 < 8) break;
      puVar2 = *(undefined1 **)(param_1 + 0x3c);
      *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
      *puVar2 = (char)((uint)iVar3 >> 0x10);
      iVar1 = *(int *)(param_1 + 0x48) + -8;
      uVar4 = *(int *)(param_1 + 0x44) << 8;
      *(int *)(param_1 + 0x48) = iVar1;
      *(uint *)(param_1 + 0x44) = uVar4;
    }
    *(int *)(param_1 + 0x48) = iVar1 + 0x18;
    *(uint *)(param_1 + 0x44) = in_t0 << (8U - iVar1 & 0x1f) | uVar4;
    FUN_00099f5c(param_1);
    FUN_0009a850(param_1);
  }
  if (param_2 != 0) {
    FUN_00099e98(param_1,0x17724538);
    iVar1 = *(int *)(param_1 + 0x48);
    if (iVar1 < 8) {
      uVar4 = *(uint *)(param_1 + 0x44);
    }
    else {
      uVar4 = *(uint *)(param_1 + 0x44);
      do {
        puVar2 = *(undefined1 **)(param_1 + 0x3c);
        *(undefined1 **)(param_1 + 0x3c) = puVar2 + 1;
        *puVar2 = (char)(uVar4 >> 0x18);
        iVar1 = *(int *)(param_1 + 0x48) + -8;
        uVar4 = *(int *)(param_1 + 0x44) << 8;
        *(int *)(param_1 + 0x48) = iVar1;
        *(uint *)(param_1 + 0x44) = uVar4;
      } while (7 < iVar1);
    }
    *(int *)(param_1 + 0x48) = iVar1 + 0x10;
    *(uint *)(param_1 + 0x44) = 0x5090 << (0x10U - iVar1 & 0x1f) | uVar4;
    FUN_00099e98(param_1,*(undefined4 *)(param_1 + 0x54));
    FUN_00099e50();
    return;
  }
  return;
}

