
int32 pstm_div_2d(pstm_int *a,int b,pstm_int *c,pstm_int *d)

{
  pstm_digit *ppVar1;
  undefined *puVar2;
  int iVar3;
  int32 iVar4;
  uint *puVar5;
  int iVar6;
  pstm_digit *ppVar7;
  uint uVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  pstm_int *unaff_s5;
  pstm_int *unaff_s6;
  pstm_int t;
  
  puVar2 = PTR___stack_chk_guard_0012b14c;
  iVar3 = *(int *)PTR___stack_chk_guard_0012b14c;
  if (b < 1) {
    iVar4 = pstm_copy(a,c);
    if (iVar4 == 0) {
      b = 0;
      a = unaff_s6;
      if (d != (pstm_int *)0x0) {
        d->sign = 0;
        d->used = 0;
        if (0 < d->alloc) {
          iVar6 = 0;
          ppVar7 = d->dp;
          do {
            *ppVar7 = 0;
            iVar6 = iVar6 + 1;
            ppVar7 = ppVar7 + 1;
            if (d->alloc <= iVar6) goto LAB_0004ef04;
          } while( true );
        }
      }
      goto LAB_0004ef08;
    }
  }
  else {
    if (d != (pstm_int *)0x0) {
      unaff_s5 = &t;
      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);
      t.used = 0;
      t.alloc = 0x40;
      t.sign = 0;
      iVar4 = pstm_copy(a,unaff_s5);
      if (iVar4 == 0) goto LAB_0004ef4c;
      b = 0xfffffff8;
      goto LAB_0004ee84;
    }
    iVar4 = pstm_copy(a,c);
    a = unaff_s6;
    if (iVar4 == 0) goto LAB_0004edb0;
  }
  b = 0xfffffff8;
  a = unaff_s6;
LAB_0004ef08:
  do {
    if (iVar3 == *(int *)puVar2) {
      return b;
    }
    (*(code *)PTR___stack_chk_fail_0012b0c8)();
LAB_0004ef4c:
    if (b < a->used << 5) {
      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);
      if (iVar6 < t.used) {
        ppVar7 = t.dp + iVar6;
        do {
          *ppVar7 = 0;
          iVar6 = iVar6 + 1;
          ppVar7 = ppVar7 + 1;
        } while (iVar6 < t.used);
      }
      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);
      if (t.used < 1) {
        if (t.used == 0) {
          t.sign = 0;
        }
      }
      else if (t.dp[t.used + -1] == 0) {
        ppVar7 = t.dp + t.used;
        do {
          t.used = t.used + -1;
          if (t.used == 0) {
            t.sign = 0;
            break;
          }
          ppVar1 = ppVar7 + -2;
          ppVar7 = ppVar7 + -1;
        } while (*ppVar1 == 0);
      }
    }
    iVar4 = pstm_copy(a,c);
    if (iVar4 == 0) {
LAB_0004edb0:
      if (0x1f < b) {
        pstm_rshd(c,b >> 5);
      }
      uVar11 = b & 0x1f;
      iVar6 = c->used;
      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {
        uVar10 = 0;
        puVar5 = c->dp + iVar6 + -1;
        do {
          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);
          iVar9 = iVar9 + -1;
          uVar10 = *puVar5 & ~(-1 << uVar11);
          *puVar5 = uVar8 | *puVar5 >> uVar11;
          puVar5 = puVar5 + -1;
        } while (iVar9 != -1);
        iVar6 = c->used;
      }
      if (iVar6 < 1) {
        if (iVar6 == 0) {
LAB_0004eebc:
          c->sign = 0;
        }
      }
      else if (c->dp[iVar6 + -1] == 0) {
        ppVar7 = c->dp + iVar6;
        do {
          iVar6 = iVar6 + -1;
          c->used = iVar6;
          if (iVar6 == 0) goto LAB_0004eebc;
          ppVar1 = ppVar7 + -2;
          ppVar7 = ppVar7 + -1;
        } while (*ppVar1 == 0);
      }
      unaff_s6 = a;
      if (d == (pstm_int *)0x0) {
LAB_0004ef04:
        b = 0;
        a = unaff_s6;
        goto LAB_0004ef08;
      }
      b = 0;
      unaff_s5 = &t;
    }
    else {
      b = 0xfffffff8;
    }
LAB_0004ee84:
    iVar4 = pstm_copy(unaff_s5,d);
    if (iVar4 != 0) {
      b = 0xfffffff8;
    }
    pstm_clear(unaff_s5);
  } while( true );
}



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

{
  int *piVar1;
  undefined *puVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint *puVar6;
  undefined4 *puVar7;
  uint uVar8;
  undefined4 uVar9;
  int local_34 [4];
  int local_24;
  
  puVar2 = PTR___stack_chk_guard_0012b14c;
  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;
  if ((int)param_2 < 1) {
    iVar3 = pstm_copy(param_1,param_3);
    if (iVar3 == 0) {
      uVar9 = 0;
      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;
      param_4[2] = 0;
      *param_4 = 0;
      if ((int)param_4[1] < 1) goto LAB_0004ef08;
      iVar3 = 0;
      puVar7 = (undefined4 *)param_4[3];
      do {
        *puVar7 = 0;
        iVar3 = iVar3 + 1;
        puVar7 = puVar7 + 1;
      } while (iVar3 < (int)param_4[1]);
LAB_0004ef04:
      uVar9 = 0;
      goto LAB_0004ef08;
    }
LAB_0004ed3c:
    uVar9 = 0xfffffff8;
  }
  else {
    iVar3 = (int)param_2 >> 5;
    if (param_4 == (undefined4 *)0x0) {
      iVar4 = pstm_copy(param_1,param_3);
      if (iVar4 != 0) goto LAB_0004ed3c;
LAB_0004edb0:
      if (0x1f < (int)param_2) {
        pstm_rshd(param_3,iVar3);
      }
      param_2 = param_2 & 0x1f;
      iVar3 = *param_3;
      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {
        uVar8 = 0;
        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);
        do {
          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);
          iVar4 = iVar4 + -1;
          uVar8 = *puVar6 & ~(-1 << param_2);
          *puVar6 = uVar5 | *puVar6 >> param_2;
          puVar6 = puVar6 + -1;
        } while (iVar4 != -1);
        iVar3 = *param_3;
      }
      if (iVar3 < 1) {
        if (iVar3 == 0) {
LAB_0004eebc:
          param_3[2] = 0;
        }
      }
      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {
        iVar4 = param_3[3] + iVar3 * 4;
        do {
          iVar3 = iVar3 + -1;
          *param_3 = iVar3;
          if (iVar3 == 0) goto LAB_0004eebc;
          piVar1 = (int *)(iVar4 + -8);
          iVar4 = iVar4 + -4;
        } while (*piVar1 == 0);
      }
      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;
      uVar9 = 0;
    }
    else {
      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);
      local_34[0] = 0;
      local_34[1] = 0x40;
      local_34[2] = 0;
      iVar4 = pstm_copy(param_1,local_34);
      if (iVar4 == 0) {
        if ((int)param_2 < *param_1 << 5) {
          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;
          if (iVar4 < local_34[0]) {
            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);
            do {
              *puVar7 = 0;
              iVar4 = iVar4 + 1;
              puVar7 = puVar7 + 1;
            } while (iVar4 < local_34[0]);
          }
          puVar6 = (uint *)(local_34[3] + iVar3 * 4);
          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);
          if (local_34[0] < 1) {
            if (local_34[0] == 0) {
              local_34[2] = 0;
            }
          }
          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {
            iVar4 = local_34[3] + local_34[0] * 4;
            do {
              local_34[0] = local_34[0] + -1;
              if (local_34[0] == 0) {
                local_34[2] = 0;
                break;
              }
              piVar1 = (int *)(iVar4 + -8);
              iVar4 = iVar4 + -4;
            } while (*piVar1 == 0);
          }
        }
        iVar4 = pstm_copy(param_1,param_3);
        if (iVar4 == 0) goto LAB_0004edb0;
        uVar9 = 0xfffffff8;
      }
      else {
        uVar9 = 0xfffffff8;
      }
    }
    iVar3 = pstm_copy(local_34,param_4);
    if (iVar3 != 0) {
      uVar9 = 0xfffffff8;
    }
    pstm_clear(local_34);
  }
LAB_0004ef08:
  if (local_24 != *(int *)puVar2) {
    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();
    return uVar9;
  }
  return uVar9;
}


lui gp,0xe
addiu gp,gp,0x3474
addu gp,gp,t9
addiu sp,sp,-0x50
sw s4,0x40(sp)
lw s4,-0x7004(gp)
sw gp,0x10(sp)
sw s2,0x38(sp)
or s2,a3,zero
sw s1,0x34(sp)
or s1,a2,zero
sw ra,0x4c(sp)
sw s6,0x48(sp)
sw s5,0x44(sp)
sw s3,0x3c(sp)
sw s0,0x30(sp)
lw v0,0x0(s4)
sw v0,0x2c(sp)
bgtz a1,0x0004ed44
_lw t9,-0x7b30(gp)
bal 0x0004da4c
_or a1,a2,zero
beq v0,zero,0x0004eecc
_lw gp,0x10(sp)
b 0x0004ef08
_li s0,-0x8
beq a3,zero,0x0004ed98
_or s0,a1,zero
lw t9,-0x7f80(gp)
or s6,a0,zero
li a0,0x100
lw s3,-0x7b30(gp)
jalr t9
_addiu s5,sp,0x1c
or a0,s6,zero
sw v0,0x28(sp)
li v0,0x40
or a1,s5,zero
sw zero,0x1c(sp)
sw v0,0x20(sp)
or t9,s3,zero
bal 0x0004da4c
_sw zero,0x24(sp)
beq v0,zero,0x0004ef4c
_nop
b 0x0004ee84
_li s0,-0x8
lw s3,-0x7b30(gp)
or t9,s3,zero
bal 0x0004da4c
_or a1,a2,zero
bne v0,zero,0x0004ed3c
_lw gp,0x10(sp)
slti v0,s0,0x20
bne v0,zero,0x0004edcc
_lw t9,-0x7b1c(gp)
sra a1,s0,0x5
bal 0x0004e044
_or a0,s1,zero
lw gp,0x10(sp)
andi s0,s0,0x1f
beq s0,zero,0x0004ee38
_lw v0,0x0(s1)
addiu a1,v0,-0x1
bltz a1,0x0004ee38
_nop
sll v0,v0,0x2
lw v1,0xc(s1)
li a0,-0x1
li a2,0x20
addiu v0,v0,-0x4
sllv a0,a0,s0
or a3,zero,zero
subu a2,a2,s0
li t1,-0x1
addu v0,v1,v0
nor v1,zero,a0
lw t0,0x0(v0)
sllv a0,a3,a2
addiu v0,v0,-0x4
addiu a1,a1,-0x1
srlv t2,t0,s0
and a3,t0,v1
or a0,a0,t2
bne a1,t1,0x0004ee10
_sw a0,0x4(v0)
lw v0,0x0(s1)
blez v0,0x0004eeb4
_sll v1,v0,0x2
lw a0,0xc(s1)
addiu v1,v1,-0x4
addu a1,a0,v1
lw a1,0x0(a1)
bne a1,zero,0x0004ee78
_addiu v1,v1,0x4
addu v1,a0,v1
addiu v0,v0,-0x1
beq v0,zero,0x0004eebc
_sw v0,0x0(s1)
addiu v1,v1,-0x4
lw a0,-0x4(v1)
beq a0,zero,0x0004ee60
_addiu v0,v0,-0x1
beq s2,zero,0x0004ef04
_or s0,zero,zero
addiu s5,sp,0x1c
or a0,s5,zero
or t9,s3,zero
bal 0x0004da4c
_or a1,s2,zero
li v1,-0x8
lw gp,0x10(sp)
or a0,s5,zero
lw t9,-0x7b44(gp)
bal 0x0004db94
_movn s0,v1,v0
b 0x0004ef08
_lw gp,0x10(sp)
bne v0,zero,0x0004ee78
_nop
beq s2,zero,0x0004ef04
_sw zero,0x8(s1)
b 0x0004ee80
_or s0,zero,zero
beq s2,zero,0x0004ef08
_or s0,zero,zero
lw v1,0x4(s2)
sw zero,0x8(s2)
blez v1,0x0004ef08
_sw zero,0x0(s2)
lw v1,0xc(s2)
addiu v1,v1,0x4
sw zero,-0x4(v1)
lw a0,0x4(s2)
addiu v0,v0,0x1
slt a0,v0,a0
bne a0,zero,0x0004eeec
_addiu v1,v1,0x4
or s0,zero,zero
lw a0,0x2c(sp)
or v0,s0,zero
lw v1,0x0(s4)
bne a0,v1,0x0004ef40
_lw ra,0x4c(sp)
lw s6,0x48(sp)
lw s5,0x44(sp)
lw s4,0x40(sp)
lw s3,0x3c(sp)
lw s2,0x38(sp)
lw s1,0x34(sp)
lw s0,0x30(sp)
jr ra
_addiu sp,sp,0x50
lw t9,-0x7088(gp)
jalr t9
_nop
lw v0,0x0(s6)
sll v0,v0,0x5
slt v0,s0,v0
beq v0,zero,0x0004eff0
_sra a0,s0,0x5
lw a1,0x1c(sp)
andi v0,s0,0x1f
sltu v0,zero,v0
addu v0,v0,a0
slt a1,v0,a1
beq a1,zero,0x0004ef9c
_lw v1,0x28(sp)
sll a1,v0,0x2
addu a1,v1,a1
sw zero,0x0(a1)
addiu v0,v0,0x1
lw a2,0x1c(sp)
slt a2,v0,a2
bne a2,zero,0x0004ef84
_addiu a1,a1,0x4
sll a0,a0,0x2
subu a2,zero,s0
addu a0,v1,a0
li a1,-0x1
lw v0,0x0(a0)
srlv a1,a1,a2
and v0,v0,a1
sw v0,0x0(a0)
lw v0,0x1c(sp)
blez v0,0x0004f010
_sll a0,v0,0x2
addiu a0,a0,-0x4
addu a1,v1,a0
lw a1,0x0(a1)
bne a1,zero,0x0004eff0
_addiu a0,a0,0x4
addu v1,v1,a0
addiu v0,v0,-0x1
bne v0,zero,0x0004f020
_sw v0,0x1c(sp)
sw zero,0x24(sp)
or a1,s1,zero
or t9,s3,zero
bal 0x0004da4c
_or a0,s6,zero
beq v0,zero,0x0004edb0
_lw gp,0x10(sp)
b 0x0004ee84
_li s0,-0x8
bne v0,zero,0x0004eff4
_or a1,s1,zero
b 0x0004eff4
_sw zero,0x24(sp)
addiu v1,v1,-0x4
lw a0,-0x4(v1)
beq a0,zero,0x0004efe0
_or a1,s1,zero
b 0x0004eff8
_or t9,s3,zero
(translation_unit "undefined4 pstm_div_2d(int *param_1,uint param_2,int *param_3,undefined4 *param_4)\n\n{\n  int *piVar1;\n  undefined *puVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  uint *puVar6;\n  undefined4 *puVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  int local_34 [4];\n  int local_24;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }\nLAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }\n  return uVar9;\n}\n\n" (function_definition "undefined4 pstm_div_2d(int *param_1,uint param_2,int *param_3,undefined4 *param_4)\n\n{\n  int *piVar1;\n  undefined *puVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  uint *puVar6;\n  undefined4 *puVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  int local_34 [4];\n  int local_24;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }\nLAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }\n  return uVar9;\n}" type_identifier (function_declarator "pstm_div_2d(int *param_1,uint param_2,int *param_3,undefined4 *param_4)" identifier (parameter_list "(int *param_1,uint param_2,int *param_3,undefined4 *param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  undefined *puVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  uint *puVar6;\n  undefined4 *puVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  int local_34 [4];\n  int local_24;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }\nLAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }\n  return uVar9;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "int local_34 [4];" primitive_type (array_declarator "local_34 [4]" identifier [ number_literal ]) ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "puVar2 = PTR___stack_chk_guard_0012b14c;" (assignment_expression "puVar2 = PTR___stack_chk_guard_0012b14c" identifier = identifier) ;) (expression_statement "local_24 = *(int *)PTR___stack_chk_guard_0012b14c;" (assignment_expression "local_24 = *(int *)PTR___stack_chk_guard_0012b14c" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0012b14c" * (cast_expression "(int *)PTR___stack_chk_guard_0012b14c" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" if (parenthesized_expression "((int)param_2 < 1)" ( (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }" { (expression_statement "iVar3 = pstm_copy(param_1,param_3);" (assignment_expression "iVar3 = pstm_copy(param_1,param_3)" identifier = (call_expression "pstm_copy(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }" { (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) (if_statement "if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;" if (parenthesized_expression "(param_4 == (undefined4 *)0x0)" ( (binary_expression "param_4 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004ef08;" goto statement_identifier ;)) (expression_statement "param_4[2] = 0;" (assignment_expression "param_4[2] = 0" (subscript_expression "param_4[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (if_statement "if ((int)param_4[1] < 1) goto LAB_0004ef08;" if (parenthesized_expression "((int)param_4[1] < 1)" ( (binary_expression "(int)param_4[1] < 1" (cast_expression "(int)param_4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_4[1]" identifier [ number_literal ])) < number_literal) )) (goto_statement "goto LAB_0004ef08;" goto statement_identifier ;)) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "puVar7 = (undefined4 *)param_4[3];" (assignment_expression "puVar7 = (undefined4 *)param_4[3]" identifier = (cast_expression "(undefined4 *)param_4[3]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[3]" identifier [ number_literal ]))) ;) (do_statement "do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);" do (compound_statement "{\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      }" { (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" identifier = (binary_expression "puVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 < (int)param_4[1])" ( (binary_expression "iVar3 < (int)param_4[1]" identifier < (cast_expression "(int)param_4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_4[1]" identifier [ number_literal ]))) )) ;) (labeled_statement "LAB_0004ef04:\n      uVar9 = 0;" statement_identifier : (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;)) (goto_statement "goto LAB_0004ef08;" goto statement_identifier ;) })) (labeled_statement "LAB_0004ed3c:\n    uVar9 = 0xfffffff8;" statement_identifier : (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" identifier = number_literal) ;)) }) (else_clause "else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" else (compound_statement "{\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" { (expression_statement "iVar3 = (int)param_2 >> 5;" (assignment_expression "iVar3 = (int)param_2 >> 5" identifier = (binary_expression "(int)param_2 >> 5" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (if_statement "if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" if (parenthesized_expression "(param_4 == (undefined4 *)0x0)" ( (binary_expression "param_4 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }" { (expression_statement "iVar4 = pstm_copy(param_1,param_3);" (assignment_expression "iVar4 = pstm_copy(param_1,param_3)" identifier = (call_expression "pstm_copy(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 != 0) goto LAB_0004ed3c;" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0004ed3c;" goto statement_identifier ;)) (labeled_statement "LAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }" statement_identifier : (if_statement "if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }" if (parenthesized_expression "(0x1f < (int)param_2)" ( (binary_expression "0x1f < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        pstm_rshd(param_3,iVar3);\n      }" { (expression_statement "pstm_rshd(param_3,iVar3);" (call_expression "pstm_rshd(param_3,iVar3)" identifier (argument_list "(param_3,iVar3)" ( identifier , identifier ))) ;) }))) (expression_statement "param_2 = param_2 & 0x1f;" (assignment_expression "param_2 = param_2 & 0x1f" identifier = (binary_expression "param_2 & 0x1f" identifier & number_literal)) ;) (expression_statement "iVar3 = *param_3;" (assignment_expression "iVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }" if (parenthesized_expression "((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4))" ( (binary_expression "(param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)" (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) && (parenthesized_expression "(iVar4 = iVar3 + -1, -1 < iVar4)" ( (comma_expression "iVar4 = iVar3 + -1, -1 < iVar4" (assignment_expression "iVar4 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) , (binary_expression "-1 < iVar4" number_literal < identifier)) ))) )) (compound_statement "{\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);" (assignment_expression "puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4)" identifier = (cast_expression "(uint *)(param_3[3] + iVar3 * 4 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3[3] + iVar3 * 4 + -4)" ( (binary_expression "param_3[3] + iVar3 * 4 + -4" (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal)) + number_literal) )))) ;) (do_statement "do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);" do (compound_statement "{\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        }" { (expression_statement "uVar5 = uVar8 << (0x20 - param_2 & 0x1f);" (assignment_expression "uVar5 = uVar8 << (0x20 - param_2 & 0x1f)" identifier = (binary_expression "uVar8 << (0x20 - param_2 & 0x1f)" identifier << (parenthesized_expression "(0x20 - param_2 & 0x1f)" ( (binary_expression "0x20 - param_2 & 0x1f" (binary_expression "0x20 - param_2" number_literal - identifier) & number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (expression_statement "uVar8 = *puVar6 & ~(-1 << param_2);" (assignment_expression "uVar8 = *puVar6 & ~(-1 << param_2)" identifier = (binary_expression "*puVar6 & ~(-1 << param_2)" (pointer_expression "*puVar6" * identifier) & (unary_expression "~(-1 << param_2)" ~ (parenthesized_expression "(-1 << param_2)" ( (binary_expression "-1 << param_2" number_literal << identifier) ))))) ;) (expression_statement "*puVar6 = uVar5 | *puVar6 >> param_2;" (assignment_expression "*puVar6 = uVar5 | *puVar6 >> param_2" (pointer_expression "*puVar6" * identifier) = (binary_expression "uVar5 | *puVar6 >> param_2" identifier | (binary_expression "*puVar6 >> param_2" (pointer_expression "*puVar6" * identifier) >> identifier))) ;) (expression_statement "puVar6 = puVar6 + -1;" (assignment_expression "puVar6 = puVar6 + -1" identifier = (binary_expression "puVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 != -1)" ( (binary_expression "iVar4 != -1" identifier != number_literal) )) ;) (expression_statement "iVar3 = *param_3;" (assignment_expression "iVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) })) (if_statement "if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" if (parenthesized_expression "(iVar3 < 1)" ( (binary_expression "iVar3 < 1" identifier < number_literal) )) (compound_statement "{\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }" { (if_statement "if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0004eebc:\n          param_3[2] = 0;\n        }" { (labeled_statement "LAB_0004eebc:\n          param_3[2] = 0;" statement_identifier : (expression_statement "param_3[2] = 0;" (assignment_expression "param_3[2] = 0" (subscript_expression "param_3[2]" identifier [ number_literal ]) = number_literal) ;)) })) }) (else_clause "else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" else (if_statement "if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" if (parenthesized_expression "(*(int *)(param_3[3] + iVar3 * 4 + -4) == 0)" ( (binary_expression "*(int *)(param_3[3] + iVar3 * 4 + -4) == 0" (pointer_expression "*(int *)(param_3[3] + iVar3 * 4 + -4)" * (cast_expression "(int *)(param_3[3] + iVar3 * 4 + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3[3] + iVar3 * 4 + -4)" ( (binary_expression "param_3[3] + iVar3 * 4 + -4" (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal)) + number_literal) )))) == number_literal) )) (compound_statement "{\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" { (expression_statement "iVar4 = param_3[3] + iVar3 * 4;" (assignment_expression "iVar4 = param_3[3] + iVar3 * 4" identifier = (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal))) ;) (do_statement "do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);" do (compound_statement "{\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        }" { (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (expression_statement "*param_3 = iVar3;" (assignment_expression "*param_3 = iVar3" (pointer_expression "*param_3" * identifier) = identifier) ;) (if_statement "if (iVar3 == 0) goto LAB_0004eebc;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0004eebc;" goto statement_identifier ;)) (expression_statement "piVar1 = (int *)(iVar4 + -8);" (assignment_expression "piVar1 = (int *)(iVar4 + -8)" identifier = (cast_expression "(int *)(iVar4 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + -8)" ( (binary_expression "iVar4 + -8" identifier + number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + -4;" (assignment_expression "iVar4 = iVar4 + -4" identifier = (binary_expression "iVar4 + -4" identifier + number_literal)) ;) }) while (parenthesized_expression "(*piVar1 == 0)" ( (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" * identifier) == number_literal) )) ;) })))) (if_statement "if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;" if (parenthesized_expression "(param_4 == (undefined4 *)0x0)" ( (binary_expression "param_4 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004ef04;" goto statement_identifier ;)) (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" else (compound_statement "{\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" { (expression_statement "local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);" (assignment_expression "local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100)" (subscript_expression "local_34[3]" identifier [ number_literal ]) = (call_expression "(*(code *)PTR_FUN_0012a1d0)(0x100)" (parenthesized_expression "(*(code *)PTR_FUN_0012a1d0)" ( (pointer_expression "*(code *)PTR_FUN_0012a1d0" * (cast_expression "(code *)PTR_FUN_0012a1d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x100)" ( number_literal )))) ;) (expression_statement "local_34[0] = 0;" (assignment_expression "local_34[0] = 0" (subscript_expression "local_34[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_34[1] = 0x40;" (assignment_expression "local_34[1] = 0x40" (subscript_expression "local_34[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar4 = pstm_copy(param_1,local_34);" (assignment_expression "iVar4 = pstm_copy(param_1,local_34)" identifier = (call_expression "pstm_copy(param_1,local_34)" identifier (argument_list "(param_1,local_34)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }" { (if_statement "if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }" if (parenthesized_expression "((int)param_2 < *param_1 << 5)" ( (binary_expression "(int)param_2 < *param_1 << 5" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < (binary_expression "*param_1 << 5" (pointer_expression "*param_1" * identifier) << number_literal)) )) (compound_statement "{\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }" { (expression_statement "iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;" (assignment_expression "iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3" identifier = (binary_expression "(uint)((param_2 & 0x1f) != 0) + iVar3" (call_expression "(uint)((param_2 & 0x1f) != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((param_2 & 0x1f) != 0)" ( (binary_expression "(param_2 & 0x1f) != 0" (parenthesized_expression "(param_2 & 0x1f)" ( (binary_expression "param_2 & 0x1f" identifier & number_literal) )) != number_literal) ))) + identifier)) ;) (if_statement "if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }" if (parenthesized_expression "(iVar4 < local_34[0])" ( (binary_expression "iVar4 < local_34[0]" identifier < (subscript_expression "local_34[0]" identifier [ number_literal ])) )) (compound_statement "{\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }" { (expression_statement "puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);" (assignment_expression "puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4)" identifier = (cast_expression "(undefined4 *)(local_34[3] + iVar4 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_34[3] + iVar4 * 4)" ( (binary_expression "local_34[3] + iVar4 * 4" (subscript_expression "local_34[3]" identifier [ number_literal ]) + (binary_expression "iVar4 * 4" identifier * number_literal)) )))) ;) (do_statement "do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);" do (compound_statement "{\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            }" { (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" identifier = (binary_expression "puVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 < local_34[0])" ( (binary_expression "iVar4 < local_34[0]" identifier < (subscript_expression "local_34[0]" identifier [ number_literal ])) )) ;) })) (expression_statement "puVar6 = (uint *)(local_34[3] + iVar3 * 4);" (assignment_expression "puVar6 = (uint *)(local_34[3] + iVar3 * 4)" identifier = (cast_expression "(uint *)(local_34[3] + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_34[3] + iVar3 * 4)" ( (binary_expression "local_34[3] + iVar3 * 4" (subscript_expression "local_34[3]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal)) )))) ;) (expression_statement "*puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);" (assignment_expression "*puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f)" (pointer_expression "*puVar6" * identifier) = (binary_expression "*puVar6 & 0xffffffffU >> (-param_2 & 0x1f)" (pointer_expression "*puVar6" * identifier) & (binary_expression "0xffffffffU >> (-param_2 & 0x1f)" number_literal >> (parenthesized_expression "(-param_2 & 0x1f)" ( (binary_expression "-param_2 & 0x1f" (unary_expression "-param_2" - identifier) & number_literal) ))))) ;) (if_statement "if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" if (parenthesized_expression "(local_34[0] < 1)" ( (binary_expression "local_34[0] < 1" (subscript_expression "local_34[0]" identifier [ number_literal ]) < number_literal) )) (compound_statement "{\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }" { (if_statement "if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }" if (parenthesized_expression "(local_34[0] == 0)" ( (binary_expression "local_34[0] == 0" (subscript_expression "local_34[0]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n              local_34[2] = 0;\n            }" { (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" identifier [ number_literal ]) = number_literal) ;) })) }) (else_clause "else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" else (if_statement "if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" if (parenthesized_expression "(*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0)" ( (binary_expression "*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0" (pointer_expression "*(int *)(local_34[3] + local_34[0] * 4 + -4)" * (cast_expression "(int *)(local_34[3] + local_34[0] * 4 + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_34[3] + local_34[0] * 4 + -4)" ( (binary_expression "local_34[3] + local_34[0] * 4 + -4" (binary_expression "local_34[3] + local_34[0] * 4" (subscript_expression "local_34[3]" identifier [ number_literal ]) + (binary_expression "local_34[0] * 4" (subscript_expression "local_34[0]" identifier [ number_literal ]) * number_literal)) + number_literal) )))) == number_literal) )) (compound_statement "{\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" { (expression_statement "iVar4 = local_34[3] + local_34[0] * 4;" (assignment_expression "iVar4 = local_34[3] + local_34[0] * 4" identifier = (binary_expression "local_34[3] + local_34[0] * 4" (subscript_expression "local_34[3]" identifier [ number_literal ]) + (binary_expression "local_34[0] * 4" (subscript_expression "local_34[0]" identifier [ number_literal ]) * number_literal))) ;) (do_statement "do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);" do (compound_statement "{\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            }" { (expression_statement "local_34[0] = local_34[0] + -1;" (assignment_expression "local_34[0] = local_34[0] + -1" (subscript_expression "local_34[0]" identifier [ number_literal ]) = (binary_expression "local_34[0] + -1" (subscript_expression "local_34[0]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }" if (parenthesized_expression "(local_34[0] == 0)" ( (binary_expression "local_34[0] == 0" (subscript_expression "local_34[0]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n                local_34[2] = 0;\n                break;\n              }" { (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" identifier [ number_literal ]) = number_literal) ;) (break_statement "break;" break ;) })) (expression_statement "piVar1 = (int *)(iVar4 + -8);" (assignment_expression "piVar1 = (int *)(iVar4 + -8)" identifier = (cast_expression "(int *)(iVar4 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + -8)" ( (binary_expression "iVar4 + -8" identifier + number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + -4;" (assignment_expression "iVar4 = iVar4 + -4" identifier = (binary_expression "iVar4 + -4" identifier + number_literal)) ;) }) while (parenthesized_expression "(*piVar1 == 0)" ( (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" * identifier) == number_literal) )) ;) })))) })) (expression_statement "iVar4 = pstm_copy(param_1,param_3);" (assignment_expression "iVar4 = pstm_copy(param_1,param_3)" identifier = (call_expression "pstm_copy(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 == 0) goto LAB_0004edb0;" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0004edb0;" goto statement_identifier ;)) (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" identifier = number_literal) ;) }) (else_clause "else {\n        uVar9 = 0xfffffff8;\n      }" else (compound_statement "{\n        uVar9 = 0xfffffff8;\n      }" { (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" identifier = number_literal) ;) }))) }))) (expression_statement "iVar3 = pstm_copy(local_34,param_4);" (assignment_expression "iVar3 = pstm_copy(local_34,param_4)" identifier = (call_expression "pstm_copy(local_34,param_4)" identifier (argument_list "(local_34,param_4)" ( identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar9 = 0xfffffff8;\n    }" { (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" identifier = number_literal) ;) })) (expression_statement "pstm_clear(local_34);" (call_expression "pstm_clear(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) }))) (labeled_statement "LAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" statement_identifier : (if_statement "if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" if (parenthesized_expression "(local_24 != *(int *)puVar2)" ( (binary_expression "local_24 != *(int *)puVar2" identifier != (pointer_expression "*(int *)puVar2" * (cast_expression "(int *)puVar2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" { (expression_statement "uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();" (assignment_expression "uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)()" identifier = (call_expression "(*(code *)PTR___stack_chk_fail_0012b0c8)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0012b0c8)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0012b0c8" * (cast_expression "(code *)PTR___stack_chk_fail_0012b0c8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( )))) ;) (return_statement "return uVar9;" return identifier ;) }))) (return_statement "return uVar9;" return identifier ;) })))
(translation_unit "int32 pstm_div_2d(pstm_int *a,int b,pstm_int *c,pstm_int *d)\n\n{\n  pstm_digit *ppVar1;\n  undefined *puVar2;\n  int iVar3;\n  int32 iVar4;\n  uint *puVar5;\n  int iVar6;\n  pstm_digit *ppVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  pstm_int *unaff_s5;\n  pstm_int *unaff_s6;\n  pstm_int t;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  iVar3 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if (b < 1) {\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\n      b = 0;\n      a = unaff_s6;\n      if (d != (pstm_int *)0x0) {\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }\n      goto LAB_0004ef08;\n    }\n  }\n  else {\n    if (d != (pstm_int *)0x0) {\n      unaff_s5 = &t;\n      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);\n      t.used = 0;\n      t.alloc = 0x40;\n      t.sign = 0;\n      iVar4 = pstm_copy(a,unaff_s5);\n      if (iVar4 == 0) goto LAB_0004ef4c;\n      b = 0xfffffff8;\n      goto LAB_0004ee84;\n    }\n    iVar4 = pstm_copy(a,c);\n    a = unaff_s6;\n    if (iVar4 == 0) goto LAB_0004edb0;\n  }\n  b = 0xfffffff8;\n  a = unaff_s6;\nLAB_0004ef08:\n  do {\n    if (iVar3 == *(int *)puVar2) {\n      return b;\n    }\n    (*(code *)PTR___stack_chk_fail_0012b0c8)();\nLAB_0004ef4c:\n    if (b < a->used << 5) {\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\nLAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }\n      uVar11 = b & 0x1f;\n      iVar6 = c->used;\n      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }\n      if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n      unaff_s6 = a;\n      if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }\n      b = 0;\n      unaff_s5 = &t;\n    }\n    else {\n      b = 0xfffffff8;\n    }\nLAB_0004ee84:\n    iVar4 = pstm_copy(unaff_s5,d);\n    if (iVar4 != 0) {\n      b = 0xfffffff8;\n    }\n    pstm_clear(unaff_s5);\n  } while( true );\n}\n\n" (function_definition "int32 pstm_div_2d(pstm_int *a,int b,pstm_int *c,pstm_int *d)\n\n{\n  pstm_digit *ppVar1;\n  undefined *puVar2;\n  int iVar3;\n  int32 iVar4;\n  uint *puVar5;\n  int iVar6;\n  pstm_digit *ppVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  pstm_int *unaff_s5;\n  pstm_int *unaff_s6;\n  pstm_int t;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  iVar3 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if (b < 1) {\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\n      b = 0;\n      a = unaff_s6;\n      if (d != (pstm_int *)0x0) {\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }\n      goto LAB_0004ef08;\n    }\n  }\n  else {\n    if (d != (pstm_int *)0x0) {\n      unaff_s5 = &t;\n      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);\n      t.used = 0;\n      t.alloc = 0x40;\n      t.sign = 0;\n      iVar4 = pstm_copy(a,unaff_s5);\n      if (iVar4 == 0) goto LAB_0004ef4c;\n      b = 0xfffffff8;\n      goto LAB_0004ee84;\n    }\n    iVar4 = pstm_copy(a,c);\n    a = unaff_s6;\n    if (iVar4 == 0) goto LAB_0004edb0;\n  }\n  b = 0xfffffff8;\n  a = unaff_s6;\nLAB_0004ef08:\n  do {\n    if (iVar3 == *(int *)puVar2) {\n      return b;\n    }\n    (*(code *)PTR___stack_chk_fail_0012b0c8)();\nLAB_0004ef4c:\n    if (b < a->used << 5) {\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\nLAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }\n      uVar11 = b & 0x1f;\n      iVar6 = c->used;\n      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }\n      if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n      unaff_s6 = a;\n      if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }\n      b = 0;\n      unaff_s5 = &t;\n    }\n    else {\n      b = 0xfffffff8;\n    }\nLAB_0004ee84:\n    iVar4 = pstm_copy(unaff_s5,d);\n    if (iVar4 != 0) {\n      b = 0xfffffff8;\n    }\n    pstm_clear(unaff_s5);\n  } while( true );\n}" type_identifier (function_declarator "pstm_div_2d(pstm_int *a,int b,pstm_int *c,pstm_int *d)" identifier (parameter_list "(pstm_int *a,int b,pstm_int *c,pstm_int *d)" ( (parameter_declaration "pstm_int *a" type_identifier (pointer_declarator "*a" * identifier)) , (parameter_declaration "int b" primitive_type identifier) , (parameter_declaration "pstm_int *c" type_identifier (pointer_declarator "*c" * identifier)) , (parameter_declaration "pstm_int *d" type_identifier (pointer_declarator "*d" * identifier)) ))) (compound_statement "{\n  pstm_digit *ppVar1;\n  undefined *puVar2;\n  int iVar3;\n  int32 iVar4;\n  uint *puVar5;\n  int iVar6;\n  pstm_digit *ppVar7;\n  uint uVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  pstm_int *unaff_s5;\n  pstm_int *unaff_s6;\n  pstm_int t;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  iVar3 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if (b < 1) {\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\n      b = 0;\n      a = unaff_s6;\n      if (d != (pstm_int *)0x0) {\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }\n      goto LAB_0004ef08;\n    }\n  }\n  else {\n    if (d != (pstm_int *)0x0) {\n      unaff_s5 = &t;\n      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);\n      t.used = 0;\n      t.alloc = 0x40;\n      t.sign = 0;\n      iVar4 = pstm_copy(a,unaff_s5);\n      if (iVar4 == 0) goto LAB_0004ef4c;\n      b = 0xfffffff8;\n      goto LAB_0004ee84;\n    }\n    iVar4 = pstm_copy(a,c);\n    a = unaff_s6;\n    if (iVar4 == 0) goto LAB_0004edb0;\n  }\n  b = 0xfffffff8;\n  a = unaff_s6;\nLAB_0004ef08:\n  do {\n    if (iVar3 == *(int *)puVar2) {\n      return b;\n    }\n    (*(code *)PTR___stack_chk_fail_0012b0c8)();\nLAB_0004ef4c:\n    if (b < a->used << 5) {\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\nLAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }\n      uVar11 = b & 0x1f;\n      iVar6 = c->used;\n      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }\n      if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n      unaff_s6 = a;\n      if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }\n      b = 0;\n      unaff_s5 = &t;\n    }\n    else {\n      b = 0xfffffff8;\n    }\nLAB_0004ee84:\n    iVar4 = pstm_copy(unaff_s5,d);\n    if (iVar4 != 0) {\n      b = 0xfffffff8;\n    }\n    pstm_clear(unaff_s5);\n  } while( true );\n}" { (declaration "pstm_digit *ppVar1;" type_identifier (pointer_declarator "*ppVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int32 iVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "pstm_digit *ppVar7;" type_identifier (pointer_declarator "*ppVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "pstm_int *unaff_s5;" type_identifier (pointer_declarator "*unaff_s5" * identifier) ;) (declaration "pstm_int *unaff_s6;" type_identifier (pointer_declarator "*unaff_s6" * identifier) ;) (declaration "pstm_int t;" type_identifier identifier ;) (expression_statement "puVar2 = PTR___stack_chk_guard_0012b14c;" (assignment_expression "puVar2 = PTR___stack_chk_guard_0012b14c" identifier = identifier) ;) (expression_statement "iVar3 = *(int *)PTR___stack_chk_guard_0012b14c;" (assignment_expression "iVar3 = *(int *)PTR___stack_chk_guard_0012b14c" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0012b14c" * (cast_expression "(int *)PTR___stack_chk_guard_0012b14c" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if (b < 1) {\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\n      b = 0;\n      a = unaff_s6;\n      if (d != (pstm_int *)0x0) {\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }\n      goto LAB_0004ef08;\n    }\n  }\n  else {\n    if (d != (pstm_int *)0x0) {\n      unaff_s5 = &t;\n      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);\n      t.used = 0;\n      t.alloc = 0x40;\n      t.sign = 0;\n      iVar4 = pstm_copy(a,unaff_s5);\n      if (iVar4 == 0) goto LAB_0004ef4c;\n      b = 0xfffffff8;\n      goto LAB_0004ee84;\n    }\n    iVar4 = pstm_copy(a,c);\n    a = unaff_s6;\n    if (iVar4 == 0) goto LAB_0004edb0;\n  }" if (parenthesized_expression "(b < 1)" ( (binary_expression "b < 1" identifier < number_literal) )) (compound_statement "{\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\n      b = 0;\n      a = unaff_s6;\n      if (d != (pstm_int *)0x0) {\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }\n      goto LAB_0004ef08;\n    }\n  }" { (expression_statement "iVar4 = pstm_copy(a,c);" (assignment_expression "iVar4 = pstm_copy(a,c)" identifier = (call_expression "pstm_copy(a,c)" identifier (argument_list "(a,c)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n      b = 0;\n      a = unaff_s6;\n      if (d != (pstm_int *)0x0) {\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }\n      goto LAB_0004ef08;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n      b = 0;\n      a = unaff_s6;\n      if (d != (pstm_int *)0x0) {\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }\n      goto LAB_0004ef08;\n    }" { (expression_statement "b = 0;" (assignment_expression "b = 0" identifier = number_literal) ;) (expression_statement "a = unaff_s6;" (assignment_expression "a = unaff_s6" identifier = identifier) ;) (if_statement "if (d != (pstm_int *)0x0) {\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }" if (parenthesized_expression "(d != (pstm_int *)0x0)" ( (binary_expression "d != (pstm_int *)0x0" identifier != (cast_expression "(pstm_int *)0x0" ( (type_descriptor "pstm_int *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        d->sign = 0;\n        d->used = 0;\n        if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }\n      }" { (expression_statement "d->sign = 0;" (assignment_expression "d->sign = 0" (field_expression "d->sign" identifier -> field_identifier) = number_literal) ;) (expression_statement "d->used = 0;" (assignment_expression "d->used = 0" (field_expression "d->used" identifier -> field_identifier) = number_literal) ;) (if_statement "if (0 < d->alloc) {\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }" if (parenthesized_expression "(0 < d->alloc)" ( (binary_expression "0 < d->alloc" number_literal < (field_expression "d->alloc" identifier -> field_identifier)) )) (compound_statement "{\n          iVar6 = 0;\n          ppVar7 = d->dp;\n          do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );\n        }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "ppVar7 = d->dp;" (assignment_expression "ppVar7 = d->dp" identifier = (field_expression "d->dp" identifier -> field_identifier)) ;) (do_statement "do {\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          } while( true );" do (compound_statement "{\n            *ppVar7 = 0;\n            iVar6 = iVar6 + 1;\n            ppVar7 = ppVar7 + 1;\n            if (d->alloc <= iVar6) goto LAB_0004ef04;\n          }" { (expression_statement "*ppVar7 = 0;" (assignment_expression "*ppVar7 = 0" (pointer_expression "*ppVar7" * identifier) = number_literal) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "ppVar7 = ppVar7 + 1;" (assignment_expression "ppVar7 = ppVar7 + 1" identifier = (binary_expression "ppVar7 + 1" identifier + number_literal)) ;) (if_statement "if (d->alloc <= iVar6) goto LAB_0004ef04;" if (parenthesized_expression "(d->alloc <= iVar6)" ( (binary_expression "d->alloc <= iVar6" (field_expression "d->alloc" identifier -> field_identifier) <= identifier) )) (goto_statement "goto LAB_0004ef04;" goto statement_identifier ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (goto_statement "goto LAB_0004ef08;" goto statement_identifier ;) })) }) (else_clause "else {\n    if (d != (pstm_int *)0x0) {\n      unaff_s5 = &t;\n      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);\n      t.used = 0;\n      t.alloc = 0x40;\n      t.sign = 0;\n      iVar4 = pstm_copy(a,unaff_s5);\n      if (iVar4 == 0) goto LAB_0004ef4c;\n      b = 0xfffffff8;\n      goto LAB_0004ee84;\n    }\n    iVar4 = pstm_copy(a,c);\n    a = unaff_s6;\n    if (iVar4 == 0) goto LAB_0004edb0;\n  }" else (compound_statement "{\n    if (d != (pstm_int *)0x0) {\n      unaff_s5 = &t;\n      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);\n      t.used = 0;\n      t.alloc = 0x40;\n      t.sign = 0;\n      iVar4 = pstm_copy(a,unaff_s5);\n      if (iVar4 == 0) goto LAB_0004ef4c;\n      b = 0xfffffff8;\n      goto LAB_0004ee84;\n    }\n    iVar4 = pstm_copy(a,c);\n    a = unaff_s6;\n    if (iVar4 == 0) goto LAB_0004edb0;\n  }" { (if_statement "if (d != (pstm_int *)0x0) {\n      unaff_s5 = &t;\n      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);\n      t.used = 0;\n      t.alloc = 0x40;\n      t.sign = 0;\n      iVar4 = pstm_copy(a,unaff_s5);\n      if (iVar4 == 0) goto LAB_0004ef4c;\n      b = 0xfffffff8;\n      goto LAB_0004ee84;\n    }" if (parenthesized_expression "(d != (pstm_int *)0x0)" ( (binary_expression "d != (pstm_int *)0x0" identifier != (cast_expression "(pstm_int *)0x0" ( (type_descriptor "pstm_int *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      unaff_s5 = &t;\n      t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);\n      t.used = 0;\n      t.alloc = 0x40;\n      t.sign = 0;\n      iVar4 = pstm_copy(a,unaff_s5);\n      if (iVar4 == 0) goto LAB_0004ef4c;\n      b = 0xfffffff8;\n      goto LAB_0004ee84;\n    }" { (expression_statement "unaff_s5 = &t;" (assignment_expression "unaff_s5 = &t" identifier = (pointer_expression "&t" & identifier)) ;) (expression_statement "t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100);" (assignment_expression "t.dp = (pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100)" (field_expression "t.dp" identifier . field_identifier) = (cast_expression "(pstm_digit *)(*(code *)PTR_xzalloc_0012a1d0)(0x100)" ( (type_descriptor "pstm_digit *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_xzalloc_0012a1d0)(0x100)" (parenthesized_expression "(*(code *)PTR_xzalloc_0012a1d0)" ( (pointer_expression "*(code *)PTR_xzalloc_0012a1d0" * (cast_expression "(code *)PTR_xzalloc_0012a1d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x100)" ( number_literal ))))) ;) (expression_statement "t.used = 0;" (assignment_expression "t.used = 0" (field_expression "t.used" identifier . field_identifier) = number_literal) ;) (expression_statement "t.alloc = 0x40;" (assignment_expression "t.alloc = 0x40" (field_expression "t.alloc" identifier . field_identifier) = number_literal) ;) (expression_statement "t.sign = 0;" (assignment_expression "t.sign = 0" (field_expression "t.sign" identifier . field_identifier) = number_literal) ;) (expression_statement "iVar4 = pstm_copy(a,unaff_s5);" (assignment_expression "iVar4 = pstm_copy(a,unaff_s5)" identifier = (call_expression "pstm_copy(a,unaff_s5)" identifier (argument_list "(a,unaff_s5)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 == 0) goto LAB_0004ef4c;" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0004ef4c;" goto statement_identifier ;)) (expression_statement "b = 0xfffffff8;" (assignment_expression "b = 0xfffffff8" identifier = number_literal) ;) (goto_statement "goto LAB_0004ee84;" goto statement_identifier ;) })) (expression_statement "iVar4 = pstm_copy(a,c);" (assignment_expression "iVar4 = pstm_copy(a,c)" identifier = (call_expression "pstm_copy(a,c)" identifier (argument_list "(a,c)" ( identifier , identifier )))) ;) (expression_statement "a = unaff_s6;" (assignment_expression "a = unaff_s6" identifier = identifier) ;) (if_statement "if (iVar4 == 0) goto LAB_0004edb0;" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0004edb0;" goto statement_identifier ;)) }))) (expression_statement "b = 0xfffffff8;" (assignment_expression "b = 0xfffffff8" identifier = number_literal) ;) (expression_statement "a = unaff_s6;" (assignment_expression "a = unaff_s6" identifier = identifier) ;) (labeled_statement "LAB_0004ef08:\n  do {\n    if (iVar3 == *(int *)puVar2) {\n      return b;\n    }\n    (*(code *)PTR___stack_chk_fail_0012b0c8)();\nLAB_0004ef4c:\n    if (b < a->used << 5) {\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\nLAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }\n      uVar11 = b & 0x1f;\n      iVar6 = c->used;\n      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }\n      if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n      unaff_s6 = a;\n      if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }\n      b = 0;\n      unaff_s5 = &t;\n    }\n    else {\n      b = 0xfffffff8;\n    }\nLAB_0004ee84:\n    iVar4 = pstm_copy(unaff_s5,d);\n    if (iVar4 != 0) {\n      b = 0xfffffff8;\n    }\n    pstm_clear(unaff_s5);\n  } while( true );" statement_identifier : (do_statement "do {\n    if (iVar3 == *(int *)puVar2) {\n      return b;\n    }\n    (*(code *)PTR___stack_chk_fail_0012b0c8)();\nLAB_0004ef4c:\n    if (b < a->used << 5) {\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\nLAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }\n      uVar11 = b & 0x1f;\n      iVar6 = c->used;\n      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }\n      if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n      unaff_s6 = a;\n      if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }\n      b = 0;\n      unaff_s5 = &t;\n    }\n    else {\n      b = 0xfffffff8;\n    }\nLAB_0004ee84:\n    iVar4 = pstm_copy(unaff_s5,d);\n    if (iVar4 != 0) {\n      b = 0xfffffff8;\n    }\n    pstm_clear(unaff_s5);\n  } while( true );" do (compound_statement "{\n    if (iVar3 == *(int *)puVar2) {\n      return b;\n    }\n    (*(code *)PTR___stack_chk_fail_0012b0c8)();\nLAB_0004ef4c:\n    if (b < a->used << 5) {\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }\n    iVar4 = pstm_copy(a,c);\n    if (iVar4 == 0) {\nLAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }\n      uVar11 = b & 0x1f;\n      iVar6 = c->used;\n      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }\n      if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n      unaff_s6 = a;\n      if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }\n      b = 0;\n      unaff_s5 = &t;\n    }\n    else {\n      b = 0xfffffff8;\n    }\nLAB_0004ee84:\n    iVar4 = pstm_copy(unaff_s5,d);\n    if (iVar4 != 0) {\n      b = 0xfffffff8;\n    }\n    pstm_clear(unaff_s5);\n  }" { (if_statement "if (iVar3 == *(int *)puVar2) {\n      return b;\n    }" if (parenthesized_expression "(iVar3 == *(int *)puVar2)" ( (binary_expression "iVar3 == *(int *)puVar2" identifier == (pointer_expression "*(int *)puVar2" * (cast_expression "(int *)puVar2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n      return b;\n    }" { (return_statement "return b;" return identifier ;) })) (expression_statement "(*(code *)PTR___stack_chk_fail_0012b0c8)();" (call_expression "(*(code *)PTR___stack_chk_fail_0012b0c8)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0012b0c8)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0012b0c8" * (cast_expression "(code *)PTR___stack_chk_fail_0012b0c8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (labeled_statement "LAB_0004ef4c:\n    if (b < a->used << 5) {\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }" statement_identifier : (if_statement "if (b < a->used << 5) {\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }" if (parenthesized_expression "(b < a->used << 5)" ( (binary_expression "b < a->used << 5" identifier < (binary_expression "a->used << 5" (field_expression "a->used" identifier -> field_identifier) << number_literal)) )) (compound_statement "{\n      iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);\n      if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }\n      t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);\n      if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n    }" { (expression_statement "iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5);" (assignment_expression "iVar6 = (uint)((b & 0x1fU) != 0) + (b >> 5)" identifier = (binary_expression "(uint)((b & 0x1fU) != 0) + (b >> 5)" (call_expression "(uint)((b & 0x1fU) != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((b & 0x1fU) != 0)" ( (binary_expression "(b & 0x1fU) != 0" (parenthesized_expression "(b & 0x1fU)" ( (binary_expression "b & 0x1fU" identifier & number_literal) )) != number_literal) ))) + (parenthesized_expression "(b >> 5)" ( (binary_expression "b >> 5" identifier >> number_literal) )))) ;) (if_statement "if (iVar6 < t.used) {\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }" if (parenthesized_expression "(iVar6 < t.used)" ( (binary_expression "iVar6 < t.used" identifier < (field_expression "t.used" identifier . field_identifier)) )) (compound_statement "{\n        ppVar7 = t.dp + iVar6;\n        do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);\n      }" { (expression_statement "ppVar7 = t.dp + iVar6;" (assignment_expression "ppVar7 = t.dp + iVar6" identifier = (binary_expression "t.dp + iVar6" (field_expression "t.dp" identifier . field_identifier) + identifier)) ;) (do_statement "do {\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        } while (iVar6 < t.used);" do (compound_statement "{\n          *ppVar7 = 0;\n          iVar6 = iVar6 + 1;\n          ppVar7 = ppVar7 + 1;\n        }" { (expression_statement "*ppVar7 = 0;" (assignment_expression "*ppVar7 = 0" (pointer_expression "*ppVar7" * identifier) = number_literal) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "ppVar7 = ppVar7 + 1;" (assignment_expression "ppVar7 = ppVar7 + 1" identifier = (binary_expression "ppVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar6 < t.used)" ( (binary_expression "iVar6 < t.used" identifier < (field_expression "t.used" identifier . field_identifier)) )) ;) })) (expression_statement "t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU);" (assignment_expression "t.dp[b >> 5] = t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU)" (subscript_expression "t.dp[b >> 5]" (field_expression "t.dp" identifier . field_identifier) [ (binary_expression "b >> 5" identifier >> number_literal) ]) = (binary_expression "t.dp[b >> 5] & 0xffffffffU >> (-b & 0x1fU)" (subscript_expression "t.dp[b >> 5]" (field_expression "t.dp" identifier . field_identifier) [ (binary_expression "b >> 5" identifier >> number_literal) ]) & (binary_expression "0xffffffffU >> (-b & 0x1fU)" number_literal >> (parenthesized_expression "(-b & 0x1fU)" ( (binary_expression "-b & 0x1fU" (unary_expression "-b" - identifier) & number_literal) ))))) ;) (if_statement "if (t.used < 1) {\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }\n      else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }" if (parenthesized_expression "(t.used < 1)" ( (binary_expression "t.used < 1" (field_expression "t.used" identifier . field_identifier) < number_literal) )) (compound_statement "{\n        if (t.used == 0) {\n          t.sign = 0;\n        }\n      }" { (if_statement "if (t.used == 0) {\n          t.sign = 0;\n        }" if (parenthesized_expression "(t.used == 0)" ( (binary_expression "t.used == 0" (field_expression "t.used" identifier . field_identifier) == number_literal) )) (compound_statement "{\n          t.sign = 0;\n        }" { (expression_statement "t.sign = 0;" (assignment_expression "t.sign = 0" (field_expression "t.sign" identifier . field_identifier) = number_literal) ;) })) }) (else_clause "else if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }" else (if_statement "if (t.dp[t.used + -1] == 0) {\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }" if (parenthesized_expression "(t.dp[t.used + -1] == 0)" ( (binary_expression "t.dp[t.used + -1] == 0" (subscript_expression "t.dp[t.used + -1]" (field_expression "t.dp" identifier . field_identifier) [ (binary_expression "t.used + -1" (field_expression "t.used" identifier . field_identifier) + number_literal) ]) == number_literal) )) (compound_statement "{\n        ppVar7 = t.dp + t.used;\n        do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }" { (expression_statement "ppVar7 = t.dp + t.used;" (assignment_expression "ppVar7 = t.dp + t.used" identifier = (binary_expression "t.dp + t.used" (field_expression "t.dp" identifier . field_identifier) + (field_expression "t.used" identifier . field_identifier))) ;) (do_statement "do {\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);" do (compound_statement "{\n          t.used = t.used + -1;\n          if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        }" { (expression_statement "t.used = t.used + -1;" (assignment_expression "t.used = t.used + -1" (field_expression "t.used" identifier . field_identifier) = (binary_expression "t.used + -1" (field_expression "t.used" identifier . field_identifier) + number_literal)) ;) (if_statement "if (t.used == 0) {\n            t.sign = 0;\n            break;\n          }" if (parenthesized_expression "(t.used == 0)" ( (binary_expression "t.used == 0" (field_expression "t.used" identifier . field_identifier) == number_literal) )) (compound_statement "{\n            t.sign = 0;\n            break;\n          }" { (expression_statement "t.sign = 0;" (assignment_expression "t.sign = 0" (field_expression "t.sign" identifier . field_identifier) = number_literal) ;) (break_statement "break;" break ;) })) (expression_statement "ppVar1 = ppVar7 + -2;" (assignment_expression "ppVar1 = ppVar7 + -2" identifier = (binary_expression "ppVar7 + -2" identifier + number_literal)) ;) (expression_statement "ppVar7 = ppVar7 + -1;" (assignment_expression "ppVar7 = ppVar7 + -1" identifier = (binary_expression "ppVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(*ppVar1 == 0)" ( (binary_expression "*ppVar1 == 0" (pointer_expression "*ppVar1" * identifier) == number_literal) )) ;) })))) }))) (expression_statement "iVar4 = pstm_copy(a,c);" (assignment_expression "iVar4 = pstm_copy(a,c)" identifier = (call_expression "pstm_copy(a,c)" identifier (argument_list "(a,c)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 == 0) {\nLAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }\n      uVar11 = b & 0x1f;\n      iVar6 = c->used;\n      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }\n      if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n      unaff_s6 = a;\n      if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }\n      b = 0;\n      unaff_s5 = &t;\n    }\n    else {\n      b = 0xfffffff8;\n    }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }\n      uVar11 = b & 0x1f;\n      iVar6 = c->used;\n      if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }\n      if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }\n      unaff_s6 = a;\n      if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }\n      b = 0;\n      unaff_s5 = &t;\n    }" { (labeled_statement "LAB_0004edb0:\n      if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }" statement_identifier : (if_statement "if (0x1f < b) {\n        pstm_rshd(c,b >> 5);\n      }" if (parenthesized_expression "(0x1f < b)" ( (binary_expression "0x1f < b" number_literal < identifier) )) (compound_statement "{\n        pstm_rshd(c,b >> 5);\n      }" { (expression_statement "pstm_rshd(c,b >> 5);" (call_expression "pstm_rshd(c,b >> 5)" identifier (argument_list "(c,b >> 5)" ( identifier , (binary_expression "b >> 5" identifier >> number_literal) ))) ;) }))) (expression_statement "uVar11 = b & 0x1f;" (assignment_expression "uVar11 = b & 0x1f" identifier = (binary_expression "b & 0x1f" identifier & number_literal)) ;) (expression_statement "iVar6 = c->used;" (assignment_expression "iVar6 = c->used" identifier = (field_expression "c->used" identifier -> field_identifier)) ;) (if_statement "if ((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)) {\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }" if (parenthesized_expression "((uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9))" ( (binary_expression "(uVar11 != 0) && (iVar9 = iVar6 + -1, -1 < iVar9)" (parenthesized_expression "(uVar11 != 0)" ( (binary_expression "uVar11 != 0" identifier != number_literal) )) && (parenthesized_expression "(iVar9 = iVar6 + -1, -1 < iVar9)" ( (comma_expression "iVar9 = iVar6 + -1, -1 < iVar9" (assignment_expression "iVar9 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) , (binary_expression "-1 < iVar9" number_literal < identifier)) ))) )) (compound_statement "{\n        uVar10 = 0;\n        puVar5 = c->dp + iVar6 + -1;\n        do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);\n        iVar6 = c->used;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "puVar5 = c->dp + iVar6 + -1;" (assignment_expression "puVar5 = c->dp + iVar6 + -1" identifier = (binary_expression "c->dp + iVar6 + -1" (binary_expression "c->dp + iVar6" (field_expression "c->dp" identifier -> field_identifier) + identifier) + number_literal)) ;) (do_statement "do {\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        } while (iVar9 != -1);" do (compound_statement "{\n          uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);\n          iVar9 = iVar9 + -1;\n          uVar10 = *puVar5 & ~(-1 << uVar11);\n          *puVar5 = uVar8 | *puVar5 >> uVar11;\n          puVar5 = puVar5 + -1;\n        }" { (expression_statement "uVar8 = uVar10 << (0x20 - uVar11 & 0x1f);" (assignment_expression "uVar8 = uVar10 << (0x20 - uVar11 & 0x1f)" identifier = (binary_expression "uVar10 << (0x20 - uVar11 & 0x1f)" identifier << (parenthesized_expression "(0x20 - uVar11 & 0x1f)" ( (binary_expression "0x20 - uVar11 & 0x1f" (binary_expression "0x20 - uVar11" number_literal - identifier) & number_literal) )))) ;) (expression_statement "iVar9 = iVar9 + -1;" (assignment_expression "iVar9 = iVar9 + -1" identifier = (binary_expression "iVar9 + -1" identifier + number_literal)) ;) (expression_statement "uVar10 = *puVar5 & ~(-1 << uVar11);" (assignment_expression "uVar10 = *puVar5 & ~(-1 << uVar11)" identifier = (binary_expression "*puVar5 & ~(-1 << uVar11)" (pointer_expression "*puVar5" * identifier) & (unary_expression "~(-1 << uVar11)" ~ (parenthesized_expression "(-1 << uVar11)" ( (binary_expression "-1 << uVar11" number_literal << identifier) ))))) ;) (expression_statement "*puVar5 = uVar8 | *puVar5 >> uVar11;" (assignment_expression "*puVar5 = uVar8 | *puVar5 >> uVar11" (pointer_expression "*puVar5" * identifier) = (binary_expression "uVar8 | *puVar5 >> uVar11" identifier | (binary_expression "*puVar5 >> uVar11" (pointer_expression "*puVar5" * identifier) >> identifier))) ;) (expression_statement "puVar5 = puVar5 + -1;" (assignment_expression "puVar5 = puVar5 + -1" identifier = (binary_expression "puVar5 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar9 != -1)" ( (binary_expression "iVar9 != -1" identifier != number_literal) )) ;) (expression_statement "iVar6 = c->used;" (assignment_expression "iVar6 = c->used" identifier = (field_expression "c->used" identifier -> field_identifier)) ;) })) (if_statement "if (iVar6 < 1) {\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }\n      else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }" if (parenthesized_expression "(iVar6 < 1)" ( (binary_expression "iVar6 < 1" identifier < number_literal) )) (compound_statement "{\n        if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }\n      }" { (if_statement "if (iVar6 == 0) {\nLAB_0004eebc:\n          c->sign = 0;\n        }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0004eebc:\n          c->sign = 0;\n        }" { (labeled_statement "LAB_0004eebc:\n          c->sign = 0;" statement_identifier : (expression_statement "c->sign = 0;" (assignment_expression "c->sign = 0" (field_expression "c->sign" identifier -> field_identifier) = number_literal) ;)) })) }) (else_clause "else if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }" else (if_statement "if (c->dp[iVar6 + -1] == 0) {\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }" if (parenthesized_expression "(c->dp[iVar6 + -1] == 0)" ( (binary_expression "c->dp[iVar6 + -1] == 0" (subscript_expression "c->dp[iVar6 + -1]" (field_expression "c->dp" identifier -> field_identifier) [ (binary_expression "iVar6 + -1" identifier + number_literal) ]) == number_literal) )) (compound_statement "{\n        ppVar7 = c->dp + iVar6;\n        do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);\n      }" { (expression_statement "ppVar7 = c->dp + iVar6;" (assignment_expression "ppVar7 = c->dp + iVar6" identifier = (binary_expression "c->dp + iVar6" (field_expression "c->dp" identifier -> field_identifier) + identifier)) ;) (do_statement "do {\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        } while (*ppVar1 == 0);" do (compound_statement "{\n          iVar6 = iVar6 + -1;\n          c->used = iVar6;\n          if (iVar6 == 0) goto LAB_0004eebc;\n          ppVar1 = ppVar7 + -2;\n          ppVar7 = ppVar7 + -1;\n        }" { (expression_statement "iVar6 = iVar6 + -1;" (assignment_expression "iVar6 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "c->used = iVar6;" (assignment_expression "c->used = iVar6" (field_expression "c->used" identifier -> field_identifier) = identifier) ;) (if_statement "if (iVar6 == 0) goto LAB_0004eebc;" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0004eebc;" goto statement_identifier ;)) (expression_statement "ppVar1 = ppVar7 + -2;" (assignment_expression "ppVar1 = ppVar7 + -2" identifier = (binary_expression "ppVar7 + -2" identifier + number_literal)) ;) (expression_statement "ppVar7 = ppVar7 + -1;" (assignment_expression "ppVar7 = ppVar7 + -1" identifier = (binary_expression "ppVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(*ppVar1 == 0)" ( (binary_expression "*ppVar1 == 0" (pointer_expression "*ppVar1" * identifier) == number_literal) )) ;) })))) (expression_statement "unaff_s6 = a;" (assignment_expression "unaff_s6 = a" identifier = identifier) ;) (if_statement "if (d == (pstm_int *)0x0) {\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }" if (parenthesized_expression "(d == (pstm_int *)0x0)" ( (binary_expression "d == (pstm_int *)0x0" identifier == (cast_expression "(pstm_int *)0x0" ( (type_descriptor "pstm_int *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_0004ef04:\n        b = 0;\n        a = unaff_s6;\n        goto LAB_0004ef08;\n      }" { (labeled_statement "LAB_0004ef04:\n        b = 0;" statement_identifier : (expression_statement "b = 0;" (assignment_expression "b = 0" identifier = number_literal) ;)) (expression_statement "a = unaff_s6;" (assignment_expression "a = unaff_s6" identifier = identifier) ;) (goto_statement "goto LAB_0004ef08;" goto statement_identifier ;) })) (expression_statement "b = 0;" (assignment_expression "b = 0" identifier = number_literal) ;) (expression_statement "unaff_s5 = &t;" (assignment_expression "unaff_s5 = &t" identifier = (pointer_expression "&t" & identifier)) ;) }) (else_clause "else {\n      b = 0xfffffff8;\n    }" else (compound_statement "{\n      b = 0xfffffff8;\n    }" { (expression_statement "b = 0xfffffff8;" (assignment_expression "b = 0xfffffff8" identifier = number_literal) ;) }))) (labeled_statement "LAB_0004ee84:\n    iVar4 = pstm_copy(unaff_s5,d);" statement_identifier : (expression_statement "iVar4 = pstm_copy(unaff_s5,d);" (assignment_expression "iVar4 = pstm_copy(unaff_s5,d)" identifier = (call_expression "pstm_copy(unaff_s5,d)" identifier (argument_list "(unaff_s5,d)" ( identifier , identifier )))) ;)) (if_statement "if (iVar4 != 0) {\n      b = 0xfffffff8;\n    }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n      b = 0xfffffff8;\n    }" { (expression_statement "b = 0xfffffff8;" (assignment_expression "b = 0xfffffff8" identifier = number_literal) ;) })) (expression_statement "pstm_clear(unaff_s5);" (call_expression "pstm_clear(unaff_s5)" identifier (argument_list "(unaff_s5)" ( identifier ))) ;) }) while (parenthesized_expression "( true )" ( true )) ;)) })))
(translation_unit "undefined4 pstm_div_2d(int *param_1,uint param_2,int *param_3,undefined4 *param_4)\n\n{\n  int *piVar1;\n  undefined *puVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  uint *puVar6;\n  undefined4 *puVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  int local_34 [4];\n  int local_24;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }\nLAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }\n  return uVar9;\n}\n\n" (function_definition "undefined4 pstm_div_2d(int *param_1,uint param_2,int *param_3,undefined4 *param_4)\n\n{\n  int *piVar1;\n  undefined *puVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  uint *puVar6;\n  undefined4 *puVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  int local_34 [4];\n  int local_24;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }\nLAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }\n  return uVar9;\n}" type_identifier (function_declarator "pstm_div_2d(int *param_1,uint param_2,int *param_3,undefined4 *param_4)" identifier (parameter_list "(int *param_1,uint param_2,int *param_3,undefined4 *param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  undefined *puVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  uint *puVar6;\n  undefined4 *puVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  int local_34 [4];\n  int local_24;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }\nLAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }\n  return uVar9;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "undefined *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "undefined4 *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "int local_34 [4];" primitive_type (array_declarator "local_34 [4]" identifier [ number_literal ]) ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "puVar2 = PTR___stack_chk_guard_0012b14c;" (assignment_expression "puVar2 = PTR___stack_chk_guard_0012b14c" identifier = identifier) ;) (expression_statement "local_24 = *(int *)PTR___stack_chk_guard_0012b14c;" (assignment_expression "local_24 = *(int *)PTR___stack_chk_guard_0012b14c" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0012b14c" * (cast_expression "(int *)PTR___stack_chk_guard_0012b14c" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (if_statement "if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" if (parenthesized_expression "((int)param_2 < 1)" ( (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }" { (expression_statement "iVar3 = pstm_copy(param_1,param_3);" (assignment_expression "iVar3 = pstm_copy(param_1,param_3)" identifier = (call_expression "pstm_copy(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }" { (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) (if_statement "if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;" if (parenthesized_expression "(param_4 == (undefined4 *)0x0)" ( (binary_expression "param_4 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004ef08;" goto statement_identifier ;)) (expression_statement "param_4[2] = 0;" (assignment_expression "param_4[2] = 0" (subscript_expression "param_4[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" * identifier) = number_literal) ;) (if_statement "if ((int)param_4[1] < 1) goto LAB_0004ef08;" if (parenthesized_expression "((int)param_4[1] < 1)" ( (binary_expression "(int)param_4[1] < 1" (cast_expression "(int)param_4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_4[1]" identifier [ number_literal ])) < number_literal) )) (goto_statement "goto LAB_0004ef08;" goto statement_identifier ;)) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (expression_statement "puVar7 = (undefined4 *)param_4[3];" (assignment_expression "puVar7 = (undefined4 *)param_4[3]" identifier = (cast_expression "(undefined4 *)param_4[3]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[3]" identifier [ number_literal ]))) ;) (do_statement "do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);" do (compound_statement "{\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      }" { (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" identifier = (binary_expression "puVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar3 < (int)param_4[1])" ( (binary_expression "iVar3 < (int)param_4[1]" identifier < (cast_expression "(int)param_4[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_4[1]" identifier [ number_literal ]))) )) ;) (labeled_statement "LAB_0004ef04:\n      uVar9 = 0;" statement_identifier : (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;)) (goto_statement "goto LAB_0004ef08;" goto statement_identifier ;) })) (labeled_statement "LAB_0004ed3c:\n    uVar9 = 0xfffffff8;" statement_identifier : (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" identifier = number_literal) ;)) }) (else_clause "else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" else (compound_statement "{\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" { (expression_statement "iVar3 = (int)param_2 >> 5;" (assignment_expression "iVar3 = (int)param_2 >> 5" identifier = (binary_expression "(int)param_2 >> 5" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (if_statement "if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" if (parenthesized_expression "(param_4 == (undefined4 *)0x0)" ( (binary_expression "param_4 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }" { (expression_statement "iVar4 = pstm_copy(param_1,param_3);" (assignment_expression "iVar4 = pstm_copy(param_1,param_3)" identifier = (call_expression "pstm_copy(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 != 0) goto LAB_0004ed3c;" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0004ed3c;" goto statement_identifier ;)) (labeled_statement "LAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }" statement_identifier : (if_statement "if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }" if (parenthesized_expression "(0x1f < (int)param_2)" ( (binary_expression "0x1f < (int)param_2" number_literal < (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        pstm_rshd(param_3,iVar3);\n      }" { (expression_statement "pstm_rshd(param_3,iVar3);" (call_expression "pstm_rshd(param_3,iVar3)" identifier (argument_list "(param_3,iVar3)" ( identifier , identifier ))) ;) }))) (expression_statement "param_2 = param_2 & 0x1f;" (assignment_expression "param_2 = param_2 & 0x1f" identifier = (binary_expression "param_2 & 0x1f" identifier & number_literal)) ;) (expression_statement "iVar3 = *param_3;" (assignment_expression "iVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }" if (parenthesized_expression "((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4))" ( (binary_expression "(param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)" (parenthesized_expression "(param_2 != 0)" ( (binary_expression "param_2 != 0" identifier != number_literal) )) && (parenthesized_expression "(iVar4 = iVar3 + -1, -1 < iVar4)" ( (comma_expression "iVar4 = iVar3 + -1, -1 < iVar4" (assignment_expression "iVar4 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) , (binary_expression "-1 < iVar4" number_literal < identifier)) ))) )) (compound_statement "{\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);" (assignment_expression "puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4)" identifier = (cast_expression "(uint *)(param_3[3] + iVar3 * 4 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3[3] + iVar3 * 4 + -4)" ( (binary_expression "param_3[3] + iVar3 * 4 + -4" (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal)) + number_literal) )))) ;) (do_statement "do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);" do (compound_statement "{\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        }" { (expression_statement "uVar5 = uVar8 << (0x20 - param_2 & 0x1f);" (assignment_expression "uVar5 = uVar8 << (0x20 - param_2 & 0x1f)" identifier = (binary_expression "uVar8 << (0x20 - param_2 & 0x1f)" identifier << (parenthesized_expression "(0x20 - param_2 & 0x1f)" ( (binary_expression "0x20 - param_2 & 0x1f" (binary_expression "0x20 - param_2" number_literal - identifier) & number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" identifier = (binary_expression "iVar4 + -1" identifier + number_literal)) ;) (expression_statement "uVar8 = *puVar6 & ~(-1 << param_2);" (assignment_expression "uVar8 = *puVar6 & ~(-1 << param_2)" identifier = (binary_expression "*puVar6 & ~(-1 << param_2)" (pointer_expression "*puVar6" * identifier) & (unary_expression "~(-1 << param_2)" ~ (parenthesized_expression "(-1 << param_2)" ( (binary_expression "-1 << param_2" number_literal << identifier) ))))) ;) (expression_statement "*puVar6 = uVar5 | *puVar6 >> param_2;" (assignment_expression "*puVar6 = uVar5 | *puVar6 >> param_2" (pointer_expression "*puVar6" * identifier) = (binary_expression "uVar5 | *puVar6 >> param_2" identifier | (binary_expression "*puVar6 >> param_2" (pointer_expression "*puVar6" * identifier) >> identifier))) ;) (expression_statement "puVar6 = puVar6 + -1;" (assignment_expression "puVar6 = puVar6 + -1" identifier = (binary_expression "puVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 != -1)" ( (binary_expression "iVar4 != -1" identifier != number_literal) )) ;) (expression_statement "iVar3 = *param_3;" (assignment_expression "iVar3 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) })) (if_statement "if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" if (parenthesized_expression "(iVar3 < 1)" ( (binary_expression "iVar3 < 1" identifier < number_literal) )) (compound_statement "{\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }" { (if_statement "if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_0004eebc:\n          param_3[2] = 0;\n        }" { (labeled_statement "LAB_0004eebc:\n          param_3[2] = 0;" statement_identifier : (expression_statement "param_3[2] = 0;" (assignment_expression "param_3[2] = 0" (subscript_expression "param_3[2]" identifier [ number_literal ]) = number_literal) ;)) })) }) (else_clause "else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" else (if_statement "if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" if (parenthesized_expression "(*(int *)(param_3[3] + iVar3 * 4 + -4) == 0)" ( (binary_expression "*(int *)(param_3[3] + iVar3 * 4 + -4) == 0" (pointer_expression "*(int *)(param_3[3] + iVar3 * 4 + -4)" * (cast_expression "(int *)(param_3[3] + iVar3 * 4 + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3[3] + iVar3 * 4 + -4)" ( (binary_expression "param_3[3] + iVar3 * 4 + -4" (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal)) + number_literal) )))) == number_literal) )) (compound_statement "{\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" { (expression_statement "iVar4 = param_3[3] + iVar3 * 4;" (assignment_expression "iVar4 = param_3[3] + iVar3 * 4" identifier = (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal))) ;) (do_statement "do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);" do (compound_statement "{\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        }" { (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (expression_statement "*param_3 = iVar3;" (assignment_expression "*param_3 = iVar3" (pointer_expression "*param_3" * identifier) = identifier) ;) (if_statement "if (iVar3 == 0) goto LAB_0004eebc;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0004eebc;" goto statement_identifier ;)) (expression_statement "piVar1 = (int *)(iVar4 + -8);" (assignment_expression "piVar1 = (int *)(iVar4 + -8)" identifier = (cast_expression "(int *)(iVar4 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + -8)" ( (binary_expression "iVar4 + -8" identifier + number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + -4;" (assignment_expression "iVar4 = iVar4 + -4" identifier = (binary_expression "iVar4 + -4" identifier + number_literal)) ;) }) while (parenthesized_expression "(*piVar1 == 0)" ( (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" * identifier) == number_literal) )) ;) })))) (if_statement "if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;" if (parenthesized_expression "(param_4 == (undefined4 *)0x0)" ( (binary_expression "param_4 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004ef04;" goto statement_identifier ;)) (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" else (compound_statement "{\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" { (expression_statement "local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);" (assignment_expression "local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100)" (subscript_expression "local_34[3]" identifier [ number_literal ]) = (call_expression "(*(code *)PTR_FUN_0012a1d0)(0x100)" (parenthesized_expression "(*(code *)PTR_FUN_0012a1d0)" ( (pointer_expression "*(code *)PTR_FUN_0012a1d0" * (cast_expression "(code *)PTR_FUN_0012a1d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x100)" ( number_literal )))) ;) (expression_statement "local_34[0] = 0;" (assignment_expression "local_34[0] = 0" (subscript_expression "local_34[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_34[1] = 0x40;" (assignment_expression "local_34[1] = 0x40" (subscript_expression "local_34[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar4 = pstm_copy(param_1,local_34);" (assignment_expression "iVar4 = pstm_copy(param_1,local_34)" identifier = (call_expression "pstm_copy(param_1,local_34)" identifier (argument_list "(param_1,local_34)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }" { (if_statement "if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }" if (parenthesized_expression "((int)param_2 < *param_1 << 5)" ( (binary_expression "(int)param_2 < *param_1 << 5" (cast_expression "(int)param_2" ( (type_descriptor "int" primitive_type) ) identifier) < (binary_expression "*param_1 << 5" (pointer_expression "*param_1" * identifier) << number_literal)) )) (compound_statement "{\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }" { (expression_statement "iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;" (assignment_expression "iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3" identifier = (binary_expression "(uint)((param_2 & 0x1f) != 0) + iVar3" (call_expression "(uint)((param_2 & 0x1f) != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((param_2 & 0x1f) != 0)" ( (binary_expression "(param_2 & 0x1f) != 0" (parenthesized_expression "(param_2 & 0x1f)" ( (binary_expression "param_2 & 0x1f" identifier & number_literal) )) != number_literal) ))) + identifier)) ;) (if_statement "if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }" if (parenthesized_expression "(iVar4 < local_34[0])" ( (binary_expression "iVar4 < local_34[0]" identifier < (subscript_expression "local_34[0]" identifier [ number_literal ])) )) (compound_statement "{\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }" { (expression_statement "puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);" (assignment_expression "puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4)" identifier = (cast_expression "(undefined4 *)(local_34[3] + iVar4 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_34[3] + iVar4 * 4)" ( (binary_expression "local_34[3] + iVar4 * 4" (subscript_expression "local_34[3]" identifier [ number_literal ]) + (binary_expression "iVar4 * 4" identifier * number_literal)) )))) ;) (do_statement "do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);" do (compound_statement "{\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            }" { (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" * identifier) = number_literal) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" identifier = (binary_expression "puVar7 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar4 < local_34[0])" ( (binary_expression "iVar4 < local_34[0]" identifier < (subscript_expression "local_34[0]" identifier [ number_literal ])) )) ;) })) (expression_statement "puVar6 = (uint *)(local_34[3] + iVar3 * 4);" (assignment_expression "puVar6 = (uint *)(local_34[3] + iVar3 * 4)" identifier = (cast_expression "(uint *)(local_34[3] + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_34[3] + iVar3 * 4)" ( (binary_expression "local_34[3] + iVar3 * 4" (subscript_expression "local_34[3]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal)) )))) ;) (expression_statement "*puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);" (assignment_expression "*puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f)" (pointer_expression "*puVar6" * identifier) = (binary_expression "*puVar6 & 0xffffffffU >> (-param_2 & 0x1f)" (pointer_expression "*puVar6" * identifier) & (binary_expression "0xffffffffU >> (-param_2 & 0x1f)" number_literal >> (parenthesized_expression "(-param_2 & 0x1f)" ( (binary_expression "-param_2 & 0x1f" (unary_expression "-param_2" - identifier) & number_literal) ))))) ;) (if_statement "if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" if (parenthesized_expression "(local_34[0] < 1)" ( (binary_expression "local_34[0] < 1" (subscript_expression "local_34[0]" identifier [ number_literal ]) < number_literal) )) (compound_statement "{\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }" { (if_statement "if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }" if (parenthesized_expression "(local_34[0] == 0)" ( (binary_expression "local_34[0] == 0" (subscript_expression "local_34[0]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n              local_34[2] = 0;\n            }" { (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" identifier [ number_literal ]) = number_literal) ;) })) }) (else_clause "else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" else (if_statement "if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" if (parenthesized_expression "(*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0)" ( (binary_expression "*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0" (pointer_expression "*(int *)(local_34[3] + local_34[0] * 4 + -4)" * (cast_expression "(int *)(local_34[3] + local_34[0] * 4 + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_34[3] + local_34[0] * 4 + -4)" ( (binary_expression "local_34[3] + local_34[0] * 4 + -4" (binary_expression "local_34[3] + local_34[0] * 4" (subscript_expression "local_34[3]" identifier [ number_literal ]) + (binary_expression "local_34[0] * 4" (subscript_expression "local_34[0]" identifier [ number_literal ]) * number_literal)) + number_literal) )))) == number_literal) )) (compound_statement "{\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" { (expression_statement "iVar4 = local_34[3] + local_34[0] * 4;" (assignment_expression "iVar4 = local_34[3] + local_34[0] * 4" identifier = (binary_expression "local_34[3] + local_34[0] * 4" (subscript_expression "local_34[3]" identifier [ number_literal ]) + (binary_expression "local_34[0] * 4" (subscript_expression "local_34[0]" identifier [ number_literal ]) * number_literal))) ;) (do_statement "do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);" do (compound_statement "{\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            }" { (expression_statement "local_34[0] = local_34[0] + -1;" (assignment_expression "local_34[0] = local_34[0] + -1" (subscript_expression "local_34[0]" identifier [ number_literal ]) = (binary_expression "local_34[0] + -1" (subscript_expression "local_34[0]" identifier [ number_literal ]) + number_literal)) ;) (if_statement "if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }" if (parenthesized_expression "(local_34[0] == 0)" ( (binary_expression "local_34[0] == 0" (subscript_expression "local_34[0]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n                local_34[2] = 0;\n                break;\n              }" { (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" identifier [ number_literal ]) = number_literal) ;) (break_statement "break;" break ;) })) (expression_statement "piVar1 = (int *)(iVar4 + -8);" (assignment_expression "piVar1 = (int *)(iVar4 + -8)" identifier = (cast_expression "(int *)(iVar4 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar4 + -8)" ( (binary_expression "iVar4 + -8" identifier + number_literal) )))) ;) (expression_statement "iVar4 = iVar4 + -4;" (assignment_expression "iVar4 = iVar4 + -4" identifier = (binary_expression "iVar4 + -4" identifier + number_literal)) ;) }) while (parenthesized_expression "(*piVar1 == 0)" ( (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" * identifier) == number_literal) )) ;) })))) })) (expression_statement "iVar4 = pstm_copy(param_1,param_3);" (assignment_expression "iVar4 = pstm_copy(param_1,param_3)" identifier = (call_expression "pstm_copy(param_1,param_3)" identifier (argument_list "(param_1,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar4 == 0) goto LAB_0004edb0;" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0004edb0;" goto statement_identifier ;)) (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" identifier = number_literal) ;) }) (else_clause "else {\n        uVar9 = 0xfffffff8;\n      }" else (compound_statement "{\n        uVar9 = 0xfffffff8;\n      }" { (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" identifier = number_literal) ;) }))) }))) (expression_statement "iVar3 = pstm_copy(local_34,param_4);" (assignment_expression "iVar3 = pstm_copy(local_34,param_4)" identifier = (call_expression "pstm_copy(local_34,param_4)" identifier (argument_list "(local_34,param_4)" ( identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar9 = 0xfffffff8;\n    }" { (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" identifier = number_literal) ;) })) (expression_statement "pstm_clear(local_34);" (call_expression "pstm_clear(local_34)" identifier (argument_list "(local_34)" ( identifier ))) ;) }))) (labeled_statement "LAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" statement_identifier : (if_statement "if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" if (parenthesized_expression "(local_24 != *(int *)puVar2)" ( (binary_expression "local_24 != *(int *)puVar2" identifier != (pointer_expression "*(int *)puVar2" * (cast_expression "(int *)puVar2" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" { (expression_statement "uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();" (assignment_expression "uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)()" identifier = (call_expression "(*(code *)PTR___stack_chk_fail_0012b0c8)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0012b0c8)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0012b0c8" * (cast_expression "(code *)PTR___stack_chk_fail_0012b0c8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( )))) ;) (return_statement "return uVar9;" return identifier ;) }))) (return_statement "return uVar9;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression LIT < IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) + LIT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) & (unary_expression ~ (parenthesized_expression ( (binary_expression LIT << IDENT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression IDENT | (binary_expression (pointer_expression * IDENT) >> IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;)) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) ;) })))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (binary_expression (pointer_expression * IDENT) << LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (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)) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_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 ]) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) & (binary_expression LIT >> (parenthesized_expression ( (binary_expression (unary_expression - IDENT) & LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (subscript_expression IDENT [ LIT ]) * LIT)) + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (subscript_expression IDENT [ LIT ]) * LIT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (break_statement break ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) ;) })))) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( )))) ;) (return_statement return IDENT ;) }))) (return_statement return IDENT ;) })))
(function_definition "undefined4 pstm_div_2d(int *param_1,uint param_2,int *param_3,undefined4 *param_4)\n\n{\n  int *piVar1;\n  undefined *puVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  uint *puVar6;\n  undefined4 *puVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  int local_34 [4];\n  int local_24;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }\nLAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }\n  return uVar9;\n}" (type_identifier "undefined4") (function_declarator "pstm_div_2d(int *param_1,uint param_2,int *param_3,undefined4 *param_4)" (identifier "pstm_div_2d") (parameter_list "(int *param_1,uint param_2,int *param_3,undefined4 *param_4)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 *param_4" (type_identifier "undefined4") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  int *piVar1;\n  undefined *puVar2;\n  int iVar3;\n  int iVar4;\n  uint uVar5;\n  uint *puVar6;\n  undefined4 *puVar7;\n  uint uVar8;\n  undefined4 uVar9;\n  int local_34 [4];\n  int local_24;\n  \n  puVar2 = PTR___stack_chk_guard_0012b14c;\n  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;\n  if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }\nLAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }\n  return uVar9;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "undefined *puVar2;" (type_identifier "undefined") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint *puVar6;" (type_identifier "uint") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "undefined4 *puVar7;" (type_identifier "undefined4") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "undefined4 uVar9;" (type_identifier "undefined4") (identifier "uVar9") (; ";")) (declaration "int local_34 [4];" (primitive_type "int") (array_declarator "local_34 [4]" (identifier "local_34") ([ "[") (number_literal "4") (] "]")) (; ";")) (declaration "int local_24;" (primitive_type "int") (identifier "local_24") (; ";")) (expression_statement "puVar2 = PTR___stack_chk_guard_0012b14c;" (assignment_expression "puVar2 = PTR___stack_chk_guard_0012b14c" (identifier "puVar2") (= "=") (identifier "PTR___stack_chk_guard_0012b14c")) (; ";")) (expression_statement "local_24 = *(int *)PTR___stack_chk_guard_0012b14c;" (assignment_expression "local_24 = *(int *)PTR___stack_chk_guard_0012b14c" (identifier "local_24") (= "=") (pointer_expression "*(int *)PTR___stack_chk_guard_0012b14c" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_0012b14c" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_0012b14c")))) (; ";")) (if_statement "if ((int)param_2 < 1) {\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }\n  else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" (if "if") (parenthesized_expression "((int)param_2 < 1)" (( "(") (binary_expression "(int)param_2 < 1" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    iVar3 = pstm_copy(param_1,param_3);\n    if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }\nLAB_0004ed3c:\n    uVar9 = 0xfffffff8;\n  }" ({ "{") (expression_statement "iVar3 = pstm_copy(param_1,param_3);" (assignment_expression "iVar3 = pstm_copy(param_1,param_3)" (identifier "iVar3") (= "=") (call_expression "pstm_copy(param_1,param_3)" (identifier "pstm_copy") (argument_list "(param_1,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar3 == 0) {\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar9 = 0;\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;\n      param_4[2] = 0;\n      *param_4 = 0;\n      if ((int)param_4[1] < 1) goto LAB_0004ef08;\n      iVar3 = 0;\n      puVar7 = (undefined4 *)param_4[3];\n      do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);\nLAB_0004ef04:\n      uVar9 = 0;\n      goto LAB_0004ef08;\n    }" ({ "{") (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" (identifier "uVar9") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;" (if "if") (parenthesized_expression "(param_4 == (undefined4 *)0x0)" (( "(") (binary_expression "param_4 == (undefined4 *)0x0" (identifier "param_4") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0004ef08;" (goto "goto") (statement_identifier "LAB_0004ef08") (; ";"))) (expression_statement "param_4[2] = 0;" (assignment_expression "param_4[2] = 0" (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*param_4 = 0;" (assignment_expression "*param_4 = 0" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (number_literal "0")) (; ";")) (if_statement "if ((int)param_4[1] < 1) goto LAB_0004ef08;" (if "if") (parenthesized_expression "((int)param_4[1] < 1)" (( "(") (binary_expression "(int)param_4[1] < 1" (cast_expression "(int)param_4[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]"))) (< "<") (number_literal "1")) () ")")) (goto_statement "goto LAB_0004ef08;" (goto "goto") (statement_identifier "LAB_0004ef08") (; ";"))) (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar7 = (undefined4 *)param_4[3];" (assignment_expression "puVar7 = (undefined4 *)param_4[3]" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)param_4[3]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_4[3]" (identifier "param_4") ([ "[") (number_literal "3") (] "]")))) (; ";")) (do_statement "do {\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      } while (iVar3 < (int)param_4[1]);" (do "do") (compound_statement "{\n        *puVar7 = 0;\n        iVar3 = iVar3 + 1;\n        puVar7 = puVar7 + 1;\n      }" ({ "{") (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" (identifier "puVar7") (= "=") (binary_expression "puVar7 + 1" (identifier "puVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar3 < (int)param_4[1])" (( "(") (binary_expression "iVar3 < (int)param_4[1]" (identifier "iVar3") (< "<") (cast_expression "(int)param_4[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]")))) () ")")) (; ";")) (labeled_statement "LAB_0004ef04:\n      uVar9 = 0;" (statement_identifier "LAB_0004ef04") (: ":") (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" (identifier "uVar9") (= "=") (number_literal "0")) (; ";"))) (goto_statement "goto LAB_0004ef08;" (goto "goto") (statement_identifier "LAB_0004ef08") (; ";")) (} "}"))) (labeled_statement "LAB_0004ed3c:\n    uVar9 = 0xfffffff8;" (statement_identifier "LAB_0004ed3c") (: ":") (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" (identifier "uVar9") (= "=") (number_literal "0xfffffff8")) (; ";"))) (} "}")) (else_clause "else {\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" (else "else") (compound_statement "{\n    iVar3 = (int)param_2 >> 5;\n    if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }\n    iVar3 = pstm_copy(local_34,param_4);\n    if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }\n    pstm_clear(local_34);\n  }" ({ "{") (expression_statement "iVar3 = (int)param_2 >> 5;" (assignment_expression "iVar3 = (int)param_2 >> 5" (identifier "iVar3") (= "=") (binary_expression "(int)param_2 >> 5" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (>> ">>") (number_literal "5"))) (; ";")) (if_statement "if (param_4 == (undefined4 *)0x0) {\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }\n    else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" (if "if") (parenthesized_expression "(param_4 == (undefined4 *)0x0)" (( "(") (binary_expression "param_4 == (undefined4 *)0x0" (identifier "param_4") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar4 = pstm_copy(param_1,param_3);\n      if (iVar4 != 0) goto LAB_0004ed3c;\nLAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }\n      param_2 = param_2 & 0x1f;\n      iVar3 = *param_3;\n      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }\n      if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }\n      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;\n      uVar9 = 0;\n    }" ({ "{") (expression_statement "iVar4 = pstm_copy(param_1,param_3);" (assignment_expression "iVar4 = pstm_copy(param_1,param_3)" (identifier "iVar4") (= "=") (call_expression "pstm_copy(param_1,param_3)" (identifier "pstm_copy") (argument_list "(param_1,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar4 != 0) goto LAB_0004ed3c;" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0004ed3c;" (goto "goto") (statement_identifier "LAB_0004ed3c") (; ";"))) (labeled_statement "LAB_0004edb0:\n      if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }" (statement_identifier "LAB_0004edb0") (: ":") (if_statement "if (0x1f < (int)param_2) {\n        pstm_rshd(param_3,iVar3);\n      }" (if "if") (parenthesized_expression "(0x1f < (int)param_2)" (( "(") (binary_expression "0x1f < (int)param_2" (number_literal "0x1f") (< "<") (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2"))) () ")")) (compound_statement "{\n        pstm_rshd(param_3,iVar3);\n      }" ({ "{") (expression_statement "pstm_rshd(param_3,iVar3);" (call_expression "pstm_rshd(param_3,iVar3)" (identifier "pstm_rshd") (argument_list "(param_3,iVar3)" (( "(") (identifier "param_3") (, ",") (identifier "iVar3") () ")"))) (; ";")) (} "}")))) (expression_statement "param_2 = param_2 & 0x1f;" (assignment_expression "param_2 = param_2 & 0x1f" (identifier "param_2") (= "=") (binary_expression "param_2 & 0x1f" (identifier "param_2") (& "&") (number_literal "0x1f"))) (; ";")) (expression_statement "iVar3 = *param_3;" (assignment_expression "iVar3 = *param_3" (identifier "iVar3") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }" (if "if") (parenthesized_expression "((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4))" (( "(") (binary_expression "(param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)" (parenthesized_expression "(param_2 != 0)" (( "(") (binary_expression "param_2 != 0" (identifier "param_2") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(iVar4 = iVar3 + -1, -1 < iVar4)" (( "(") (comma_expression "iVar4 = iVar3 + -1, -1 < iVar4" (assignment_expression "iVar4 = iVar3 + -1" (identifier "iVar4") (= "=") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) (, ",") (binary_expression "-1 < iVar4" (number_literal "-1") (< "<") (identifier "iVar4"))) () ")"))) () ")")) (compound_statement "{\n        uVar8 = 0;\n        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);\n        do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);\n        iVar3 = *param_3;\n      }" ({ "{") (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);" (assignment_expression "puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4)" (identifier "puVar6") (= "=") (cast_expression "(uint *)(param_3[3] + iVar3 * 4 + -4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3[3] + iVar3 * 4 + -4)" (( "(") (binary_expression "param_3[3] + iVar3 * 4 + -4" (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" (identifier "param_3") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) (+ "+") (number_literal "-4")) () ")")))) (; ";")) (do_statement "do {\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        } while (iVar4 != -1);" (do "do") (compound_statement "{\n          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);\n          iVar4 = iVar4 + -1;\n          uVar8 = *puVar6 & ~(-1 << param_2);\n          *puVar6 = uVar5 | *puVar6 >> param_2;\n          puVar6 = puVar6 + -1;\n        }" ({ "{") (expression_statement "uVar5 = uVar8 << (0x20 - param_2 & 0x1f);" (assignment_expression "uVar5 = uVar8 << (0x20 - param_2 & 0x1f)" (identifier "uVar5") (= "=") (binary_expression "uVar8 << (0x20 - param_2 & 0x1f)" (identifier "uVar8") (<< "<<") (parenthesized_expression "(0x20 - param_2 & 0x1f)" (( "(") (binary_expression "0x20 - param_2 & 0x1f" (binary_expression "0x20 - param_2" (number_literal "0x20") (- "-") (identifier "param_2")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "iVar4 = iVar4 + -1;" (assignment_expression "iVar4 = iVar4 + -1" (identifier "iVar4") (= "=") (binary_expression "iVar4 + -1" (identifier "iVar4") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar8 = *puVar6 & ~(-1 << param_2);" (assignment_expression "uVar8 = *puVar6 & ~(-1 << param_2)" (identifier "uVar8") (= "=") (binary_expression "*puVar6 & ~(-1 << param_2)" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (& "&") (unary_expression "~(-1 << param_2)" (~ "~") (parenthesized_expression "(-1 << param_2)" (( "(") (binary_expression "-1 << param_2" (number_literal "-1") (<< "<<") (identifier "param_2")) () ")"))))) (; ";")) (expression_statement "*puVar6 = uVar5 | *puVar6 >> param_2;" (assignment_expression "*puVar6 = uVar5 | *puVar6 >> param_2" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (binary_expression "uVar5 | *puVar6 >> param_2" (identifier "uVar5") (| "|") (binary_expression "*puVar6 >> param_2" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (>> ">>") (identifier "param_2")))) (; ";")) (expression_statement "puVar6 = puVar6 + -1;" (assignment_expression "puVar6 = puVar6 + -1" (identifier "puVar6") (= "=") (binary_expression "puVar6 + -1" (identifier "puVar6") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar4 != -1)" (( "(") (binary_expression "iVar4 != -1" (identifier "iVar4") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (expression_statement "iVar3 = *param_3;" (assignment_expression "iVar3 = *param_3" (identifier "iVar3") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (} "}"))) (if_statement "if (iVar3 < 1) {\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }\n      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" (if "if") (parenthesized_expression "(iVar3 < 1)" (( "(") (binary_expression "iVar3 < 1" (identifier "iVar3") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n        if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }\n      }" ({ "{") (if_statement "if (iVar3 == 0) {\nLAB_0004eebc:\n          param_3[2] = 0;\n        }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_0004eebc:\n          param_3[2] = 0;\n        }" ({ "{") (labeled_statement "LAB_0004eebc:\n          param_3[2] = 0;" (statement_identifier "LAB_0004eebc") (: ":") (expression_statement "param_3[2] = 0;" (assignment_expression "param_3[2] = 0" (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";"))) (} "}"))) (} "}")) (else_clause "else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" (else "else") (if_statement "if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" (if "if") (parenthesized_expression "(*(int *)(param_3[3] + iVar3 * 4 + -4) == 0)" (( "(") (binary_expression "*(int *)(param_3[3] + iVar3 * 4 + -4) == 0" (pointer_expression "*(int *)(param_3[3] + iVar3 * 4 + -4)" (* "*") (cast_expression "(int *)(param_3[3] + iVar3 * 4 + -4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3[3] + iVar3 * 4 + -4)" (( "(") (binary_expression "param_3[3] + iVar3 * 4 + -4" (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" (identifier "param_3") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) (+ "+") (number_literal "-4")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar4 = param_3[3] + iVar3 * 4;\n        do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);\n      }" ({ "{") (expression_statement "iVar4 = param_3[3] + iVar3 * 4;" (assignment_expression "iVar4 = param_3[3] + iVar3 * 4" (identifier "iVar4") (= "=") (binary_expression "param_3[3] + iVar3 * 4" (subscript_expression "param_3[3]" (identifier "param_3") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4")))) (; ";")) (do_statement "do {\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        } while (*piVar1 == 0);" (do "do") (compound_statement "{\n          iVar3 = iVar3 + -1;\n          *param_3 = iVar3;\n          if (iVar3 == 0) goto LAB_0004eebc;\n          piVar1 = (int *)(iVar4 + -8);\n          iVar4 = iVar4 + -4;\n        }" ({ "{") (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*param_3 = iVar3;" (assignment_expression "*param_3 = iVar3" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "iVar3")) (; ";")) (if_statement "if (iVar3 == 0) goto LAB_0004eebc;" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0004eebc;" (goto "goto") (statement_identifier "LAB_0004eebc") (; ";"))) (expression_statement "piVar1 = (int *)(iVar4 + -8);" (assignment_expression "piVar1 = (int *)(iVar4 + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(iVar4 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + -8)" (( "(") (binary_expression "iVar4 + -8" (identifier "iVar4") (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar4 = iVar4 + -4;" (assignment_expression "iVar4 = iVar4 + -4" (identifier "iVar4") (= "=") (binary_expression "iVar4 + -4" (identifier "iVar4") (+ "+") (number_literal "-4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*piVar1 == 0)" (( "(") (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (== "==") (number_literal "0")) () ")")) (; ";")) (} "}"))))) (if_statement "if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;" (if "if") (parenthesized_expression "(param_4 == (undefined4 *)0x0)" (( "(") (binary_expression "param_4 == (undefined4 *)0x0" (identifier "param_4") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0004ef04;" (goto "goto") (statement_identifier "LAB_0004ef04") (; ";"))) (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" (identifier "uVar9") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" (else "else") (compound_statement "{\n      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);\n      local_34[0] = 0;\n      local_34[1] = 0x40;\n      local_34[2] = 0;\n      iVar4 = pstm_copy(param_1,local_34);\n      if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }\n    }" ({ "{") (expression_statement "local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);" (assignment_expression "local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100)" (subscript_expression "local_34[3]" (identifier "local_34") ([ "[") (number_literal "3") (] "]")) (= "=") (call_expression "(*(code *)PTR_FUN_0012a1d0)(0x100)" (parenthesized_expression "(*(code *)PTR_FUN_0012a1d0)" (( "(") (pointer_expression "*(code *)PTR_FUN_0012a1d0" (* "*") (cast_expression "(code *)PTR_FUN_0012a1d0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_0012a1d0"))) () ")")) (argument_list "(0x100)" (( "(") (number_literal "0x100") () ")")))) (; ";")) (expression_statement "local_34[0] = 0;" (assignment_expression "local_34[0] = 0" (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_34[1] = 0x40;" (assignment_expression "local_34[1] = 0x40" (subscript_expression "local_34[1]" (identifier "local_34") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0x40")) (; ";")) (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" (identifier "local_34") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar4 = pstm_copy(param_1,local_34);" (assignment_expression "iVar4 = pstm_copy(param_1,local_34)" (identifier "iVar4") (= "=") (call_expression "pstm_copy(param_1,local_34)" (identifier "pstm_copy") (argument_list "(param_1,local_34)" (( "(") (identifier "param_1") (, ",") (identifier "local_34") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }\n      else {\n        uVar9 = 0xfffffff8;\n      }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }\n        iVar4 = pstm_copy(param_1,param_3);\n        if (iVar4 == 0) goto LAB_0004edb0;\n        uVar9 = 0xfffffff8;\n      }" ({ "{") (if_statement "if ((int)param_2 < *param_1 << 5) {\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }" (if "if") (parenthesized_expression "((int)param_2 < *param_1 << 5)" (( "(") (binary_expression "(int)param_2 < *param_1 << 5" (cast_expression "(int)param_2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_2")) (< "<") (binary_expression "*param_1 << 5" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (<< "<<") (number_literal "5"))) () ")")) (compound_statement "{\n          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;\n          if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }\n          puVar6 = (uint *)(local_34[3] + iVar3 * 4);\n          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);\n          if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }\n        }" ({ "{") (expression_statement "iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;" (assignment_expression "iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3" (identifier "iVar4") (= "=") (binary_expression "(uint)((param_2 & 0x1f) != 0) + iVar3" (call_expression "(uint)((param_2 & 0x1f) != 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((param_2 & 0x1f) != 0)" (( "(") (binary_expression "(param_2 & 0x1f) != 0" (parenthesized_expression "(param_2 & 0x1f)" (( "(") (binary_expression "param_2 & 0x1f" (identifier "param_2") (& "&") (number_literal "0x1f")) () ")")) (!= "!=") (number_literal "0")) () ")"))) (+ "+") (identifier "iVar3"))) (; ";")) (if_statement "if (iVar4 < local_34[0]) {\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }" (if "if") (parenthesized_expression "(iVar4 < local_34[0])" (( "(") (binary_expression "iVar4 < local_34[0]" (identifier "iVar4") (< "<") (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]"))) () ")")) (compound_statement "{\n            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);\n            do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);\n          }" ({ "{") (expression_statement "puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);" (assignment_expression "puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4)" (identifier "puVar7") (= "=") (cast_expression "(undefined4 *)(local_34[3] + iVar4 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_34[3] + iVar4 * 4)" (( "(") (binary_expression "local_34[3] + iVar4 * 4" (subscript_expression "local_34[3]" (identifier "local_34") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "iVar4 * 4" (identifier "iVar4") (* "*") (number_literal "4"))) () ")")))) (; ";")) (do_statement "do {\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            } while (iVar4 < local_34[0]);" (do "do") (compound_statement "{\n              *puVar7 = 0;\n              iVar4 = iVar4 + 1;\n              puVar7 = puVar7 + 1;\n            }" ({ "{") (expression_statement "*puVar7 = 0;" (assignment_expression "*puVar7 = 0" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" (identifier "iVar4") (= "=") (binary_expression "iVar4 + 1" (identifier "iVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar7 = puVar7 + 1;" (assignment_expression "puVar7 = puVar7 + 1" (identifier "puVar7") (= "=") (binary_expression "puVar7 + 1" (identifier "puVar7") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar4 < local_34[0])" (( "(") (binary_expression "iVar4 < local_34[0]" (identifier "iVar4") (< "<") (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]"))) () ")")) (; ";")) (} "}"))) (expression_statement "puVar6 = (uint *)(local_34[3] + iVar3 * 4);" (assignment_expression "puVar6 = (uint *)(local_34[3] + iVar3 * 4)" (identifier "puVar6") (= "=") (cast_expression "(uint *)(local_34[3] + iVar3 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_34[3] + iVar3 * 4)" (( "(") (binary_expression "local_34[3] + iVar3 * 4" (subscript_expression "local_34[3]" (identifier "local_34") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "*puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);" (assignment_expression "*puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f)" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (binary_expression "*puVar6 & 0xffffffffU >> (-param_2 & 0x1f)" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (& "&") (binary_expression "0xffffffffU >> (-param_2 & 0x1f)" (number_literal "0xffffffffU") (>> ">>") (parenthesized_expression "(-param_2 & 0x1f)" (( "(") (binary_expression "-param_2 & 0x1f" (unary_expression "-param_2" (- "-") (identifier "param_2")) (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (if_statement "if (local_34[0] < 1) {\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }\n          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" (if "if") (parenthesized_expression "(local_34[0] < 1)" (( "(") (binary_expression "local_34[0] < 1" (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]")) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n            if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }\n          }" ({ "{") (if_statement "if (local_34[0] == 0) {\n              local_34[2] = 0;\n            }" (if "if") (parenthesized_expression "(local_34[0] == 0)" (( "(") (binary_expression "local_34[0] == 0" (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              local_34[2] = 0;\n            }" ({ "{") (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" (identifier "local_34") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (} "}")) (else_clause "else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" (else "else") (if_statement "if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" (if "if") (parenthesized_expression "(*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0)" (( "(") (binary_expression "*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0" (pointer_expression "*(int *)(local_34[3] + local_34[0] * 4 + -4)" (* "*") (cast_expression "(int *)(local_34[3] + local_34[0] * 4 + -4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_34[3] + local_34[0] * 4 + -4)" (( "(") (binary_expression "local_34[3] + local_34[0] * 4 + -4" (binary_expression "local_34[3] + local_34[0] * 4" (subscript_expression "local_34[3]" (identifier "local_34") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "local_34[0] * 4" (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]")) (* "*") (number_literal "4"))) (+ "+") (number_literal "-4")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            iVar4 = local_34[3] + local_34[0] * 4;\n            do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);\n          }" ({ "{") (expression_statement "iVar4 = local_34[3] + local_34[0] * 4;" (assignment_expression "iVar4 = local_34[3] + local_34[0] * 4" (identifier "iVar4") (= "=") (binary_expression "local_34[3] + local_34[0] * 4" (subscript_expression "local_34[3]" (identifier "local_34") ([ "[") (number_literal "3") (] "]")) (+ "+") (binary_expression "local_34[0] * 4" (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]")) (* "*") (number_literal "4")))) (; ";")) (do_statement "do {\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            } while (*piVar1 == 0);" (do "do") (compound_statement "{\n              local_34[0] = local_34[0] + -1;\n              if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }\n              piVar1 = (int *)(iVar4 + -8);\n              iVar4 = iVar4 + -4;\n            }" ({ "{") (expression_statement "local_34[0] = local_34[0] + -1;" (assignment_expression "local_34[0] = local_34[0] + -1" (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]")) (= "=") (binary_expression "local_34[0] + -1" (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (local_34[0] == 0) {\n                local_34[2] = 0;\n                break;\n              }" (if "if") (parenthesized_expression "(local_34[0] == 0)" (( "(") (binary_expression "local_34[0] == 0" (subscript_expression "local_34[0]" (identifier "local_34") ([ "[") (number_literal "0") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                local_34[2] = 0;\n                break;\n              }" ({ "{") (expression_statement "local_34[2] = 0;" (assignment_expression "local_34[2] = 0" (subscript_expression "local_34[2]" (identifier "local_34") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (break_statement "break;" (break "break") (; ";")) (} "}"))) (expression_statement "piVar1 = (int *)(iVar4 + -8);" (assignment_expression "piVar1 = (int *)(iVar4 + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(iVar4 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar4 + -8)" (( "(") (binary_expression "iVar4 + -8" (identifier "iVar4") (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar4 = iVar4 + -4;" (assignment_expression "iVar4 = iVar4 + -4" (identifier "iVar4") (= "=") (binary_expression "iVar4 + -4" (identifier "iVar4") (+ "+") (number_literal "-4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*piVar1 == 0)" (( "(") (binary_expression "*piVar1 == 0" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (== "==") (number_literal "0")) () ")")) (; ";")) (} "}"))))) (} "}"))) (expression_statement "iVar4 = pstm_copy(param_1,param_3);" (assignment_expression "iVar4 = pstm_copy(param_1,param_3)" (identifier "iVar4") (= "=") (call_expression "pstm_copy(param_1,param_3)" (identifier "pstm_copy") (argument_list "(param_1,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) goto LAB_0004edb0;" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0004edb0;" (goto "goto") (statement_identifier "LAB_0004edb0") (; ";"))) (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" (identifier "uVar9") (= "=") (number_literal "0xfffffff8")) (; ";")) (} "}")) (else_clause "else {\n        uVar9 = 0xfffffff8;\n      }" (else "else") (compound_statement "{\n        uVar9 = 0xfffffff8;\n      }" ({ "{") (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" (identifier "uVar9") (= "=") (number_literal "0xfffffff8")) (; ";")) (} "}")))) (} "}")))) (expression_statement "iVar3 = pstm_copy(local_34,param_4);" (assignment_expression "iVar3 = pstm_copy(local_34,param_4)" (identifier "iVar3") (= "=") (call_expression "pstm_copy(local_34,param_4)" (identifier "pstm_copy") (argument_list "(local_34,param_4)" (( "(") (identifier "local_34") (, ",") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (iVar3 != 0) {\n      uVar9 = 0xfffffff8;\n    }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar9 = 0xfffffff8;\n    }" ({ "{") (expression_statement "uVar9 = 0xfffffff8;" (assignment_expression "uVar9 = 0xfffffff8" (identifier "uVar9") (= "=") (number_literal "0xfffffff8")) (; ";")) (} "}"))) (expression_statement "pstm_clear(local_34);" (call_expression "pstm_clear(local_34)" (identifier "pstm_clear") (argument_list "(local_34)" (( "(") (identifier "local_34") () ")"))) (; ";")) (} "}")))) (labeled_statement "LAB_0004ef08:\n  if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" (statement_identifier "LAB_0004ef08") (: ":") (if_statement "if (local_24 != *(int *)puVar2) {\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" (if "if") (parenthesized_expression "(local_24 != *(int *)puVar2)" (( "(") (binary_expression "local_24 != *(int *)puVar2" (identifier "local_24") (!= "!=") (pointer_expression "*(int *)puVar2" (* "*") (cast_expression "(int *)puVar2" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar2")))) () ")")) (compound_statement "{\n    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();\n    return uVar9;\n  }" ({ "{") (expression_statement "uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();" (assignment_expression "uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)()" (identifier "uVar9") (= "=") (call_expression "(*(code *)PTR___stack_chk_fail_0012b0c8)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0012b0c8)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_0012b0c8" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_0012b0c8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_0012b0c8"))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (return_statement "return uVar9;" (return "return") (identifier "uVar9") (; ";")) (} "}")))) (return_statement "return uVar9;" (return "return") (identifier "uVar9") (; ";")) (} "}")))
(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (goto_statement label: (statement_identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (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)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (number_literal) right: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (unary_expression argument: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (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 (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (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: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (break_statement))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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)))) (return_statement (identifier))))) (return_statement (identifier)))))

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

{
  int *piVar1;
  undefined *puVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  uint *puVar6;
  undefined4 *puVar7;
  uint uVar8;
  undefined4 uVar9;
  int local_34 [4];
  int local_24;
  
  puVar2 = PTR___stack_chk_guard_0012b14c;
  local_24 = *(int *)PTR___stack_chk_guard_0012b14c;
  if ((int)param_2 < 1) {
    iVar3 = pstm_copy(param_1,param_3);
    if (iVar3 == 0) {
      uVar9 = 0;
      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef08;
      param_4[2] = 0;
      *param_4 = 0;
      if ((int)param_4[1] < 1) goto LAB_0004ef08;
      iVar3 = 0;
      puVar7 = (undefined4 *)param_4[3];
      do {
        *puVar7 = 0;
        iVar3 = iVar3 + 1;
        puVar7 = puVar7 + 1;
      } while (iVar3 < (int)param_4[1]);
LAB_0004ef04:
      uVar9 = 0;
      goto LAB_0004ef08;
    }
LAB_0004ed3c:
    uVar9 = 0xfffffff8;
  }
  else {
    iVar3 = (int)param_2 >> 5;
    if (param_4 == (undefined4 *)0x0) {
      iVar4 = pstm_copy(param_1,param_3);
      if (iVar4 != 0) goto LAB_0004ed3c;
LAB_0004edb0:
      if (0x1f < (int)param_2) {
        pstm_rshd(param_3,iVar3);
      }
      param_2 = param_2 & 0x1f;
      iVar3 = *param_3;
      if ((param_2 != 0) && (iVar4 = iVar3 + -1, -1 < iVar4)) {
        uVar8 = 0;
        puVar6 = (uint *)(param_3[3] + iVar3 * 4 + -4);
        do {
          uVar5 = uVar8 << (0x20 - param_2 & 0x1f);
          iVar4 = iVar4 + -1;
          uVar8 = *puVar6 & ~(-1 << param_2);
          *puVar6 = uVar5 | *puVar6 >> param_2;
          puVar6 = puVar6 + -1;
        } while (iVar4 != -1);
        iVar3 = *param_3;
      }
      if (iVar3 < 1) {
        if (iVar3 == 0) {
LAB_0004eebc:
          param_3[2] = 0;
        }
      }
      else if (*(int *)(param_3[3] + iVar3 * 4 + -4) == 0) {
        iVar4 = param_3[3] + iVar3 * 4;
        do {
          iVar3 = iVar3 + -1;
          *param_3 = iVar3;
          if (iVar3 == 0) goto LAB_0004eebc;
          piVar1 = (int *)(iVar4 + -8);
          iVar4 = iVar4 + -4;
        } while (*piVar1 == 0);
      }
      if (param_4 == (undefined4 *)0x0) goto LAB_0004ef04;
      uVar9 = 0;
    }
    else {
      local_34[3] = (*(code *)PTR_FUN_0012a1d0)(0x100);
      local_34[0] = 0;
      local_34[1] = 0x40;
      local_34[2] = 0;
      iVar4 = pstm_copy(param_1,local_34);
      if (iVar4 == 0) {
        if ((int)param_2 < *param_1 << 5) {
          iVar4 = (uint)((param_2 & 0x1f) != 0) + iVar3;
          if (iVar4 < local_34[0]) {
            puVar7 = (undefined4 *)(local_34[3] + iVar4 * 4);
            do {
              *puVar7 = 0;
              iVar4 = iVar4 + 1;
              puVar7 = puVar7 + 1;
            } while (iVar4 < local_34[0]);
          }
          puVar6 = (uint *)(local_34[3] + iVar3 * 4);
          *puVar6 = *puVar6 & 0xffffffffU >> (-param_2 & 0x1f);
          if (local_34[0] < 1) {
            if (local_34[0] == 0) {
              local_34[2] = 0;
            }
          }
          else if (*(int *)(local_34[3] + local_34[0] * 4 + -4) == 0) {
            iVar4 = local_34[3] + local_34[0] * 4;
            do {
              local_34[0] = local_34[0] + -1;
              if (local_34[0] == 0) {
                local_34[2] = 0;
                break;
              }
              piVar1 = (int *)(iVar4 + -8);
              iVar4 = iVar4 + -4;
            } while (*piVar1 == 0);
          }
        }
        iVar4 = pstm_copy(param_1,param_3);
        if (iVar4 == 0) goto LAB_0004edb0;
        uVar9 = 0xfffffff8;
      }
      else {
        uVar9 = 0xfffffff8;
      }
    }
    iVar3 = pstm_copy(local_34,param_4);
    if (iVar3 != 0) {
      uVar9 = 0xfffffff8;
    }
    pstm_clear(local_34);
  }
LAB_0004ef08:
  if (local_24 != *(int *)puVar2) {
    uVar9 = (*(code *)PTR___stack_chk_fail_0012b0c8)();
    return uVar9;
  }
  return uVar9;
}

