
void fill_window(deflate_state *s)

{
  byte bVar1;
  uint uVar2;
  uInt uVar3;
  z_streamp strm;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  Posf *pPVar7;
  byte *pbVar8;
  uint uVar9;
  uint uVar10;
  uInt uVar11;
  uint uVar12;
  
  uVar2 = s->lookahead;
  uVar11 = s->w_size;
  uVar3 = uVar11;
  while( true ) {
    uVar2 = (s->window_size - uVar2) - s->strstart;
    if (s->strstart < (uVar11 - 0x106) + uVar3) {
      strm = s->strm;
      uVar3 = strm->avail_in;
    }
    else {
      iVar5 = uVar11 - uVar2;
      uVar2 = uVar2 + uVar11;
      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);
      s->match_start = s->match_start - uVar11;
      s->strstart = s->strstart - uVar11;
      s->block_start = s->block_start - uVar11;
      slide_hash(s);
      strm = s->strm;
      uVar3 = strm->avail_in;
    }
    if (uVar3 == 0) break;
    uVar2 = read_buf(strm,s->window + s->strstart + s->lookahead,uVar2);
    uVar3 = s->insert;
    uVar2 = uVar2 + s->lookahead;
    s->lookahead = uVar2;
    if (2 < uVar2 + uVar3) {
      uVar10 = s->hash_shift;
      uVar12 = s->strstart - uVar3;
      uVar9 = s->hash_mask;
      pbVar6 = s->window + uVar12;
      uVar4 = (uint)*pbVar6;
      pbVar8 = s->window + uVar12 + 2;
      s->ins_h = uVar4;
      s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;
      do {
        if (uVar3 == 0) break;
        uVar3 = uVar3 - 1;
        bVar1 = *pbVar8;
        pbVar8 = pbVar8 + 1;
        pPVar7 = s->head;
        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;
        s->ins_h = uVar4;
        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];
        pPVar7[uVar4] = (Posf)uVar12;
        uVar12 = uVar12 + 1;
        s->insert = uVar3;
      } while (2 < uVar2 + uVar3);
    }
    if ((0x105 < uVar2) || (s->strm->avail_in == 0)) break;
    uVar3 = s->w_size;
  }
  uVar4 = s->high_water;
  uVar2 = s->window_size;
  if (uVar4 < uVar2) {
    uVar12 = s->strstart + s->lookahead;
    if (uVar4 < uVar12) {
      uVar4 = 0x102;
      if (uVar2 - uVar12 < 0x103) {
        uVar4 = uVar2 - uVar12;
      }
      (*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);
      s->high_water = uVar12 + uVar4;
    }
    else if (uVar4 < uVar12 + 0x102) {
      uVar12 = (uVar12 - uVar4) + 0x102;
      if (uVar2 - uVar4 <= uVar12) {
        uVar12 = uVar2 - uVar4;
      }
      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);
      s->high_water = s->high_water + uVar12;
      return;
    }
  }
  return;
}



void FUN_00012a58(int *param_1)

{
  byte bVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  undefined2 *puVar5;
  int iVar6;
  byte *pbVar7;
  byte *pbVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  int iVar13;
  
  uVar2 = param_1[0x1d];
  iVar11 = param_1[0xb];
  iVar6 = iVar11;
  while( true ) {
    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];
    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {
      iVar6 = *param_1;
      iVar3 = *(int *)(iVar6 + 4);
    }
    else {
      iVar6 = iVar11 - iVar13;
      iVar13 = iVar13 + iVar11;
      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);
      param_1[0x1c] = param_1[0x1c] - iVar11;
      param_1[0x1b] = param_1[0x1b] - iVar11;
      param_1[0x17] = param_1[0x17] - iVar11;
      FUN_000126e0(param_1);
      iVar6 = *param_1;
      iVar3 = *(int *)(iVar6 + 4);
    }
    if (iVar3 == 0) break;
    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);
    iVar13 = param_1[0x5ad];
    uVar2 = iVar6 + param_1[0x1d];
    param_1[0x1d] = uVar2;
    if (2 < uVar2 + iVar13) {
      uVar10 = param_1[0x16];
      uVar12 = param_1[0x1b] - iVar13;
      uVar9 = param_1[0x15];
      pbVar7 = (byte *)(param_1[0xe] + uVar12);
      uVar4 = (uint)*pbVar7;
      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);
      param_1[0x12] = uVar4;
      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;
      do {
        if (iVar13 == 0) break;
        iVar13 = iVar13 + -1;
        bVar1 = *pbVar8;
        pbVar8 = pbVar8 + 1;
        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;
        param_1[0x12] = uVar4;
        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);
        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;
        *puVar5 = (short)uVar12;
        uVar12 = uVar12 + 1;
        param_1[0x5ad] = iVar13;
      } while (2 < uVar2 + iVar13);
    }
    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;
    iVar6 = param_1[0xb];
  }
  uVar4 = param_1[0x5b0];
  uVar2 = param_1[0xf];
  if (uVar4 < uVar2) {
    uVar12 = param_1[0x1b] + param_1[0x1d];
    if (uVar4 < uVar12) {
      uVar4 = 0x102;
      if (uVar2 - uVar12 < 0x103) {
        uVar4 = uVar2 - uVar12;
      }
      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);
      param_1[0x5b0] = uVar12 + uVar4;
    }
    else if (uVar4 < uVar12 + 0x102) {
      uVar12 = (uVar12 - uVar4) + 0x102;
      if (uVar2 - uVar4 <= uVar12) {
        uVar12 = uVar2 - uVar4;
      }
      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);
      param_1[0x5b0] = param_1[0x5b0] + uVar12;
      return;
    }
  }
  return;
}


lui gp,0x3
addiu gp,gp,-0x4a68
addu gp,gp,t9
addiu sp,sp,-0x38
lw v0,0x74(a0)
sw s4,0x2c(sp)
sw s2,0x24(sp)
sw s1,0x20(sp)
sw gp,0x10(sp)
sw s3,0x28(sp)
sw s0,0x1c(sp)
or s0,a0,zero
sw ra,0x34(sp)
sw s5,0x30(sp)
lw s1,0x2c(a0)
lw s4,-0x7fd8(gp)
lw s2,-0x7fd8(gp)
addiu s3,s1,-0x106
addiu s4,s4,0x26e0
addiu s2,s2,0x297c
b 0x00012b20
_or v1,s1,zero
lw a0,0x0(s0)
lw v0,0x4(a0)
beq v0,zero,0x00012b94
_nop
lw v1,0x74(s0)
or a2,s5,zero
lw v0,0x6c(s0)
or t9,s2,zero
lw a1,0x38(s0)
addu v0,v0,v1
bal 0x0001297c
_addu a1,a1,v0
lw v1,0x74(s0)
lw a0,0x16b4(s0)
lw gp,0x10(sp)
addu v0,v0,v1
addu v1,v0,a0
sltiu v1,v1,0x3
beq v1,zero,0x00012c18
_sw v0,0x74(s0)
sltiu v1,v0,0x106
beq v1,zero,0x00012b94
_nop
lw v1,0x0(s0)
lw v1,0x4(v1)
beq v1,zero,0x00012b94
_nop
lw v1,0x2c(s0)
lw s5,0x3c(s0)
addu v1,s3,v1
lw a0,0x6c(s0)
subu v0,s5,v0
sltu v1,a0,v1
bne v1,zero,0x00012ab0
_subu s5,v0,a0
lw a0,0x38(s0)
subu a2,s1,s5
lw t9,-0x7ef4(gp)
addu s5,s5,s1
jalr t9
_addu a1,a0,s1
or a0,s0,zero
lw a1,0x70(s0)
or t9,s4,zero
lw v1,0x6c(s0)
lw v0,0x5c(s0)
subu a1,a1,s1
subu v1,v1,s1
subu v0,v0,s1
sw a1,0x70(s0)
sw v1,0x6c(s0)
bal 0x000126e0
_sw v0,0x5c(s0)
lw a0,0x0(s0)
lw v0,0x4(a0)
bne v0,zero,0x00012ac0
_lw gp,0x10(sp)
lw a0,0x16c0(s0)
lw v1,0x3c(s0)
sltu v0,a0,v1
beq v0,zero,0x00012bf8
_lw ra,0x34(sp)
lw v0,0x74(s0)
lw s1,0x6c(s0)
addu s1,s1,v0
sltu v0,a0,s1
beq v0,zero,0x00012cc8
_addiu v0,s1,0x102
subu v1,v1,s1
lw a0,0x38(s0)
li v0,0x102
lw t9,-0x7f48(gp)
sltiu s2,v1,0x103
movn v0,v1,s2
addu a0,a0,s1
or a1,zero,zero
or s2,v0,zero
addu s1,s1,s2
jalr t9
_or a2,v0,zero
sw s1,0x16c0(s0)
lw ra,0x34(sp)
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
lw a3,0x6c(s0)
lw t2,0x38(s0)
lw t4,0x58(s0)
subu a3,a3,a0
lw t3,0x54(s0)
addu a2,t2,a3
addiu a1,a3,0x2
lbu v1,0x0(a2)
addu t2,t2,a1
sw v1,0x48(s0)
sllv a1,v1,t4
lbu v1,0x1(a2)
xor v1,v1,a1
and v1,v1,t3
b 0x00012cb8
_sw v1,0x48(s0)
lw v1,0x48(s0)
addiu a0,a0,-0x1
lbu t5,0x0(t2)
addiu t2,t2,0x1
lw a2,0x44(s0)
addu t0,v0,a0
sllv v1,v1,t4
lw a1,0x34(s0)
lw t1,0x40(s0)
sltiu t0,t0,0x3
xor v1,v1,t5
and v1,v1,t3
sll t5,v1,0x1
sw v1,0x48(s0)
and v1,a3,a1
addu a1,a2,t5
sll v1,v1,0x1
lhu a2,0x0(a1)
addu v1,t1,v1
sh a2,0x0(v1)
sh a3,0x0(a1)
addiu a3,a3,0x1
bne t0,zero,0x00012b00
_sw a0,0x16b4(s0)
bne a0,zero,0x00012c58
_sltiu v1,v0,0x106
b 0x00012b04
_nop
sltu v0,a0,v0
beq v0,zero,0x00012bf4
_subu v0,s1,a0
lw a2,0x38(s0)
subu v1,v1,a0
lw t9,-0x7f48(gp)
addiu v0,v0,0x102
addu a0,a2,a0
sltu s1,v0,v1
movz v0,v1,s1
or a1,zero,zero
or a2,v0,zero
jalr t9
_or s1,v0,zero
lw v0,0x16c0(s0)
lw ra,0x34(sp)
lw s5,0x30(sp)
addu v0,v0,s1
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
sw v0,0x16c0(s0)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
(translation_unit "void FUN_00012a58(int *param_1)\n\n{\n  byte bVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  undefined2 *puVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  int iVar13;\n  \n  uVar2 = param_1[0x1d];\n  iVar11 = param_1[0xb];\n  iVar6 = iVar11;\n  while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }\n  uVar4 = param_1[0x5b0];\n  uVar2 = param_1[0xf];\n  if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_00012a58(int *param_1)\n\n{\n  byte bVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  undefined2 *puVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  int iVar13;\n  \n  uVar2 = param_1[0x1d];\n  iVar11 = param_1[0xb];\n  iVar6 = iVar11;\n  while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }\n  uVar4 = param_1[0x5b0];\n  uVar2 = param_1[0xf];\n  if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00012a58(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  undefined2 *puVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  int iVar13;\n  \n  uVar2 = param_1[0x1d];\n  iVar11 = param_1[0xb];\n  iVar6 = iVar11;\n  while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }\n  uVar4 = param_1[0x5b0];\n  uVar2 = param_1[0xf];\n  if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined2 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (expression_statement "uVar2 = param_1[0x1d];" (assignment_expression "uVar2 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) (expression_statement "iVar11 = param_1[0xb];" (assignment_expression "iVar11 = param_1[0xb]" identifier = (subscript_expression "param_1[0xb]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = iVar11;" (assignment_expression "iVar6 = iVar11" identifier = identifier) ;) (while_statement "while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }" { (expression_statement "iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];" (assignment_expression "iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b]" identifier = (binary_expression "(param_1[0xf] - uVar2) - param_1[0x1b]" (parenthesized_expression "(param_1[0xf] - uVar2)" ( (binary_expression "param_1[0xf] - uVar2" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) - identifier) )) - (subscript_expression "param_1[0x1b]" identifier [ number_literal ]))) ;) (if_statement "if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" if (parenthesized_expression "((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6))" ( (binary_expression "(uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)" (cast_expression "(uint)param_1[0x1b]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) < (call_expression "(uint)(iVar11 + -0x106 + iVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar11 + -0x106 + iVar6)" ( (binary_expression "iVar11 + -0x106 + iVar6" (binary_expression "iVar11 + -0x106" identifier + number_literal) + identifier) )))) )) (compound_statement "{\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" { (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar3 = *(int *)(iVar6 + 4);" (assignment_expression "iVar3 = *(int *)(iVar6 + 4)" identifier = (pointer_expression "*(int *)(iVar6 + 4)" * (cast_expression "(int *)(iVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" else (compound_statement "{\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" { (expression_statement "iVar6 = iVar11 - iVar13;" (assignment_expression "iVar6 = iVar11 - iVar13" identifier = (binary_expression "iVar11 - iVar13" identifier - identifier)) ;) (expression_statement "iVar13 = iVar13 + iVar11;" (assignment_expression "iVar13 = iVar13 + iVar11" identifier = (binary_expression "iVar13 + iVar11" identifier + identifier)) ;) (expression_statement "(*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);" (call_expression "(*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6)" (parenthesized_expression "(*(code *)PTR_memcpy_000360fc)" ( (pointer_expression "*(code *)PTR_memcpy_000360fc" * (cast_expression "(code *)PTR_memcpy_000360fc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1[0xe],param_1[0xe] + iVar11,iVar6)" ( (subscript_expression "param_1[0xe]" identifier [ number_literal ]) , (binary_expression "param_1[0xe] + iVar11" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) , identifier ))) ;) (expression_statement "param_1[0x1c] = param_1[0x1c] - iVar11;" (assignment_expression "param_1[0x1c] = param_1[0x1c] - iVar11" (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) = (binary_expression "param_1[0x1c] - iVar11" (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "param_1[0x1b] = param_1[0x1b] - iVar11;" (assignment_expression "param_1[0x1b] = param_1[0x1b] - iVar11" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = (binary_expression "param_1[0x1b] - iVar11" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "param_1[0x17] = param_1[0x17] - iVar11;" (assignment_expression "param_1[0x17] = param_1[0x17] - iVar11" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (binary_expression "param_1[0x17] - iVar11" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "FUN_000126e0(param_1);" (call_expression "FUN_000126e0(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar3 = *(int *)(iVar6 + 4);" (assignment_expression "iVar3 = *(int *)(iVar6 + 4)" identifier = (pointer_expression "*(int *)(iVar6 + 4)" * (cast_expression "(int *)(iVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) }))) (if_statement "if (iVar3 == 0) break;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);" (assignment_expression "iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" identifier = (call_expression "FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" identifier (argument_list "(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" ( identifier , (binary_expression "param_1[0xe] + param_1[0x1b] + param_1[0x1d]" (binary_expression "param_1[0xe] + param_1[0x1b]" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) + (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) , identifier )))) ;) (expression_statement "iVar13 = param_1[0x5ad];" (assignment_expression "iVar13 = param_1[0x5ad]" identifier = (subscript_expression "param_1[0x5ad]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = iVar6 + param_1[0x1d];" (assignment_expression "uVar2 = iVar6 + param_1[0x1d]" identifier = (binary_expression "iVar6 + param_1[0x1d]" identifier + (subscript_expression "param_1[0x1d]" identifier [ number_literal ]))) ;) (expression_statement "param_1[0x1d] = uVar2;" (assignment_expression "param_1[0x1d] = uVar2" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }" if (parenthesized_expression "(2 < uVar2 + iVar13)" ( (binary_expression "2 < uVar2 + iVar13" number_literal < (binary_expression "uVar2 + iVar13" identifier + identifier)) )) (compound_statement "{\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }" { (expression_statement "uVar10 = param_1[0x16];" (assignment_expression "uVar10 = param_1[0x16]" identifier = (subscript_expression "param_1[0x16]" identifier [ number_literal ])) ;) (expression_statement "uVar12 = param_1[0x1b] - iVar13;" (assignment_expression "uVar12 = param_1[0x1b] - iVar13" identifier = (binary_expression "param_1[0x1b] - iVar13" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "uVar9 = param_1[0x15];" (assignment_expression "uVar9 = param_1[0x15]" identifier = (subscript_expression "param_1[0x15]" identifier [ number_literal ])) ;) (expression_statement "pbVar7 = (byte *)(param_1[0xe] + uVar12);" (assignment_expression "pbVar7 = (byte *)(param_1[0xe] + uVar12)" identifier = (cast_expression "(byte *)(param_1[0xe] + uVar12)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + uVar12)" ( (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) )))) ;) (expression_statement "uVar4 = (uint)*pbVar7;" (assignment_expression "uVar4 = (uint)*pbVar7" identifier = (binary_expression "(uint)*pbVar7" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);" (assignment_expression "pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2)" identifier = (cast_expression "(byte *)(param_1[0xe] + uVar12 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + uVar12 + 2)" ( (binary_expression "param_1[0xe] + uVar12 + 2" (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) + number_literal) )))) ;) (expression_statement "param_1[0x12] = uVar4;" (assignment_expression "param_1[0x12] = uVar4" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;" (assignment_expression "param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = (binary_expression "((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9" (parenthesized_expression "((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f))" ( (binary_expression "(uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)" (cast_expression "(uint)pbVar7[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar7[1]" identifier [ number_literal ])) ^ (binary_expression "uVar4 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) )))) )) & identifier)) ;) (do_statement "do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);" do (compound_statement "{\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      }" { (if_statement "if (iVar13 == 0) break;" if (parenthesized_expression "(iVar13 == 0)" ( (binary_expression "iVar13 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "bVar1 = *pbVar8;" (assignment_expression "bVar1 = *pbVar8" identifier = (pointer_expression "*pbVar8" * identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;" (assignment_expression "uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9" identifier = (binary_expression "(param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9" (parenthesized_expression "(param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1)" ( (binary_expression "param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1" (binary_expression "param_1[0x12] << (uVar10 & 0x1f)" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ^ (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) & identifier)) ;) (expression_statement "param_1[0x12] = uVar4;" (assignment_expression "param_1[0x12] = uVar4" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);" (assignment_expression "puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2)" identifier = (cast_expression "(undefined2 *)(param_1[0x11] + uVar4 * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x11] + uVar4 * 2)" ( (binary_expression "param_1[0x11] + uVar4 * 2" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) + (binary_expression "uVar4 * 2" identifier * number_literal)) )))) ;) (expression_statement "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;" (assignment_expression "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5" (pointer_expression "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" * (cast_expression "(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" ( (binary_expression "param_1[0x10] + (uVar12 & param_1[0xd]) * 2" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) + (binary_expression "(uVar12 & param_1[0xd]) * 2" (parenthesized_expression "(uVar12 & param_1[0xd])" ( (binary_expression "uVar12 & param_1[0xd]" identifier & (subscript_expression "param_1[0xd]" identifier [ number_literal ])) )) * number_literal)) )))) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "*puVar5 = (short)uVar12;" (assignment_expression "*puVar5 = (short)uVar12" (pointer_expression "*puVar5" * identifier) = (cast_expression "(short)uVar12" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "uVar12 = uVar12 + 1;" (assignment_expression "uVar12 = uVar12 + 1" identifier = (binary_expression "uVar12 + 1" identifier + number_literal)) ;) (expression_statement "param_1[0x5ad] = iVar13;" (assignment_expression "param_1[0x5ad] = iVar13" (subscript_expression "param_1[0x5ad]" identifier [ number_literal ]) = identifier) ;) }) while (parenthesized_expression "(2 < uVar2 + iVar13)" ( (binary_expression "2 < uVar2 + iVar13" number_literal < (binary_expression "uVar2 + iVar13" identifier + identifier)) )) ;) })) (if_statement "if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;" if (parenthesized_expression "((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0))" ( (binary_expression "(0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)" (parenthesized_expression "(0x105 < uVar2)" ( (binary_expression "0x105 < uVar2" number_literal < identifier) )) || (parenthesized_expression "(*(int *)(*param_1 + 4) == 0)" ( (binary_expression "*(int *)(*param_1 + 4) == 0" (pointer_expression "*(int *)(*param_1 + 4)" * (cast_expression "(int *)(*param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 4)" ( (binary_expression "*param_1 + 4" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) ))) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = param_1[0xb];" (assignment_expression "iVar6 = param_1[0xb]" identifier = (subscript_expression "param_1[0xb]" identifier [ number_literal ])) ;) })) (expression_statement "uVar4 = param_1[0x5b0];" (assignment_expression "uVar4 = param_1[0x5b0]" identifier = (subscript_expression "param_1[0x5b0]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_1[0xf];" (assignment_expression "uVar2 = param_1[0xf]" identifier = (subscript_expression "param_1[0xf]" identifier [ number_literal ])) ;) (if_statement "if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }" if (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) (compound_statement "{\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }" { (expression_statement "uVar12 = param_1[0x1b] + param_1[0x1d];" (assignment_expression "uVar12 = param_1[0x1b] + param_1[0x1d]" identifier = (binary_expression "param_1[0x1b] + param_1[0x1d]" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) + (subscript_expression "param_1[0x1d]" identifier [ number_literal ]))) ;) (if_statement "if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" if (parenthesized_expression "(uVar4 < uVar12)" ( (binary_expression "uVar4 < uVar12" identifier < identifier) )) (compound_statement "{\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }" { (expression_statement "uVar4 = 0x102;" (assignment_expression "uVar4 = 0x102" identifier = number_literal) ;) (if_statement "if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }" if (parenthesized_expression "(uVar2 - uVar12 < 0x103)" ( (binary_expression "uVar2 - uVar12 < 0x103" (binary_expression "uVar2 - uVar12" identifier - identifier) < number_literal) )) (compound_statement "{\n        uVar4 = uVar2 - uVar12;\n      }" { (expression_statement "uVar4 = uVar2 - uVar12;" (assignment_expression "uVar4 = uVar2 - uVar12" identifier = (binary_expression "uVar2 - uVar12" identifier - identifier)) ;) })) (expression_statement "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);" (call_expression "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4)" (parenthesized_expression "(*(code *)PTR_memset_000360a8)" ( (pointer_expression "*(code *)PTR_memset_000360a8" * (cast_expression "(code *)PTR_memset_000360a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1[0xe] + uVar12,0,uVar4)" ( (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) , number_literal , identifier ))) ;) (expression_statement "param_1[0x5b0] = uVar12 + uVar4;" (assignment_expression "param_1[0x5b0] = uVar12 + uVar4" (subscript_expression "param_1[0x5b0]" identifier [ number_literal ]) = (binary_expression "uVar12 + uVar4" identifier + identifier)) ;) }) (else_clause "else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" else (if_statement "if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" if (parenthesized_expression "(uVar4 < uVar12 + 0x102)" ( (binary_expression "uVar4 < uVar12 + 0x102" identifier < (binary_expression "uVar12 + 0x102" identifier + number_literal)) )) (compound_statement "{\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" { (expression_statement "uVar12 = (uVar12 - uVar4) + 0x102;" (assignment_expression "uVar12 = (uVar12 - uVar4) + 0x102" identifier = (binary_expression "(uVar12 - uVar4) + 0x102" (parenthesized_expression "(uVar12 - uVar4)" ( (binary_expression "uVar12 - uVar4" identifier - identifier) )) + number_literal)) ;) (if_statement "if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }" if (parenthesized_expression "(uVar2 - uVar4 <= uVar12)" ( (binary_expression "uVar2 - uVar4 <= uVar12" (binary_expression "uVar2 - uVar4" identifier - identifier) <= identifier) )) (compound_statement "{\n        uVar12 = uVar2 - uVar4;\n      }" { (expression_statement "uVar12 = uVar2 - uVar4;" (assignment_expression "uVar12 = uVar2 - uVar4" identifier = (binary_expression "uVar2 - uVar4" identifier - identifier)) ;) })) (expression_statement "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);" (call_expression "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12)" (parenthesized_expression "(*(code *)PTR_memset_000360a8)" ( (pointer_expression "*(code *)PTR_memset_000360a8" * (cast_expression "(code *)PTR_memset_000360a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1[0xe] + uVar4,0,uVar12)" ( (binary_expression "param_1[0xe] + uVar4" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) , number_literal , identifier ))) ;) (expression_statement "param_1[0x5b0] = param_1[0x5b0] + uVar12;" (assignment_expression "param_1[0x5b0] = param_1[0x5b0] + uVar12" (subscript_expression "param_1[0x5b0]" identifier [ number_literal ]) = (binary_expression "param_1[0x5b0] + uVar12" (subscript_expression "param_1[0x5b0]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return;" return ;) })))) })) (return_statement "return;" return ;) })))
(translation_unit "void fill_window(deflate_state *s)\n\n{\n  byte bVar1;\n  uint uVar2;\n  uInt uVar3;\n  z_streamp strm;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  Posf *pPVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  uInt uVar11;\n  uint uVar12;\n  \n  uVar2 = s->lookahead;\n  uVar11 = s->w_size;\n  uVar3 = uVar11;\n  while( true ) {\n    uVar2 = (s->window_size - uVar2) - s->strstart;\n    if (s->strstart < (uVar11 - 0x106) + uVar3) {\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    else {\n      iVar5 = uVar11 - uVar2;\n      uVar2 = uVar2 + uVar11;\n      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);\n      s->match_start = s->match_start - uVar11;\n      s->strstart = s->strstart - uVar11;\n      s->block_start = s->block_start - uVar11;\n      slide_hash(s);\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    if (uVar3 == 0) break;\n    uVar2 = read_buf(strm,s->window + s->strstart + s->lookahead,uVar2);\n    uVar3 = s->insert;\n    uVar2 = uVar2 + s->lookahead;\n    s->lookahead = uVar2;\n    if (2 < uVar2 + uVar3) {\n      uVar10 = s->hash_shift;\n      uVar12 = s->strstart - uVar3;\n      uVar9 = s->hash_mask;\n      pbVar6 = s->window + uVar12;\n      uVar4 = (uint)*pbVar6;\n      pbVar8 = s->window + uVar12 + 2;\n      s->ins_h = uVar4;\n      s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      } while (2 < uVar2 + uVar3);\n    }\n    if ((0x105 < uVar2) || (s->strm->avail_in == 0)) break;\n    uVar3 = s->w_size;\n  }\n  uVar4 = s->high_water;\n  uVar2 = s->window_size;\n  if (uVar4 < uVar2) {\n    uVar12 = s->strstart + s->lookahead;\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);\n      s->high_water = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }\n  }\n  return;\n}\n\n" (function_definition "void fill_window(deflate_state *s)\n\n{\n  byte bVar1;\n  uint uVar2;\n  uInt uVar3;\n  z_streamp strm;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  Posf *pPVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  uInt uVar11;\n  uint uVar12;\n  \n  uVar2 = s->lookahead;\n  uVar11 = s->w_size;\n  uVar3 = uVar11;\n  while( true ) {\n    uVar2 = (s->window_size - uVar2) - s->strstart;\n    if (s->strstart < (uVar11 - 0x106) + uVar3) {\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    else {\n      iVar5 = uVar11 - uVar2;\n      uVar2 = uVar2 + uVar11;\n      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);\n      s->match_start = s->match_start - uVar11;\n      s->strstart = s->strstart - uVar11;\n      s->block_start = s->block_start - uVar11;\n      slide_hash(s);\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    if (uVar3 == 0) break;\n    uVar2 = read_buf(strm,s->window + s->strstart + s->lookahead,uVar2);\n    uVar3 = s->insert;\n    uVar2 = uVar2 + s->lookahead;\n    s->lookahead = uVar2;\n    if (2 < uVar2 + uVar3) {\n      uVar10 = s->hash_shift;\n      uVar12 = s->strstart - uVar3;\n      uVar9 = s->hash_mask;\n      pbVar6 = s->window + uVar12;\n      uVar4 = (uint)*pbVar6;\n      pbVar8 = s->window + uVar12 + 2;\n      s->ins_h = uVar4;\n      s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      } while (2 < uVar2 + uVar3);\n    }\n    if ((0x105 < uVar2) || (s->strm->avail_in == 0)) break;\n    uVar3 = s->w_size;\n  }\n  uVar4 = s->high_water;\n  uVar2 = s->window_size;\n  if (uVar4 < uVar2) {\n    uVar12 = s->strstart + s->lookahead;\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);\n      s->high_water = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "fill_window(deflate_state *s)" identifier (parameter_list "(deflate_state *s)" ( (parameter_declaration "deflate_state *s" type_identifier (pointer_declarator "*s" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  uInt uVar3;\n  z_streamp strm;\n  uint uVar4;\n  int iVar5;\n  byte *pbVar6;\n  Posf *pPVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  uInt uVar11;\n  uint uVar12;\n  \n  uVar2 = s->lookahead;\n  uVar11 = s->w_size;\n  uVar3 = uVar11;\n  while( true ) {\n    uVar2 = (s->window_size - uVar2) - s->strstart;\n    if (s->strstart < (uVar11 - 0x106) + uVar3) {\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    else {\n      iVar5 = uVar11 - uVar2;\n      uVar2 = uVar2 + uVar11;\n      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);\n      s->match_start = s->match_start - uVar11;\n      s->strstart = s->strstart - uVar11;\n      s->block_start = s->block_start - uVar11;\n      slide_hash(s);\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    if (uVar3 == 0) break;\n    uVar2 = read_buf(strm,s->window + s->strstart + s->lookahead,uVar2);\n    uVar3 = s->insert;\n    uVar2 = uVar2 + s->lookahead;\n    s->lookahead = uVar2;\n    if (2 < uVar2 + uVar3) {\n      uVar10 = s->hash_shift;\n      uVar12 = s->strstart - uVar3;\n      uVar9 = s->hash_mask;\n      pbVar6 = s->window + uVar12;\n      uVar4 = (uint)*pbVar6;\n      pbVar8 = s->window + uVar12 + 2;\n      s->ins_h = uVar4;\n      s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      } while (2 < uVar2 + uVar3);\n    }\n    if ((0x105 < uVar2) || (s->strm->avail_in == 0)) break;\n    uVar3 = s->w_size;\n  }\n  uVar4 = s->high_water;\n  uVar2 = s->window_size;\n  if (uVar4 < uVar2) {\n    uVar12 = s->strstart + s->lookahead;\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);\n      s->high_water = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uInt uVar3;" type_identifier identifier ;) (declaration "z_streamp strm;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "Posf *pPVar7;" type_identifier (pointer_declarator "*pPVar7" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uInt uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (expression_statement "uVar2 = s->lookahead;" (assignment_expression "uVar2 = s->lookahead" identifier = (field_expression "s->lookahead" identifier -> field_identifier)) ;) (expression_statement "uVar11 = s->w_size;" (assignment_expression "uVar11 = s->w_size" identifier = (field_expression "s->w_size" identifier -> field_identifier)) ;) (expression_statement "uVar3 = uVar11;" (assignment_expression "uVar3 = uVar11" identifier = identifier) ;) (while_statement "while( true ) {\n    uVar2 = (s->window_size - uVar2) - s->strstart;\n    if (s->strstart < (uVar11 - 0x106) + uVar3) {\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    else {\n      iVar5 = uVar11 - uVar2;\n      uVar2 = uVar2 + uVar11;\n      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);\n      s->match_start = s->match_start - uVar11;\n      s->strstart = s->strstart - uVar11;\n      s->block_start = s->block_start - uVar11;\n      slide_hash(s);\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    if (uVar3 == 0) break;\n    uVar2 = read_buf(strm,s->window + s->strstart + s->lookahead,uVar2);\n    uVar3 = s->insert;\n    uVar2 = uVar2 + s->lookahead;\n    s->lookahead = uVar2;\n    if (2 < uVar2 + uVar3) {\n      uVar10 = s->hash_shift;\n      uVar12 = s->strstart - uVar3;\n      uVar9 = s->hash_mask;\n      pbVar6 = s->window + uVar12;\n      uVar4 = (uint)*pbVar6;\n      pbVar8 = s->window + uVar12 + 2;\n      s->ins_h = uVar4;\n      s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      } while (2 < uVar2 + uVar3);\n    }\n    if ((0x105 < uVar2) || (s->strm->avail_in == 0)) break;\n    uVar3 = s->w_size;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    uVar2 = (s->window_size - uVar2) - s->strstart;\n    if (s->strstart < (uVar11 - 0x106) + uVar3) {\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    else {\n      iVar5 = uVar11 - uVar2;\n      uVar2 = uVar2 + uVar11;\n      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);\n      s->match_start = s->match_start - uVar11;\n      s->strstart = s->strstart - uVar11;\n      s->block_start = s->block_start - uVar11;\n      slide_hash(s);\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    if (uVar3 == 0) break;\n    uVar2 = read_buf(strm,s->window + s->strstart + s->lookahead,uVar2);\n    uVar3 = s->insert;\n    uVar2 = uVar2 + s->lookahead;\n    s->lookahead = uVar2;\n    if (2 < uVar2 + uVar3) {\n      uVar10 = s->hash_shift;\n      uVar12 = s->strstart - uVar3;\n      uVar9 = s->hash_mask;\n      pbVar6 = s->window + uVar12;\n      uVar4 = (uint)*pbVar6;\n      pbVar8 = s->window + uVar12 + 2;\n      s->ins_h = uVar4;\n      s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      } while (2 < uVar2 + uVar3);\n    }\n    if ((0x105 < uVar2) || (s->strm->avail_in == 0)) break;\n    uVar3 = s->w_size;\n  }" { (expression_statement "uVar2 = (s->window_size - uVar2) - s->strstart;" (assignment_expression "uVar2 = (s->window_size - uVar2) - s->strstart" identifier = (binary_expression "(s->window_size - uVar2) - s->strstart" (parenthesized_expression "(s->window_size - uVar2)" ( (binary_expression "s->window_size - uVar2" (field_expression "s->window_size" identifier -> field_identifier) - identifier) )) - (field_expression "s->strstart" identifier -> field_identifier))) ;) (if_statement "if (s->strstart < (uVar11 - 0x106) + uVar3) {\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }\n    else {\n      iVar5 = uVar11 - uVar2;\n      uVar2 = uVar2 + uVar11;\n      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);\n      s->match_start = s->match_start - uVar11;\n      s->strstart = s->strstart - uVar11;\n      s->block_start = s->block_start - uVar11;\n      slide_hash(s);\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }" if (parenthesized_expression "(s->strstart < (uVar11 - 0x106) + uVar3)" ( (binary_expression "s->strstart < (uVar11 - 0x106) + uVar3" (field_expression "s->strstart" identifier -> field_identifier) < (binary_expression "(uVar11 - 0x106) + uVar3" (parenthesized_expression "(uVar11 - 0x106)" ( (binary_expression "uVar11 - 0x106" identifier - number_literal) )) + identifier)) )) (compound_statement "{\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }" { (expression_statement "strm = s->strm;" (assignment_expression "strm = s->strm" identifier = (field_expression "s->strm" identifier -> field_identifier)) ;) (expression_statement "uVar3 = strm->avail_in;" (assignment_expression "uVar3 = strm->avail_in" identifier = (field_expression "strm->avail_in" identifier -> field_identifier)) ;) }) (else_clause "else {\n      iVar5 = uVar11 - uVar2;\n      uVar2 = uVar2 + uVar11;\n      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);\n      s->match_start = s->match_start - uVar11;\n      s->strstart = s->strstart - uVar11;\n      s->block_start = s->block_start - uVar11;\n      slide_hash(s);\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }" else (compound_statement "{\n      iVar5 = uVar11 - uVar2;\n      uVar2 = uVar2 + uVar11;\n      (*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);\n      s->match_start = s->match_start - uVar11;\n      s->strstart = s->strstart - uVar11;\n      s->block_start = s->block_start - uVar11;\n      slide_hash(s);\n      strm = s->strm;\n      uVar3 = strm->avail_in;\n    }" { (expression_statement "iVar5 = uVar11 - uVar2;" (assignment_expression "iVar5 = uVar11 - uVar2" identifier = (binary_expression "uVar11 - uVar2" identifier - identifier)) ;) (expression_statement "uVar2 = uVar2 + uVar11;" (assignment_expression "uVar2 = uVar2 + uVar11" identifier = (binary_expression "uVar2 + uVar11" identifier + identifier)) ;) (expression_statement "(*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5);" (call_expression "(*(code *)PTR_memcpy_000360fc)(s->window,s->window + uVar11,iVar5)" (parenthesized_expression "(*(code *)PTR_memcpy_000360fc)" ( (pointer_expression "*(code *)PTR_memcpy_000360fc" * (cast_expression "(code *)PTR_memcpy_000360fc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(s->window,s->window + uVar11,iVar5)" ( (field_expression "s->window" identifier -> field_identifier) , (binary_expression "s->window + uVar11" (field_expression "s->window" identifier -> field_identifier) + identifier) , identifier ))) ;) (expression_statement "s->match_start = s->match_start - uVar11;" (assignment_expression "s->match_start = s->match_start - uVar11" (field_expression "s->match_start" identifier -> field_identifier) = (binary_expression "s->match_start - uVar11" (field_expression "s->match_start" identifier -> field_identifier) - identifier)) ;) (expression_statement "s->strstart = s->strstart - uVar11;" (assignment_expression "s->strstart = s->strstart - uVar11" (field_expression "s->strstart" identifier -> field_identifier) = (binary_expression "s->strstart - uVar11" (field_expression "s->strstart" identifier -> field_identifier) - identifier)) ;) (expression_statement "s->block_start = s->block_start - uVar11;" (assignment_expression "s->block_start = s->block_start - uVar11" (field_expression "s->block_start" identifier -> field_identifier) = (binary_expression "s->block_start - uVar11" (field_expression "s->block_start" identifier -> field_identifier) - identifier)) ;) (expression_statement "slide_hash(s);" (call_expression "slide_hash(s)" identifier (argument_list "(s)" ( identifier ))) ;) (expression_statement "strm = s->strm;" (assignment_expression "strm = s->strm" identifier = (field_expression "s->strm" identifier -> field_identifier)) ;) (expression_statement "uVar3 = strm->avail_in;" (assignment_expression "uVar3 = strm->avail_in" identifier = (field_expression "strm->avail_in" identifier -> field_identifier)) ;) }))) (if_statement "if (uVar3 == 0) break;" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar2 = read_buf(strm,s->window + s->strstart + s->lookahead,uVar2);" (assignment_expression "uVar2 = read_buf(strm,s->window + s->strstart + s->lookahead,uVar2)" identifier = (call_expression "read_buf(strm,s->window + s->strstart + s->lookahead,uVar2)" identifier (argument_list "(strm,s->window + s->strstart + s->lookahead,uVar2)" ( identifier , (binary_expression "s->window + s->strstart + s->lookahead" (binary_expression "s->window + s->strstart" (field_expression "s->window" identifier -> field_identifier) + (field_expression "s->strstart" identifier -> field_identifier)) + (field_expression "s->lookahead" identifier -> field_identifier)) , identifier )))) ;) (expression_statement "uVar3 = s->insert;" (assignment_expression "uVar3 = s->insert" identifier = (field_expression "s->insert" identifier -> field_identifier)) ;) (expression_statement "uVar2 = uVar2 + s->lookahead;" (assignment_expression "uVar2 = uVar2 + s->lookahead" identifier = (binary_expression "uVar2 + s->lookahead" identifier + (field_expression "s->lookahead" identifier -> field_identifier))) ;) (expression_statement "s->lookahead = uVar2;" (assignment_expression "s->lookahead = uVar2" (field_expression "s->lookahead" identifier -> field_identifier) = identifier) ;) (if_statement "if (2 < uVar2 + uVar3) {\n      uVar10 = s->hash_shift;\n      uVar12 = s->strstart - uVar3;\n      uVar9 = s->hash_mask;\n      pbVar6 = s->window + uVar12;\n      uVar4 = (uint)*pbVar6;\n      pbVar8 = s->window + uVar12 + 2;\n      s->ins_h = uVar4;\n      s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      } while (2 < uVar2 + uVar3);\n    }" if (parenthesized_expression "(2 < uVar2 + uVar3)" ( (binary_expression "2 < uVar2 + uVar3" number_literal < (binary_expression "uVar2 + uVar3" identifier + identifier)) )) (compound_statement "{\n      uVar10 = s->hash_shift;\n      uVar12 = s->strstart - uVar3;\n      uVar9 = s->hash_mask;\n      pbVar6 = s->window + uVar12;\n      uVar4 = (uint)*pbVar6;\n      pbVar8 = s->window + uVar12 + 2;\n      s->ins_h = uVar4;\n      s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      } while (2 < uVar2 + uVar3);\n    }" { (expression_statement "uVar10 = s->hash_shift;" (assignment_expression "uVar10 = s->hash_shift" identifier = (field_expression "s->hash_shift" identifier -> field_identifier)) ;) (expression_statement "uVar12 = s->strstart - uVar3;" (assignment_expression "uVar12 = s->strstart - uVar3" identifier = (binary_expression "s->strstart - uVar3" (field_expression "s->strstart" identifier -> field_identifier) - identifier)) ;) (expression_statement "uVar9 = s->hash_mask;" (assignment_expression "uVar9 = s->hash_mask" identifier = (field_expression "s->hash_mask" identifier -> field_identifier)) ;) (expression_statement "pbVar6 = s->window + uVar12;" (assignment_expression "pbVar6 = s->window + uVar12" identifier = (binary_expression "s->window + uVar12" (field_expression "s->window" identifier -> field_identifier) + identifier)) ;) (expression_statement "uVar4 = (uint)*pbVar6;" (assignment_expression "uVar4 = (uint)*pbVar6" identifier = (binary_expression "(uint)*pbVar6" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar8 = s->window + uVar12 + 2;" (assignment_expression "pbVar8 = s->window + uVar12 + 2" identifier = (binary_expression "s->window + uVar12 + 2" (binary_expression "s->window + uVar12" (field_expression "s->window" identifier -> field_identifier) + identifier) + number_literal)) ;) (expression_statement "s->ins_h = uVar4;" (assignment_expression "s->ins_h = uVar4" (field_expression "s->ins_h" identifier -> field_identifier) = identifier) ;) (expression_statement "s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;" (assignment_expression "s->ins_h = ((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9" (field_expression "s->ins_h" identifier -> field_identifier) = (binary_expression "((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9" (parenthesized_expression "((uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f))" ( (binary_expression "(uint)pbVar6[1] ^ uVar4 << (uVar10 & 0x1f)" (cast_expression "(uint)pbVar6[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar6[1]" identifier [ number_literal ])) ^ (binary_expression "uVar4 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) )))) )) & identifier)) ;) (do_statement "do {\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      } while (2 < uVar2 + uVar3);" do (compound_statement "{\n        if (uVar3 == 0) break;\n        uVar3 = uVar3 - 1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        pPVar7 = s->head;\n        uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        s->ins_h = uVar4;\n        s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];\n        pPVar7[uVar4] = (Posf)uVar12;\n        uVar12 = uVar12 + 1;\n        s->insert = uVar3;\n      }" { (if_statement "if (uVar3 == 0) break;" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = uVar3 - 1;" (assignment_expression "uVar3 = uVar3 - 1" identifier = (binary_expression "uVar3 - 1" identifier - number_literal)) ;) (expression_statement "bVar1 = *pbVar8;" (assignment_expression "bVar1 = *pbVar8" identifier = (pointer_expression "*pbVar8" * identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) (expression_statement "pPVar7 = s->head;" (assignment_expression "pPVar7 = s->head" identifier = (field_expression "s->head" identifier -> field_identifier)) ;) (expression_statement "uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;" (assignment_expression "uVar4 = (s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9" identifier = (binary_expression "(s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9" (parenthesized_expression "(s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1)" ( (binary_expression "s->ins_h << (uVar10 & 0x1f) ^ (uint)bVar1" (binary_expression "s->ins_h << (uVar10 & 0x1f)" (field_expression "s->ins_h" identifier -> field_identifier) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ^ (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) & identifier)) ;) (expression_statement "s->ins_h = uVar4;" (assignment_expression "s->ins_h = uVar4" (field_expression "s->ins_h" identifier -> field_identifier) = identifier) ;) (expression_statement "s->prev[uVar12 & s->w_mask] = pPVar7[uVar4];" (assignment_expression "s->prev[uVar12 & s->w_mask] = pPVar7[uVar4]" (subscript_expression "s->prev[uVar12 & s->w_mask]" (field_expression "s->prev" identifier -> field_identifier) [ (binary_expression "uVar12 & s->w_mask" identifier & (field_expression "s->w_mask" identifier -> field_identifier)) ]) = (subscript_expression "pPVar7[uVar4]" identifier [ identifier ])) ;) (expression_statement "pPVar7[uVar4] = (Posf)uVar12;" (assignment_expression "pPVar7[uVar4] = (Posf)uVar12" (subscript_expression "pPVar7[uVar4]" identifier [ identifier ]) = (cast_expression "(Posf)uVar12" ( (type_descriptor "Posf" type_identifier) ) identifier)) ;) (expression_statement "uVar12 = uVar12 + 1;" (assignment_expression "uVar12 = uVar12 + 1" identifier = (binary_expression "uVar12 + 1" identifier + number_literal)) ;) (expression_statement "s->insert = uVar3;" (assignment_expression "s->insert = uVar3" (field_expression "s->insert" identifier -> field_identifier) = identifier) ;) }) while (parenthesized_expression "(2 < uVar2 + uVar3)" ( (binary_expression "2 < uVar2 + uVar3" number_literal < (binary_expression "uVar2 + uVar3" identifier + identifier)) )) ;) })) (if_statement "if ((0x105 < uVar2) || (s->strm->avail_in == 0)) break;" if (parenthesized_expression "((0x105 < uVar2) || (s->strm->avail_in == 0))" ( (binary_expression "(0x105 < uVar2) || (s->strm->avail_in == 0)" (parenthesized_expression "(0x105 < uVar2)" ( (binary_expression "0x105 < uVar2" number_literal < identifier) )) || (parenthesized_expression "(s->strm->avail_in == 0)" ( (binary_expression "s->strm->avail_in == 0" (field_expression "s->strm->avail_in" (field_expression "s->strm" identifier -> field_identifier) -> field_identifier) == number_literal) ))) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = s->w_size;" (assignment_expression "uVar3 = s->w_size" identifier = (field_expression "s->w_size" identifier -> field_identifier)) ;) })) (expression_statement "uVar4 = s->high_water;" (assignment_expression "uVar4 = s->high_water" identifier = (field_expression "s->high_water" identifier -> field_identifier)) ;) (expression_statement "uVar2 = s->window_size;" (assignment_expression "uVar2 = s->window_size" identifier = (field_expression "s->window_size" identifier -> field_identifier)) ;) (if_statement "if (uVar4 < uVar2) {\n    uVar12 = s->strstart + s->lookahead;\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);\n      s->high_water = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }\n  }" if (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) (compound_statement "{\n    uVar12 = s->strstart + s->lookahead;\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);\n      s->high_water = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }\n  }" { (expression_statement "uVar12 = s->strstart + s->lookahead;" (assignment_expression "uVar12 = s->strstart + s->lookahead" identifier = (binary_expression "s->strstart + s->lookahead" (field_expression "s->strstart" identifier -> field_identifier) + (field_expression "s->lookahead" identifier -> field_identifier))) ;) (if_statement "if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);\n      s->high_water = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }" if (parenthesized_expression "(uVar4 < uVar12)" ( (binary_expression "uVar4 < uVar12" identifier < identifier) )) (compound_statement "{\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);\n      s->high_water = uVar12 + uVar4;\n    }" { (expression_statement "uVar4 = 0x102;" (assignment_expression "uVar4 = 0x102" identifier = number_literal) ;) (if_statement "if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }" if (parenthesized_expression "(uVar2 - uVar12 < 0x103)" ( (binary_expression "uVar2 - uVar12 < 0x103" (binary_expression "uVar2 - uVar12" identifier - identifier) < number_literal) )) (compound_statement "{\n        uVar4 = uVar2 - uVar12;\n      }" { (expression_statement "uVar4 = uVar2 - uVar12;" (assignment_expression "uVar4 = uVar2 - uVar12" identifier = (binary_expression "uVar2 - uVar12" identifier - identifier)) ;) })) (expression_statement "(*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4);" (call_expression "(*(code *)PTR_memset_000360a8)(s->window + uVar12,0,uVar4)" (parenthesized_expression "(*(code *)PTR_memset_000360a8)" ( (pointer_expression "*(code *)PTR_memset_000360a8" * (cast_expression "(code *)PTR_memset_000360a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(s->window + uVar12,0,uVar4)" ( (binary_expression "s->window + uVar12" (field_expression "s->window" identifier -> field_identifier) + identifier) , number_literal , identifier ))) ;) (expression_statement "s->high_water = uVar12 + uVar4;" (assignment_expression "s->high_water = uVar12 + uVar4" (field_expression "s->high_water" identifier -> field_identifier) = (binary_expression "uVar12 + uVar4" identifier + identifier)) ;) }) (else_clause "else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }" else (if_statement "if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }" if (parenthesized_expression "(uVar4 < uVar12 + 0x102)" ( (binary_expression "uVar4 < uVar12 + 0x102" identifier < (binary_expression "uVar12 + 0x102" identifier + number_literal)) )) (compound_statement "{\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);\n      s->high_water = s->high_water + uVar12;\n      return;\n    }" { (expression_statement "uVar12 = (uVar12 - uVar4) + 0x102;" (assignment_expression "uVar12 = (uVar12 - uVar4) + 0x102" identifier = (binary_expression "(uVar12 - uVar4) + 0x102" (parenthesized_expression "(uVar12 - uVar4)" ( (binary_expression "uVar12 - uVar4" identifier - identifier) )) + number_literal)) ;) (if_statement "if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }" if (parenthesized_expression "(uVar2 - uVar4 <= uVar12)" ( (binary_expression "uVar2 - uVar4 <= uVar12" (binary_expression "uVar2 - uVar4" identifier - identifier) <= identifier) )) (compound_statement "{\n        uVar12 = uVar2 - uVar4;\n      }" { (expression_statement "uVar12 = uVar2 - uVar4;" (assignment_expression "uVar12 = uVar2 - uVar4" identifier = (binary_expression "uVar2 - uVar4" identifier - identifier)) ;) })) (expression_statement "(*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12);" (call_expression "(*(code *)PTR_memset_000360a8)(s->window + uVar4,0,uVar12)" (parenthesized_expression "(*(code *)PTR_memset_000360a8)" ( (pointer_expression "*(code *)PTR_memset_000360a8" * (cast_expression "(code *)PTR_memset_000360a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(s->window + uVar4,0,uVar12)" ( (binary_expression "s->window + uVar4" (field_expression "s->window" identifier -> field_identifier) + identifier) , number_literal , identifier ))) ;) (expression_statement "s->high_water = s->high_water + uVar12;" (assignment_expression "s->high_water = s->high_water + uVar12" (field_expression "s->high_water" identifier -> field_identifier) = (binary_expression "s->high_water + uVar12" (field_expression "s->high_water" identifier -> field_identifier) + identifier)) ;) (return_statement "return;" return ;) })))) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00012a58(int *param_1)\n\n{\n  byte bVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  undefined2 *puVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  int iVar13;\n  \n  uVar2 = param_1[0x1d];\n  iVar11 = param_1[0xb];\n  iVar6 = iVar11;\n  while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }\n  uVar4 = param_1[0x5b0];\n  uVar2 = param_1[0xf];\n  if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_00012a58(int *param_1)\n\n{\n  byte bVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  undefined2 *puVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  int iVar13;\n  \n  uVar2 = param_1[0x1d];\n  iVar11 = param_1[0xb];\n  iVar6 = iVar11;\n  while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }\n  uVar4 = param_1[0x5b0];\n  uVar2 = param_1[0xf];\n  if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00012a58(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  undefined2 *puVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  int iVar13;\n  \n  uVar2 = param_1[0x1d];\n  iVar11 = param_1[0xb];\n  iVar6 = iVar11;\n  while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }\n  uVar4 = param_1[0x5b0];\n  uVar2 = param_1[0xf];\n  if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }\n  return;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined2 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (expression_statement "uVar2 = param_1[0x1d];" (assignment_expression "uVar2 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) (expression_statement "iVar11 = param_1[0xb];" (assignment_expression "iVar11 = param_1[0xb]" identifier = (subscript_expression "param_1[0xb]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = iVar11;" (assignment_expression "iVar6 = iVar11" identifier = identifier) ;) (while_statement "while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }" { (expression_statement "iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];" (assignment_expression "iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b]" identifier = (binary_expression "(param_1[0xf] - uVar2) - param_1[0x1b]" (parenthesized_expression "(param_1[0xf] - uVar2)" ( (binary_expression "param_1[0xf] - uVar2" (subscript_expression "param_1[0xf]" identifier [ number_literal ]) - identifier) )) - (subscript_expression "param_1[0x1b]" identifier [ number_literal ]))) ;) (if_statement "if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" if (parenthesized_expression "((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6))" ( (binary_expression "(uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)" (cast_expression "(uint)param_1[0x1b]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) < (call_expression "(uint)(iVar11 + -0x106 + iVar6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar11 + -0x106 + iVar6)" ( (binary_expression "iVar11 + -0x106 + iVar6" (binary_expression "iVar11 + -0x106" identifier + number_literal) + identifier) )))) )) (compound_statement "{\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" { (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar3 = *(int *)(iVar6 + 4);" (assignment_expression "iVar3 = *(int *)(iVar6 + 4)" identifier = (pointer_expression "*(int *)(iVar6 + 4)" * (cast_expression "(int *)(iVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) }) (else_clause "else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" else (compound_statement "{\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" { (expression_statement "iVar6 = iVar11 - iVar13;" (assignment_expression "iVar6 = iVar11 - iVar13" identifier = (binary_expression "iVar11 - iVar13" identifier - identifier)) ;) (expression_statement "iVar13 = iVar13 + iVar11;" (assignment_expression "iVar13 = iVar13 + iVar11" identifier = (binary_expression "iVar13 + iVar11" identifier + identifier)) ;) (expression_statement "(*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);" (call_expression "(*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6)" (parenthesized_expression "(*(code *)PTR_memcpy_000360fc)" ( (pointer_expression "*(code *)PTR_memcpy_000360fc" * (cast_expression "(code *)PTR_memcpy_000360fc" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1[0xe],param_1[0xe] + iVar11,iVar6)" ( (subscript_expression "param_1[0xe]" identifier [ number_literal ]) , (binary_expression "param_1[0xe] + iVar11" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) , identifier ))) ;) (expression_statement "param_1[0x1c] = param_1[0x1c] - iVar11;" (assignment_expression "param_1[0x1c] = param_1[0x1c] - iVar11" (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) = (binary_expression "param_1[0x1c] - iVar11" (subscript_expression "param_1[0x1c]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "param_1[0x1b] = param_1[0x1b] - iVar11;" (assignment_expression "param_1[0x1b] = param_1[0x1b] - iVar11" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = (binary_expression "param_1[0x1b] - iVar11" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "param_1[0x17] = param_1[0x17] - iVar11;" (assignment_expression "param_1[0x17] = param_1[0x17] - iVar11" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (binary_expression "param_1[0x17] - iVar11" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "FUN_000126e0(param_1);" (call_expression "FUN_000126e0(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "iVar3 = *(int *)(iVar6 + 4);" (assignment_expression "iVar3 = *(int *)(iVar6 + 4)" identifier = (pointer_expression "*(int *)(iVar6 + 4)" * (cast_expression "(int *)(iVar6 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4)" ( (binary_expression "iVar6 + 4" identifier + number_literal) ))))) ;) }))) (if_statement "if (iVar3 == 0) break;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);" (assignment_expression "iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" identifier = (call_expression "FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" identifier (argument_list "(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" ( identifier , (binary_expression "param_1[0xe] + param_1[0x1b] + param_1[0x1d]" (binary_expression "param_1[0xe] + param_1[0x1b]" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) + (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) , identifier )))) ;) (expression_statement "iVar13 = param_1[0x5ad];" (assignment_expression "iVar13 = param_1[0x5ad]" identifier = (subscript_expression "param_1[0x5ad]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = iVar6 + param_1[0x1d];" (assignment_expression "uVar2 = iVar6 + param_1[0x1d]" identifier = (binary_expression "iVar6 + param_1[0x1d]" identifier + (subscript_expression "param_1[0x1d]" identifier [ number_literal ]))) ;) (expression_statement "param_1[0x1d] = uVar2;" (assignment_expression "param_1[0x1d] = uVar2" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }" if (parenthesized_expression "(2 < uVar2 + iVar13)" ( (binary_expression "2 < uVar2 + iVar13" number_literal < (binary_expression "uVar2 + iVar13" identifier + identifier)) )) (compound_statement "{\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }" { (expression_statement "uVar10 = param_1[0x16];" (assignment_expression "uVar10 = param_1[0x16]" identifier = (subscript_expression "param_1[0x16]" identifier [ number_literal ])) ;) (expression_statement "uVar12 = param_1[0x1b] - iVar13;" (assignment_expression "uVar12 = param_1[0x1b] - iVar13" identifier = (binary_expression "param_1[0x1b] - iVar13" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) - identifier)) ;) (expression_statement "uVar9 = param_1[0x15];" (assignment_expression "uVar9 = param_1[0x15]" identifier = (subscript_expression "param_1[0x15]" identifier [ number_literal ])) ;) (expression_statement "pbVar7 = (byte *)(param_1[0xe] + uVar12);" (assignment_expression "pbVar7 = (byte *)(param_1[0xe] + uVar12)" identifier = (cast_expression "(byte *)(param_1[0xe] + uVar12)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + uVar12)" ( (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) )))) ;) (expression_statement "uVar4 = (uint)*pbVar7;" (assignment_expression "uVar4 = (uint)*pbVar7" identifier = (binary_expression "(uint)*pbVar7" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);" (assignment_expression "pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2)" identifier = (cast_expression "(byte *)(param_1[0xe] + uVar12 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + uVar12 + 2)" ( (binary_expression "param_1[0xe] + uVar12 + 2" (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) + number_literal) )))) ;) (expression_statement "param_1[0x12] = uVar4;" (assignment_expression "param_1[0x12] = uVar4" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;" (assignment_expression "param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = (binary_expression "((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9" (parenthesized_expression "((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f))" ( (binary_expression "(uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)" (cast_expression "(uint)pbVar7[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "pbVar7[1]" identifier [ number_literal ])) ^ (binary_expression "uVar4 << (uVar10 & 0x1f)" identifier << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) )))) )) & identifier)) ;) (do_statement "do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);" do (compound_statement "{\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      }" { (if_statement "if (iVar13 == 0) break;" if (parenthesized_expression "(iVar13 == 0)" ( (binary_expression "iVar13 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "bVar1 = *pbVar8;" (assignment_expression "bVar1 = *pbVar8" identifier = (pointer_expression "*pbVar8" * identifier)) ;) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;" (assignment_expression "uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9" identifier = (binary_expression "(param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9" (parenthesized_expression "(param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1)" ( (binary_expression "param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1" (binary_expression "param_1[0x12] << (uVar10 & 0x1f)" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) << (parenthesized_expression "(uVar10 & 0x1f)" ( (binary_expression "uVar10 & 0x1f" identifier & number_literal) ))) ^ (cast_expression "(uint)bVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) & identifier)) ;) (expression_statement "param_1[0x12] = uVar4;" (assignment_expression "param_1[0x12] = uVar4" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);" (assignment_expression "puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2)" identifier = (cast_expression "(undefined2 *)(param_1[0x11] + uVar4 * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x11] + uVar4 * 2)" ( (binary_expression "param_1[0x11] + uVar4 * 2" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) + (binary_expression "uVar4 * 2" identifier * number_literal)) )))) ;) (expression_statement "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;" (assignment_expression "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5" (pointer_expression "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" * (cast_expression "(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" ( (binary_expression "param_1[0x10] + (uVar12 & param_1[0xd]) * 2" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) + (binary_expression "(uVar12 & param_1[0xd]) * 2" (parenthesized_expression "(uVar12 & param_1[0xd])" ( (binary_expression "uVar12 & param_1[0xd]" identifier & (subscript_expression "param_1[0xd]" identifier [ number_literal ])) )) * number_literal)) )))) = (pointer_expression "*puVar5" * identifier)) ;) (expression_statement "*puVar5 = (short)uVar12;" (assignment_expression "*puVar5 = (short)uVar12" (pointer_expression "*puVar5" * identifier) = (cast_expression "(short)uVar12" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) (expression_statement "uVar12 = uVar12 + 1;" (assignment_expression "uVar12 = uVar12 + 1" identifier = (binary_expression "uVar12 + 1" identifier + number_literal)) ;) (expression_statement "param_1[0x5ad] = iVar13;" (assignment_expression "param_1[0x5ad] = iVar13" (subscript_expression "param_1[0x5ad]" identifier [ number_literal ]) = identifier) ;) }) while (parenthesized_expression "(2 < uVar2 + iVar13)" ( (binary_expression "2 < uVar2 + iVar13" number_literal < (binary_expression "uVar2 + iVar13" identifier + identifier)) )) ;) })) (if_statement "if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;" if (parenthesized_expression "((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0))" ( (binary_expression "(0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)" (parenthesized_expression "(0x105 < uVar2)" ( (binary_expression "0x105 < uVar2" number_literal < identifier) )) || (parenthesized_expression "(*(int *)(*param_1 + 4) == 0)" ( (binary_expression "*(int *)(*param_1 + 4) == 0" (pointer_expression "*(int *)(*param_1 + 4)" * (cast_expression "(int *)(*param_1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 4)" ( (binary_expression "*param_1 + 4" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) ))) )) (break_statement "break;" break ;)) (expression_statement "iVar6 = param_1[0xb];" (assignment_expression "iVar6 = param_1[0xb]" identifier = (subscript_expression "param_1[0xb]" identifier [ number_literal ])) ;) })) (expression_statement "uVar4 = param_1[0x5b0];" (assignment_expression "uVar4 = param_1[0x5b0]" identifier = (subscript_expression "param_1[0x5b0]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_1[0xf];" (assignment_expression "uVar2 = param_1[0xf]" identifier = (subscript_expression "param_1[0xf]" identifier [ number_literal ])) ;) (if_statement "if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }" if (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) (compound_statement "{\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }" { (expression_statement "uVar12 = param_1[0x1b] + param_1[0x1d];" (assignment_expression "uVar12 = param_1[0x1b] + param_1[0x1d]" identifier = (binary_expression "param_1[0x1b] + param_1[0x1d]" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) + (subscript_expression "param_1[0x1d]" identifier [ number_literal ]))) ;) (if_statement "if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" if (parenthesized_expression "(uVar4 < uVar12)" ( (binary_expression "uVar4 < uVar12" identifier < identifier) )) (compound_statement "{\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }" { (expression_statement "uVar4 = 0x102;" (assignment_expression "uVar4 = 0x102" identifier = number_literal) ;) (if_statement "if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }" if (parenthesized_expression "(uVar2 - uVar12 < 0x103)" ( (binary_expression "uVar2 - uVar12 < 0x103" (binary_expression "uVar2 - uVar12" identifier - identifier) < number_literal) )) (compound_statement "{\n        uVar4 = uVar2 - uVar12;\n      }" { (expression_statement "uVar4 = uVar2 - uVar12;" (assignment_expression "uVar4 = uVar2 - uVar12" identifier = (binary_expression "uVar2 - uVar12" identifier - identifier)) ;) })) (expression_statement "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);" (call_expression "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4)" (parenthesized_expression "(*(code *)PTR_memset_000360a8)" ( (pointer_expression "*(code *)PTR_memset_000360a8" * (cast_expression "(code *)PTR_memset_000360a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1[0xe] + uVar12,0,uVar4)" ( (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) , number_literal , identifier ))) ;) (expression_statement "param_1[0x5b0] = uVar12 + uVar4;" (assignment_expression "param_1[0x5b0] = uVar12 + uVar4" (subscript_expression "param_1[0x5b0]" identifier [ number_literal ]) = (binary_expression "uVar12 + uVar4" identifier + identifier)) ;) }) (else_clause "else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" else (if_statement "if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" if (parenthesized_expression "(uVar4 < uVar12 + 0x102)" ( (binary_expression "uVar4 < uVar12 + 0x102" identifier < (binary_expression "uVar12 + 0x102" identifier + number_literal)) )) (compound_statement "{\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" { (expression_statement "uVar12 = (uVar12 - uVar4) + 0x102;" (assignment_expression "uVar12 = (uVar12 - uVar4) + 0x102" identifier = (binary_expression "(uVar12 - uVar4) + 0x102" (parenthesized_expression "(uVar12 - uVar4)" ( (binary_expression "uVar12 - uVar4" identifier - identifier) )) + number_literal)) ;) (if_statement "if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }" if (parenthesized_expression "(uVar2 - uVar4 <= uVar12)" ( (binary_expression "uVar2 - uVar4 <= uVar12" (binary_expression "uVar2 - uVar4" identifier - identifier) <= identifier) )) (compound_statement "{\n        uVar12 = uVar2 - uVar4;\n      }" { (expression_statement "uVar12 = uVar2 - uVar4;" (assignment_expression "uVar12 = uVar2 - uVar4" identifier = (binary_expression "uVar2 - uVar4" identifier - identifier)) ;) })) (expression_statement "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);" (call_expression "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12)" (parenthesized_expression "(*(code *)PTR_memset_000360a8)" ( (pointer_expression "*(code *)PTR_memset_000360a8" * (cast_expression "(code *)PTR_memset_000360a8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1[0xe] + uVar4,0,uVar12)" ( (binary_expression "param_1[0xe] + uVar4" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + identifier) , number_literal , identifier ))) ;) (expression_statement "param_1[0x5b0] = param_1[0x5b0] + uVar12;" (assignment_expression "param_1[0x5b0] = param_1[0x5b0] + uVar12" (subscript_expression "param_1[0x5b0]" identifier [ number_literal ]) = (binary_expression "param_1[0x5b0] + uVar12" (subscript_expression "param_1[0x5b0]" identifier [ number_literal ]) + identifier)) ;) (return_statement "return;" return ;) })))) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT) )) - (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (subscript_expression IDENT [ LIT ]) , (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (subscript_expression IDENT [ LIT ])) + (subscript_expression IDENT [ LIT ])) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) + LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) ^ (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) )) & IDENT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ^ (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) & IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_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 (subscript_expression IDENT [ LIT ]) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & (subscript_expression IDENT [ LIT ])) )) * LIT)) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }) while (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + IDENT)) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == LIT) ))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , LIT , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + IDENT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , LIT , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) (return_statement return ;) })))) })) (return_statement return ;) })))
(function_definition "void FUN_00012a58(int *param_1)\n\n{\n  byte bVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  undefined2 *puVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  int iVar13;\n  \n  uVar2 = param_1[0x1d];\n  iVar11 = param_1[0xb];\n  iVar6 = iVar11;\n  while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }\n  uVar4 = param_1[0x5b0];\n  uVar2 = param_1[0xf];\n  if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00012a58(int *param_1)" (identifier "FUN_00012a58") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  byte bVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  undefined2 *puVar5;\n  int iVar6;\n  byte *pbVar7;\n  byte *pbVar8;\n  uint uVar9;\n  uint uVar10;\n  int iVar11;\n  uint uVar12;\n  int iVar13;\n  \n  uVar2 = param_1[0x1d];\n  iVar11 = param_1[0xb];\n  iVar6 = iVar11;\n  while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }\n  uVar4 = param_1[0x5b0];\n  uVar2 = param_1[0xf];\n  if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }\n  return;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "undefined2 *puVar5;" (type_identifier "undefined2") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "byte *pbVar7;" (type_identifier "byte") (pointer_declarator "*pbVar7" (* "*") (identifier "pbVar7")) (; ";")) (declaration "byte *pbVar8;" (type_identifier "byte") (pointer_declarator "*pbVar8" (* "*") (identifier "pbVar8")) (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (expression_statement "uVar2 = param_1[0x1d];" (assignment_expression "uVar2 = param_1[0x1d]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (; ";")) (expression_statement "iVar11 = param_1[0xb];" (assignment_expression "iVar11 = param_1[0xb]" (identifier "iVar11") (= "=") (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]"))) (; ";")) (expression_statement "iVar6 = iVar11;" (assignment_expression "iVar6 = iVar11" (identifier "iVar6") (= "=") (identifier "iVar11")) (; ";")) (while_statement "while( true ) {\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];\n    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    if (iVar3 == 0) break;\n    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);\n    iVar13 = param_1[0x5ad];\n    uVar2 = iVar6 + param_1[0x1d];\n    param_1[0x1d] = uVar2;\n    if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }\n    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;\n    iVar6 = param_1[0xb];\n  }" ({ "{") (expression_statement "iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];" (assignment_expression "iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b]" (identifier "iVar13") (= "=") (binary_expression "(param_1[0xf] - uVar2) - param_1[0x1b]" (parenthesized_expression "(param_1[0xf] - uVar2)" (( "(") (binary_expression "param_1[0xf] - uVar2" (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]")) (- "-") (identifier "uVar2")) () ")")) (- "-") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")))) (; ";")) (if_statement "if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }\n    else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" (if "if") (parenthesized_expression "((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6))" (( "(") (binary_expression "(uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)" (cast_expression "(uint)param_1[0x1b]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (< "<") (call_expression "(uint)(iVar11 + -0x106 + iVar6)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar11 + -0x106 + iVar6)" (( "(") (binary_expression "iVar11 + -0x106 + iVar6" (binary_expression "iVar11 + -0x106" (identifier "iVar11") (+ "+") (number_literal "-0x106")) (+ "+") (identifier "iVar6")) () ")")))) () ")")) (compound_statement "{\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" ({ "{") (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" (identifier "iVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar3 = *(int *)(iVar6 + 4);" (assignment_expression "iVar3 = *(int *)(iVar6 + 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar6 + 4)" (* "*") (cast_expression "(int *)(iVar6 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" (else "else") (compound_statement "{\n      iVar6 = iVar11 - iVar13;\n      iVar13 = iVar13 + iVar11;\n      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);\n      param_1[0x1c] = param_1[0x1c] - iVar11;\n      param_1[0x1b] = param_1[0x1b] - iVar11;\n      param_1[0x17] = param_1[0x17] - iVar11;\n      FUN_000126e0(param_1);\n      iVar6 = *param_1;\n      iVar3 = *(int *)(iVar6 + 4);\n    }" ({ "{") (expression_statement "iVar6 = iVar11 - iVar13;" (assignment_expression "iVar6 = iVar11 - iVar13" (identifier "iVar6") (= "=") (binary_expression "iVar11 - iVar13" (identifier "iVar11") (- "-") (identifier "iVar13"))) (; ";")) (expression_statement "iVar13 = iVar13 + iVar11;" (assignment_expression "iVar13 = iVar13 + iVar11" (identifier "iVar13") (= "=") (binary_expression "iVar13 + iVar11" (identifier "iVar13") (+ "+") (identifier "iVar11"))) (; ";")) (expression_statement "(*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);" (call_expression "(*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6)" (parenthesized_expression "(*(code *)PTR_memcpy_000360fc)" (( "(") (pointer_expression "*(code *)PTR_memcpy_000360fc" (* "*") (cast_expression "(code *)PTR_memcpy_000360fc" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memcpy_000360fc"))) () ")")) (argument_list "(param_1[0xe],param_1[0xe] + iVar11,iVar6)" (( "(") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (, ",") (binary_expression "param_1[0xe] + iVar11" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (identifier "iVar11")) (, ",") (identifier "iVar6") () ")"))) (; ";")) (expression_statement "param_1[0x1c] = param_1[0x1c] - iVar11;" (assignment_expression "param_1[0x1c] = param_1[0x1c] - iVar11" (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]")) (= "=") (binary_expression "param_1[0x1c] - iVar11" (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]")) (- "-") (identifier "iVar11"))) (; ";")) (expression_statement "param_1[0x1b] = param_1[0x1b] - iVar11;" (assignment_expression "param_1[0x1b] = param_1[0x1b] - iVar11" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (binary_expression "param_1[0x1b] - iVar11" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (- "-") (identifier "iVar11"))) (; ";")) (expression_statement "param_1[0x17] = param_1[0x17] - iVar11;" (assignment_expression "param_1[0x17] = param_1[0x17] - iVar11" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (= "=") (binary_expression "param_1[0x17] - iVar11" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (- "-") (identifier "iVar11"))) (; ";")) (expression_statement "FUN_000126e0(param_1);" (call_expression "FUN_000126e0(param_1)" (identifier "FUN_000126e0") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (expression_statement "iVar6 = *param_1;" (assignment_expression "iVar6 = *param_1" (identifier "iVar6") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "iVar3 = *(int *)(iVar6 + 4);" (assignment_expression "iVar3 = *(int *)(iVar6 + 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar6 + 4)" (* "*") (cast_expression "(int *)(iVar6 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4)" (( "(") (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (iVar3 == 0) break;" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);" (assignment_expression "iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" (identifier "iVar6") (= "=") (call_expression "FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" (identifier "FUN_0001297c") (argument_list "(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13)" (( "(") (identifier "iVar6") (, ",") (binary_expression "param_1[0xe] + param_1[0x1b] + param_1[0x1d]" (binary_expression "param_1[0xe] + param_1[0x1b]" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (+ "+") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (, ",") (identifier "iVar13") () ")")))) (; ";")) (expression_statement "iVar13 = param_1[0x5ad];" (assignment_expression "iVar13 = param_1[0x5ad]" (identifier "iVar13") (= "=") (subscript_expression "param_1[0x5ad]" (identifier "param_1") ([ "[") (number_literal "0x5ad") (] "]"))) (; ";")) (expression_statement "uVar2 = iVar6 + param_1[0x1d];" (assignment_expression "uVar2 = iVar6 + param_1[0x1d]" (identifier "uVar2") (= "=") (binary_expression "iVar6 + param_1[0x1d]" (identifier "iVar6") (+ "+") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")))) (; ";")) (expression_statement "param_1[0x1d] = uVar2;" (assignment_expression "param_1[0x1d] = uVar2" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (if_statement "if (2 < uVar2 + iVar13) {\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }" (if "if") (parenthesized_expression "(2 < uVar2 + iVar13)" (( "(") (binary_expression "2 < uVar2 + iVar13" (number_literal "2") (< "<") (binary_expression "uVar2 + iVar13" (identifier "uVar2") (+ "+") (identifier "iVar13"))) () ")")) (compound_statement "{\n      uVar10 = param_1[0x16];\n      uVar12 = param_1[0x1b] - iVar13;\n      uVar9 = param_1[0x15];\n      pbVar7 = (byte *)(param_1[0xe] + uVar12);\n      uVar4 = (uint)*pbVar7;\n      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);\n      param_1[0x12] = uVar4;\n      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;\n      do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);\n    }" ({ "{") (expression_statement "uVar10 = param_1[0x16];" (assignment_expression "uVar10 = param_1[0x16]" (identifier "uVar10") (= "=") (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]"))) (; ";")) (expression_statement "uVar12 = param_1[0x1b] - iVar13;" (assignment_expression "uVar12 = param_1[0x1b] - iVar13" (identifier "uVar12") (= "=") (binary_expression "param_1[0x1b] - iVar13" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (- "-") (identifier "iVar13"))) (; ";")) (expression_statement "uVar9 = param_1[0x15];" (assignment_expression "uVar9 = param_1[0x15]" (identifier "uVar9") (= "=") (subscript_expression "param_1[0x15]" (identifier "param_1") ([ "[") (number_literal "0x15") (] "]"))) (; ";")) (expression_statement "pbVar7 = (byte *)(param_1[0xe] + uVar12);" (assignment_expression "pbVar7 = (byte *)(param_1[0xe] + uVar12)" (identifier "pbVar7") (= "=") (cast_expression "(byte *)(param_1[0xe] + uVar12)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0xe] + uVar12)" (( "(") (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (identifier "uVar12")) () ")")))) (; ";")) (expression_statement "uVar4 = (uint)*pbVar7;" (assignment_expression "uVar4 = (uint)*pbVar7" (identifier "uVar4") (= "=") (binary_expression "(uint)*pbVar7" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar7"))) (; ";")) (expression_statement "pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);" (assignment_expression "pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2)" (identifier "pbVar8") (= "=") (cast_expression "(byte *)(param_1[0xe] + uVar12 + 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0xe] + uVar12 + 2)" (( "(") (binary_expression "param_1[0xe] + uVar12 + 2" (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (identifier "uVar12")) (+ "+") (number_literal "2")) () ")")))) (; ";")) (expression_statement "param_1[0x12] = uVar4;" (assignment_expression "param_1[0x12] = uVar4" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;" (assignment_expression "param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (= "=") (binary_expression "((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9" (parenthesized_expression "((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f))" (( "(") (binary_expression "(uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)" (cast_expression "(uint)pbVar7[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "pbVar7[1]" (identifier "pbVar7") ([ "[") (number_literal "1") (] "]"))) (^ "^") (binary_expression "uVar4 << (uVar10 & 0x1f)" (identifier "uVar4") (<< "<<") (parenthesized_expression "(uVar10 & 0x1f)" (( "(") (binary_expression "uVar10 & 0x1f" (identifier "uVar10") (& "&") (number_literal "0x1f")) () ")")))) () ")")) (& "&") (identifier "uVar9"))) (; ";")) (do_statement "do {\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      } while (2 < uVar2 + iVar13);" (do "do") (compound_statement "{\n        if (iVar13 == 0) break;\n        iVar13 = iVar13 + -1;\n        bVar1 = *pbVar8;\n        pbVar8 = pbVar8 + 1;\n        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;\n        param_1[0x12] = uVar4;\n        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);\n        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;\n        *puVar5 = (short)uVar12;\n        uVar12 = uVar12 + 1;\n        param_1[0x5ad] = iVar13;\n      }" ({ "{") (if_statement "if (iVar13 == 0) break;" (if "if") (parenthesized_expression "(iVar13 == 0)" (( "(") (binary_expression "iVar13 == 0" (identifier "iVar13") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + -1" (identifier "iVar13") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar1 = *pbVar8;" (assignment_expression "bVar1 = *pbVar8" (identifier "bVar1") (= "=") (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8"))) (; ";")) (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + 1" (identifier "pbVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;" (assignment_expression "uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9" (identifier "uVar4") (= "=") (binary_expression "(param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9" (parenthesized_expression "(param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1)" (( "(") (binary_expression "param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1" (binary_expression "param_1[0x12] << (uVar10 & 0x1f)" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (<< "<<") (parenthesized_expression "(uVar10 & 0x1f)" (( "(") (binary_expression "uVar10 & 0x1f" (identifier "uVar10") (& "&") (number_literal "0x1f")) () ")"))) (^ "^") (cast_expression "(uint)bVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar1"))) () ")")) (& "&") (identifier "uVar9"))) (; ";")) (expression_statement "param_1[0x12] = uVar4;" (assignment_expression "param_1[0x12] = uVar4" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);" (assignment_expression "puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2)" (identifier "puVar5") (= "=") (cast_expression "(undefined2 *)(param_1[0x11] + uVar4 * 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x11] + uVar4 * 2)" (( "(") (binary_expression "param_1[0x11] + uVar4 * 2" (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]")) (+ "+") (binary_expression "uVar4 * 2" (identifier "uVar4") (* "*") (number_literal "2"))) () ")")))) (; ";")) (expression_statement "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;" (assignment_expression "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5" (pointer_expression "*(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" (* "*") (cast_expression "(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x10] + (uVar12 & param_1[0xd]) * 2)" (( "(") (binary_expression "param_1[0x10] + (uVar12 & param_1[0xd]) * 2" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (+ "+") (binary_expression "(uVar12 & param_1[0xd]) * 2" (parenthesized_expression "(uVar12 & param_1[0xd])" (( "(") (binary_expression "uVar12 & param_1[0xd]" (identifier "uVar12") (& "&") (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]"))) () ")")) (* "*") (number_literal "2"))) () ")")))) (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (expression_statement "*puVar5 = (short)uVar12;" (assignment_expression "*puVar5 = (short)uVar12" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (cast_expression "(short)uVar12" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar12"))) (; ";")) (expression_statement "uVar12 = uVar12 + 1;" (assignment_expression "uVar12 = uVar12 + 1" (identifier "uVar12") (= "=") (binary_expression "uVar12 + 1" (identifier "uVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_1[0x5ad] = iVar13;" (assignment_expression "param_1[0x5ad] = iVar13" (subscript_expression "param_1[0x5ad]" (identifier "param_1") ([ "[") (number_literal "0x5ad") (] "]")) (= "=") (identifier "iVar13")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(2 < uVar2 + iVar13)" (( "(") (binary_expression "2 < uVar2 + iVar13" (number_literal "2") (< "<") (binary_expression "uVar2 + iVar13" (identifier "uVar2") (+ "+") (identifier "iVar13"))) () ")")) (; ";")) (} "}"))) (if_statement "if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;" (if "if") (parenthesized_expression "((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0))" (( "(") (binary_expression "(0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)" (parenthesized_expression "(0x105 < uVar2)" (( "(") (binary_expression "0x105 < uVar2" (number_literal "0x105") (< "<") (identifier "uVar2")) () ")")) (|| "||") (parenthesized_expression "(*(int *)(*param_1 + 4) == 0)" (( "(") (binary_expression "*(int *)(*param_1 + 4) == 0" (pointer_expression "*(int *)(*param_1 + 4)" (* "*") (cast_expression "(int *)(*param_1 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 4)" (( "(") (binary_expression "*param_1 + 4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "4")) () ")")))) (== "==") (number_literal "0")) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar6 = param_1[0xb];" (assignment_expression "iVar6 = param_1[0xb]" (identifier "iVar6") (= "=") (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]"))) (; ";")) (} "}"))) (expression_statement "uVar4 = param_1[0x5b0];" (assignment_expression "uVar4 = param_1[0x5b0]" (identifier "uVar4") (= "=") (subscript_expression "param_1[0x5b0]" (identifier "param_1") ([ "[") (number_literal "0x5b0") (] "]"))) (; ";")) (expression_statement "uVar2 = param_1[0xf];" (assignment_expression "uVar2 = param_1[0xf]" (identifier "uVar2") (= "=") (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]"))) (; ";")) (if_statement "if (uVar4 < uVar2) {\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }" (if "if") (parenthesized_expression "(uVar4 < uVar2)" (( "(") (binary_expression "uVar4 < uVar2" (identifier "uVar4") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n    uVar12 = param_1[0x1b] + param_1[0x1d];\n    if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }\n  }" ({ "{") (expression_statement "uVar12 = param_1[0x1b] + param_1[0x1d];" (assignment_expression "uVar12 = param_1[0x1b] + param_1[0x1d]" (identifier "uVar12") (= "=") (binary_expression "param_1[0x1b] + param_1[0x1d]" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (+ "+") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")))) (; ";")) (if_statement "if (uVar4 < uVar12) {\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }\n    else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" (if "if") (parenthesized_expression "(uVar4 < uVar12)" (( "(") (binary_expression "uVar4 < uVar12" (identifier "uVar4") (< "<") (identifier "uVar12")) () ")")) (compound_statement "{\n      uVar4 = 0x102;\n      if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);\n      param_1[0x5b0] = uVar12 + uVar4;\n    }" ({ "{") (expression_statement "uVar4 = 0x102;" (assignment_expression "uVar4 = 0x102" (identifier "uVar4") (= "=") (number_literal "0x102")) (; ";")) (if_statement "if (uVar2 - uVar12 < 0x103) {\n        uVar4 = uVar2 - uVar12;\n      }" (if "if") (parenthesized_expression "(uVar2 - uVar12 < 0x103)" (( "(") (binary_expression "uVar2 - uVar12 < 0x103" (binary_expression "uVar2 - uVar12" (identifier "uVar2") (- "-") (identifier "uVar12")) (< "<") (number_literal "0x103")) () ")")) (compound_statement "{\n        uVar4 = uVar2 - uVar12;\n      }" ({ "{") (expression_statement "uVar4 = uVar2 - uVar12;" (assignment_expression "uVar4 = uVar2 - uVar12" (identifier "uVar4") (= "=") (binary_expression "uVar2 - uVar12" (identifier "uVar2") (- "-") (identifier "uVar12"))) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);" (call_expression "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4)" (parenthesized_expression "(*(code *)PTR_memset_000360a8)" (( "(") (pointer_expression "*(code *)PTR_memset_000360a8" (* "*") (cast_expression "(code *)PTR_memset_000360a8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memset_000360a8"))) () ")")) (argument_list "(param_1[0xe] + uVar12,0,uVar4)" (( "(") (binary_expression "param_1[0xe] + uVar12" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (identifier "uVar12")) (, ",") (number_literal "0") (, ",") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "param_1[0x5b0] = uVar12 + uVar4;" (assignment_expression "param_1[0x5b0] = uVar12 + uVar4" (subscript_expression "param_1[0x5b0]" (identifier "param_1") ([ "[") (number_literal "0x5b0") (] "]")) (= "=") (binary_expression "uVar12 + uVar4" (identifier "uVar12") (+ "+") (identifier "uVar4"))) (; ";")) (} "}")) (else_clause "else if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" (else "else") (if_statement "if (uVar4 < uVar12 + 0x102) {\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" (if "if") (parenthesized_expression "(uVar4 < uVar12 + 0x102)" (( "(") (binary_expression "uVar4 < uVar12 + 0x102" (identifier "uVar4") (< "<") (binary_expression "uVar12 + 0x102" (identifier "uVar12") (+ "+") (number_literal "0x102"))) () ")")) (compound_statement "{\n      uVar12 = (uVar12 - uVar4) + 0x102;\n      if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }\n      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);\n      param_1[0x5b0] = param_1[0x5b0] + uVar12;\n      return;\n    }" ({ "{") (expression_statement "uVar12 = (uVar12 - uVar4) + 0x102;" (assignment_expression "uVar12 = (uVar12 - uVar4) + 0x102" (identifier "uVar12") (= "=") (binary_expression "(uVar12 - uVar4) + 0x102" (parenthesized_expression "(uVar12 - uVar4)" (( "(") (binary_expression "uVar12 - uVar4" (identifier "uVar12") (- "-") (identifier "uVar4")) () ")")) (+ "+") (number_literal "0x102"))) (; ";")) (if_statement "if (uVar2 - uVar4 <= uVar12) {\n        uVar12 = uVar2 - uVar4;\n      }" (if "if") (parenthesized_expression "(uVar2 - uVar4 <= uVar12)" (( "(") (binary_expression "uVar2 - uVar4 <= uVar12" (binary_expression "uVar2 - uVar4" (identifier "uVar2") (- "-") (identifier "uVar4")) (<= "<=") (identifier "uVar12")) () ")")) (compound_statement "{\n        uVar12 = uVar2 - uVar4;\n      }" ({ "{") (expression_statement "uVar12 = uVar2 - uVar4;" (assignment_expression "uVar12 = uVar2 - uVar4" (identifier "uVar12") (= "=") (binary_expression "uVar2 - uVar4" (identifier "uVar2") (- "-") (identifier "uVar4"))) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);" (call_expression "(*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12)" (parenthesized_expression "(*(code *)PTR_memset_000360a8)" (( "(") (pointer_expression "*(code *)PTR_memset_000360a8" (* "*") (cast_expression "(code *)PTR_memset_000360a8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memset_000360a8"))) () ")")) (argument_list "(param_1[0xe] + uVar4,0,uVar12)" (( "(") (binary_expression "param_1[0xe] + uVar4" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (identifier "uVar4")) (, ",") (number_literal "0") (, ",") (identifier "uVar12") () ")"))) (; ";")) (expression_statement "param_1[0x5b0] = param_1[0x5b0] + uVar12;" (assignment_expression "param_1[0x5b0] = param_1[0x5b0] + uVar12" (subscript_expression "param_1[0x5b0]" (identifier "param_1") ([ "[") (number_literal "0x5b0") (] "]")) (= "=") (binary_expression "param_1[0x5b0] + uVar12" (subscript_expression "param_1[0x5b0]" (identifier "param_1") ([ "[") (number_literal "0x5b0") (] "]")) (+ "+") (identifier "uVar12"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (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: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) right: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (subscript_expression argument: (identifier) index: (number_literal)) (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)) (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (subscript_expression argument: (identifier) index: (number_literal))) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (identifier)) right: (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: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier)))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) right: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) right: (number_literal)))))) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (number_literal))))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)) (number_literal) (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (identifier))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)) (number_literal) (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) (return_statement))))))) (return_statement))))

void MASKED(int *param_1)

{
  byte bVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  undefined2 *puVar5;
  int iVar6;
  byte *pbVar7;
  byte *pbVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  int iVar13;
  
  uVar2 = param_1[0x1d];
  iVar11 = param_1[0xb];
  iVar6 = iVar11;
  while( true ) {
    iVar13 = (param_1[0xf] - uVar2) - param_1[0x1b];
    if ((uint)param_1[0x1b] < (uint)(iVar11 + -0x106 + iVar6)) {
      iVar6 = *param_1;
      iVar3 = *(int *)(iVar6 + 4);
    }
    else {
      iVar6 = iVar11 - iVar13;
      iVar13 = iVar13 + iVar11;
      (*(code *)PTR_memcpy_000360fc)(param_1[0xe],param_1[0xe] + iVar11,iVar6);
      param_1[0x1c] = param_1[0x1c] - iVar11;
      param_1[0x1b] = param_1[0x1b] - iVar11;
      param_1[0x17] = param_1[0x17] - iVar11;
      FUN_000126e0(param_1);
      iVar6 = *param_1;
      iVar3 = *(int *)(iVar6 + 4);
    }
    if (iVar3 == 0) break;
    iVar6 = FUN_0001297c(iVar6,param_1[0xe] + param_1[0x1b] + param_1[0x1d],iVar13);
    iVar13 = param_1[0x5ad];
    uVar2 = iVar6 + param_1[0x1d];
    param_1[0x1d] = uVar2;
    if (2 < uVar2 + iVar13) {
      uVar10 = param_1[0x16];
      uVar12 = param_1[0x1b] - iVar13;
      uVar9 = param_1[0x15];
      pbVar7 = (byte *)(param_1[0xe] + uVar12);
      uVar4 = (uint)*pbVar7;
      pbVar8 = (byte *)(param_1[0xe] + uVar12 + 2);
      param_1[0x12] = uVar4;
      param_1[0x12] = ((uint)pbVar7[1] ^ uVar4 << (uVar10 & 0x1f)) & uVar9;
      do {
        if (iVar13 == 0) break;
        iVar13 = iVar13 + -1;
        bVar1 = *pbVar8;
        pbVar8 = pbVar8 + 1;
        uVar4 = (param_1[0x12] << (uVar10 & 0x1f) ^ (uint)bVar1) & uVar9;
        param_1[0x12] = uVar4;
        puVar5 = (undefined2 *)(param_1[0x11] + uVar4 * 2);
        *(undefined2 *)(param_1[0x10] + (uVar12 & param_1[0xd]) * 2) = *puVar5;
        *puVar5 = (short)uVar12;
        uVar12 = uVar12 + 1;
        param_1[0x5ad] = iVar13;
      } while (2 < uVar2 + iVar13);
    }
    if ((0x105 < uVar2) || (*(int *)(*param_1 + 4) == 0)) break;
    iVar6 = param_1[0xb];
  }
  uVar4 = param_1[0x5b0];
  uVar2 = param_1[0xf];
  if (uVar4 < uVar2) {
    uVar12 = param_1[0x1b] + param_1[0x1d];
    if (uVar4 < uVar12) {
      uVar4 = 0x102;
      if (uVar2 - uVar12 < 0x103) {
        uVar4 = uVar2 - uVar12;
      }
      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar12,0,uVar4);
      param_1[0x5b0] = uVar12 + uVar4;
    }
    else if (uVar4 < uVar12 + 0x102) {
      uVar12 = (uVar12 - uVar4) + 0x102;
      if (uVar2 - uVar4 <= uVar12) {
        uVar12 = uVar2 - uVar4;
      }
      (*(code *)PTR_memset_000360a8)(param_1[0xe] + uVar4,0,uVar12);
      param_1[0x5b0] = param_1[0x5b0] + uVar12;
      return;
    }
  }
  return;
}

