
void compress_block(deflate_state *s,ct_data *ltree,ct_data *dtree)

{
  byte bVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  uint uVar5;
  ct_data *pcVar6;
  ushort uVar7;
  ushort uVar8;
  uint uVar9;
  uint uVar10;
  ushort uVar12;
  int iVar11;
  uint uVar13;
  ulg uVar14;
  uint uVar15;
  
  puVar4 = PTR__length_code_00037030;
  puVar3 = PTR__dist_code_0003702c;
  puVar2 = PTR_LAB_0003701c;
  uVar5 = 0;
  if (s->last_lit != 0) {
    do {
      uVar8 = s->d_buf[uVar5];
      uVar9 = uVar5 + 1;
      uVar5 = (uint)s->l_buf[uVar5];
      if (uVar8 == 0) {
        pcVar6 = ltree + uVar5;
        uVar10 = (uint)(pcVar6->dl).dad;
        uVar5 = s->bi_valid;
        if ((int)(0x10 - uVar10) < (int)uVar5) {
          uVar8 = (pcVar6->fc).freq;
          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;
          s->bi_buf = uVar7;
          uVar14 = s->pending;
          s->pending = uVar14 + 1;
          s->pending_buf[uVar14] = (Bytef)uVar7;
          uVar14 = s->pending;
          s->pending = uVar14 + 1;
          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);
          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));
          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;
        }
        else {
          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;
          s->bi_valid = uVar5 + uVar10;
        }
      }
      else {
        uVar15 = (uint)(byte)puVar4[uVar5];
        pcVar6 = ltree + uVar15 + 0x101;
        uVar13 = (uint)(pcVar6->dl).dad;
        uVar10 = s->bi_valid;
        if ((int)(0x10 - uVar13) < (int)uVar10) {
          uVar7 = (pcVar6->fc).freq;
          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;
          s->bi_buf = uVar12;
          uVar14 = s->pending;
          s->pending = uVar14 + 1;
          s->pending_buf[uVar14] = (Bytef)uVar12;
          uVar14 = s->pending;
          s->pending = uVar14 + 1;
          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);
          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));
          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;
        }
        else {
          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;
          s->bi_valid = uVar10 + uVar13;
        }
        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);
        if (iVar11 != 0) {
          uVar10 = s->bi_valid;
          if (0x10 - iVar11 < (int)uVar10) {
            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;
            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;
            s->bi_buf = uVar7;
            uVar14 = s->pending;
            s->pending = uVar14 + 1;
            s->pending_buf[uVar14] = (Bytef)uVar7;
            uVar14 = s->pending;
            s->pending = uVar14 + 1;
            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);
            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));
            s->bi_valid = iVar11 + -0x10 + s->bi_valid;
          }
          else {
            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<
                                (uVar10 & 0x1f)) | s->bi_buf;
            s->bi_valid = uVar10 + iVar11;
          }
        }
        uVar5 = uVar8 - 1;
        if (uVar5 < 0x100) {
          bVar1 = puVar3[uVar5];
        }
        else {
          bVar1 = puVar3[(uVar5 >> 7) + 0x100];
        }
        uVar15 = (uint)bVar1;
        pcVar6 = dtree + uVar15;
        uVar13 = (uint)(pcVar6->dl).dad;
        uVar10 = s->bi_valid;
        if ((int)(0x10 - uVar13) < (int)uVar10) {
          uVar8 = (pcVar6->fc).freq;
          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;
          s->bi_buf = uVar7;
          uVar14 = s->pending;
          s->pending = uVar14 + 1;
          s->pending_buf[uVar14] = (Bytef)uVar7;
          uVar14 = s->pending;
          s->pending = uVar14 + 1;
          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);
          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));
          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;
        }
        else {
          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;
          s->bi_valid = uVar10 + uVar13;
        }
        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);
        if (iVar11 != 0) {
          uVar10 = s->bi_valid;
          if (0x10 - iVar11 < (int)uVar10) {
            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;
            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;
            s->bi_buf = uVar8;
            uVar14 = s->pending;
            s->pending = uVar14 + 1;
            s->pending_buf[uVar14] = (Bytef)uVar8;
            uVar14 = s->pending;
            s->pending = uVar14 + 1;
            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);
            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));
            s->bi_valid = iVar11 + -0x10 + s->bi_valid;
          }
          else {
            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<
                                (uVar10 & 0x1f)) | s->bi_buf;
            s->bi_valid = uVar10 + iVar11;
          }
        }
      }
      uVar5 = uVar9;
    } while (uVar9 < s->last_lit);
  }
  uVar9 = (uint)ltree[0x100].dl.dad;
  uVar5 = s->bi_valid;
  if ((int)(0x10 - uVar9) < (int)uVar5) {
    uVar8 = ltree[0x100].fc.freq;
    uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;
    s->bi_buf = uVar7;
    uVar14 = s->pending;
    s->pending = uVar14 + 1;
    s->pending_buf[uVar14] = (Bytef)uVar7;
    uVar14 = s->pending;
    s->pending = uVar14 + 1;
    s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);
    s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));
    s->bi_valid = (uVar9 - 0x10) + s->bi_valid;
  }
  else {
    s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf;
    s->bi_valid = uVar5 + uVar9;
  }
  return;
}



void FUN_0001c45c(int param_1,int param_2,int param_3)

{
  byte bVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  uint uVar5;
  ushort *puVar6;
  ushort uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  ushort uVar13;
  int iVar14;
  uint uVar15;
  
  puVar4 = PTR_DAT_00037030;
  puVar3 = PTR_DAT_0003702c;
  puVar2 = PTR_LAB_0003701c;
  uVar5 = 0;
  if (*(int *)(param_1 + 0x16a0) != 0) {
    do {
      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);
      uVar9 = uVar5 + 1;
      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);
      if (uVar8 == 0) {
        puVar6 = (ushort *)(param_2 + uVar5 * 4);
        uVar8 = (uint)puVar6[1];
        uVar5 = *(uint *)(param_1 + 0x16bc);
        if ((int)(0x10 - uVar8) < (int)uVar5) {
          uVar13 = *puVar6;
          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(ushort *)(param_1 + 0x16b8) = uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) =
               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
          *(short *)(param_1 + 0x16b8) =
               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);
        }
        else {
          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;
        }
      }
      else {
        uVar15 = (uint)(byte)puVar4[uVar5];
        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);
        uVar11 = (uint)puVar6[1];
        uVar10 = *(uint *)(param_1 + 0x16bc);
        if ((int)(0x10 - uVar11) < (int)uVar10) {
          uVar13 = *puVar6;
          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(ushort *)(param_1 + 0x16b8) = uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) =
               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
          *(short *)(param_1 + 0x16b8) =
               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);
        }
        else {
          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)
          ;
          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;
        }
        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);
        if (iVar14 != 0) {
          uVar10 = *(uint *)(param_1 + 0x16bc);
          if (0x10 - iVar14 < (int)uVar10) {
            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;
            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);
            *(ushort *)(param_1 + 0x16b8) = uVar13;
            iVar12 = *(int *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar12 + 1;
            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;
            iVar12 = *(int *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar12 + 1;
            *(char *)(*(int *)(param_1 + 8) + iVar12) =
                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
            *(short *)(param_1 + 0x16b8) =
                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);
          }
          else {
            *(ushort *)(param_1 + 0x16b8) =
                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<
                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);
            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;
          }
        }
        uVar8 = uVar8 - 1;
        if (uVar8 < 0x100) {
          bVar1 = puVar3[uVar8];
        }
        else {
          bVar1 = puVar3[(uVar8 >> 7) + 0x100];
        }
        uVar11 = (uint)bVar1;
        puVar6 = (ushort *)(param_3 + uVar11 * 4);
        uVar10 = (uint)puVar6[1];
        uVar5 = *(uint *)(param_1 + 0x16bc);
        if ((int)(0x10 - uVar10) < (int)uVar5) {
          uVar13 = *puVar6;
          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(ushort *)(param_1 + 0x16b8) = uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) =
               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
          *(short *)(param_1 + 0x16b8) =
               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);
        }
        else {
          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;
        }
        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);
        if (iVar14 != 0) {
          uVar5 = *(uint *)(param_1 + 0x16bc);
          if (0x10 - iVar14 < (int)uVar5) {
            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;
            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);
            *(ushort *)(param_1 + 0x16b8) = uVar13;
            iVar12 = *(int *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar12 + 1;
            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;
            iVar12 = *(int *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar12 + 1;
            *(char *)(*(int *)(param_1 + 8) + iVar12) =
                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
            *(short *)(param_1 + 0x16b8) =
                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);
          }
          else {
            *(ushort *)(param_1 + 0x16b8) =
                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<
                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);
            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;
          }
        }
      }
      uVar5 = uVar9;
    } while (uVar9 < *(uint *)(param_1 + 0x16a0));
  }
  uVar8 = (uint)*(ushort *)(param_2 + 0x402);
  uVar5 = *(uint *)(param_1 + 0x16bc);
  if ((int)(0x10 - uVar8) < (int)uVar5) {
    uVar13 = *(ushort *)(param_2 + 0x400);
    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
    *(ushort *)(param_1 + 0x16b8) = uVar7;
    iVar14 = *(int *)(param_1 + 0x14);
    *(int *)(param_1 + 0x14) = iVar14 + 1;
    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;
    iVar14 = *(int *)(param_1 + 0x14);
    *(int *)(param_1 + 0x14) = iVar14 + 1;
    *(char *)(*(int *)(param_1 + 8) + iVar14) =
         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
    *(short *)(param_1 + 0x16b8) =
         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);
  }
  else {
    *(ushort *)(param_1 + 0x16b8) =
         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;
  }
  return;
}


lui gp,0x2
addiu gp,gp,0x2b94
addu gp,gp,t9
addiu sp,sp,-0x10
sw s3,0xc(sp)
sw s2,0x8(sp)
sw s1,0x4(sp)
sw s0,0x0(sp)
lw v0,0x16a0(a0)
beq v0,zero,0x0001c8a4
_or v0,zero,zero
lw t5,-0x7fc0(gp)
li a3,0x10
lw t1,-0x7fd4(gp)
addiu t1,t1,0x5c2c
lw t0,-0x7fd4(gp)
addiu t0,t0,0x5bb4
lw t3,-0x7fd4(gp)
addiu t3,t3,0x5270
lw t4,-0x7fc4(gp)
lw t2,-0x7fd4(gp)
b 0x0001c4e4
_addiu t2,t2,0x52e8
lhu v0,0x0(v0)
sllv v0,v0,v1
lhu t8,0x16b8(a0)
or v0,v0,t8
sh v0,0x16b8(a0)
addu v1,v1,t7
sw v1,0x16bc(a0)
lw v1,0x16a0(a0)
sltu v1,t6,v1
beq v1,zero,0x0001c8a4
_or v0,t6,zero
lw v1,0x16a4(a0)
sll t6,v0,0x1
addu v1,v1,t6
lhu v1,0x0(v1)
addiu t6,v0,0x1
lw t7,0x1698(a0)
addu v0,t7,v0
bne v1,zero,0x0001c598
_lbu v0,0x0(v0)
sll v0,v0,0x2
addu v0,a1,v0
lhu t7,0x2(v0)
lw v1,0x16bc(a0)
subu t8,a3,t7
slt t8,t8,v1
beq t8,zero,0x0001c4b8
_nop
lhu t8,0x0(v0)
sllv v0,t8,v1
lhu v1,0x16b8(a0)
or v0,v0,v1
seh v0,v0
sh v0,0x16b8(a0)
lw v1,0x8(a0)
lw t9,0x14(a0)
addiu s0,t9,0x1
sw s0,0x14(a0)
addu v1,v1,t9
sb v0,0x0(v1)
lhu v1,0x16b8(a0)
srl v1,v1,0x8
lw v0,0x8(a0)
lw t9,0x14(a0)
addiu s0,t9,0x1
sw s0,0x14(a0)
addu v0,v0,t9
sb v1,0x0(v0)
lw v0,0x16bc(a0)
subu v1,a3,v0
srav t8,t8,v1
sh t8,0x16b8(a0)
addiu v1,t7,-0x10
addu v1,v1,v0
b 0x0001c4d4
_sw v1,0x16bc(a0)
addu t7,t5,v0
lbu t9,0x0(t7)
addiu t8,t9,0x101
sll t8,t8,0x2
addu t8,a1,t8
lhu s0,0x2(t8)
lw t7,0x16bc(a0)
subu s1,a3,s0
slt s1,s1,t7
beq s1,zero,0x0001c818
_nop
lhu t8,0x0(t8)
sllv t7,t8,t7
lhu s1,0x16b8(a0)
or t7,t7,s1
seh t7,t7
sh t7,0x16b8(a0)
lw s1,0x8(a0)
lw s2,0x14(a0)
addiu s3,s2,0x1
sw s3,0x14(a0)
addu s1,s1,s2
sb t7,0x0(s1)
lhu s1,0x16b8(a0)
srl s1,s1,0x8
lw t7,0x8(a0)
lw s2,0x14(a0)
addiu s3,s2,0x1
sw s3,0x14(a0)
addu t7,t7,s2
sb s1,0x0(t7)
lw s1,0x16bc(a0)
subu t7,a3,s1
srav t8,t8,t7
sh t8,0x16b8(a0)
addiu t7,s0,-0x10
addu t7,t7,s1
sw t7,0x16bc(a0)
sll t7,t9,0x2
addu t7,t7,t1
lw t7,0x0(t7)
beq t7,zero,0x0001c6d0
_sll t9,t9,0x2
addu t9,t9,t2
lw t8,0x0(t9)
subu v0,v0,t8
lw t8,0x16bc(a0)
subu t9,a3,t7
slt t9,t9,t8
beq t9,zero,0x0001c838
_nop
andi v0,v0,0xffff
sllv t8,v0,t8
lhu t9,0x16b8(a0)
or t8,t8,t9
seh t8,t8
sh t8,0x16b8(a0)
lw t9,0x8(a0)
lw s0,0x14(a0)
addiu s1,s0,0x1
sw s1,0x14(a0)
addu t9,t9,s0
sb t8,0x0(t9)
lhu t9,0x16b8(a0)
srl t9,t9,0x8
lw t8,0x8(a0)
lw s0,0x14(a0)
addiu s1,s0,0x1
sw s1,0x14(a0)
addu t8,t8,s0
sb t9,0x0(t8)
lw t8,0x16bc(a0)
subu t9,a3,t8
srav v0,v0,t9
sh v0,0x16b8(a0)
addiu t7,t7,-0x10
addu t7,t7,t8
sw t7,0x16bc(a0)
addiu v1,v1,-0x1
sltiu v0,v1,0x100
beq v0,zero,0x0001c858
_srl v0,v1,0x7
addu v0,t4,v1
lbu t9,0x0(v0)
sll t8,t9,0x2
addu t8,a2,t8
lhu t7,0x2(t8)
lw v0,0x16bc(a0)
subu s0,a3,t7
slt s0,s0,v0
beq s0,zero,0x0001c864
_nop
lhu t8,0x0(t8)
sllv v0,t8,v0
lhu s0,0x16b8(a0)
or v0,v0,s0
seh v0,v0
sh v0,0x16b8(a0)
lw s0,0x8(a0)
lw s1,0x14(a0)
addiu s2,s1,0x1
sw s2,0x14(a0)
addu s0,s0,s1
sb v0,0x0(s0)
lhu s0,0x16b8(a0)
srl s0,s0,0x8
lw v0,0x8(a0)
lw s1,0x14(a0)
addiu s2,s1,0x1
sw s2,0x14(a0)
addu v0,v0,s1
sb s0,0x0(v0)
lw s0,0x16bc(a0)
subu v0,a3,s0
srav t8,t8,v0
sh t8,0x16b8(a0)
addiu v0,t7,-0x10
addu v0,v0,s0
sw v0,0x16bc(a0)
sll v0,t9,0x2
addu v0,v0,t0
lw t7,0x0(v0)
beq t7,zero,0x0001c4d4
_subu t8,a3,t7
sll v0,t9,0x2
addu v0,v0,t3
lw v0,0x0(v0)
subu v1,v1,v0
lw v0,0x16bc(a0)
slt t8,t8,v0
beq t8,zero,0x0001c884
_nop
andi v1,v1,0xffff
sllv v0,v1,v0
lhu t8,0x16b8(a0)
or v0,v0,t8
seh v0,v0
sh v0,0x16b8(a0)
lw t8,0x8(a0)
lw t9,0x14(a0)
addiu s0,t9,0x1
sw s0,0x14(a0)
addu t8,t8,t9
sb v0,0x0(t8)
lhu t8,0x16b8(a0)
srl t8,t8,0x8
lw v0,0x8(a0)
lw t9,0x14(a0)
addiu s0,t9,0x1
sw s0,0x14(a0)
addu v0,v0,t9
sb t8,0x0(v0)
lw v0,0x16bc(a0)
subu t8,a3,v0
srav v1,v1,t8
sh v1,0x16b8(a0)
addiu t7,t7,-0x10
addu t7,t7,v0
b 0x0001c4d4
_sw t7,0x16bc(a0)
lhu t8,0x0(t8)
sllv t8,t8,t7
lhu s1,0x16b8(a0)
or t8,t8,s1
sh t8,0x16b8(a0)
addu t7,t7,s0
b 0x0001c630
_sw t7,0x16bc(a0)
andi v0,v0,0xffff
sllv v0,v0,t8
lhu t9,0x16b8(a0)
or v0,v0,t9
sh v0,0x16b8(a0)
addu t7,t8,t7
b 0x0001c6d0
_sw t7,0x16bc(a0)
addu v0,t4,v0
b 0x0001c6e8
_lbu t9,0x100(v0)
lhu t8,0x0(t8)
sllv t8,t8,v0
lhu s0,0x16b8(a0)
or t8,t8,s0
sh t8,0x16b8(a0)
addu v0,v0,t7
b 0x0001c774
_sw v0,0x16bc(a0)
andi v1,v1,0xffff
sllv v1,v1,v0
lhu t8,0x16b8(a0)
or v1,v1,t8
sh v1,0x16b8(a0)
addu t7,v0,t7
b 0x0001c4d4
_sw t7,0x16bc(a0)
lhu a2,0x402(a1)
lw v0,0x16bc(a0)
li v1,0x10
subu v1,v1,a2
slt v1,v1,v0
bne v1,zero,0x0001c8f4
_nop
lhu v1,0x400(a1)
sllv v1,v1,v0
lhu a1,0x16b8(a0)
or v1,v1,a1
sh v1,0x16b8(a0)
addu v0,v0,a2
sw v0,0x16bc(a0)
lw s3,0xc(sp)
lw s2,0x8(sp)
lw s1,0x4(sp)
lw s0,0x0(sp)
jr ra
_addiu sp,sp,0x10
lhu v1,0x400(a1)
sllv v0,v1,v0
lhu a1,0x16b8(a0)
or v0,v0,a1
seh v0,v0
sh v0,0x16b8(a0)
lw a1,0x8(a0)
lw a3,0x14(a0)
addiu t0,a3,0x1
sw t0,0x14(a0)
addu a1,a1,a3
sb v0,0x0(a1)
lhu a1,0x16b8(a0)
srl a1,a1,0x8
lw v0,0x8(a0)
lw a3,0x14(a0)
addiu t0,a3,0x1
sw t0,0x14(a0)
addu v0,v0,a3
sb a1,0x0(v0)
lw a3,0x16bc(a0)
li a1,0x10
subu a1,a1,a3
srav v1,v1,a1
sh v1,0x16b8(a0)
addiu v0,a2,-0x10
addu v0,v0,a3
b 0x0001c8dc
_sw v0,0x16bc(a0)
(translation_unit "void FUN_0001c45c(int param_1,int param_2,int param_3)\n\n{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ushort *puVar6;\n  ushort uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  ushort uVar13;\n  int iVar14;\n  uint uVar15;\n  \n  puVar4 = PTR_DAT_00037030;\n  puVar3 = PTR_DAT_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }\n  uVar8 = (uint)*(ushort *)(param_2 + 0x402);\n  uVar5 = *(uint *)(param_1 + 0x16bc);\n  if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0001c45c(int param_1,int param_2,int param_3)\n\n{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ushort *puVar6;\n  ushort uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  ushort uVar13;\n  int iVar14;\n  uint uVar15;\n  \n  puVar4 = PTR_DAT_00037030;\n  puVar3 = PTR_DAT_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }\n  uVar8 = (uint)*(ushort *)(param_2 + 0x402);\n  uVar5 = *(uint *)(param_1 + 0x16bc);\n  if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0001c45c(int param_1,int param_2,int param_3)" identifier (parameter_list "(int param_1,int param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ushort *puVar6;\n  ushort uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  ushort uVar13;\n  int iVar14;\n  uint uVar15;\n  \n  puVar4 = PTR_DAT_00037030;\n  puVar3 = PTR_DAT_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }\n  uVar8 = (uint)*(ushort *)(param_2 + 0x402);\n  uVar5 = *(uint *)(param_1 + 0x16bc);\n  if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ushort *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "ushort uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "ushort uVar13;" type_identifier identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (expression_statement "puVar4 = PTR_DAT_00037030;" (assignment_expression "puVar4 = PTR_DAT_00037030" identifier = identifier) ;) (expression_statement "puVar3 = PTR_DAT_0003702c;" (assignment_expression "puVar3 = PTR_DAT_0003702c" identifier = identifier) ;) (expression_statement "puVar2 = PTR_LAB_0003701c;" (assignment_expression "puVar2 = PTR_LAB_0003701c" identifier = identifier) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x16a0) != 0)" ( (binary_expression "*(int *)(param_1 + 0x16a0) != 0" (pointer_expression "*(int *)(param_1 + 0x16a0)" * (cast_expression "(int *)(param_1 + 0x16a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }" { (do_statement "do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));" do (compound_statement "{\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    }" { (expression_statement "uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);" (assignment_expression "uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" identifier = (binary_expression "(uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" ( (binary_expression "*(int *)(param_1 + 0x16a4) + uVar5 * 2" (pointer_expression "*(int *)(param_1 + 0x16a4)" * (cast_expression "(int *)(param_1 + 0x16a4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a4)" ( (binary_expression "param_1 + 0x16a4" identifier + number_literal) )))) + (binary_expression "uVar5 * 2" identifier * number_literal)) ))))) ;) (expression_statement "uVar9 = uVar5 + 1;" (assignment_expression "uVar9 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);" (assignment_expression "uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" identifier = (binary_expression "(uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1698) + uVar5)" ( (binary_expression "*(int *)(param_1 + 0x1698) + uVar5" (pointer_expression "*(int *)(param_1 + 0x1698)" * (cast_expression "(int *)(param_1 + 0x1698)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1698)" ( (binary_expression "param_1 + 0x1698" identifier + number_literal) )))) + identifier) ))))) ;) (if_statement "if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }" { (expression_statement "puVar6 = (ushort *)(param_2 + uVar5 * 4);" (assignment_expression "puVar6 = (ushort *)(param_2 + uVar5 * 4)" identifier = (cast_expression "(ushort *)(param_2 + uVar5 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + uVar5 * 4)" ( (binary_expression "param_2 + uVar5 * 4" identifier + (binary_expression "uVar5 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar8 = (uint)puVar6[1];" (assignment_expression "uVar8 = (uint)puVar6[1]" identifier = (cast_expression "(uint)puVar6[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar6[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" if (parenthesized_expression "((int)(0x10 - uVar8) < (int)uVar5)" ( (binary_expression "(int)(0x10 - uVar8) < (int)uVar5" (cast_expression "(int)(0x10 - uVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar8)" ( (binary_expression "0x10 - uVar8" number_literal - identifier) ))) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" { (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "(uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar8 - 0x10)" ( (binary_expression "uVar8 - 0x10" identifier - number_literal) )) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" else (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "*puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar5 & 0x1f)" (pointer_expression "*puVar6" * identifier) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar8" identifier + identifier)) ;) }))) }) (else_clause "else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" else (compound_statement "{\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" { (expression_statement "uVar15 = (uint)(byte)puVar4[uVar5];" (assignment_expression "uVar15 = (uint)(byte)puVar4[uVar5]" identifier = (cast_expression "(uint)(byte)puVar4[uVar5]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)puVar4[uVar5]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "puVar4[uVar5]" identifier [ identifier ])))) ;) (expression_statement "puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);" (assignment_expression "puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4)" identifier = (cast_expression "(ushort *)(param_2 + (uVar15 + 0x101) * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + (uVar15 + 0x101) * 4)" ( (binary_expression "param_2 + (uVar15 + 0x101) * 4" identifier + (binary_expression "(uVar15 + 0x101) * 4" (parenthesized_expression "(uVar15 + 0x101)" ( (binary_expression "uVar15 + 0x101" identifier + number_literal) )) * number_literal)) )))) ;) (expression_statement "uVar11 = (uint)puVar6[1];" (assignment_expression "uVar11 = (uint)puVar6[1]" identifier = (cast_expression "(uint)puVar6[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar6[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar10 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar10 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" if (parenthesized_expression "((int)(0x10 - uVar11) < (int)uVar10)" ( (binary_expression "(int)(0x10 - uVar11) < (int)uVar10" (cast_expression "(int)(0x10 - uVar11)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar11)" ( (binary_expression "0x10 - uVar11" number_literal - identifier) ))) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" { (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "(uVar11 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar11 - 0x10)" ( (binary_expression "uVar11 - 0x10" identifier - number_literal) )) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" else (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "*puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar10 & 0x1f)" (pointer_expression "*puVar6" * identifier) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar10 + uVar11" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar10 + uVar11" identifier + identifier)) ;) }))) (expression_statement "iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);" (assignment_expression "iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" identifier = (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x5c2c)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x5c2c" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }" { (expression_statement "uVar10 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar10 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" if (parenthesized_expression "(0x10 - iVar14 < (int)uVar10)" ( (binary_expression "0x10 - iVar14 < (int)uVar10" (binary_expression "0x10 - iVar14" number_literal - identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }" { (expression_statement "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;" (assignment_expression "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" identifier = (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8)" identifier - (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x52e8)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x52e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x52e8)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x52e8" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal)) ;) (expression_statement "uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "(ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)(uVar5 << (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar5 << (uVar10 & 0x1f))" ( (binary_expression "uVar5 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar13;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar13" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" ( (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar13" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" ( (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (binary_expression "iVar14 + -0x10" identifier + number_literal) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" else (compound_statement "{\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f))" ( (binary_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)" (parenthesized_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff)" ( (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8)" identifier - (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x52e8)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x52e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x52e8)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x52e8" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal) )) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar10 + iVar14" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar10 + iVar14" identifier + identifier)) ;) }))) })) (expression_statement "uVar8 = uVar8 - 1;" (assignment_expression "uVar8 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" if (parenthesized_expression "(uVar8 < 0x100)" ( (binary_expression "uVar8 < 0x100" identifier < number_literal) )) (compound_statement "{\n          bVar1 = puVar3[uVar8];\n        }" { (expression_statement "bVar1 = puVar3[uVar8];" (assignment_expression "bVar1 = puVar3[uVar8]" identifier = (subscript_expression "puVar3[uVar8]" identifier [ identifier ])) ;) }) (else_clause "else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" else (compound_statement "{\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" { (expression_statement "bVar1 = puVar3[(uVar8 >> 7) + 0x100];" (assignment_expression "bVar1 = puVar3[(uVar8 >> 7) + 0x100]" identifier = (subscript_expression "puVar3[(uVar8 >> 7) + 0x100]" identifier [ (binary_expression "(uVar8 >> 7) + 0x100" (parenthesized_expression "(uVar8 >> 7)" ( (binary_expression "uVar8 >> 7" identifier >> number_literal) )) + number_literal) ])) ;) }))) (expression_statement "uVar11 = (uint)bVar1;" (assignment_expression "uVar11 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar6 = (ushort *)(param_3 + uVar11 * 4);" (assignment_expression "puVar6 = (ushort *)(param_3 + uVar11 * 4)" identifier = (cast_expression "(ushort *)(param_3 + uVar11 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + uVar11 * 4)" ( (binary_expression "param_3 + uVar11 * 4" identifier + (binary_expression "uVar11 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar10 = (uint)puVar6[1];" (assignment_expression "uVar10 = (uint)puVar6[1]" identifier = (cast_expression "(uint)puVar6[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar6[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" if (parenthesized_expression "((int)(0x10 - uVar10) < (int)uVar5)" ( (binary_expression "(int)(0x10 - uVar10) < (int)uVar5" (cast_expression "(int)(0x10 - uVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar10)" ( (binary_expression "0x10 - uVar10" number_literal - identifier) ))) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" { (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "(uVar10 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar10 - 0x10)" ( (binary_expression "uVar10 - 0x10" identifier - number_literal) )) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" else (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "*puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar5 & 0x1f)" (pointer_expression "*puVar6" * identifier) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar10" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar10" identifier + identifier)) ;) }))) (expression_statement "iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);" (assignment_expression "iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" identifier = (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" * (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5bb4)" ( (binary_expression "puVar2 + uVar11 * 4 + 0x5bb4" (binary_expression "puVar2 + uVar11 * 4" identifier + (binary_expression "uVar11 * 4" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }" { (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" if (parenthesized_expression "(0x10 - iVar14 < (int)uVar5)" ( (binary_expression "0x10 - iVar14 < (int)uVar5" (binary_expression "0x10 - iVar14" number_literal - identifier) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }" { (expression_statement "uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;" (assignment_expression "uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" identifier = (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270)" identifier - (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5270)" * (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5270)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5270)" ( (binary_expression "puVar2 + uVar11 * 4 + 0x5270" (binary_expression "puVar2 + uVar11 * 4" identifier + (binary_expression "uVar11 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal)) ;) (expression_statement "uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "(ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)(uVar8 << (uVar5 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar8 << (uVar5 & 0x1f))" ( (binary_expression "uVar8 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar13;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar13" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" ( (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar13" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" ( (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (binary_expression "iVar14 + -0x10" identifier + number_literal) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" else (compound_statement "{\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "(ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f))" ( (binary_expression "(uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)" (parenthesized_expression "(uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff)" ( (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270)" identifier - (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5270)" * (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5270)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5270)" ( (binary_expression "puVar2 + uVar11 * 4 + 0x5270" (binary_expression "puVar2 + uVar11 * 4" identifier + (binary_expression "uVar11 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal) )) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + iVar14" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar5 + iVar14" identifier + identifier)) ;) }))) })) }))) (expression_statement "uVar5 = uVar9;" (assignment_expression "uVar5 = uVar9" identifier = identifier) ;) }) while (parenthesized_expression "(uVar9 < *(uint *)(param_1 + 0x16a0))" ( (binary_expression "uVar9 < *(uint *)(param_1 + 0x16a0)" identifier < (pointer_expression "*(uint *)(param_1 + 0x16a0)" * (cast_expression "(uint *)(param_1 + 0x16a0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) ))))) )) ;) })) (expression_statement "uVar8 = (uint)*(ushort *)(param_2 + 0x402);" (assignment_expression "uVar8 = (uint)*(ushort *)(param_2 + 0x402)" identifier = (binary_expression "(uint)*(ushort *)(param_2 + 0x402)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_2 + 0x402)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x402)" ( (binary_expression "param_2 + 0x402" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" if (parenthesized_expression "((int)(0x10 - uVar8) < (int)uVar5)" ( (binary_expression "(int)(0x10 - uVar8) < (int)uVar5" (cast_expression "(int)(0x10 - uVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar8)" ( (binary_expression "0x10 - uVar8" number_literal - identifier) ))) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }" { (expression_statement "uVar13 = *(ushort *)(param_2 + 0x400);" (assignment_expression "uVar13 = *(ushort *)(param_2 + 0x400)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x400)" * (cast_expression "(ushort *)(param_2 + 0x400)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x400)" ( (binary_expression "param_2 + 0x400" identifier + number_literal) ))))) ;) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "(uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar8 - 0x10)" ( (binary_expression "uVar8 - 0x10" identifier - number_literal) )) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" else (compound_statement "{\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "*(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*(short *)(param_2 + 0x400) << (uVar5 & 0x1f)" (pointer_expression "*(short *)(param_2 + 0x400)" * (cast_expression "(short *)(param_2 + 0x400)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x400)" ( (binary_expression "param_2 + 0x400" identifier + number_literal) )))) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar8" identifier + identifier)) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void compress_block(deflate_state *s,ct_data *ltree,ct_data *dtree)\n\n{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ct_data *pcVar6;\n  ushort uVar7;\n  ushort uVar8;\n  uint uVar9;\n  uint uVar10;\n  ushort uVar12;\n  int iVar11;\n  uint uVar13;\n  ulg uVar14;\n  uint uVar15;\n  \n  puVar4 = PTR__length_code_00037030;\n  puVar3 = PTR__dist_code_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (s->last_lit != 0) {\n    do {\n      uVar8 = s->d_buf[uVar5];\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)s->l_buf[uVar5];\n      if (uVar8 == 0) {\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < s->last_lit);\n  }\n  uVar9 = (uint)ltree[0x100].dl.dad;\n  uVar5 = s->bi_valid;\n  if ((int)(0x10 - uVar9) < (int)uVar5) {\n    uVar8 = ltree[0x100].fc.freq;\n    uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_buf = uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n    s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n    s->bi_valid = (uVar9 - 0x10) + s->bi_valid;\n  }\n  else {\n    s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_valid = uVar5 + uVar9;\n  }\n  return;\n}\n\n" (function_definition "void compress_block(deflate_state *s,ct_data *ltree,ct_data *dtree)\n\n{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ct_data *pcVar6;\n  ushort uVar7;\n  ushort uVar8;\n  uint uVar9;\n  uint uVar10;\n  ushort uVar12;\n  int iVar11;\n  uint uVar13;\n  ulg uVar14;\n  uint uVar15;\n  \n  puVar4 = PTR__length_code_00037030;\n  puVar3 = PTR__dist_code_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (s->last_lit != 0) {\n    do {\n      uVar8 = s->d_buf[uVar5];\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)s->l_buf[uVar5];\n      if (uVar8 == 0) {\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < s->last_lit);\n  }\n  uVar9 = (uint)ltree[0x100].dl.dad;\n  uVar5 = s->bi_valid;\n  if ((int)(0x10 - uVar9) < (int)uVar5) {\n    uVar8 = ltree[0x100].fc.freq;\n    uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_buf = uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n    s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n    s->bi_valid = (uVar9 - 0x10) + s->bi_valid;\n  }\n  else {\n    s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_valid = uVar5 + uVar9;\n  }\n  return;\n}" primitive_type (function_declarator "compress_block(deflate_state *s,ct_data *ltree,ct_data *dtree)" identifier (parameter_list "(deflate_state *s,ct_data *ltree,ct_data *dtree)" ( (parameter_declaration "deflate_state *s" type_identifier (pointer_declarator "*s" * identifier)) , (parameter_declaration "ct_data *ltree" type_identifier (pointer_declarator "*ltree" * identifier)) , (parameter_declaration "ct_data *dtree" type_identifier (pointer_declarator "*dtree" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ct_data *pcVar6;\n  ushort uVar7;\n  ushort uVar8;\n  uint uVar9;\n  uint uVar10;\n  ushort uVar12;\n  int iVar11;\n  uint uVar13;\n  ulg uVar14;\n  uint uVar15;\n  \n  puVar4 = PTR__length_code_00037030;\n  puVar3 = PTR__dist_code_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (s->last_lit != 0) {\n    do {\n      uVar8 = s->d_buf[uVar5];\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)s->l_buf[uVar5];\n      if (uVar8 == 0) {\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < s->last_lit);\n  }\n  uVar9 = (uint)ltree[0x100].dl.dad;\n  uVar5 = s->bi_valid;\n  if ((int)(0x10 - uVar9) < (int)uVar5) {\n    uVar8 = ltree[0x100].fc.freq;\n    uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_buf = uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n    s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n    s->bi_valid = (uVar9 - 0x10) + s->bi_valid;\n  }\n  else {\n    s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_valid = uVar5 + uVar9;\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ct_data *pcVar6;" type_identifier (pointer_declarator "*pcVar6" * identifier) ;) (declaration "ushort uVar7;" type_identifier identifier ;) (declaration "ushort uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "ushort uVar12;" type_identifier identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "ulg uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (expression_statement "puVar4 = PTR__length_code_00037030;" (assignment_expression "puVar4 = PTR__length_code_00037030" identifier = identifier) ;) (expression_statement "puVar3 = PTR__dist_code_0003702c;" (assignment_expression "puVar3 = PTR__dist_code_0003702c" identifier = identifier) ;) (expression_statement "puVar2 = PTR_LAB_0003701c;" (assignment_expression "puVar2 = PTR_LAB_0003701c" identifier = identifier) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (if_statement "if (s->last_lit != 0) {\n    do {\n      uVar8 = s->d_buf[uVar5];\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)s->l_buf[uVar5];\n      if (uVar8 == 0) {\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < s->last_lit);\n  }" if (parenthesized_expression "(s->last_lit != 0)" ( (binary_expression "s->last_lit != 0" (field_expression "s->last_lit" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n    do {\n      uVar8 = s->d_buf[uVar5];\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)s->l_buf[uVar5];\n      if (uVar8 == 0) {\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < s->last_lit);\n  }" { (do_statement "do {\n      uVar8 = s->d_buf[uVar5];\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)s->l_buf[uVar5];\n      if (uVar8 == 0) {\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < s->last_lit);" do (compound_statement "{\n      uVar8 = s->d_buf[uVar5];\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)s->l_buf[uVar5];\n      if (uVar8 == 0) {\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    }" { (expression_statement "uVar8 = s->d_buf[uVar5];" (assignment_expression "uVar8 = s->d_buf[uVar5]" identifier = (subscript_expression "s->d_buf[uVar5]" (field_expression "s->d_buf" identifier -> field_identifier) [ identifier ])) ;) (expression_statement "uVar9 = uVar5 + 1;" (assignment_expression "uVar9 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = (uint)s->l_buf[uVar5];" (assignment_expression "uVar5 = (uint)s->l_buf[uVar5]" identifier = (cast_expression "(uint)s->l_buf[uVar5]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "s->l_buf[uVar5]" (field_expression "s->l_buf" identifier -> field_identifier) [ identifier ]))) ;) (if_statement "if (uVar8 == 0) {\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        pcVar6 = ltree + uVar5;\n        uVar10 = (uint)(pcVar6->dl).dad;\n        uVar5 = s->bi_valid;\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }\n      }" { (expression_statement "pcVar6 = ltree + uVar5;" (assignment_expression "pcVar6 = ltree + uVar5" identifier = (binary_expression "ltree + uVar5" identifier + identifier)) ;) (expression_statement "uVar10 = (uint)(pcVar6->dl).dad;" (assignment_expression "uVar10 = (uint)(pcVar6->dl).dad" identifier = (field_expression "(uint)(pcVar6->dl).dad" (call_expression "(uint)(pcVar6->dl)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pcVar6->dl)" ( (field_expression "pcVar6->dl" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "uVar5 = s->bi_valid;" (assignment_expression "uVar5 = s->bi_valid" identifier = (field_expression "s->bi_valid" identifier -> field_identifier)) ;) (if_statement "if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }" if (parenthesized_expression "((int)(0x10 - uVar10) < (int)uVar5)" ( (binary_expression "(int)(0x10 - uVar10) < (int)uVar5" (cast_expression "(int)(0x10 - uVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar10)" ( (binary_expression "0x10 - uVar10" number_literal - identifier) ))) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar10 - 0x10) + s->bi_valid;\n        }" { (expression_statement "uVar8 = (pcVar6->fc).freq;" (assignment_expression "uVar8 = (pcVar6->fc).freq" identifier = (field_expression "(pcVar6->fc).freq" (parenthesized_expression "(pcVar6->fc)" ( (field_expression "pcVar6->fc" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;" (assignment_expression "uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf" identifier = (binary_expression "uVar8 << (uVar5 & 0x1f) | s->bi_buf" (binary_expression "uVar8 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_buf = uVar7;" (assignment_expression "s->bi_buf = uVar7" (field_expression "s->bi_buf" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)uVar7;" (assignment_expression "s->pending_buf[uVar14] = (Bytef)uVar7" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (cast_expression "(Bytef)uVar7" ( (type_descriptor "Bytef" type_identifier) ) identifier)) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);" (assignment_expression "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8)" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (call_expression "(Bytef)(s->bi_buf >> 8)" (parenthesized_expression "(Bytef)" ( identifier )) (argument_list "(s->bi_buf >> 8)" ( (binary_expression "s->bi_buf >> 8" (field_expression "s->bi_buf" identifier -> field_identifier) >> number_literal) )))) ;) (expression_statement "s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));" (assignment_expression "s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" (field_expression "s->bi_buf" identifier -> field_identifier) = (call_expression "(ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" (parenthesized_expression "(ush)" ( identifier )) (argument_list "((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" ( (binary_expression "(int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f)" (cast_expression "(int)(uint)uVar8" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar8" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - s->bi_valid & 0x1f)" ( (binary_expression "0x10U - s->bi_valid & 0x1f" (binary_expression "0x10U - s->bi_valid" number_literal - (field_expression "s->bi_valid" identifier -> field_identifier)) & number_literal) ))) )))) ;) (expression_statement "s->bi_valid = (uVar10 - 0x10) + s->bi_valid;" (assignment_expression "s->bi_valid = (uVar10 - 0x10) + s->bi_valid" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "(uVar10 - 0x10) + s->bi_valid" (parenthesized_expression "(uVar10 - 0x10)" ( (binary_expression "uVar10 - 0x10" identifier - number_literal) )) + (field_expression "s->bi_valid" identifier -> field_identifier))) ;) }) (else_clause "else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }" else (compound_statement "{\n          s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar5 + uVar10;\n        }" { (expression_statement "s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf;" (assignment_expression "s->bi_buf = (pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf" (field_expression "s->bi_buf" identifier -> field_identifier) = (binary_expression "(pcVar6->fc).freq << (uVar5 & 0x1f) | s->bi_buf" (binary_expression "(pcVar6->fc).freq << (uVar5 & 0x1f)" (field_expression "(pcVar6->fc).freq" (parenthesized_expression "(pcVar6->fc)" ( (field_expression "pcVar6->fc" identifier -> field_identifier) )) . field_identifier) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_valid = uVar5 + uVar10;" (assignment_expression "s->bi_valid = uVar5 + uVar10" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "uVar5 + uVar10" identifier + identifier)) ;) }))) }) (else_clause "else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }" else (compound_statement "{\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        pcVar6 = ltree + uVar15 + 0x101;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n        uVar5 = uVar8 - 1;\n        if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }\n        uVar15 = (uint)bVar1;\n        pcVar6 = dtree + uVar15;\n        uVar13 = (uint)(pcVar6->dl).dad;\n        uVar10 = s->bi_valid;\n        if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }\n        iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);\n        if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }\n      }" { (expression_statement "uVar15 = (uint)(byte)puVar4[uVar5];" (assignment_expression "uVar15 = (uint)(byte)puVar4[uVar5]" identifier = (cast_expression "(uint)(byte)puVar4[uVar5]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)puVar4[uVar5]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "puVar4[uVar5]" identifier [ identifier ])))) ;) (expression_statement "pcVar6 = ltree + uVar15 + 0x101;" (assignment_expression "pcVar6 = ltree + uVar15 + 0x101" identifier = (binary_expression "ltree + uVar15 + 0x101" (binary_expression "ltree + uVar15" identifier + identifier) + number_literal)) ;) (expression_statement "uVar13 = (uint)(pcVar6->dl).dad;" (assignment_expression "uVar13 = (uint)(pcVar6->dl).dad" identifier = (field_expression "(uint)(pcVar6->dl).dad" (call_expression "(uint)(pcVar6->dl)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pcVar6->dl)" ( (field_expression "pcVar6->dl" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "uVar10 = s->bi_valid;" (assignment_expression "uVar10 = s->bi_valid" identifier = (field_expression "s->bi_valid" identifier -> field_identifier)) ;) (if_statement "if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }" if (parenthesized_expression "((int)(0x10 - uVar13) < (int)uVar10)" ( (binary_expression "(int)(0x10 - uVar13) < (int)uVar10" (cast_expression "(int)(0x10 - uVar13)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar13)" ( (binary_expression "0x10 - uVar13" number_literal - identifier) ))) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar7 = (pcVar6->fc).freq;\n          uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar12;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }" { (expression_statement "uVar7 = (pcVar6->fc).freq;" (assignment_expression "uVar7 = (pcVar6->fc).freq" identifier = (field_expression "(pcVar6->fc).freq" (parenthesized_expression "(pcVar6->fc)" ( (field_expression "pcVar6->fc" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf;" (assignment_expression "uVar12 = uVar7 << (uVar10 & 0x1f) | s->bi_buf" identifier = (binary_expression "uVar7 << (uVar10 & 0x1f) | s->bi_buf" (binary_expression "uVar7 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_buf = uVar12;" (assignment_expression "s->bi_buf = uVar12" (field_expression "s->bi_buf" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)uVar12;" (assignment_expression "s->pending_buf[uVar14] = (Bytef)uVar12" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (cast_expression "(Bytef)uVar12" ( (type_descriptor "Bytef" type_identifier) ) identifier)) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);" (assignment_expression "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8)" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (call_expression "(Bytef)(s->bi_buf >> 8)" (parenthesized_expression "(Bytef)" ( identifier )) (argument_list "(s->bi_buf >> 8)" ( (binary_expression "s->bi_buf >> 8" (field_expression "s->bi_buf" identifier -> field_identifier) >> number_literal) )))) ;) (expression_statement "s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f));" (assignment_expression "s->bi_buf = (ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f))" (field_expression "s->bi_buf" identifier -> field_identifier) = (call_expression "(ush)((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f))" (parenthesized_expression "(ush)" ( identifier )) (argument_list "((int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f))" ( (binary_expression "(int)(uint)uVar7 >> (0x10U - s->bi_valid & 0x1f)" (cast_expression "(int)(uint)uVar7" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar7" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - s->bi_valid & 0x1f)" ( (binary_expression "0x10U - s->bi_valid & 0x1f" (binary_expression "0x10U - s->bi_valid" number_literal - (field_expression "s->bi_valid" identifier -> field_identifier)) & number_literal) ))) )))) ;) (expression_statement "s->bi_valid = (uVar13 - 0x10) + s->bi_valid;" (assignment_expression "s->bi_valid = (uVar13 - 0x10) + s->bi_valid" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "(uVar13 - 0x10) + s->bi_valid" (parenthesized_expression "(uVar13 - 0x10)" ( (binary_expression "uVar13 - 0x10" identifier - number_literal) )) + (field_expression "s->bi_valid" identifier -> field_identifier))) ;) }) (else_clause "else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }" else (compound_statement "{\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }" { (expression_statement "s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;" (assignment_expression "s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf" (field_expression "s->bi_buf" identifier -> field_identifier) = (binary_expression "(pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf" (binary_expression "(pcVar6->fc).freq << (uVar10 & 0x1f)" (field_expression "(pcVar6->fc).freq" (parenthesized_expression "(pcVar6->fc)" ( (field_expression "pcVar6->fc" identifier -> field_identifier) )) . field_identifier) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_valid = uVar10 + uVar13;" (assignment_expression "s->bi_valid = uVar10 + uVar13" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "uVar10 + uVar13" identifier + identifier)) ;) }))) (expression_statement "iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);" (assignment_expression "iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" identifier = (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x5c2c)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x5c2c" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }" if (parenthesized_expression "(iVar11 != 0)" ( (binary_expression "iVar11 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }" { (expression_statement "uVar10 = s->bi_valid;" (assignment_expression "uVar10 = s->bi_valid" identifier = (field_expression "s->bi_valid" identifier -> field_identifier)) ;) (if_statement "if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }" if (parenthesized_expression "(0x10 - iVar11 < (int)uVar10)" ( (binary_expression "0x10 - iVar11 < (int)uVar10" (binary_expression "0x10 - iVar11" number_literal - identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar7;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }" { (expression_statement "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;" (assignment_expression "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" identifier = (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8)" identifier - (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x52e8)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x52e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x52e8)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x52e8" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal)) ;) (expression_statement "uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;" (assignment_expression "uVar7 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf" identifier = (binary_expression "(ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf" (call_expression "(ushort)(uVar5 << (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar5 << (uVar10 & 0x1f))" ( (binary_expression "uVar5 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_buf = uVar7;" (assignment_expression "s->bi_buf = uVar7" (field_expression "s->bi_buf" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)uVar7;" (assignment_expression "s->pending_buf[uVar14] = (Bytef)uVar7" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (cast_expression "(Bytef)uVar7" ( (type_descriptor "Bytef" type_identifier) ) identifier)) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);" (assignment_expression "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8)" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (call_expression "(Bytef)(s->bi_buf >> 8)" (parenthesized_expression "(Bytef)" ( identifier )) (argument_list "(s->bi_buf >> 8)" ( (binary_expression "s->bi_buf >> 8" (field_expression "s->bi_buf" identifier -> field_identifier) >> number_literal) )))) ;) (expression_statement "s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));" (assignment_expression "s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f))" (field_expression "s->bi_buf" identifier -> field_identifier) = (call_expression "(ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f))" (parenthesized_expression "(ush)" ( identifier )) (argument_list "((int)uVar5 >> (0x10U - s->bi_valid & 0x1f))" ( (binary_expression "(int)uVar5 >> (0x10U - s->bi_valid & 0x1f)" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(0x10U - s->bi_valid & 0x1f)" ( (binary_expression "0x10U - s->bi_valid & 0x1f" (binary_expression "0x10U - s->bi_valid" number_literal - (field_expression "s->bi_valid" identifier -> field_identifier)) & number_literal) ))) )))) ;) (expression_statement "s->bi_valid = iVar11 + -0x10 + s->bi_valid;" (assignment_expression "s->bi_valid = iVar11 + -0x10 + s->bi_valid" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "iVar11 + -0x10 + s->bi_valid" (binary_expression "iVar11 + -0x10" identifier + number_literal) + (field_expression "s->bi_valid" identifier -> field_identifier))) ;) }) (else_clause "else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }" else (compound_statement "{\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }" { (expression_statement "s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;" (assignment_expression "s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf" (field_expression "s->bi_buf" identifier -> field_identifier) = (binary_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf" (call_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f))" ( (binary_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                                (uVar10 & 0x1f)" (parenthesized_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff)" ( (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8)" identifier - (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x52e8)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x52e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x52e8)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x52e8" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal) )) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_valid = uVar10 + iVar11;" (assignment_expression "s->bi_valid = uVar10 + iVar11" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "uVar10 + iVar11" identifier + identifier)) ;) }))) })) (expression_statement "uVar5 = uVar8 - 1;" (assignment_expression "uVar5 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if (uVar5 < 0x100) {\n          bVar1 = puVar3[uVar5];\n        }\n        else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }" if (parenthesized_expression "(uVar5 < 0x100)" ( (binary_expression "uVar5 < 0x100" identifier < number_literal) )) (compound_statement "{\n          bVar1 = puVar3[uVar5];\n        }" { (expression_statement "bVar1 = puVar3[uVar5];" (assignment_expression "bVar1 = puVar3[uVar5]" identifier = (subscript_expression "puVar3[uVar5]" identifier [ identifier ])) ;) }) (else_clause "else {\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }" else (compound_statement "{\n          bVar1 = puVar3[(uVar5 >> 7) + 0x100];\n        }" { (expression_statement "bVar1 = puVar3[(uVar5 >> 7) + 0x100];" (assignment_expression "bVar1 = puVar3[(uVar5 >> 7) + 0x100]" identifier = (subscript_expression "puVar3[(uVar5 >> 7) + 0x100]" identifier [ (binary_expression "(uVar5 >> 7) + 0x100" (parenthesized_expression "(uVar5 >> 7)" ( (binary_expression "uVar5 >> 7" identifier >> number_literal) )) + number_literal) ])) ;) }))) (expression_statement "uVar15 = (uint)bVar1;" (assignment_expression "uVar15 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "pcVar6 = dtree + uVar15;" (assignment_expression "pcVar6 = dtree + uVar15" identifier = (binary_expression "dtree + uVar15" identifier + identifier)) ;) (expression_statement "uVar13 = (uint)(pcVar6->dl).dad;" (assignment_expression "uVar13 = (uint)(pcVar6->dl).dad" identifier = (field_expression "(uint)(pcVar6->dl).dad" (call_expression "(uint)(pcVar6->dl)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(pcVar6->dl)" ( (field_expression "pcVar6->dl" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "uVar10 = s->bi_valid;" (assignment_expression "uVar10 = s->bi_valid" identifier = (field_expression "s->bi_valid" identifier -> field_identifier)) ;) (if_statement "if ((int)(0x10 - uVar13) < (int)uVar10) {\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }\n        else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }" if (parenthesized_expression "((int)(0x10 - uVar13) < (int)uVar10)" ( (binary_expression "(int)(0x10 - uVar13) < (int)uVar10" (cast_expression "(int)(0x10 - uVar13)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar13)" ( (binary_expression "0x10 - uVar13" number_literal - identifier) ))) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar8 = (pcVar6->fc).freq;\n          uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_buf = uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)uVar7;\n          uVar14 = s->pending;\n          s->pending = uVar14 + 1;\n          s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n          s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n          s->bi_valid = (uVar13 - 0x10) + s->bi_valid;\n        }" { (expression_statement "uVar8 = (pcVar6->fc).freq;" (assignment_expression "uVar8 = (pcVar6->fc).freq" identifier = (field_expression "(pcVar6->fc).freq" (parenthesized_expression "(pcVar6->fc)" ( (field_expression "pcVar6->fc" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf;" (assignment_expression "uVar7 = uVar8 << (uVar10 & 0x1f) | s->bi_buf" identifier = (binary_expression "uVar8 << (uVar10 & 0x1f) | s->bi_buf" (binary_expression "uVar8 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_buf = uVar7;" (assignment_expression "s->bi_buf = uVar7" (field_expression "s->bi_buf" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)uVar7;" (assignment_expression "s->pending_buf[uVar14] = (Bytef)uVar7" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (cast_expression "(Bytef)uVar7" ( (type_descriptor "Bytef" type_identifier) ) identifier)) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);" (assignment_expression "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8)" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (call_expression "(Bytef)(s->bi_buf >> 8)" (parenthesized_expression "(Bytef)" ( identifier )) (argument_list "(s->bi_buf >> 8)" ( (binary_expression "s->bi_buf >> 8" (field_expression "s->bi_buf" identifier -> field_identifier) >> number_literal) )))) ;) (expression_statement "s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));" (assignment_expression "s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" (field_expression "s->bi_buf" identifier -> field_identifier) = (call_expression "(ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" (parenthesized_expression "(ush)" ( identifier )) (argument_list "((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" ( (binary_expression "(int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f)" (cast_expression "(int)(uint)uVar8" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar8" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - s->bi_valid & 0x1f)" ( (binary_expression "0x10U - s->bi_valid & 0x1f" (binary_expression "0x10U - s->bi_valid" number_literal - (field_expression "s->bi_valid" identifier -> field_identifier)) & number_literal) ))) )))) ;) (expression_statement "s->bi_valid = (uVar13 - 0x10) + s->bi_valid;" (assignment_expression "s->bi_valid = (uVar13 - 0x10) + s->bi_valid" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "(uVar13 - 0x10) + s->bi_valid" (parenthesized_expression "(uVar13 - 0x10)" ( (binary_expression "uVar13 - 0x10" identifier - number_literal) )) + (field_expression "s->bi_valid" identifier -> field_identifier))) ;) }) (else_clause "else {\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }" else (compound_statement "{\n          s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;\n          s->bi_valid = uVar10 + uVar13;\n        }" { (expression_statement "s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf;" (assignment_expression "s->bi_buf = (pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf" (field_expression "s->bi_buf" identifier -> field_identifier) = (binary_expression "(pcVar6->fc).freq << (uVar10 & 0x1f) | s->bi_buf" (binary_expression "(pcVar6->fc).freq << (uVar10 & 0x1f)" (field_expression "(pcVar6->fc).freq" (parenthesized_expression "(pcVar6->fc)" ( (field_expression "pcVar6->fc" identifier -> field_identifier) )) . field_identifier) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_valid = uVar10 + uVar13;" (assignment_expression "s->bi_valid = uVar10 + uVar13" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "uVar10 + uVar13" identifier + identifier)) ;) }))) (expression_statement "iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4);" (assignment_expression "iVar11 = *(int *)(puVar2 + uVar15 * 4 + 0x5bb4)" identifier = (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x5bb4)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x5bb4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x5bb4)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x5bb4" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (iVar11 != 0) {\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }" if (parenthesized_expression "(iVar11 != 0)" ( (binary_expression "iVar11 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar10 = s->bi_valid;\n          if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }\n        }" { (expression_statement "uVar10 = s->bi_valid;" (assignment_expression "uVar10 = s->bi_valid" identifier = (field_expression "s->bi_valid" identifier -> field_identifier)) ;) (if_statement "if (0x10 - iVar11 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }\n          else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }" if (parenthesized_expression "(0x10 - iVar11 < (int)uVar10)" ( (binary_expression "0x10 - iVar11 < (int)uVar10" (binary_expression "0x10 - iVar11" number_literal - identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;\n            uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_buf = uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)uVar8;\n            uVar14 = s->pending;\n            s->pending = uVar14 + 1;\n            s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n            s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));\n            s->bi_valid = iVar11 + -0x10 + s->bi_valid;\n          }" { (expression_statement "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff;" (assignment_expression "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff" identifier = (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270)" identifier - (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x5270)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x5270)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x5270)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x5270" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal)) ;) (expression_statement "uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf;" (assignment_expression "uVar8 = (ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf" identifier = (binary_expression "(ushort)(uVar5 << (uVar10 & 0x1f)) | s->bi_buf" (call_expression "(ushort)(uVar5 << (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar5 << (uVar10 & 0x1f))" ( (binary_expression "uVar5 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_buf = uVar8;" (assignment_expression "s->bi_buf = uVar8" (field_expression "s->bi_buf" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)uVar8;" (assignment_expression "s->pending_buf[uVar14] = (Bytef)uVar8" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (cast_expression "(Bytef)uVar8" ( (type_descriptor "Bytef" type_identifier) ) identifier)) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);" (assignment_expression "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8)" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (call_expression "(Bytef)(s->bi_buf >> 8)" (parenthesized_expression "(Bytef)" ( identifier )) (argument_list "(s->bi_buf >> 8)" ( (binary_expression "s->bi_buf >> 8" (field_expression "s->bi_buf" identifier -> field_identifier) >> number_literal) )))) ;) (expression_statement "s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f));" (assignment_expression "s->bi_buf = (ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f))" (field_expression "s->bi_buf" identifier -> field_identifier) = (call_expression "(ush)((int)uVar5 >> (0x10U - s->bi_valid & 0x1f))" (parenthesized_expression "(ush)" ( identifier )) (argument_list "((int)uVar5 >> (0x10U - s->bi_valid & 0x1f))" ( (binary_expression "(int)uVar5 >> (0x10U - s->bi_valid & 0x1f)" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(0x10U - s->bi_valid & 0x1f)" ( (binary_expression "0x10U - s->bi_valid & 0x1f" (binary_expression "0x10U - s->bi_valid" number_literal - (field_expression "s->bi_valid" identifier -> field_identifier)) & number_literal) ))) )))) ;) (expression_statement "s->bi_valid = iVar11 + -0x10 + s->bi_valid;" (assignment_expression "s->bi_valid = iVar11 + -0x10 + s->bi_valid" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "iVar11 + -0x10 + s->bi_valid" (binary_expression "iVar11 + -0x10" identifier + number_literal) + (field_expression "s->bi_valid" identifier -> field_identifier))) ;) }) (else_clause "else {\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }" else (compound_statement "{\n            s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;\n            s->bi_valid = uVar10 + iVar11;\n          }" { (expression_statement "s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf;" (assignment_expression "s->bi_buf = (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf" (field_expression "s->bi_buf" identifier -> field_identifier) = (binary_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)) | s->bi_buf" (call_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f))" ( (binary_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff) <<\n                                (uVar10 & 0x1f)" (parenthesized_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff)" ( (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x5270)" identifier - (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x5270)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x5270)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x5270)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x5270" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal) )) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_valid = uVar10 + iVar11;" (assignment_expression "s->bi_valid = uVar10 + iVar11" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "uVar10 + iVar11" identifier + identifier)) ;) }))) })) }))) (expression_statement "uVar5 = uVar9;" (assignment_expression "uVar5 = uVar9" identifier = identifier) ;) }) while (parenthesized_expression "(uVar9 < s->last_lit)" ( (binary_expression "uVar9 < s->last_lit" identifier < (field_expression "s->last_lit" identifier -> field_identifier)) )) ;) })) (expression_statement "uVar9 = (uint)ltree[0x100].dl.dad;" (assignment_expression "uVar9 = (uint)ltree[0x100].dl.dad" identifier = (cast_expression "(uint)ltree[0x100].dl.dad" ( (type_descriptor "uint" type_identifier) ) (field_expression "ltree[0x100].dl.dad" (field_expression "ltree[0x100].dl" (subscript_expression "ltree[0x100]" identifier [ number_literal ]) . field_identifier) . field_identifier))) ;) (expression_statement "uVar5 = s->bi_valid;" (assignment_expression "uVar5 = s->bi_valid" identifier = (field_expression "s->bi_valid" identifier -> field_identifier)) ;) (if_statement "if ((int)(0x10 - uVar9) < (int)uVar5) {\n    uVar8 = ltree[0x100].fc.freq;\n    uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_buf = uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n    s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n    s->bi_valid = (uVar9 - 0x10) + s->bi_valid;\n  }\n  else {\n    s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_valid = uVar5 + uVar9;\n  }" if (parenthesized_expression "((int)(0x10 - uVar9) < (int)uVar5)" ( (binary_expression "(int)(0x10 - uVar9) < (int)uVar5" (cast_expression "(int)(0x10 - uVar9)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar9)" ( (binary_expression "0x10 - uVar9" number_literal - identifier) ))) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    uVar8 = ltree[0x100].fc.freq;\n    uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_buf = uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)uVar7;\n    uVar14 = s->pending;\n    s->pending = uVar14 + 1;\n    s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);\n    s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));\n    s->bi_valid = (uVar9 - 0x10) + s->bi_valid;\n  }" { (expression_statement "uVar8 = ltree[0x100].fc.freq;" (assignment_expression "uVar8 = ltree[0x100].fc.freq" identifier = (field_expression "ltree[0x100].fc.freq" (field_expression "ltree[0x100].fc" (subscript_expression "ltree[0x100]" identifier [ number_literal ]) . field_identifier) . field_identifier)) ;) (expression_statement "uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf;" (assignment_expression "uVar7 = uVar8 << (uVar5 & 0x1f) | s->bi_buf" identifier = (binary_expression "uVar8 << (uVar5 & 0x1f) | s->bi_buf" (binary_expression "uVar8 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_buf = uVar7;" (assignment_expression "s->bi_buf = uVar7" (field_expression "s->bi_buf" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)uVar7;" (assignment_expression "s->pending_buf[uVar14] = (Bytef)uVar7" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (cast_expression "(Bytef)uVar7" ( (type_descriptor "Bytef" type_identifier) ) identifier)) ;) (expression_statement "uVar14 = s->pending;" (assignment_expression "uVar14 = s->pending" identifier = (field_expression "s->pending" identifier -> field_identifier)) ;) (expression_statement "s->pending = uVar14 + 1;" (assignment_expression "s->pending = uVar14 + 1" (field_expression "s->pending" identifier -> field_identifier) = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (expression_statement "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8);" (assignment_expression "s->pending_buf[uVar14] = (Bytef)(s->bi_buf >> 8)" (subscript_expression "s->pending_buf[uVar14]" (field_expression "s->pending_buf" identifier -> field_identifier) [ identifier ]) = (call_expression "(Bytef)(s->bi_buf >> 8)" (parenthesized_expression "(Bytef)" ( identifier )) (argument_list "(s->bi_buf >> 8)" ( (binary_expression "s->bi_buf >> 8" (field_expression "s->bi_buf" identifier -> field_identifier) >> number_literal) )))) ;) (expression_statement "s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f));" (assignment_expression "s->bi_buf = (ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" (field_expression "s->bi_buf" identifier -> field_identifier) = (call_expression "(ush)((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" (parenthesized_expression "(ush)" ( identifier )) (argument_list "((int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f))" ( (binary_expression "(int)(uint)uVar8 >> (0x10U - s->bi_valid & 0x1f)" (cast_expression "(int)(uint)uVar8" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar8" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - s->bi_valid & 0x1f)" ( (binary_expression "0x10U - s->bi_valid & 0x1f" (binary_expression "0x10U - s->bi_valid" number_literal - (field_expression "s->bi_valid" identifier -> field_identifier)) & number_literal) ))) )))) ;) (expression_statement "s->bi_valid = (uVar9 - 0x10) + s->bi_valid;" (assignment_expression "s->bi_valid = (uVar9 - 0x10) + s->bi_valid" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "(uVar9 - 0x10) + s->bi_valid" (parenthesized_expression "(uVar9 - 0x10)" ( (binary_expression "uVar9 - 0x10" identifier - number_literal) )) + (field_expression "s->bi_valid" identifier -> field_identifier))) ;) }) (else_clause "else {\n    s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_valid = uVar5 + uVar9;\n  }" else (compound_statement "{\n    s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf;\n    s->bi_valid = uVar5 + uVar9;\n  }" { (expression_statement "s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf;" (assignment_expression "s->bi_buf = ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf" (field_expression "s->bi_buf" identifier -> field_identifier) = (binary_expression "ltree[0x100].fc.freq << (uVar5 & 0x1f) | s->bi_buf" (binary_expression "ltree[0x100].fc.freq << (uVar5 & 0x1f)" (field_expression "ltree[0x100].fc.freq" (field_expression "ltree[0x100].fc" (subscript_expression "ltree[0x100]" identifier [ number_literal ]) . field_identifier) . field_identifier) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (field_expression "s->bi_buf" identifier -> field_identifier))) ;) (expression_statement "s->bi_valid = uVar5 + uVar9;" (assignment_expression "s->bi_valid = uVar5 + uVar9" (field_expression "s->bi_valid" identifier -> field_identifier) = (binary_expression "uVar5 + uVar9" identifier + identifier)) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0001c45c(int param_1,int param_2,int param_3)\n\n{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ushort *puVar6;\n  ushort uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  ushort uVar13;\n  int iVar14;\n  uint uVar15;\n  \n  puVar4 = PTR_DAT_00037030;\n  puVar3 = PTR_DAT_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }\n  uVar8 = (uint)*(ushort *)(param_2 + 0x402);\n  uVar5 = *(uint *)(param_1 + 0x16bc);\n  if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }\n  return;\n}\n\n" (function_definition "void FUN_0001c45c(int param_1,int param_2,int param_3)\n\n{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ushort *puVar6;\n  ushort uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  ushort uVar13;\n  int iVar14;\n  uint uVar15;\n  \n  puVar4 = PTR_DAT_00037030;\n  puVar3 = PTR_DAT_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }\n  uVar8 = (uint)*(ushort *)(param_2 + 0x402);\n  uVar5 = *(uint *)(param_1 + 0x16bc);\n  if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0001c45c(int param_1,int param_2,int param_3)" identifier (parameter_list "(int param_1,int param_2,int param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ushort *puVar6;\n  ushort uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  ushort uVar13;\n  int iVar14;\n  uint uVar15;\n  \n  puVar4 = PTR_DAT_00037030;\n  puVar3 = PTR_DAT_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }\n  uVar8 = (uint)*(ushort *)(param_2 + 0x402);\n  uVar5 = *(uint *)(param_1 + 0x16bc);\n  if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "ushort *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "ushort uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "ushort uVar13;" type_identifier identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (expression_statement "puVar4 = PTR_DAT_00037030;" (assignment_expression "puVar4 = PTR_DAT_00037030" identifier = identifier) ;) (expression_statement "puVar3 = PTR_DAT_0003702c;" (assignment_expression "puVar3 = PTR_DAT_0003702c" identifier = identifier) ;) (expression_statement "puVar2 = PTR_LAB_0003701c;" (assignment_expression "puVar2 = PTR_LAB_0003701c" identifier = identifier) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (if_statement "if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }" if (parenthesized_expression "(*(int *)(param_1 + 0x16a0) != 0)" ( (binary_expression "*(int *)(param_1 + 0x16a0) != 0" (pointer_expression "*(int *)(param_1 + 0x16a0)" * (cast_expression "(int *)(param_1 + 0x16a0)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }" { (do_statement "do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));" do (compound_statement "{\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    }" { (expression_statement "uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);" (assignment_expression "uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" identifier = (binary_expression "(uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" ( (binary_expression "*(int *)(param_1 + 0x16a4) + uVar5 * 2" (pointer_expression "*(int *)(param_1 + 0x16a4)" * (cast_expression "(int *)(param_1 + 0x16a4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a4)" ( (binary_expression "param_1 + 0x16a4" identifier + number_literal) )))) + (binary_expression "uVar5 * 2" identifier * number_literal)) ))))) ;) (expression_statement "uVar9 = uVar5 + 1;" (assignment_expression "uVar9 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);" (assignment_expression "uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" identifier = (binary_expression "(uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x1698) + uVar5)" ( (binary_expression "*(int *)(param_1 + 0x1698) + uVar5" (pointer_expression "*(int *)(param_1 + 0x1698)" * (cast_expression "(int *)(param_1 + 0x1698)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1698)" ( (binary_expression "param_1 + 0x1698" identifier + number_literal) )))) + identifier) ))))) ;) (if_statement "if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }" { (expression_statement "puVar6 = (ushort *)(param_2 + uVar5 * 4);" (assignment_expression "puVar6 = (ushort *)(param_2 + uVar5 * 4)" identifier = (cast_expression "(ushort *)(param_2 + uVar5 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + uVar5 * 4)" ( (binary_expression "param_2 + uVar5 * 4" identifier + (binary_expression "uVar5 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar8 = (uint)puVar6[1];" (assignment_expression "uVar8 = (uint)puVar6[1]" identifier = (cast_expression "(uint)puVar6[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar6[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" if (parenthesized_expression "((int)(0x10 - uVar8) < (int)uVar5)" ( (binary_expression "(int)(0x10 - uVar8) < (int)uVar5" (cast_expression "(int)(0x10 - uVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar8)" ( (binary_expression "0x10 - uVar8" number_literal - identifier) ))) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" { (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "(uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar8 - 0x10)" ( (binary_expression "uVar8 - 0x10" identifier - number_literal) )) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" else (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "*puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar5 & 0x1f)" (pointer_expression "*puVar6" * identifier) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar8" identifier + identifier)) ;) }))) }) (else_clause "else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" else (compound_statement "{\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" { (expression_statement "uVar15 = (uint)(byte)puVar4[uVar5];" (assignment_expression "uVar15 = (uint)(byte)puVar4[uVar5]" identifier = (cast_expression "(uint)(byte)puVar4[uVar5]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)puVar4[uVar5]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "puVar4[uVar5]" identifier [ identifier ])))) ;) (expression_statement "puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);" (assignment_expression "puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4)" identifier = (cast_expression "(ushort *)(param_2 + (uVar15 + 0x101) * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + (uVar15 + 0x101) * 4)" ( (binary_expression "param_2 + (uVar15 + 0x101) * 4" identifier + (binary_expression "(uVar15 + 0x101) * 4" (parenthesized_expression "(uVar15 + 0x101)" ( (binary_expression "uVar15 + 0x101" identifier + number_literal) )) * number_literal)) )))) ;) (expression_statement "uVar11 = (uint)puVar6[1];" (assignment_expression "uVar11 = (uint)puVar6[1]" identifier = (cast_expression "(uint)puVar6[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar6[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar10 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar10 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" if (parenthesized_expression "((int)(0x10 - uVar11) < (int)uVar10)" ( (binary_expression "(int)(0x10 - uVar11) < (int)uVar10" (cast_expression "(int)(0x10 - uVar11)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar11)" ( (binary_expression "0x10 - uVar11" number_literal - identifier) ))) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" { (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "(uVar11 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar11 - 0x10)" ( (binary_expression "uVar11 - 0x10" identifier - number_literal) )) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" else (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "*puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar10 & 0x1f)" (pointer_expression "*puVar6" * identifier) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar10 + uVar11" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar10 + uVar11" identifier + identifier)) ;) }))) (expression_statement "iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);" (assignment_expression "iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" identifier = (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x5c2c)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x5c2c" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }" { (expression_statement "uVar10 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar10 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" if (parenthesized_expression "(0x10 - iVar14 < (int)uVar10)" ( (binary_expression "0x10 - iVar14 < (int)uVar10" (binary_expression "0x10 - iVar14" number_literal - identifier) < (cast_expression "(int)uVar10" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }" { (expression_statement "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;" (assignment_expression "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" identifier = (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8)" identifier - (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x52e8)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x52e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x52e8)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x52e8" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal)) ;) (expression_statement "uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "(ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)(uVar5 << (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar5 << (uVar10 & 0x1f))" ( (binary_expression "uVar5 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar13;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar13" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" ( (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar13" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" ( (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (binary_expression "iVar14 + -0x10" identifier + number_literal) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" else (compound_statement "{\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f))" ( (binary_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)" (parenthesized_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff)" ( (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8)" identifier - (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x52e8)" * (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x52e8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x52e8)" ( (binary_expression "puVar2 + uVar15 * 4 + 0x52e8" (binary_expression "puVar2 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal) )) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar10 + iVar14" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar10 + iVar14" identifier + identifier)) ;) }))) })) (expression_statement "uVar8 = uVar8 - 1;" (assignment_expression "uVar8 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (if_statement "if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" if (parenthesized_expression "(uVar8 < 0x100)" ( (binary_expression "uVar8 < 0x100" identifier < number_literal) )) (compound_statement "{\n          bVar1 = puVar3[uVar8];\n        }" { (expression_statement "bVar1 = puVar3[uVar8];" (assignment_expression "bVar1 = puVar3[uVar8]" identifier = (subscript_expression "puVar3[uVar8]" identifier [ identifier ])) ;) }) (else_clause "else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" else (compound_statement "{\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" { (expression_statement "bVar1 = puVar3[(uVar8 >> 7) + 0x100];" (assignment_expression "bVar1 = puVar3[(uVar8 >> 7) + 0x100]" identifier = (subscript_expression "puVar3[(uVar8 >> 7) + 0x100]" identifier [ (binary_expression "(uVar8 >> 7) + 0x100" (parenthesized_expression "(uVar8 >> 7)" ( (binary_expression "uVar8 >> 7" identifier >> number_literal) )) + number_literal) ])) ;) }))) (expression_statement "uVar11 = (uint)bVar1;" (assignment_expression "uVar11 = (uint)bVar1" identifier = (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "puVar6 = (ushort *)(param_3 + uVar11 * 4);" (assignment_expression "puVar6 = (ushort *)(param_3 + uVar11 * 4)" identifier = (cast_expression "(ushort *)(param_3 + uVar11 * 4)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + uVar11 * 4)" ( (binary_expression "param_3 + uVar11 * 4" identifier + (binary_expression "uVar11 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar10 = (uint)puVar6[1];" (assignment_expression "uVar10 = (uint)puVar6[1]" identifier = (cast_expression "(uint)puVar6[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "puVar6[1]" identifier [ number_literal ]))) ;) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" if (parenthesized_expression "((int)(0x10 - uVar10) < (int)uVar5)" ( (binary_expression "(int)(0x10 - uVar10) < (int)uVar5" (cast_expression "(int)(0x10 - uVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar10)" ( (binary_expression "0x10 - uVar10" number_literal - identifier) ))) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" { (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "(uVar10 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar10 - 0x10)" ( (binary_expression "uVar10 - 0x10" identifier - number_literal) )) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" else (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "*puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar5 & 0x1f)" (pointer_expression "*puVar6" * identifier) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar10" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar10" identifier + identifier)) ;) }))) (expression_statement "iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);" (assignment_expression "iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" identifier = (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" * (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5bb4)" ( (binary_expression "puVar2 + uVar11 * 4 + 0x5bb4" (binary_expression "puVar2 + uVar11 * 4" identifier + (binary_expression "uVar11 * 4" identifier * number_literal)) + number_literal) ))))) ;) (if_statement "if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }" { (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" if (parenthesized_expression "(0x10 - iVar14 < (int)uVar5)" ( (binary_expression "0x10 - iVar14 < (int)uVar5" (binary_expression "0x10 - iVar14" number_literal - identifier) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }" { (expression_statement "uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;" (assignment_expression "uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" identifier = (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270)" identifier - (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5270)" * (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5270)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5270)" ( (binary_expression "puVar2 + uVar11 * 4 + 0x5270" (binary_expression "puVar2 + uVar11 * 4" identifier + (binary_expression "uVar11 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal)) ;) (expression_statement "uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "(ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)(uVar8 << (uVar5 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "(uVar8 << (uVar5 & 0x1f))" ( (binary_expression "uVar8 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar13;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar13" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" ( (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar13" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" ( (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (binary_expression "iVar14 + -0x10" identifier + number_literal) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" else (compound_statement "{\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "(ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f))" (parenthesized_expression "(ushort)" ( identifier )) (argument_list "((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f))" ( (binary_expression "(uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)" (parenthesized_expression "(uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff)" ( (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270)" identifier - (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5270)" * (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5270)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5270)" ( (binary_expression "puVar2 + uVar11 * 4 + 0x5270" (binary_expression "puVar2 + uVar11 * 4" identifier + (binary_expression "uVar11 * 4" identifier * number_literal)) + number_literal) ))))) & number_literal) )) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + iVar14" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar5 + iVar14" identifier + identifier)) ;) }))) })) }))) (expression_statement "uVar5 = uVar9;" (assignment_expression "uVar5 = uVar9" identifier = identifier) ;) }) while (parenthesized_expression "(uVar9 < *(uint *)(param_1 + 0x16a0))" ( (binary_expression "uVar9 < *(uint *)(param_1 + 0x16a0)" identifier < (pointer_expression "*(uint *)(param_1 + 0x16a0)" * (cast_expression "(uint *)(param_1 + 0x16a0)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16a0)" ( (binary_expression "param_1 + 0x16a0" identifier + number_literal) ))))) )) ;) })) (expression_statement "uVar8 = (uint)*(ushort *)(param_2 + 0x402);" (assignment_expression "uVar8 = (uint)*(ushort *)(param_2 + 0x402)" identifier = (binary_expression "(uint)*(ushort *)(param_2 + 0x402)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(ushort *)(param_2 + 0x402)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x402)" ( (binary_expression "param_2 + 0x402" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" identifier = (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) ;) (if_statement "if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" if (parenthesized_expression "((int)(0x10 - uVar8) < (int)uVar5)" ( (binary_expression "(int)(0x10 - uVar8) < (int)uVar5" (cast_expression "(int)(0x10 - uVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x10 - uVar8)" ( (binary_expression "0x10 - uVar8" number_literal - identifier) ))) < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }" { (expression_statement "uVar13 = *(ushort *)(param_2 + 0x400);" (assignment_expression "uVar13 = *(ushort *)(param_2 + 0x400)" identifier = (pointer_expression "*(ushort *)(param_2 + 0x400)" * (cast_expression "(ushort *)(param_2 + 0x400)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x400)" ( (binary_expression "param_2 + 0x400" identifier + number_literal) ))))) ;) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" identifier = (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" identifier << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)uVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" identifier = (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" * (cast_expression "(int *)(param_1 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" * (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" ( (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" * (cast_expression "(int *)(param_1 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) + identifier) )))) = (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" ( (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" ( identifier )) * (cast_expression "(undefined2 *)(param_1 + 0x16b8)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "*(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" * (cast_expression "(short *)(param_1 + 0x16b8)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" ( (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar13" ( (type_descriptor "uint" type_identifier) ) identifier)) >> (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" ( (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" number_literal - (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) ))))) & number_literal) ))) )))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "(uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar8 - 0x10)" ( (binary_expression "uVar8 - 0x10" identifier - number_literal) )) + (pointer_expression "*(int *)(param_1 + 0x16bc)" * (cast_expression "(int *)(param_1 + 0x16bc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))))) ;) }) (else_clause "else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" else (compound_statement "{\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" { (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))) = (binary_expression "*(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*(short *)(param_2 + 0x400) << (uVar5 & 0x1f)" (pointer_expression "*(short *)(param_2 + 0x400)" * (cast_expression "(short *)(param_2 + 0x400)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x400)" ( (binary_expression "param_2 + 0x400" identifier + number_literal) )))) << (parenthesized_expression "(uVar5 & 0x1f)" ( (binary_expression "uVar5 & 0x1f" identifier & number_literal) ))) | (pointer_expression "*(ushort *)(param_1 + 0x16b8)" * (cast_expression "(ushort *)(param_1 + 0x16b8)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16b8)" ( (binary_expression "param_1 + 0x16b8" identifier + number_literal) )))))) ;) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8" (pointer_expression "*(uint *)(param_1 + 0x16bc)" * (cast_expression "(uint *)(param_1 + 0x16bc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x16bc)" ( (binary_expression "param_1 + 0x16bc" identifier + number_literal) )))) = (binary_expression "uVar5 + uVar8" identifier + identifier)) ;) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_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 IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_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 IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_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 (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT - IDENT) ))) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor 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 (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (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 (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> (parenthesized_expression ( (binary_expression (binary_expression LIT - (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) )))) = (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * IDENT) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ IDENT ])))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_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 (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT - IDENT) ))) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor 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 (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (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 (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> (parenthesized_expression ( (binary_expression (binary_expression LIT - (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) )))) = (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * IDENT) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + 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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor 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 (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (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 (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> (parenthesized_expression ( (binary_expression (binary_expression LIT - (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) )))) = (binary_expression (binary_expression IDENT + LIT) + (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) & LIT) )) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) }))) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression (parenthesized_expression ( (binary_expression IDENT >> LIT) )) + LIT) ])) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_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 (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT - IDENT) ))) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor 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 (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (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 (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> (parenthesized_expression ( (binary_expression (binary_expression LIT - (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) )))) = (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * IDENT) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + 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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor 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 (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (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 (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> (parenthesized_expression ( (binary_expression (binary_expression LIT - (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) )))) = (binary_expression (binary_expression IDENT + LIT) + (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) ))))) & LIT) )) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) }))) })) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_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 (parenthesized_expression ( IDENT )) * (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 (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT - IDENT) ))) < (cast_expression ( (type_descriptor TYPE) ) 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 IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor 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 (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (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 (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> (parenthesized_expression ( (binary_expression (binary_expression LIT - (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) )))) = (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) }))) (return_statement return ;) })))
(function_definition "void FUN_0001c45c(int param_1,int param_2,int param_3)\n\n{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ushort *puVar6;\n  ushort uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  ushort uVar13;\n  int iVar14;\n  uint uVar15;\n  \n  puVar4 = PTR_DAT_00037030;\n  puVar3 = PTR_DAT_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }\n  uVar8 = (uint)*(ushort *)(param_2 + 0x402);\n  uVar5 = *(uint *)(param_1 + 0x16bc);\n  if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0001c45c(int param_1,int param_2,int param_3)" (identifier "FUN_0001c45c") (parameter_list "(int param_1,int param_2,int param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")"))) (compound_statement "{\n  byte bVar1;\n  undefined *puVar2;\n  undefined *puVar3;\n  undefined *puVar4;\n  uint uVar5;\n  ushort *puVar6;\n  ushort uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  int iVar12;\n  ushort uVar13;\n  int iVar14;\n  uint uVar15;\n  \n  puVar4 = PTR_DAT_00037030;\n  puVar3 = PTR_DAT_0003702c;\n  puVar2 = PTR_LAB_0003701c;\n  uVar5 = 0;\n  if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }\n  uVar8 = (uint)*(ushort *)(param_2 + 0x402);\n  uVar5 = *(uint *)(param_1 + 0x16bc);\n  if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }\n  return;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined *puVar4;" (type_identifier "undefined") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "ushort *puVar6;" (type_identifier "ushort") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "ushort uVar7;" (type_identifier "ushort") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "ushort uVar13;" (type_identifier "ushort") (identifier "uVar13") (; ";")) (declaration "int iVar14;" (primitive_type "int") (identifier "iVar14") (; ";")) (declaration "uint uVar15;" (type_identifier "uint") (identifier "uVar15") (; ";")) (expression_statement "puVar4 = PTR_DAT_00037030;" (assignment_expression "puVar4 = PTR_DAT_00037030" (identifier "puVar4") (= "=") (identifier "PTR_DAT_00037030")) (; ";")) (expression_statement "puVar3 = PTR_DAT_0003702c;" (assignment_expression "puVar3 = PTR_DAT_0003702c" (identifier "puVar3") (= "=") (identifier "PTR_DAT_0003702c")) (; ";")) (expression_statement "puVar2 = PTR_LAB_0003701c;" (assignment_expression "puVar2 = PTR_LAB_0003701c" (identifier "puVar2") (= "=") (identifier "PTR_LAB_0003701c")) (; ";")) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (if_statement "if (*(int *)(param_1 + 0x16a0) != 0) {\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }" (if "if") (parenthesized_expression "(*(int *)(param_1 + 0x16a0) != 0)" (( "(") (binary_expression "*(int *)(param_1 + 0x16a0) != 0" (pointer_expression "*(int *)(param_1 + 0x16a0)" (* "*") (cast_expression "(int *)(param_1 + 0x16a0)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16a0)" (( "(") (binary_expression "param_1 + 0x16a0" (identifier "param_1") (+ "+") (number_literal "0x16a0")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));\n  }" ({ "{") (do_statement "do {\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    } while (uVar9 < *(uint *)(param_1 + 0x16a0));" (do "do") (compound_statement "{\n      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);\n      uVar9 = uVar5 + 1;\n      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);\n      if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }\n      uVar5 = uVar9;\n    }" ({ "{") (expression_statement "uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);" (assignment_expression "uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" (identifier "uVar8") (= "=") (binary_expression "(uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x16a4) + uVar5 * 2)" (( "(") (binary_expression "*(int *)(param_1 + 0x16a4) + uVar5 * 2" (pointer_expression "*(int *)(param_1 + 0x16a4)" (* "*") (cast_expression "(int *)(param_1 + 0x16a4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16a4)" (( "(") (binary_expression "param_1 + 0x16a4" (identifier "param_1") (+ "+") (number_literal "0x16a4")) () ")")))) (+ "+") (binary_expression "uVar5 * 2" (identifier "uVar5") (* "*") (number_literal "2"))) () ")"))))) (; ";")) (expression_statement "uVar9 = uVar5 + 1;" (assignment_expression "uVar9 = uVar5 + 1" (identifier "uVar9") (= "=") (binary_expression "uVar5 + 1" (identifier "uVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);" (assignment_expression "uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" (identifier "uVar5") (= "=") (binary_expression "(uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)(*(int *)(param_1 + 0x1698) + uVar5)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x1698) + uVar5)" (( "(") (binary_expression "*(int *)(param_1 + 0x1698) + uVar5" (pointer_expression "*(int *)(param_1 + 0x1698)" (* "*") (cast_expression "(int *)(param_1 + 0x1698)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1698)" (( "(") (binary_expression "param_1 + 0x1698" (identifier "param_1") (+ "+") (number_literal "0x1698")) () ")")))) (+ "+") (identifier "uVar5")) () ")"))))) (; ";")) (if_statement "if (uVar8 == 0) {\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }\n      else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" (if "if") (parenthesized_expression "(uVar8 == 0)" (( "(") (binary_expression "uVar8 == 0" (identifier "uVar8") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        puVar6 = (ushort *)(param_2 + uVar5 * 4);\n        uVar8 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }\n      }" ({ "{") (expression_statement "puVar6 = (ushort *)(param_2 + uVar5 * 4);" (assignment_expression "puVar6 = (ushort *)(param_2 + uVar5 * 4)" (identifier "puVar6") (= "=") (cast_expression "(ushort *)(param_2 + uVar5 * 4)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + uVar5 * 4)" (( "(") (binary_expression "param_2 + uVar5 * 4" (identifier "param_2") (+ "+") (binary_expression "uVar5 * 4" (identifier "uVar5") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "uVar8 = (uint)puVar6[1];" (assignment_expression "uVar8 = (uint)puVar6[1]" (identifier "uVar8") (= "=") (cast_expression "(uint)puVar6[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (; ";")) (if_statement "if ((int)(0x10 - uVar8) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" (if "if") (parenthesized_expression "((int)(0x10 - uVar8) < (int)uVar5)" (( "(") (binary_expression "(int)(0x10 - uVar8) < (int)uVar5" (cast_expression "(int)(0x10 - uVar8)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x10 - uVar8)" (( "(") (binary_expression "0x10 - uVar8" (number_literal "0x10") (- "-") (identifier "uVar8")) () ")"))) (< "<") (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5"))) () ")")) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" ({ "{") (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" (identifier "uVar13") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (identifier "uVar7") (= "=") (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" (identifier "uVar13") (<< "<<") (parenthesized_expression "(uVar5 & 0x1f)" (( "(") (binary_expression "uVar5 & 0x1f" (identifier "uVar5") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar14")) () ")")))) (= "=") (cast_expression "(char)uVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar7"))) (; ";")) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar14")) () ")")))) (= "=") (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (* "*") (cast_expression "(undefined2 *)(param_1 + 0x16b8)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" (* "*") (cast_expression "(short *)(param_1 + 0x16b8)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)uVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar13"))) (>> ">>") (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (( "(") (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" (number_literal "0x10U") (- "-") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (& "&") (number_literal "0x1f")) () ")"))) () ")")))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "(uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar8 - 0x10)" (( "(") (binary_expression "uVar8 - 0x10" (identifier "uVar8") (- "-") (number_literal "0x10")) () ")")) (+ "+") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" (else "else") (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n        }" ({ "{") (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (binary_expression "*puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar5 & 0x1f)" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (<< "<<") (parenthesized_expression "(uVar5 & 0x1f)" (( "(") (binary_expression "uVar5 & 0x1f" (identifier "uVar5") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "uVar5 + uVar8" (identifier "uVar5") (+ "+") (identifier "uVar8"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" (else "else") (compound_statement "{\n        uVar15 = (uint)(byte)puVar4[uVar5];\n        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);\n        uVar11 = (uint)puVar6[1];\n        uVar10 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }\n        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);\n        if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }\n        uVar8 = uVar8 - 1;\n        if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }\n        uVar11 = (uint)bVar1;\n        puVar6 = (ushort *)(param_3 + uVar11 * 4);\n        uVar10 = (uint)puVar6[1];\n        uVar5 = *(uint *)(param_1 + 0x16bc);\n        if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }\n        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);\n        if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }\n      }" ({ "{") (expression_statement "uVar15 = (uint)(byte)puVar4[uVar5];" (assignment_expression "uVar15 = (uint)(byte)puVar4[uVar5]" (identifier "uVar15") (= "=") (cast_expression "(uint)(byte)puVar4[uVar5]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (cast_expression "(byte)puVar4[uVar5]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "puVar4[uVar5]" (identifier "puVar4") ([ "[") (identifier "uVar5") (] "]"))))) (; ";")) (expression_statement "puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);" (assignment_expression "puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4)" (identifier "puVar6") (= "=") (cast_expression "(ushort *)(param_2 + (uVar15 + 0x101) * 4)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + (uVar15 + 0x101) * 4)" (( "(") (binary_expression "param_2 + (uVar15 + 0x101) * 4" (identifier "param_2") (+ "+") (binary_expression "(uVar15 + 0x101) * 4" (parenthesized_expression "(uVar15 + 0x101)" (( "(") (binary_expression "uVar15 + 0x101" (identifier "uVar15") (+ "+") (number_literal "0x101")) () ")")) (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "uVar11 = (uint)puVar6[1];" (assignment_expression "uVar11 = (uint)puVar6[1]" (identifier "uVar11") (= "=") (cast_expression "(uint)puVar6[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "uVar10 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar10 = *(uint *)(param_1 + 0x16bc)" (identifier "uVar10") (= "=") (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (; ";")) (if_statement "if ((int)(0x10 - uVar11) < (int)uVar10) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" (if "if") (parenthesized_expression "((int)(0x10 - uVar11) < (int)uVar10)" (( "(") (binary_expression "(int)(0x10 - uVar11) < (int)uVar10" (cast_expression "(int)(0x10 - uVar11)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x10 - uVar11)" (( "(") (binary_expression "0x10 - uVar11" (number_literal "0x10") (- "-") (identifier "uVar11")) () ")"))) (< "<") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) () ")")) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" ({ "{") (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" (identifier "uVar13") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (identifier "uVar7") (= "=") (binary_expression "uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar10 & 0x1f)" (identifier "uVar13") (<< "<<") (parenthesized_expression "(uVar10 & 0x1f)" (( "(") (binary_expression "uVar10 & 0x1f" (identifier "uVar10") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar14")) () ")")))) (= "=") (cast_expression "(char)uVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar7"))) (; ";")) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar14")) () ")")))) (= "=") (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (* "*") (cast_expression "(undefined2 *)(param_1 + 0x16b8)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" (* "*") (cast_expression "(short *)(param_1 + 0x16b8)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)uVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar13"))) (>> ">>") (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (( "(") (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" (number_literal "0x10U") (- "-") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (& "&") (number_literal "0x1f")) () ")"))) () ")")))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "(uVar11 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar11 - 0x10)" (( "(") (binary_expression "uVar11 - 0x10" (identifier "uVar11") (- "-") (number_literal "0x10")) () ")")) (+ "+") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" (else "else") (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;\n          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;\n        }" ({ "{") (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)\n          ;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (binary_expression "*puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar10 & 0x1f)" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (<< "<<") (parenthesized_expression "(uVar10 & 0x1f)" (( "(") (binary_expression "uVar10 & 0x1f" (identifier "uVar10") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar10 + uVar11" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "uVar10 + uVar11" (identifier "uVar10") (+ "+") (identifier "uVar11"))) (; ";")) (} "}")))) (expression_statement "iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);" (assignment_expression "iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" (* "*") (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x5c2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x5c2c)" (( "(") (binary_expression "puVar2 + uVar15 * 4 + 0x5c2c" (binary_expression "puVar2 + uVar15 * 4" (identifier "puVar2") (+ "+") (binary_expression "uVar15 * 4" (identifier "uVar15") (* "*") (number_literal "4"))) (+ "+") (number_literal "0x5c2c")) () ")"))))) (; ";")) (if_statement "if (iVar14 != 0) {\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }" (if "if") (parenthesized_expression "(iVar14 != 0)" (( "(") (binary_expression "iVar14 != 0" (identifier "iVar14") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar10 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }\n        }" ({ "{") (expression_statement "uVar10 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar10 = *(uint *)(param_1 + 0x16bc)" (identifier "uVar10") (= "=") (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (; ";")) (if_statement "if (0x10 - iVar14 < (int)uVar10) {\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" (if "if") (parenthesized_expression "(0x10 - iVar14 < (int)uVar10)" (( "(") (binary_expression "0x10 - iVar14 < (int)uVar10" (binary_expression "0x10 - iVar14" (number_literal "0x10") (- "-") (identifier "iVar14")) (< "<") (cast_expression "(int)uVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar10"))) () ")")) (compound_statement "{\n            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;\n            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }" ({ "{") (expression_statement "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;" (assignment_expression "uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (identifier "uVar5") (= "=") (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8)" (identifier "uVar5") (- "-") (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x52e8)" (* "*") (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x52e8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x52e8)" (( "(") (binary_expression "puVar2 + uVar15 * 4 + 0x52e8" (binary_expression "puVar2 + uVar15 * 4" (identifier "puVar2") (+ "+") (binary_expression "uVar15 * 4" (identifier "uVar15") (* "*") (number_literal "4"))) (+ "+") (number_literal "0x52e8")) () ")"))))) (& "&") (number_literal "0xffff"))) (; ";")) (expression_statement "uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (identifier "uVar13") (= "=") (binary_expression "(ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)(uVar5 << (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(uVar5 << (uVar10 & 0x1f))" (( "(") (binary_expression "uVar5 << (uVar10 & 0x1f)" (identifier "uVar5") (<< "<<") (parenthesized_expression "(uVar10 & 0x1f)" (( "(") (binary_expression "uVar10 & 0x1f" (identifier "uVar10") (& "&") (number_literal "0x1f")) () ")"))) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar13;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar13" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (identifier "uVar13")) (; ";")) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar12 + 1" (identifier "iVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar12")) () ")")))) (= "=") (cast_expression "(char)uVar13" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar13"))) (; ";")) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar12 + 1" (identifier "iVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar12")) () ")")))) (= "=") (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (* "*") (cast_expression "(undefined2 *)(param_1 + 0x16b8)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" (* "*") (cast_expression "(short *)(param_1 + 0x16b8)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (cast_expression "(short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (binary_expression "(int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (>> ">>") (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (( "(") (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" (number_literal "0x10U") (- "-") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (& "&") (number_literal "0x1f")) () ")"))) () ")")))) (; ";")) (expression_statement "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (binary_expression "iVar14 + -0x10" (identifier "iVar14") (+ "+") (number_literal "-0x10")) (+ "+") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" (else "else") (compound_statement "{\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;\n          }" ({ "{") (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (binary_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f))" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f))" (( "(") (binary_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<\n                         (uVar10 & 0x1f)" (parenthesized_expression "(uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff)" (( "(") (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff" (binary_expression "uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8)" (identifier "uVar5") (- "-") (pointer_expression "*(int *)(puVar2 + uVar15 * 4 + 0x52e8)" (* "*") (cast_expression "(int *)(puVar2 + uVar15 * 4 + 0x52e8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + uVar15 * 4 + 0x52e8)" (( "(") (binary_expression "puVar2 + uVar15 * 4 + 0x52e8" (binary_expression "puVar2 + uVar15 * 4" (identifier "puVar2") (+ "+") (binary_expression "uVar15 * 4" (identifier "uVar15") (* "*") (number_literal "4"))) (+ "+") (number_literal "0x52e8")) () ")"))))) (& "&") (number_literal "0xffff")) () ")")) (<< "<<") (parenthesized_expression "(uVar10 & 0x1f)" (( "(") (binary_expression "uVar10 & 0x1f" (identifier "uVar10") (& "&") (number_literal "0x1f")) () ")"))) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar10 + iVar14" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "uVar10 + iVar14" (identifier "uVar10") (+ "+") (identifier "iVar14"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar8 = uVar8 - 1;" (assignment_expression "uVar8 = uVar8 - 1" (identifier "uVar8") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (if_statement "if (uVar8 < 0x100) {\n          bVar1 = puVar3[uVar8];\n        }\n        else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" (if "if") (parenthesized_expression "(uVar8 < 0x100)" (( "(") (binary_expression "uVar8 < 0x100" (identifier "uVar8") (< "<") (number_literal "0x100")) () ")")) (compound_statement "{\n          bVar1 = puVar3[uVar8];\n        }" ({ "{") (expression_statement "bVar1 = puVar3[uVar8];" (assignment_expression "bVar1 = puVar3[uVar8]" (identifier "bVar1") (= "=") (subscript_expression "puVar3[uVar8]" (identifier "puVar3") ([ "[") (identifier "uVar8") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" (else "else") (compound_statement "{\n          bVar1 = puVar3[(uVar8 >> 7) + 0x100];\n        }" ({ "{") (expression_statement "bVar1 = puVar3[(uVar8 >> 7) + 0x100];" (assignment_expression "bVar1 = puVar3[(uVar8 >> 7) + 0x100]" (identifier "bVar1") (= "=") (subscript_expression "puVar3[(uVar8 >> 7) + 0x100]" (identifier "puVar3") ([ "[") (binary_expression "(uVar8 >> 7) + 0x100" (parenthesized_expression "(uVar8 >> 7)" (( "(") (binary_expression "uVar8 >> 7" (identifier "uVar8") (>> ">>") (number_literal "7")) () ")")) (+ "+") (number_literal "0x100")) (] "]"))) (; ";")) (} "}")))) (expression_statement "uVar11 = (uint)bVar1;" (assignment_expression "uVar11 = (uint)bVar1" (identifier "uVar11") (= "=") (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1"))) (; ";")) (expression_statement "puVar6 = (ushort *)(param_3 + uVar11 * 4);" (assignment_expression "puVar6 = (ushort *)(param_3 + uVar11 * 4)" (identifier "puVar6") (= "=") (cast_expression "(ushort *)(param_3 + uVar11 * 4)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + uVar11 * 4)" (( "(") (binary_expression "param_3 + uVar11 * 4" (identifier "param_3") (+ "+") (binary_expression "uVar11 * 4" (identifier "uVar11") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "uVar10 = (uint)puVar6[1];" (assignment_expression "uVar10 = (uint)puVar6[1]" (identifier "uVar10") (= "=") (cast_expression "(uint)puVar6[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (; ";")) (if_statement "if ((int)(0x10 - uVar10) < (int)uVar5) {\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }\n        else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" (if "if") (parenthesized_expression "((int)(0x10 - uVar10) < (int)uVar5)" (( "(") (binary_expression "(int)(0x10 - uVar10) < (int)uVar5" (cast_expression "(int)(0x10 - uVar10)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x10 - uVar10)" (( "(") (binary_expression "0x10 - uVar10" (number_literal "0x10") (- "-") (identifier "uVar10")) () ")"))) (< "<") (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5"))) () ")")) (compound_statement "{\n          uVar13 = *puVar6;\n          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(ushort *)(param_1 + 0x16b8) = uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n          iVar14 = *(int *)(param_1 + 0x14);\n          *(int *)(param_1 + 0x14) = iVar14 + 1;\n          *(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n          *(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);\n        }" ({ "{") (expression_statement "uVar13 = *puVar6;" (assignment_expression "uVar13 = *puVar6" (identifier "uVar13") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (identifier "uVar7") (= "=") (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" (identifier "uVar13") (<< "<<") (parenthesized_expression "(uVar5 & 0x1f)" (( "(") (binary_expression "uVar5 & 0x1f" (identifier "uVar5") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar14")) () ")")))) (= "=") (cast_expression "(char)uVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar7"))) (; ";")) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar14")) () ")")))) (= "=") (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (* "*") (cast_expression "(undefined2 *)(param_1 + 0x16b8)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" (* "*") (cast_expression "(short *)(param_1 + 0x16b8)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)uVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar13"))) (>> ">>") (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (( "(") (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" (number_literal "0x10U") (- "-") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (& "&") (number_literal "0x1f")) () ")"))) () ")")))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "(uVar10 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar10 - 0x10)" (( "(") (binary_expression "uVar10 - 0x10" (identifier "uVar10") (- "-") (number_literal "0x10")) () ")")) (+ "+") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" (else "else") (compound_statement "{\n          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;\n        }" ({ "{") (expression_statement "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (binary_expression "*puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*puVar6 << (uVar5 & 0x1f)" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (<< "<<") (parenthesized_expression "(uVar5 & 0x1f)" (( "(") (binary_expression "uVar5 & 0x1f" (identifier "uVar5") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar10" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "uVar5 + uVar10" (identifier "uVar5") (+ "+") (identifier "uVar10"))) (; ";")) (} "}")))) (expression_statement "iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);" (assignment_expression "iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" (* "*") (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5bb4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5bb4)" (( "(") (binary_expression "puVar2 + uVar11 * 4 + 0x5bb4" (binary_expression "puVar2 + uVar11 * 4" (identifier "puVar2") (+ "+") (binary_expression "uVar11 * 4" (identifier "uVar11") (* "*") (number_literal "4"))) (+ "+") (number_literal "0x5bb4")) () ")"))))) (; ";")) (if_statement "if (iVar14 != 0) {\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }" (if "if") (parenthesized_expression "(iVar14 != 0)" (( "(") (binary_expression "iVar14 != 0" (identifier "iVar14") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar5 = *(uint *)(param_1 + 0x16bc);\n          if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }\n        }" ({ "{") (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (; ";")) (if_statement "if (0x10 - iVar14 < (int)uVar5) {\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }\n          else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" (if "if") (parenthesized_expression "(0x10 - iVar14 < (int)uVar5)" (( "(") (binary_expression "0x10 - iVar14 < (int)uVar5" (binary_expression "0x10 - iVar14" (number_literal "0x10") (- "-") (identifier "iVar14")) (< "<") (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5"))) () ")")) (compound_statement "{\n            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;\n            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(ushort *)(param_1 + 0x16b8) = uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;\n            iVar12 = *(int *)(param_1 + 0x14);\n            *(int *)(param_1 + 0x14) = iVar12 + 1;\n            *(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n            *(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);\n          }" ({ "{") (expression_statement "uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;" (assignment_expression "uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" (identifier "uVar8") (= "=") (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270)" (identifier "uVar8") (- "-") (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5270)" (* "*") (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5270)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5270)" (( "(") (binary_expression "puVar2 + uVar11 * 4 + 0x5270" (binary_expression "puVar2 + uVar11 * 4" (identifier "puVar2") (+ "+") (binary_expression "uVar11 * 4" (identifier "uVar11") (* "*") (number_literal "4"))) (+ "+") (number_literal "0x5270")) () ")"))))) (& "&") (number_literal "0xffff"))) (; ";")) (expression_statement "uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (identifier "uVar13") (= "=") (binary_expression "(ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)(uVar8 << (uVar5 & 0x1f))" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "(uVar8 << (uVar5 & 0x1f))" (( "(") (binary_expression "uVar8 << (uVar5 & 0x1f)" (identifier "uVar8") (<< "<<") (parenthesized_expression "(uVar5 & 0x1f)" (( "(") (binary_expression "uVar5 & 0x1f" (identifier "uVar5") (& "&") (number_literal "0x1f")) () ")"))) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar13;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar13" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (identifier "uVar13")) (; ";")) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar12 + 1" (identifier "iVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar12")) () ")")))) (= "=") (cast_expression "(char)uVar13" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar13"))) (; ";")) (expression_statement "iVar12 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar12 = *(int *)(param_1 + 0x14)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar12 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar12 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar12 + 1" (identifier "iVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar12) =\n                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar12)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar12)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar12)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar12" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar12")) () ")")))) (= "=") (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (* "*") (cast_expression "(undefined2 *)(param_1 + 0x16b8)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" (* "*") (cast_expression "(short *)(param_1 + 0x16b8)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (cast_expression "(short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (binary_expression "(int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)uVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar8")) (>> ">>") (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (( "(") (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" (number_literal "0x10U") (- "-") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (& "&") (number_literal "0x1f")) () ")"))) () ")")))) (; ";")) (expression_statement "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "iVar14 + -0x10 + *(int *)(param_1 + 0x16bc)" (binary_expression "iVar14 + -0x10" (identifier "iVar14") (+ "+") (number_literal "-0x10")) (+ "+") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" (else "else") (compound_statement "{\n            *(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);\n            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;\n          }" ({ "{") (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (binary_expression "(ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8)" (call_expression "(ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f))" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (argument_list "((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f))" (( "(") (binary_expression "(uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<\n                         (uVar5 & 0x1f)" (parenthesized_expression "(uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff)" (( "(") (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff" (binary_expression "uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270)" (identifier "uVar8") (- "-") (pointer_expression "*(int *)(puVar2 + uVar11 * 4 + 0x5270)" (* "*") (cast_expression "(int *)(puVar2 + uVar11 * 4 + 0x5270)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + uVar11 * 4 + 0x5270)" (( "(") (binary_expression "puVar2 + uVar11 * 4 + 0x5270" (binary_expression "puVar2 + uVar11 * 4" (identifier "puVar2") (+ "+") (binary_expression "uVar11 * 4" (identifier "uVar11") (* "*") (number_literal "4"))) (+ "+") (number_literal "0x5270")) () ")"))))) (& "&") (number_literal "0xffff")) () ")")) (<< "<<") (parenthesized_expression "(uVar5 & 0x1f)" (( "(") (binary_expression "uVar5 & 0x1f" (identifier "uVar5") (& "&") (number_literal "0x1f")) () ")"))) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + iVar14" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "uVar5 + iVar14" (identifier "uVar5") (+ "+") (identifier "iVar14"))) (; ";")) (} "}")))) (} "}"))) (} "}")))) (expression_statement "uVar5 = uVar9;" (assignment_expression "uVar5 = uVar9" (identifier "uVar5") (= "=") (identifier "uVar9")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar9 < *(uint *)(param_1 + 0x16a0))" (( "(") (binary_expression "uVar9 < *(uint *)(param_1 + 0x16a0)" (identifier "uVar9") (< "<") (pointer_expression "*(uint *)(param_1 + 0x16a0)" (* "*") (cast_expression "(uint *)(param_1 + 0x16a0)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16a0)" (( "(") (binary_expression "param_1 + 0x16a0" (identifier "param_1") (+ "+") (number_literal "0x16a0")) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "uVar8 = (uint)*(ushort *)(param_2 + 0x402);" (assignment_expression "uVar8 = (uint)*(ushort *)(param_2 + 0x402)" (identifier "uVar8") (= "=") (binary_expression "(uint)*(ushort *)(param_2 + 0x402)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(ushort *)(param_2 + 0x402)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x402)" (( "(") (binary_expression "param_2 + 0x402" (identifier "param_2") (+ "+") (number_literal "0x402")) () ")"))))) (; ";")) (expression_statement "uVar5 = *(uint *)(param_1 + 0x16bc);" (assignment_expression "uVar5 = *(uint *)(param_1 + 0x16bc)" (identifier "uVar5") (= "=") (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (; ";")) (if_statement "if ((int)(0x10 - uVar8) < (int)uVar5) {\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }\n  else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" (if "if") (parenthesized_expression "((int)(0x10 - uVar8) < (int)uVar5)" (( "(") (binary_expression "(int)(0x10 - uVar8) < (int)uVar5" (cast_expression "(int)(0x10 - uVar8)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x10 - uVar8)" (( "(") (binary_expression "0x10 - uVar8" (number_literal "0x10") (- "-") (identifier "uVar8")) () ")"))) (< "<") (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5"))) () ")")) (compound_statement "{\n    uVar13 = *(ushort *)(param_2 + 0x400);\n    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(ushort *)(param_1 + 0x16b8) = uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;\n    iVar14 = *(int *)(param_1 + 0x14);\n    *(int *)(param_1 + 0x14) = iVar14 + 1;\n    *(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);\n    *(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));\n    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);\n  }" ({ "{") (expression_statement "uVar13 = *(ushort *)(param_2 + 0x400);" (assignment_expression "uVar13 = *(ushort *)(param_2 + 0x400)" (identifier "uVar13") (= "=") (pointer_expression "*(ushort *)(param_2 + 0x400)" (* "*") (cast_expression "(ushort *)(param_2 + 0x400)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x400)" (( "(") (binary_expression "param_2 + 0x400" (identifier "param_2") (+ "+") (number_literal "0x400")) () ")"))))) (; ";")) (expression_statement "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (identifier "uVar7") (= "=") (binary_expression "uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "uVar13 << (uVar5 & 0x1f)" (identifier "uVar13") (<< "<<") (parenthesized_expression "(uVar5 & 0x1f)" (( "(") (binary_expression "uVar5 & 0x1f" (identifier "uVar5") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(ushort *)(param_1 + 0x16b8) = uVar7;" (assignment_expression "*(ushort *)(param_1 + 0x16b8) = uVar7" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar14")) () ")")))) (= "=") (cast_expression "(char)uVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar7"))) (; ";")) (expression_statement "iVar14 = *(int *)(param_1 + 0x14);" (assignment_expression "iVar14 = *(int *)(param_1 + 0x14)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(int *)(param_1 + 0x14) = iVar14 + 1;" (assignment_expression "*(int *)(param_1 + 0x14) = iVar14 + 1" (pointer_expression "*(int *)(param_1 + 0x14)" (* "*") (cast_expression "(int *)(param_1 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);" (assignment_expression "*(char *)(*(int *)(param_1 + 8) + iVar14) =\n         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (pointer_expression "*(char *)(*(int *)(param_1 + 8) + iVar14)" (* "*") (cast_expression "(char *)(*(int *)(param_1 + 8) + iVar14)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 8) + iVar14)" (( "(") (binary_expression "*(int *)(param_1 + 8) + iVar14" (pointer_expression "*(int *)(param_1 + 8)" (* "*") (cast_expression "(int *)(param_1 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar14")) () ")")))) (= "=") (cast_expression "(char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8)" (( "(") (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8" (binary_expression "(ushort)*(undefined2 *)(param_1 + 0x16b8)" (parenthesized_expression "(ushort)" (( "(") (identifier "ushort") () ")")) (* "*") (cast_expression "(undefined2 *)(param_1 + 0x16b8)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (>> ">>") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));" (assignment_expression "*(short *)(param_1 + 0x16b8) =\n         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (pointer_expression "*(short *)(param_1 + 0x16b8)" (* "*") (cast_expression "(short *)(param_1 + 0x16b8)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (cast_expression "(short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (parenthesized_expression "((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f))" (( "(") (binary_expression "(int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (cast_expression "(int)(uint)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)uVar13" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar13"))) (>> ">>") (parenthesized_expression "(0x10U - *(int *)(param_1 + 0x16bc) & 0x1f)" (( "(") (binary_expression "0x10U - *(int *)(param_1 + 0x16bc) & 0x1f" (binary_expression "0x10U - *(int *)(param_1 + 0x16bc)" (number_literal "0x10U") (- "-") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")"))))) (& "&") (number_literal "0x1f")) () ")"))) () ")")))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);" (assignment_expression "*(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "(uVar8 - 0x10) + *(int *)(param_1 + 0x16bc)" (parenthesized_expression "(uVar8 - 0x10)" (( "(") (binary_expression "uVar8 - 0x10" (identifier "uVar8") (- "-") (number_literal "0x10")) () ")")) (+ "+") (pointer_expression "*(int *)(param_1 + 0x16bc)" (* "*") (cast_expression "(int *)(param_1 + 0x16bc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))))) (; ";")) (} "}")) (else_clause "else {\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" (else "else") (compound_statement "{\n    *(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);\n    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;\n  }" ({ "{") (expression_statement "*(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);" (assignment_expression "*(ushort *)(param_1 + 0x16b8) =\n         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))) (= "=") (binary_expression "*(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8)" (binary_expression "*(short *)(param_2 + 0x400) << (uVar5 & 0x1f)" (pointer_expression "*(short *)(param_2 + 0x400)" (* "*") (cast_expression "(short *)(param_2 + 0x400)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x400)" (( "(") (binary_expression "param_2 + 0x400" (identifier "param_2") (+ "+") (number_literal "0x400")) () ")")))) (<< "<<") (parenthesized_expression "(uVar5 & 0x1f)" (( "(") (binary_expression "uVar5 & 0x1f" (identifier "uVar5") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (pointer_expression "*(ushort *)(param_1 + 0x16b8)" (* "*") (cast_expression "(ushort *)(param_1 + 0x16b8)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16b8)" (( "(") (binary_expression "param_1 + 0x16b8" (identifier "param_1") (+ "+") (number_literal "0x16b8")) () ")")))))) (; ";")) (expression_statement "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;" (assignment_expression "*(uint *)(param_1 + 0x16bc) = uVar5 + uVar8" (pointer_expression "*(uint *)(param_1 + 0x16bc)" (* "*") (cast_expression "(uint *)(param_1 + 0x16bc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x16bc)" (( "(") (binary_expression "param_1 + 0x16bc" (identifier "param_1") (+ "+") (number_literal "0x16bc")) () ")")))) (= "=") (binary_expression "uVar5 + uVar8" (identifier "uVar5") (+ "+") (identifier "uVar8"))) (; ";")) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(type_1 *s,type_2 *var_3,type_2 *var_11)

{
  type_3 bVar1;
  type_4 *var_9;
  type_4 *puVar3;
  type_4 *puVar4;
  type_5 var_1;
  type_2 *pcVar6;
  type_6 var_8;
  type_6 var_2;
  type_5 var_12;
  type_5 var_4;
  type_6 uVar12;
  int var_10;
  type_5 var_7;
  type_7 var_5;
  type_5 var_6;
  
  puVar4 = PTR__length_code_00037030;
  puVar3 = PTR__dist_code_0003702c;
  var_9 = PTR_LAB_0003701c;
  var_1 = 0;
  if (s->last_lit != 0) {
    do {
      var_2 = s->d_buf[var_1];
      var_12 = var_1 + 1;
      var_1 = (type_5)s->l_buf[var_1];
      if (var_2 == 0) {
        pcVar6 = var_3 + var_1;
        var_4 = (type_5)(pcVar6->dl).dad;
        var_1 = s->bi_valid;
        if ((int)(0x10 - var_4) < (int)var_1) {
          var_2 = (pcVar6->fc).freq;
          var_8 = var_2 << (var_1 & 0x1f) | s->bi_buf;
          s->bi_buf = var_8;
          var_5 = s->pending;
          s->pending = var_5 + 1;
          s->pending_buf[var_5] = (type_8)var_8;
          var_5 = s->pending;
          s->pending = var_5 + 1;
          s->pending_buf[var_5] = (type_8)(s->bi_buf >> 8);
          s->bi_buf = (ush)((int)(type_5)var_2 >> (0x10U - s->bi_valid & 0x1f));
          s->bi_valid = (var_4 - 0x10) + s->bi_valid;
        }
        else {
          s->bi_buf = (pcVar6->fc).freq << (var_1 & 0x1f) | s->bi_buf;
          s->bi_valid = var_1 + var_4;
        }
      }
      else {
        var_6 = (type_5)(type_3)puVar4[var_1];
        pcVar6 = var_3 + var_6 + 0x101;
        var_7 = (type_5)(pcVar6->dl).dad;
        var_4 = s->bi_valid;
        if ((int)(0x10 - var_7) < (int)var_4) {
          var_8 = (pcVar6->fc).freq;
          uVar12 = var_8 << (var_4 & 0x1f) | s->bi_buf;
          s->bi_buf = uVar12;
          var_5 = s->pending;
          s->pending = var_5 + 1;
          s->pending_buf[var_5] = (type_8)uVar12;
          var_5 = s->pending;
          s->pending = var_5 + 1;
          s->pending_buf[var_5] = (type_8)(s->bi_buf >> 8);
          s->bi_buf = (ush)((int)(type_5)var_8 >> (0x10U - s->bi_valid & 0x1f));
          s->bi_valid = (var_7 - 0x10) + s->bi_valid;
        }
        else {
          s->bi_buf = (pcVar6->fc).freq << (var_4 & 0x1f) | s->bi_buf;
          s->bi_valid = var_4 + var_7;
        }
        var_10 = *(int *)(var_9 + var_6 * 4 + 0x5c2c);
        if (var_10 != 0) {
          var_4 = s->bi_valid;
          if (0x10 - var_10 < (int)var_4) {
            var_1 = var_1 - *(int *)(var_9 + var_6 * 4 + 0x52e8) & 0xffff;
            var_8 = (type_6)(var_1 << (var_4 & 0x1f)) | s->bi_buf;
            s->bi_buf = var_8;
            var_5 = s->pending;
            s->pending = var_5 + 1;
            s->pending_buf[var_5] = (type_8)var_8;
            var_5 = s->pending;
            s->pending = var_5 + 1;
            s->pending_buf[var_5] = (type_8)(s->bi_buf >> 8);
            s->bi_buf = (ush)((int)var_1 >> (0x10U - s->bi_valid & 0x1f));
            s->bi_valid = var_10 + -0x10 + s->bi_valid;
          }
          else {
            s->bi_buf = (type_6)((var_1 - *(int *)(var_9 + var_6 * 4 + 0x52e8) & 0xffff) <<
                                (var_4 & 0x1f)) | s->bi_buf;
            s->bi_valid = var_4 + var_10;
          }
        }
        var_1 = var_2 - 1;
        if (var_1 < 0x100) {
          bVar1 = puVar3[var_1];
        }
        else {
          bVar1 = puVar3[(var_1 >> 7) + 0x100];
        }
        var_6 = (type_5)bVar1;
        pcVar6 = var_11 + var_6;
        var_7 = (type_5)(pcVar6->dl).dad;
        var_4 = s->bi_valid;
        if ((int)(0x10 - var_7) < (int)var_4) {
          var_2 = (pcVar6->fc).freq;
          var_8 = var_2 << (var_4 & 0x1f) | s->bi_buf;
          s->bi_buf = var_8;
          var_5 = s->pending;
          s->pending = var_5 + 1;
          s->pending_buf[var_5] = (type_8)var_8;
          var_5 = s->pending;
          s->pending = var_5 + 1;
          s->pending_buf[var_5] = (type_8)(s->bi_buf >> 8);
          s->bi_buf = (ush)((int)(type_5)var_2 >> (0x10U - s->bi_valid & 0x1f));
          s->bi_valid = (var_7 - 0x10) + s->bi_valid;
        }
        else {
          s->bi_buf = (pcVar6->fc).freq << (var_4 & 0x1f) | s->bi_buf;
          s->bi_valid = var_4 + var_7;
        }
        var_10 = *(int *)(var_9 + var_6 * 4 + 0x5bb4);
        if (var_10 != 0) {
          var_4 = s->bi_valid;
          if (0x10 - var_10 < (int)var_4) {
            var_1 = var_1 - *(int *)(var_9 + var_6 * 4 + 0x5270) & 0xffff;
            var_2 = (type_6)(var_1 << (var_4 & 0x1f)) | s->bi_buf;
            s->bi_buf = var_2;
            var_5 = s->pending;
            s->pending = var_5 + 1;
            s->pending_buf[var_5] = (type_8)var_2;
            var_5 = s->pending;
            s->pending = var_5 + 1;
            s->pending_buf[var_5] = (type_8)(s->bi_buf >> 8);
            s->bi_buf = (ush)((int)var_1 >> (0x10U - s->bi_valid & 0x1f));
            s->bi_valid = var_10 + -0x10 + s->bi_valid;
          }
          else {
            s->bi_buf = (type_6)((var_1 - *(int *)(var_9 + var_6 * 4 + 0x5270) & 0xffff) <<
                                (var_4 & 0x1f)) | s->bi_buf;
            s->bi_valid = var_4 + var_10;
          }
        }
      }
      var_1 = var_12;
    } while (var_12 < s->last_lit);
  }
  var_12 = (type_5)var_3[0x100].dl.dad;
  var_1 = s->bi_valid;
  if ((int)(0x10 - var_12) < (int)var_1) {
    var_2 = var_3[0x100].fc.freq;
    var_8 = var_2 << (var_1 & 0x1f) | s->bi_buf;
    s->bi_buf = var_8;
    var_5 = s->pending;
    s->pending = var_5 + 1;
    s->pending_buf[var_5] = (type_8)var_8;
    var_5 = s->pending;
    s->pending = var_5 + 1;
    s->pending_buf[var_5] = (type_8)(s->bi_buf >> 8);
    s->bi_buf = (ush)((int)(type_5)var_2 >> (0x10U - s->bi_valid & 0x1f));
    s->bi_valid = (var_12 - 0x10) + s->bi_valid;
  }
  else {
    s->bi_buf = var_3[0x100].fc.freq << (var_1 & 0x1f) | s->bi_buf;
    s->bi_valid = var_1 + var_12;
  }
  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)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (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: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (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: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) 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)))))) 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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (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: (pointer_expression argument: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (identifier)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (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: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) 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)))))) 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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (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: (pointer_expression argument: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) 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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (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: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) 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)))))) 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: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (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: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (binary_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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (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: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) 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)))))) 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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (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: (pointer_expression argument: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) 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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (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: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) 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)))))) 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: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (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: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (binary_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: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (identifier)))))))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (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: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (primitive_type) declarator: (abstract_pointer_declarator)) value: (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: (identifier))))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (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: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) 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)))))) 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: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (identifier))))))) (return_statement))))

void MASKED(int param_1,int param_2,int param_3)

{
  byte bVar1;
  undefined *puVar2;
  undefined *puVar3;
  undefined *puVar4;
  uint uVar5;
  ushort *puVar6;
  ushort uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  ushort uVar13;
  int iVar14;
  uint uVar15;
  
  puVar4 = PTR_DAT_00037030;
  puVar3 = PTR_DAT_0003702c;
  puVar2 = PTR_LAB_0003701c;
  uVar5 = 0;
  if (*(int *)(param_1 + 0x16a0) != 0) {
    do {
      uVar8 = (uint)*(ushort *)(*(int *)(param_1 + 0x16a4) + uVar5 * 2);
      uVar9 = uVar5 + 1;
      uVar5 = (uint)*(byte *)(*(int *)(param_1 + 0x1698) + uVar5);
      if (uVar8 == 0) {
        puVar6 = (ushort *)(param_2 + uVar5 * 4);
        uVar8 = (uint)puVar6[1];
        uVar5 = *(uint *)(param_1 + 0x16bc);
        if ((int)(0x10 - uVar8) < (int)uVar5) {
          uVar13 = *puVar6;
          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(ushort *)(param_1 + 0x16b8) = uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) =
               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
          *(short *)(param_1 + 0x16b8) =
               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
          *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);
        }
        else {
          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;
        }
      }
      else {
        uVar15 = (uint)(byte)puVar4[uVar5];
        puVar6 = (ushort *)(param_2 + (uVar15 + 0x101) * 4);
        uVar11 = (uint)puVar6[1];
        uVar10 = *(uint *)(param_1 + 0x16bc);
        if ((int)(0x10 - uVar11) < (int)uVar10) {
          uVar13 = *puVar6;
          uVar7 = uVar13 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(ushort *)(param_1 + 0x16b8) = uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) =
               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
          *(short *)(param_1 + 0x16b8) =
               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
          *(uint *)(param_1 + 0x16bc) = (uVar11 - 0x10) + *(int *)(param_1 + 0x16bc);
        }
        else {
          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar10 & 0x1f) | *(ushort *)(param_1 + 0x16b8)
          ;
          *(uint *)(param_1 + 0x16bc) = uVar10 + uVar11;
        }
        iVar14 = *(int *)(puVar2 + uVar15 * 4 + 0x5c2c);
        if (iVar14 != 0) {
          uVar10 = *(uint *)(param_1 + 0x16bc);
          if (0x10 - iVar14 < (int)uVar10) {
            uVar5 = uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff;
            uVar13 = (ushort)(uVar5 << (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);
            *(ushort *)(param_1 + 0x16b8) = uVar13;
            iVar12 = *(int *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar12 + 1;
            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;
            iVar12 = *(int *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar12 + 1;
            *(char *)(*(int *)(param_1 + 8) + iVar12) =
                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
            *(short *)(param_1 + 0x16b8) =
                 (short)((int)uVar5 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);
          }
          else {
            *(ushort *)(param_1 + 0x16b8) =
                 (ushort)((uVar5 - *(int *)(puVar2 + uVar15 * 4 + 0x52e8) & 0xffff) <<
                         (uVar10 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);
            *(uint *)(param_1 + 0x16bc) = uVar10 + iVar14;
          }
        }
        uVar8 = uVar8 - 1;
        if (uVar8 < 0x100) {
          bVar1 = puVar3[uVar8];
        }
        else {
          bVar1 = puVar3[(uVar8 >> 7) + 0x100];
        }
        uVar11 = (uint)bVar1;
        puVar6 = (ushort *)(param_3 + uVar11 * 4);
        uVar10 = (uint)puVar6[1];
        uVar5 = *(uint *)(param_1 + 0x16bc);
        if ((int)(0x10 - uVar10) < (int)uVar5) {
          uVar13 = *puVar6;
          uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(ushort *)(param_1 + 0x16b8) = uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;
          iVar14 = *(int *)(param_1 + 0x14);
          *(int *)(param_1 + 0x14) = iVar14 + 1;
          *(char *)(*(int *)(param_1 + 8) + iVar14) =
               (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
          *(short *)(param_1 + 0x16b8) =
               (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
          *(uint *)(param_1 + 0x16bc) = (uVar10 - 0x10) + *(int *)(param_1 + 0x16bc);
        }
        else {
          *(ushort *)(param_1 + 0x16b8) = *puVar6 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
          *(uint *)(param_1 + 0x16bc) = uVar5 + uVar10;
        }
        iVar14 = *(int *)(puVar2 + uVar11 * 4 + 0x5bb4);
        if (iVar14 != 0) {
          uVar5 = *(uint *)(param_1 + 0x16bc);
          if (0x10 - iVar14 < (int)uVar5) {
            uVar8 = uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff;
            uVar13 = (ushort)(uVar8 << (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);
            *(ushort *)(param_1 + 0x16b8) = uVar13;
            iVar12 = *(int *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar12 + 1;
            *(char *)(*(int *)(param_1 + 8) + iVar12) = (char)uVar13;
            iVar12 = *(int *)(param_1 + 0x14);
            *(int *)(param_1 + 0x14) = iVar12 + 1;
            *(char *)(*(int *)(param_1 + 8) + iVar12) =
                 (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
            *(short *)(param_1 + 0x16b8) =
                 (short)((int)uVar8 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
            *(int *)(param_1 + 0x16bc) = iVar14 + -0x10 + *(int *)(param_1 + 0x16bc);
          }
          else {
            *(ushort *)(param_1 + 0x16b8) =
                 (ushort)((uVar8 - *(int *)(puVar2 + uVar11 * 4 + 0x5270) & 0xffff) <<
                         (uVar5 & 0x1f)) | *(ushort *)(param_1 + 0x16b8);
            *(uint *)(param_1 + 0x16bc) = uVar5 + iVar14;
          }
        }
      }
      uVar5 = uVar9;
    } while (uVar9 < *(uint *)(param_1 + 0x16a0));
  }
  uVar8 = (uint)*(ushort *)(param_2 + 0x402);
  uVar5 = *(uint *)(param_1 + 0x16bc);
  if ((int)(0x10 - uVar8) < (int)uVar5) {
    uVar13 = *(ushort *)(param_2 + 0x400);
    uVar7 = uVar13 << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
    *(ushort *)(param_1 + 0x16b8) = uVar7;
    iVar14 = *(int *)(param_1 + 0x14);
    *(int *)(param_1 + 0x14) = iVar14 + 1;
    *(char *)(*(int *)(param_1 + 8) + iVar14) = (char)uVar7;
    iVar14 = *(int *)(param_1 + 0x14);
    *(int *)(param_1 + 0x14) = iVar14 + 1;
    *(char *)(*(int *)(param_1 + 8) + iVar14) =
         (char)((ushort)*(undefined2 *)(param_1 + 0x16b8) >> 8);
    *(short *)(param_1 + 0x16b8) =
         (short)((int)(uint)uVar13 >> (0x10U - *(int *)(param_1 + 0x16bc) & 0x1f));
    *(uint *)(param_1 + 0x16bc) = (uVar8 - 0x10) + *(int *)(param_1 + 0x16bc);
  }
  else {
    *(ushort *)(param_1 + 0x16b8) =
         *(short *)(param_2 + 0x400) << (uVar5 & 0x1f) | *(ushort *)(param_1 + 0x16b8);
    *(uint *)(param_1 + 0x16bc) = uVar5 + uVar8;
  }
  return;
}

