
re_dfastate_t *
re_acquire_state_context(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes,uint context)

{
  uint uVar1;
  byte bVar2;
  char cVar3;
  byte bVar4;
  int *piVar5;
  re_dfastate_t **pprVar6;
  reg_errcode_t rVar7;
  code *pcVar8;
  uint uVar9;
  re_node_set *prVar10;
  int iVar11;
  int *piVar12;
  re_node_set *prVar13;
  int iVar14;
  int iVar15;
  re_dfastate_t *prVar16;
  int iVar17;
  code *pcVar18;
  uint hash;
  
  iVar17 = nodes->nelem;
  if (iVar17 == 0) {
    *err = _REG_NOERROR;
    return (re_dfastate_t *)0x0;
  }
  hash = context + iVar17;
  if (0 < iVar17) {
    piVar5 = nodes->elems;
    piVar12 = piVar5 + iVar17;
    do {
      iVar11 = *piVar5;
      piVar5 = piVar5 + 1;
      hash = hash + iVar11;
    } while (piVar12 != piVar5);
  }
  iVar15 = dfa->state_table[hash & dfa->state_hash_mask].num;
  iVar11 = 0;
  if (0 < iVar15) {
    pprVar6 = dfa->state_table[hash & dfa->state_hash_mask].array;
    do {
      prVar16 = *pprVar6;
      if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&
          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&
         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {
        do {
          iVar14 = iVar14 + -1;
          if (iVar14 < 0) {
            return prVar16;
          }
        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);
      }
      iVar11 = iVar11 + 1;
      pprVar6 = pprVar6 + 1;
    } while (iVar11 != iVar15);
  }
  prVar16 = (re_dfastate_t *)(*(code *)PTR_calloc_0003d254)(0x38,1);
  if (prVar16 != (re_dfastate_t *)0x0) {
    prVar13 = &prVar16->nodes;
    pcVar18 = (code *)(PTR_LAB_0003d238 + -0x37f0);
    rVar7 = re_node_set_init_copy(prVar13,nodes);
    if (rVar7 == _REG_NOERROR) {
      iVar17 = nodes->nelem;
      prVar16->entrance_nodes = prVar13;
      prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);
      if (0 < iVar17) {
        iVar15 = 0;
        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);
        iVar11 = 0;
        do {
          while( true ) {
            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;
            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;
            uVar1 = (uint)(iVar14 << 8) >> 0x16;
            if (cVar3 != '\x01') break;
            if (uVar1 != 0) {
              prVar16->field_0x34 =
                   prVar16->field_0x34 & 0xfb |
                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)
              ;
              goto LAB_0001cd4c;
            }
LAB_0001ccec:
            iVar15 = iVar15 + 1;
            if (iVar17 <= iVar15) goto LAB_0001cde8;
          }
          bVar2 = prVar16->field_0x34;
          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);
          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;
          if (cVar3 == '\x02') {
            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;
          }
          else if (cVar3 == '\x04') {
            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;
          }
          if (uVar1 == 0) goto LAB_0001ccec;
LAB_0001cd4c:
          if (prVar13 == prVar16->entrance_nodes) {
            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);
            prVar16->entrance_nodes = prVar10;
            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;
            iVar17 = (*pcVar18)(prVar10,nodes);
            if (iVar17 != 0) goto LAB_0001ce18;
            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;
            iVar11 = 0;
          }
          if ((uVar1 & 1) == 0) {
            if ((uVar1 & 2) != 0) {
              uVar9 = context & 1;
              goto joined_r0x0001ce48;
            }
LAB_0001cd78:
            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&
               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {
              iVar17 = nodes->nelem;
              goto LAB_0001ccec;
            }
          }
          else {
            uVar9 = uVar1 & 2;
            if ((context & 1) != 0) {
joined_r0x0001ce48:
              if (uVar9 == 0) goto LAB_0001cd78;
            }
          }
          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))
          {
            (prVar16->nodes).nelem = iVar17 + -1;
            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);
          }
          iVar17 = nodes->nelem;
          iVar15 = iVar15 + 1;
          iVar11 = iVar11 + 1;
        } while (iVar15 < iVar17);
      }
LAB_0001cde8:
      rVar7 = register_state(dfa,prVar16,hash);
      if (rVar7 == _REG_NOERROR) {
        return prVar16;
      }
LAB_0001ce04:
      free_state(prVar16);
    }
    else {
      (*(code *)PTR_free_0003d354)(prVar16);
    }
  }
LAB_0001ce18:
  *err = _REG_ESPACE;
  return (re_dfastate_t *)0x0;
}



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

{
  byte bVar1;
  char cVar2;
  byte bVar3;
  int *piVar4;
  undefined4 *puVar5;
  code *pcVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  int *piVar10;
  uint uVar11;
  int iVar12;
  int iVar13;
  uint *puVar14;
  uint *puVar15;
  int iVar16;
  code *pcVar17;
  uint uVar18;
  
  iVar16 = *(int *)(param_3 + 4);
  if (iVar16 == 0) {
    *param_1 = 0;
    return (uint *)0x0;
  }
  uVar18 = param_4 + iVar16;
  if (0 < iVar16) {
    piVar4 = *(int **)(param_3 + 8);
    piVar10 = piVar4 + iVar16;
    do {
      iVar8 = *piVar4;
      piVar4 = piVar4 + 1;
      uVar18 = uVar18 + iVar8;
    } while (piVar10 != piVar4);
  }
  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);
  iVar13 = *piVar4;
  iVar8 = 0;
  if (0 < iVar13) {
    puVar5 = (undefined4 *)piVar4[2];
    do {
      puVar14 = (uint *)*puVar5;
      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&
          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))
      {
        do {
          iVar12 = iVar12 + -1;
          if (iVar12 < 0) {
            return puVar14;
          }
        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==
                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));
      }
      iVar8 = iVar8 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar8 != iVar13);
  }
  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);
  if (puVar14 != (uint *)0x0) {
    puVar15 = puVar14 + 1;
    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);
    iVar16 = FUN_0001c810(puVar15,param_3);
    if (iVar16 == 0) {
      iVar16 = *(int *)(param_3 + 4);
      puVar14[10] = (uint)puVar15;
      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);
      if (0 < iVar16) {
        iVar13 = 0;
        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);
        iVar8 = 0;
        do {
          while( true ) {
            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;
            iVar9 = *(int *)(iVar12 + 4);
            cVar2 = *(char *)(iVar12 + 4);
            uVar11 = (uint)(iVar9 << 8) >> 0x16;
            if (cVar2 != '\x01') break;
            if (uVar11 != 0) {
              *(byte *)(puVar14 + 0xd) =
                   *(byte *)(puVar14 + 0xd) & 0xfb |
                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);
              goto LAB_0001cd4c;
            }
LAB_0001ccec:
            iVar13 = iVar13 + 1;
            if (iVar16 <= iVar13) goto LAB_0001cde8;
          }
          bVar1 = *(byte *)(puVar14 + 0xd);
          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);
          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;
          if (cVar2 == '\x02') {
            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;
          }
          else if (cVar2 == '\x04') {
            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;
          }
          if (uVar11 == 0) goto LAB_0001ccec;
LAB_0001cd4c:
          if (puVar15 == (uint *)puVar14[10]) {
            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);
            puVar14[10] = uVar7;
            if (uVar7 == 0) goto LAB_0001ce04;
            iVar16 = (*pcVar17)(uVar7,param_3);
            if (iVar16 != 0) goto LAB_0001ce18;
            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;
            iVar8 = 0;
          }
          if ((uVar11 & 1) == 0) {
            if ((uVar11 & 2) != 0) {
              uVar7 = param_4 & 1;
              goto joined_r0x0001ce48;
            }
LAB_0001cd78:
            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&
               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {
              iVar16 = *(int *)(param_3 + 4);
              goto LAB_0001ccec;
            }
          }
          else {
            uVar7 = uVar11 & 2;
            if ((param_4 & 1) != 0) {
joined_r0x0001ce48:
              if (uVar7 == 0) goto LAB_0001cd78;
            }
          }
          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {
            puVar14[2] = puVar14[2] - 1;
            (*pcVar6)(puVar14 + 2,puVar14 + 3);
          }
          iVar16 = *(int *)(param_3 + 4);
          iVar13 = iVar13 + 1;
          iVar8 = iVar8 + 1;
        } while (iVar13 < iVar16);
      }
LAB_0001cde8:
      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);
      if (iVar16 == 0) {
        return puVar14;
      }
LAB_0001ce04:
      FUN_0001aabc(puVar14);
    }
    else {
      (*(code *)PTR_free_0003d354)(puVar14);
    }
  }
LAB_0001ce18:
  *param_1 = 0xc;
  return (uint *)0x0;
}


lui gp,0x3
addiu gp,gp,-0x79cc
addu gp,gp,t9
addiu sp,sp,-0x58
lw t8,0x4(a2)
sw gp,0x10(sp)
sw ra,0x54(sp)
sw s8,0x50(sp)
sw s7,0x4c(sp)
sw s6,0x48(sp)
sw s5,0x44(sp)
sw s4,0x40(sp)
sw s3,0x3c(sp)
sw s2,0x38(sp)
sw s1,0x34(sp)
beq t8,zero,0x0001ce9c
_sw s0,0x30(sp)
blez t8,0x0001cb44
_addu s8,a3,t8
lw v0,0x8(a2)
sll t0,t8,0x2
addu t0,t0,v0
lw v1,0x0(v0)
addiu v0,v0,0x4
bne t0,v0,0x0001cb34
_addu s8,s8,v1
lw v0,0x44(a1)
lw t0,0x20(a1)
and v1,s8,v0
sll v0,v1,0x1
addu v0,v0,v1
sll v0,v0,0x2
addu v0,t0,v0
lw t7,0x0(v0)
blez t7,0x0001cc1c
_or v1,zero,zero
b 0x0001cb80
_lw v0,0x8(v0)
addiu v1,v1,0x1
beq v1,t7,0x0001cc1c
_addiu v0,v0,0x4
lw s0,0x0(v0)
lw t3,0x0(s0)
bne t3,s8,0x0001cb74
_nop
lw t3,0x34(s0)
srl t3,t3,0x1c
bne t3,a3,0x0001cb74
_nop
lw t0,0x28(s0)
beq t0,zero,0x0001cb74
_nop
lw t3,0x4(t0)
bne t8,t3,0x0001cb74
_addiu t3,t3,-0x1
b 0x0001cbe0
_nop
lw t5,0x8(t0)
lw t4,0x8(a2)
addu t5,t5,t6
addu t4,t4,t6
lw t5,0x0(t5)
lw t4,0x0(t4)
bne t5,t4,0x0001cb74
_addiu t3,t3,-0x1
bgez t3,0x0001cbc0
_sll t6,t3,0x2
lw ra,0x54(sp)
or v0,s0,zero
lw s8,0x50(sp)
lw s7,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,0x58
lw t9,-0x7ebc(gp)
or s5,a1,zero
sw a0,0x2c(sp)
li a1,0x1
li a0,0x38
or s1,a3,zero
jalr t9
_or s6,a2,zero
lw gp,0x10(sp)
beq v0,zero,0x0001ce14
_or s0,v0,zero
lw s3,-0x7ed8(gp)
addiu s2,v0,0x4
or a1,s6,zero
or a0,s2,zero
addiu t9,s3,-0x37f0
bal 0x0001c810
_sw t9,0x28(sp)
lw gp,0x10(sp)
bne v0,zero,0x0001ced8
_or t3,v0,zero
lbu v0,0x34(s0)
lw a2,0x4(s6)
sw s2,0x28(s0)
ins v0,s1,0x4,0x4
blez a2,0x0001cde4
_sb v0,0x34(s0)
lw s4,-0x7ed8(gp)
addiu v0,s0,0x8
or s3,zero,zero
sw v0,0x1c(sp)
addiu s7,s0,0xc
addiu v0,s4,-0x4d3c
sw v0,0x20(sp)
andi v0,s1,0x4
b 0x0001ccfc
_sw v0,0x24(sp)
lw t4,0x34(s0)
ext a0,a0,0xb,0x1
lbu v0,0x34(s0)
li t6,0x2
ext t4,t4,0x1a,0x1
or a0,t4,a0
ins v0,a0,0x2,0x1
beq t5,t6,0x0001ce30
_sb v0,0x34(s0)
li a0,0x4
bne t5,a0,0x0001cce4
_ins v0,a1,0x1,0x1
sb v0,0x34(s0)
bne s4,zero,0x0001cd4c
_nop
addiu s3,s3,0x1
slt v0,s3,a2
beq v0,zero,0x0001cde8
_lw t9,-0x7ed8(gp)
lw a0,0x8(s6)
sll v0,s3,0x2
lw v1,0x0(s5)
li a1,0x1
addu v0,a0,v0
lw a0,0x0(v0)
sll a0,a0,0x3
addu v1,v1,a0
lw a0,0x4(v1)
lbu t5,0x4(v1)
bne t5,a1,0x0001ccb0
_ext s4,a0,0xe,0xa
beq s4,zero,0x0001ccec
_ext a0,a0,0xb,0x1
lw v0,0x34(s0)
lbu a1,0x34(s0)
ext v0,v0,0x1a,0x1
or a0,v0,a0
ins a1,a0,0x2,0x1
sb a1,0x34(s0)
lw v0,0x28(s0)
beq s2,v0,0x0001ce58
_lw t9,-0x7e18(gp)
andi v0,s4,0x1
beq v0,zero,0x0001ce3c
_andi v0,s4,0x2
andi v0,s1,0x1
beq v0,zero,0x0001cd9c
_andi v0,s4,0x2
bne v0,zero,0x0001cd9c
_andi v0,s4,0x10
beq v0,zero,0x0001cd8c
_andi v1,s4,0x40
andi v0,s1,0x2
beq v0,zero,0x0001cd9c
_nop
beq v1,zero,0x0001ce28
_lw v0,0x24(sp)
bne v0,zero,0x0001ce28
_nop
subu a2,s3,t3
bltz a2,0x0001cdd0
_nop
lw v0,0x8(s0)
slt v1,a2,v0
beq v1,zero,0x0001cdd0
_addiu v0,v0,-0x1
lw a0,0x1c(sp)
lw t9,0x20(sp)
or a1,s7,zero
jalr t9
_sw v0,0x8(s0)
lw gp,0x10(sp)
lw a2,0x4(s6)
addiu s3,s3,0x1
slt v0,s3,a2
bne v0,zero,0x0001ccfc
_addiu t3,t3,0x1
lw t9,-0x7ed8(gp)
or a2,s8,zero
or a1,s0,zero
addiu t9,t9,-0x6c2c
bal 0x000193d4
_or a0,s5,zero
beq v0,zero,0x0001cbe8
_lw gp,0x10(sp)
lw t9,-0x7ed8(gp)
addiu t9,t9,-0x5544
bal 0x0001aabc
_or a0,s0,zero
lw v1,0x2c(sp)
li v0,0xc
or s0,zero,zero
b 0x0001cbe8
_sw v0,0x0(v1)
b 0x0001ccec
_lw a2,0x4(s6)
ins v0,a1,0x3,0x1
b 0x0001cce4
_sb v0,0x34(s0)
beq v0,zero,0x0001cd78
_andi v0,s4,0x10
andi v0,s1,0x1
beq v0,zero,0x0001cd78
_andi v0,s4,0x10
b 0x0001cda0
_subu a2,s3,t3
jalr t9
_li a0,0xc
lw gp,0x10(sp)
beq v0,zero,0x0001ce04
_sw v0,0x28(s0)
lw t9,0x28(sp)
or a1,s6,zero
jalr t9
_or a0,v0,zero
lw gp,0x10(sp)
bne v0,zero,0x0001ce14
_or t3,v0,zero
lbu v0,0x34(s0)
li a0,0x1
ins v0,a0,0x0,0x1
b 0x0001cd58
_sb v0,0x34(s0)
lw ra,0x54(sp)
or s0,zero,zero
lw s8,0x50(sp)
or v0,s0,zero
lw s7,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)
sw zero,0x0(a0)
jr ra
_addiu sp,sp,0x58
lw t9,-0x7dbc(gp)
jalr t9
_or a0,s0,zero
b 0x0001ce18
_lw v1,0x2c(sp)
(translation_unit "uint * FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)\n\n{\n  byte bVar1;\n  char cVar2;\n  byte bVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  code *pcVar6;\n  uint uVar7;\n  int iVar8;\n  int iVar9;\n  int *piVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uint *puVar14;\n  uint *puVar15;\n  int iVar16;\n  code *pcVar17;\n  uint uVar18;\n  \n  iVar16 = *(int *)(param_3 + 4);\n  if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }\n  uVar18 = param_4 + iVar16;\n  if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }\n  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);\n  iVar13 = *piVar4;\n  iVar8 = 0;\n  if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }\n  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }\nLAB_0001ce18:\n  *param_1 = 0xc;\n  return (uint *)0x0;\n}\n\n" (function_definition "uint * FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)\n\n{\n  byte bVar1;\n  char cVar2;\n  byte bVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  code *pcVar6;\n  uint uVar7;\n  int iVar8;\n  int iVar9;\n  int *piVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uint *puVar14;\n  uint *puVar15;\n  int iVar16;\n  code *pcVar17;\n  uint uVar18;\n  \n  iVar16 = *(int *)(param_3 + 4);\n  if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }\n  uVar18 = param_4 + iVar16;\n  if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }\n  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);\n  iVar13 = *piVar4;\n  iVar8 = 0;\n  if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }\n  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }\nLAB_0001ce18:\n  *param_1 = 0xc;\n  return (uint *)0x0;\n}" type_identifier (pointer_declarator "* FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)" * (function_declarator "FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)" identifier (parameter_list "(undefined4 *param_1,int *param_2,int param_3,uint param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "uint param_4" type_identifier identifier) )))) (compound_statement "{\n  byte bVar1;\n  char cVar2;\n  byte bVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  code *pcVar6;\n  uint uVar7;\n  int iVar8;\n  int iVar9;\n  int *piVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uint *puVar14;\n  uint *puVar15;\n  int iVar16;\n  code *pcVar17;\n  uint uVar18;\n  \n  iVar16 = *(int *)(param_3 + 4);\n  if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }\n  uVar18 = param_4 + iVar16;\n  if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }\n  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);\n  iVar13 = *piVar4;\n  iVar8 = 0;\n  if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }\n  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }\nLAB_0001ce18:\n  *param_1 = 0xc;\n  return (uint *)0x0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "code *pcVar6;" type_identifier (pointer_declarator "*pcVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "int *piVar10;" primitive_type (pointer_declarator "*piVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "code *pcVar17;" type_identifier (pointer_declarator "*pcVar17" * identifier) ;) (declaration "uint uVar18;" type_identifier identifier ;) (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }" if (parenthesized_expression "(iVar16 == 0)" ( (binary_expression "iVar16 == 0" identifier == number_literal) )) (compound_statement "{\n    *param_1 = 0;\n    return (uint *)0x0;\n  }" { (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar18 = param_4 + iVar16;" (assignment_expression "uVar18 = param_4 + iVar16" identifier = (binary_expression "param_4 + iVar16" identifier + identifier)) ;) (if_statement "if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }" if (parenthesized_expression "(0 < iVar16)" ( (binary_expression "0 < iVar16" number_literal < identifier) )) (compound_statement "{\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }" { (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" identifier = (pointer_expression "*(int **)(param_3 + 8)" * (cast_expression "(int **)(param_3 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) ;) (expression_statement "piVar10 = piVar4 + iVar16;" (assignment_expression "piVar10 = piVar4 + iVar16" identifier = (binary_expression "piVar4 + iVar16" identifier + identifier)) ;) (do_statement "do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);" do (compound_statement "{\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    }" { (expression_statement "iVar8 = *piVar4;" (assignment_expression "iVar8 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;) (expression_statement "uVar18 = uVar18 + iVar8;" (assignment_expression "uVar18 = uVar18 + iVar8" identifier = (binary_expression "uVar18 + iVar8" identifier + identifier)) ;) }) while (parenthesized_expression "(piVar10 != piVar4)" ( (binary_expression "piVar10 != piVar4" identifier != identifier) )) ;) })) (expression_statement "piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);" (assignment_expression "piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" identifier = (cast_expression "(int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" ( (binary_expression "param_2[8] + (uVar18 & param_2[0x11]) * 0xc" (subscript_expression "param_2[8]" identifier [ number_literal ]) + (binary_expression "(uVar18 & param_2[0x11]) * 0xc" (parenthesized_expression "(uVar18 & param_2[0x11])" ( (binary_expression "uVar18 & param_2[0x11]" identifier & (subscript_expression "param_2[0x11]" identifier [ number_literal ])) )) * number_literal)) )))) ;) (expression_statement "iVar13 = *piVar4;" (assignment_expression "iVar13 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }" if (parenthesized_expression "(0 < iVar13)" ( (binary_expression "0 < iVar13" number_literal < identifier) )) (compound_statement "{\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }" { (expression_statement "puVar5 = (undefined4 *)piVar4[2];" (assignment_expression "puVar5 = (undefined4 *)piVar4[2]" identifier = (cast_expression "(undefined4 *)piVar4[2]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar4[2]" identifier [ number_literal ]))) ;) (do_statement "do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);" do (compound_statement "{\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "puVar14 = (uint *)*puVar5;" (assignment_expression "puVar14 = (uint *)*puVar5" identifier = (cast_expression "(uint *)*puVar5" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) ;) (if_statement "if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }" if (parenthesized_expression "((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))" ( (binary_expression "(((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12)" (parenthesized_expression "(((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0))" ( (binary_expression "((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)" (parenthesized_expression "((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4))" ( (binary_expression "(*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)" (parenthesized_expression "(*puVar14 == uVar18)" ( (binary_expression "*puVar14 == uVar18" (pointer_expression "*puVar14" * identifier) == identifier) )) && (parenthesized_expression "(puVar14[0xd] >> 0x1c == param_4)" ( (binary_expression "puVar14[0xd] >> 0x1c == param_4" (binary_expression "puVar14[0xd] >> 0x1c" (subscript_expression "puVar14[0xd]" identifier [ number_literal ]) >> number_literal) == identifier) ))) )) && (parenthesized_expression "(uVar11 = puVar14[10], uVar11 != 0)" ( (comma_expression "uVar11 = puVar14[10], uVar11 != 0" (assignment_expression "uVar11 = puVar14[10]" identifier = (subscript_expression "puVar14[10]" identifier [ number_literal ])) , (binary_expression "uVar11 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "(iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12)" ( (comma_expression "iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12" (assignment_expression "iVar12 = *(int *)(uVar11 + 4)" identifier = (pointer_expression "*(int *)(uVar11 + 4)" * (cast_expression "(int *)(uVar11 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar11 + 4)" ( (binary_expression "uVar11 + 4" identifier + number_literal) ))))) , (binary_expression "iVar16 == iVar12" identifier == identifier)) ))) )) (compound_statement "{\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }" { (do_statement "do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));" do (compound_statement "{\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        }" { (expression_statement "iVar12 = iVar12 + -1;" (assignment_expression "iVar12 = iVar12 + -1" identifier = (binary_expression "iVar12 + -1" identifier + number_literal)) ;) (if_statement "if (iVar12 < 0) {\n            return puVar14;\n          }" if (parenthesized_expression "(iVar12 < 0)" ( (binary_expression "iVar12 < 0" identifier < number_literal) )) (compound_statement "{\n            return puVar14;\n          }" { (return_statement "return puVar14;" return identifier ;) })) }) while (parenthesized_expression "(*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4))" ( (binary_expression "*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" (pointer_expression "*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4)" * (cast_expression "(int *)(*(int *)(uVar11 + 8) + iVar12 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(uVar11 + 8) + iVar12 * 4)" ( (binary_expression "*(int *)(uVar11 + 8) + iVar12 * 4" (pointer_expression "*(int *)(uVar11 + 8)" * (cast_expression "(int *)(uVar11 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar11 + 8)" ( (binary_expression "uVar11 + 8" identifier + number_literal) )))) + (binary_expression "iVar12 * 4" identifier * number_literal)) )))) == (pointer_expression "*(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" * (cast_expression "(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 8) + iVar12 * 4)" ( (binary_expression "*(int *)(param_3 + 8) + iVar12 * 4" (pointer_expression "*(int *)(param_3 + 8)" * (cast_expression "(int *)(param_3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) )))) + (binary_expression "iVar12 * 4" identifier * number_literal)) ))))) )) ;) })) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar8 != iVar13)" ( (binary_expression "iVar8 != iVar13" identifier != identifier) )) ;) })) (expression_statement "puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);" (assignment_expression "puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1)" identifier = (cast_expression "(uint *)(*(code *)PTR_calloc_0003d254)(0x38,1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_calloc_0003d254)(0x38,1)" (parenthesized_expression "(*(code *)PTR_calloc_0003d254)" ( (pointer_expression "*(code *)PTR_calloc_0003d254" * (cast_expression "(code *)PTR_calloc_0003d254" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x38,1)" ( number_literal , number_literal ))))) ;) (if_statement "if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }" if (parenthesized_expression "(puVar14 != (uint *)0x0)" ( (binary_expression "puVar14 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }" { (expression_statement "puVar15 = puVar14 + 1;" (assignment_expression "puVar15 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);" (assignment_expression "pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0)" identifier = (cast_expression "(code *)(PTR_LAB_0003d238 + -0x37f0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0003d238 + -0x37f0)" ( (binary_expression "PTR_LAB_0003d238 + -0x37f0" identifier + number_literal) )))) ;) (expression_statement "iVar16 = FUN_0001c810(puVar15,param_3);" (assignment_expression "iVar16 = FUN_0001c810(puVar15,param_3)" identifier = (call_expression "FUN_0001c810(puVar15,param_3)" identifier (argument_list "(puVar15,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" if (parenthesized_expression "(iVar16 == 0)" ( (binary_expression "iVar16 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }" { (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (expression_statement "puVar14[10] = (uint)puVar15;" (assignment_expression "puVar14[10] = (uint)puVar15" (subscript_expression "puVar14[10]" identifier [ number_literal ]) = (cast_expression "(uint)puVar15" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);" (assignment_expression "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4)" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "*(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4)" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xf" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) & number_literal) | (call_expression "(byte)((param_4 & 0xf) << 4)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((param_4 & 0xf) << 4)" ( (binary_expression "(param_4 & 0xf) << 4" (parenthesized_expression "(param_4 & 0xf)" ( (binary_expression "param_4 & 0xf" identifier & number_literal) )) << number_literal) ))))) ;) (if_statement "if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }" if (parenthesized_expression "(0 < iVar16)" ( (binary_expression "0 < iVar16" number_literal < identifier) )) (compound_statement "{\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }" { (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);" (assignment_expression "pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c)" identifier = (cast_expression "(code *)(PTR_LAB_0003d238 + -0x4d3c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0003d238 + -0x4d3c)" ( (binary_expression "PTR_LAB_0003d238 + -0x4d3c" identifier + number_literal) )))) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);" do (compound_statement "{\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        }" { (while_statement "while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }" { (expression_statement "iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;" (assignment_expression "iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" identifier = (binary_expression "*param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" (pointer_expression "*param_2" * identifier) + (binary_expression "*(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" (pointer_expression "*(int *)(*(int *)(param_3 + 8) + iVar13 * 4)" * (cast_expression "(int *)(*(int *)(param_3 + 8) + iVar13 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 8) + iVar13 * 4)" ( (binary_expression "*(int *)(param_3 + 8) + iVar13 * 4" (pointer_expression "*(int *)(param_3 + 8)" * (cast_expression "(int *)(param_3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) )))) + (binary_expression "iVar13 * 4" identifier * number_literal)) )))) * number_literal))) ;) (expression_statement "iVar9 = *(int *)(iVar12 + 4);" (assignment_expression "iVar9 = *(int *)(iVar12 + 4)" identifier = (pointer_expression "*(int *)(iVar12 + 4)" * (cast_expression "(int *)(iVar12 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + 4)" ( (binary_expression "iVar12 + 4" identifier + number_literal) ))))) ;) (expression_statement "cVar2 = *(char *)(iVar12 + 4);" (assignment_expression "cVar2 = *(char *)(iVar12 + 4)" identifier = (pointer_expression "*(char *)(iVar12 + 4)" * (cast_expression "(char *)(iVar12 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + 4)" ( (binary_expression "iVar12 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar11 = (uint)(iVar9 << 8) >> 0x16;" (assignment_expression "uVar11 = (uint)(iVar9 << 8) >> 0x16" identifier = (binary_expression "(uint)(iVar9 << 8) >> 0x16" (call_expression "(uint)(iVar9 << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar9 << 8)" ( (binary_expression "iVar9 << 8" identifier << number_literal) ))) >> number_literal)) ;) (if_statement "if (cVar2 != '\x01') break;" if (parenthesized_expression "(cVar2 != '\x01')" ( (binary_expression "cVar2 != '\x01'" identifier != (char_literal "'\x01'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (if_statement "if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }" if (parenthesized_expression "(uVar11 != 0)" ( (binary_expression "uVar11 != 0" identifier != number_literal) )) (compound_statement "{\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }" { (expression_statement "*(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);" (assignment_expression "*(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfb" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) & number_literal) | (call_expression "(byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f)" ( (binary_expression "(puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f" (parenthesized_expression "(puVar14[0xd] << 5 | iVar9 << 0x14)" ( (binary_expression "puVar14[0xd] << 5 | iVar9 << 0x14" (binary_expression "puVar14[0xd] << 5" (subscript_expression "puVar14[0xd]" identifier [ number_literal ]) << number_literal) | (binary_expression "iVar9 << 0x14" identifier << number_literal)) )) >> number_literal) )) << number_literal) ))))) ;) (goto_statement "goto LAB_0001cd4c;" goto statement_identifier ;) })) (labeled_statement "LAB_0001ccec:\n            iVar13 = iVar13 + 1;" statement_identifier : (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;)) (if_statement "if (iVar16 <= iVar13) goto LAB_0001cde8;" if (parenthesized_expression "(iVar16 <= iVar13)" ( (binary_expression "iVar16 <= iVar13" identifier <= identifier) )) (goto_statement "goto LAB_0001cde8;" goto statement_identifier ;)) })) (expression_statement "bVar1 = *(byte *)(puVar14 + 0xd);" (assignment_expression "bVar1 = *(byte *)(puVar14 + 0xd)" identifier = (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) ))))) ;) (expression_statement "bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);" (assignment_expression "bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" identifier = (call_expression "(byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f)" ( (binary_expression "(puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f" (parenthesized_expression "(puVar14[0xd] << 5 | iVar9 << 0x14)" ( (binary_expression "puVar14[0xd] << 5 | iVar9 << 0x14" (binary_expression "puVar14[0xd] << 5" (subscript_expression "puVar14[0xd]" identifier [ number_literal ]) << number_literal) | (binary_expression "iVar9 << 0x14" identifier << number_literal)) )) >> number_literal) )) << number_literal) )))) ;) (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar1 & 0xfb | bVar3" (binary_expression "bVar1 & 0xfb" identifier & number_literal) | identifier)) ;) (if_statement "if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" if (parenthesized_expression "(cVar2 == '\x02')" ( (binary_expression "cVar2 == '\x02'" identifier == (char_literal "'\x02'" ' escape_sequence ')) )) (compound_statement "{\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }" { (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar1 & 0xf3 | bVar3 | 8" (binary_expression "bVar1 & 0xf3 | bVar3" (binary_expression "bVar1 & 0xf3" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" else (if_statement "if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" if (parenthesized_expression "(cVar2 == '\x04')" ( (binary_expression "cVar2 == '\x04'" identifier == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" { (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar1 & 0xf9 | bVar3 | 2" (binary_expression "bVar1 & 0xf9 | bVar3" (binary_expression "bVar1 & 0xf9" identifier & number_literal) | identifier) | number_literal)) ;) })))) (if_statement "if (uVar11 == 0) goto LAB_0001ccec;" if (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001ccec;" goto statement_identifier ;)) (labeled_statement "LAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" statement_identifier : (if_statement "if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" if (parenthesized_expression "(puVar15 == (uint *)puVar14[10])" ( (binary_expression "puVar15 == (uint *)puVar14[10]" identifier == (cast_expression "(uint *)puVar14[10]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar14[10]" identifier [ number_literal ]))) )) (compound_statement "{\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" { (expression_statement "uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);" (assignment_expression "uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc)" identifier = (call_expression "(*(code *)PTR_malloc_0003d2f8)(0xc)" (parenthesized_expression "(*(code *)PTR_malloc_0003d2f8)" ( (pointer_expression "*(code *)PTR_malloc_0003d2f8" * (cast_expression "(code *)PTR_malloc_0003d2f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0xc)" ( number_literal )))) ;) (expression_statement "puVar14[10] = uVar7;" (assignment_expression "puVar14[10] = uVar7" (subscript_expression "puVar14[10]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar7 == 0) goto LAB_0001ce04;" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001ce04;" goto statement_identifier ;)) (expression_statement "iVar16 = (*pcVar17)(uVar7,param_3);" (assignment_expression "iVar16 = (*pcVar17)(uVar7,param_3)" identifier = (call_expression "(*pcVar17)(uVar7,param_3)" (parenthesized_expression "(*pcVar17)" ( (pointer_expression "*pcVar17" * identifier) )) (argument_list "(uVar7,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar16 != 0) goto LAB_0001ce18;" if (parenthesized_expression "(iVar16 != 0)" ( (binary_expression "iVar16 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0001ce18;" goto statement_identifier ;)) (expression_statement "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;" (assignment_expression "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfe | 1" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfe" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) & number_literal) | number_literal)) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) }))) (if_statement "if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" if (parenthesized_expression "((uVar11 & 1) == 0)" ( (binary_expression "(uVar11 & 1) == 0" (parenthesized_expression "(uVar11 & 1)" ( (binary_expression "uVar11 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }" { (if_statement "if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }" if (parenthesized_expression "((uVar11 & 2) != 0)" ( (binary_expression "(uVar11 & 2) != 0" (parenthesized_expression "(uVar11 & 2)" ( (binary_expression "uVar11 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }" { (expression_statement "uVar7 = param_4 & 1;" (assignment_expression "uVar7 = param_4 & 1" identifier = (binary_expression "param_4 & 1" identifier & number_literal)) ;) (goto_statement "goto joined_r0x0001ce48;" goto statement_identifier ;) })) (labeled_statement "LAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" statement_identifier : (if_statement "if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" if (parenthesized_expression "((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0))))" ( (binary_expression "(((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))" (parenthesized_expression "(((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0))" ( (binary_expression "((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)" (parenthesized_expression "((uVar11 & 0x10) == 0)" ( (binary_expression "(uVar11 & 0x10) == 0" (parenthesized_expression "(uVar11 & 0x10)" ( (binary_expression "uVar11 & 0x10" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_4 & 2) != 0)" ( (binary_expression "(param_4 & 2) != 0" (parenthesized_expression "(param_4 & 2)" ( (binary_expression "param_4 & 2" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))" ( (parenthesized_expression "((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0))" ( (binary_expression "(uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)" (binary_expression "(uVar11 & 0x40) == 0" (parenthesized_expression "(uVar11 & 0x40)" ( (binary_expression "uVar11 & 0x40" identifier & number_literal) )) == number_literal) || (parenthesized_expression "((param_4 & 4) != 0)" ( (binary_expression "(param_4 & 4) != 0" (parenthesized_expression "(param_4 & 4)" ( (binary_expression "param_4 & 4" identifier & number_literal) )) != number_literal) ))) )) ))) )) (compound_statement "{\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" { (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (goto_statement "goto LAB_0001ccec;" goto statement_identifier ;) }))) }) (else_clause "else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" else (compound_statement "{\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" { (expression_statement "uVar7 = uVar11 & 2;" (assignment_expression "uVar7 = uVar11 & 2" identifier = (binary_expression "uVar11 & 2" identifier & number_literal)) ;) (if_statement "if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }" if (parenthesized_expression "((param_4 & 1) != 0)" ( (binary_expression "(param_4 & 1) != 0" (parenthesized_expression "(param_4 & 1)" ( (binary_expression "param_4 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }" { (labeled_statement "joined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;" statement_identifier : (if_statement "if (uVar7 == 0) goto LAB_0001cd78;" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001cd78;" goto statement_identifier ;))) })) }))) (if_statement "if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }" if (parenthesized_expression "((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2]))" ( (binary_expression "(-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])" (parenthesized_expression "(-1 < iVar13 - iVar8)" ( (binary_expression "-1 < iVar13 - iVar8" number_literal < (binary_expression "iVar13 - iVar8" identifier - identifier)) )) && (parenthesized_expression "(iVar13 - iVar8 < (int)puVar14[2])" ( (binary_expression "iVar13 - iVar8 < (int)puVar14[2]" (binary_expression "iVar13 - iVar8" identifier - identifier) < (cast_expression "(int)puVar14[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "puVar14[2]" identifier [ number_literal ]))) ))) )) (compound_statement "{\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }" { (expression_statement "puVar14[2] = puVar14[2] - 1;" (assignment_expression "puVar14[2] = puVar14[2] - 1" (subscript_expression "puVar14[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] - 1" (subscript_expression "puVar14[2]" identifier [ number_literal ]) - number_literal)) ;) (expression_statement "(*pcVar6)(puVar14 + 2,puVar14 + 3);" (call_expression "(*pcVar6)(puVar14 + 2,puVar14 + 3)" (parenthesized_expression "(*pcVar6)" ( (pointer_expression "*pcVar6" * identifier) )) (argument_list "(puVar14 + 2,puVar14 + 3)" ( (binary_expression "puVar14 + 2" identifier + number_literal) , (binary_expression "puVar14 + 3" identifier + number_literal) ))) ;) })) (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar13 < iVar16)" ( (binary_expression "iVar13 < iVar16" identifier < identifier) )) ;) })) (labeled_statement "LAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);" statement_identifier : (expression_statement "iVar16 = FUN_000193d4(param_2,puVar14,uVar18);" (assignment_expression "iVar16 = FUN_000193d4(param_2,puVar14,uVar18)" identifier = (call_expression "FUN_000193d4(param_2,puVar14,uVar18)" identifier (argument_list "(param_2,puVar14,uVar18)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (iVar16 == 0) {\n        return puVar14;\n      }" if (parenthesized_expression "(iVar16 == 0)" ( (binary_expression "iVar16 == 0" identifier == number_literal) )) (compound_statement "{\n        return puVar14;\n      }" { (return_statement "return puVar14;" return identifier ;) })) (labeled_statement "LAB_0001ce04:\n      FUN_0001aabc(puVar14);" statement_identifier : (expression_statement "FUN_0001aabc(puVar14);" (call_expression "FUN_0001aabc(puVar14)" identifier (argument_list "(puVar14)" ( identifier ))) ;)) }) (else_clause "else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" else (compound_statement "{\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" { (expression_statement "(*(code *)PTR_free_0003d354)(puVar14);" (call_expression "(*(code *)PTR_free_0003d354)(puVar14)" (parenthesized_expression "(*(code *)PTR_free_0003d354)" ( (pointer_expression "*(code *)PTR_free_0003d354" * (cast_expression "(code *)PTR_free_0003d354" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar14)" ( identifier ))) ;) }))) })) (labeled_statement "LAB_0001ce18:\n  *param_1 = 0xc;" statement_identifier : (expression_statement "*param_1 = 0xc;" (assignment_expression "*param_1 = 0xc" (pointer_expression "*param_1" * identifier) = number_literal) ;)) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "re_dfastate_t *\nre_acquire_state_context(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes,uint context)\n\n{\n  uint uVar1;\n  byte bVar2;\n  char cVar3;\n  byte bVar4;\n  int *piVar5;\n  re_dfastate_t **pprVar6;\n  reg_errcode_t rVar7;\n  code *pcVar8;\n  uint uVar9;\n  re_node_set *prVar10;\n  int iVar11;\n  int *piVar12;\n  re_node_set *prVar13;\n  int iVar14;\n  int iVar15;\n  re_dfastate_t *prVar16;\n  int iVar17;\n  code *pcVar18;\n  uint hash;\n  \n  iVar17 = nodes->nelem;\n  if (iVar17 == 0) {\n    *err = _REG_NOERROR;\n    return (re_dfastate_t *)0x0;\n  }\n  hash = context + iVar17;\n  if (0 < iVar17) {\n    piVar5 = nodes->elems;\n    piVar12 = piVar5 + iVar17;\n    do {\n      iVar11 = *piVar5;\n      piVar5 = piVar5 + 1;\n      hash = hash + iVar11;\n    } while (piVar12 != piVar5);\n  }\n  iVar15 = dfa->state_table[hash & dfa->state_hash_mask].num;\n  iVar11 = 0;\n  if (0 < iVar15) {\n    pprVar6 = dfa->state_table[hash & dfa->state_hash_mask].array;\n    do {\n      prVar16 = *pprVar6;\n      if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }\n      iVar11 = iVar11 + 1;\n      pprVar6 = pprVar6 + 1;\n    } while (iVar11 != iVar15);\n  }\n  prVar16 = (re_dfastate_t *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (prVar16 != (re_dfastate_t *)0x0) {\n    prVar13 = &prVar16->nodes;\n    pcVar18 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    rVar7 = re_node_set_init_copy(prVar13,nodes);\n    if (rVar7 == _REG_NOERROR) {\n      iVar17 = nodes->nelem;\n      prVar16->entrance_nodes = prVar13;\n      prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);\n      if (0 < iVar17) {\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }\nLAB_0001cde8:\n      rVar7 = register_state(dfa,prVar16,hash);\n      if (rVar7 == _REG_NOERROR) {\n        return prVar16;\n      }\nLAB_0001ce04:\n      free_state(prVar16);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(prVar16);\n    }\n  }\nLAB_0001ce18:\n  *err = _REG_ESPACE;\n  return (re_dfastate_t *)0x0;\n}\n\n" (function_definition "re_dfastate_t *\nre_acquire_state_context(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes,uint context)\n\n{\n  uint uVar1;\n  byte bVar2;\n  char cVar3;\n  byte bVar4;\n  int *piVar5;\n  re_dfastate_t **pprVar6;\n  reg_errcode_t rVar7;\n  code *pcVar8;\n  uint uVar9;\n  re_node_set *prVar10;\n  int iVar11;\n  int *piVar12;\n  re_node_set *prVar13;\n  int iVar14;\n  int iVar15;\n  re_dfastate_t *prVar16;\n  int iVar17;\n  code *pcVar18;\n  uint hash;\n  \n  iVar17 = nodes->nelem;\n  if (iVar17 == 0) {\n    *err = _REG_NOERROR;\n    return (re_dfastate_t *)0x0;\n  }\n  hash = context + iVar17;\n  if (0 < iVar17) {\n    piVar5 = nodes->elems;\n    piVar12 = piVar5 + iVar17;\n    do {\n      iVar11 = *piVar5;\n      piVar5 = piVar5 + 1;\n      hash = hash + iVar11;\n    } while (piVar12 != piVar5);\n  }\n  iVar15 = dfa->state_table[hash & dfa->state_hash_mask].num;\n  iVar11 = 0;\n  if (0 < iVar15) {\n    pprVar6 = dfa->state_table[hash & dfa->state_hash_mask].array;\n    do {\n      prVar16 = *pprVar6;\n      if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }\n      iVar11 = iVar11 + 1;\n      pprVar6 = pprVar6 + 1;\n    } while (iVar11 != iVar15);\n  }\n  prVar16 = (re_dfastate_t *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (prVar16 != (re_dfastate_t *)0x0) {\n    prVar13 = &prVar16->nodes;\n    pcVar18 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    rVar7 = re_node_set_init_copy(prVar13,nodes);\n    if (rVar7 == _REG_NOERROR) {\n      iVar17 = nodes->nelem;\n      prVar16->entrance_nodes = prVar13;\n      prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);\n      if (0 < iVar17) {\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }\nLAB_0001cde8:\n      rVar7 = register_state(dfa,prVar16,hash);\n      if (rVar7 == _REG_NOERROR) {\n        return prVar16;\n      }\nLAB_0001ce04:\n      free_state(prVar16);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(prVar16);\n    }\n  }\nLAB_0001ce18:\n  *err = _REG_ESPACE;\n  return (re_dfastate_t *)0x0;\n}" type_identifier (pointer_declarator "*\nre_acquire_state_context(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes,uint context)" * (function_declarator "re_acquire_state_context(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes,uint context)" identifier (parameter_list "(reg_errcode_t *err,re_dfa_t *dfa,re_node_set *nodes,uint context)" ( (parameter_declaration "reg_errcode_t *err" type_identifier (pointer_declarator "*err" * identifier)) , (parameter_declaration "re_dfa_t *dfa" type_identifier (pointer_declarator "*dfa" * identifier)) , (parameter_declaration "re_node_set *nodes" type_identifier (pointer_declarator "*nodes" * identifier)) , (parameter_declaration "uint context" type_identifier identifier) )))) (compound_statement "{\n  uint uVar1;\n  byte bVar2;\n  char cVar3;\n  byte bVar4;\n  int *piVar5;\n  re_dfastate_t **pprVar6;\n  reg_errcode_t rVar7;\n  code *pcVar8;\n  uint uVar9;\n  re_node_set *prVar10;\n  int iVar11;\n  int *piVar12;\n  re_node_set *prVar13;\n  int iVar14;\n  int iVar15;\n  re_dfastate_t *prVar16;\n  int iVar17;\n  code *pcVar18;\n  uint hash;\n  \n  iVar17 = nodes->nelem;\n  if (iVar17 == 0) {\n    *err = _REG_NOERROR;\n    return (re_dfastate_t *)0x0;\n  }\n  hash = context + iVar17;\n  if (0 < iVar17) {\n    piVar5 = nodes->elems;\n    piVar12 = piVar5 + iVar17;\n    do {\n      iVar11 = *piVar5;\n      piVar5 = piVar5 + 1;\n      hash = hash + iVar11;\n    } while (piVar12 != piVar5);\n  }\n  iVar15 = dfa->state_table[hash & dfa->state_hash_mask].num;\n  iVar11 = 0;\n  if (0 < iVar15) {\n    pprVar6 = dfa->state_table[hash & dfa->state_hash_mask].array;\n    do {\n      prVar16 = *pprVar6;\n      if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }\n      iVar11 = iVar11 + 1;\n      pprVar6 = pprVar6 + 1;\n    } while (iVar11 != iVar15);\n  }\n  prVar16 = (re_dfastate_t *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (prVar16 != (re_dfastate_t *)0x0) {\n    prVar13 = &prVar16->nodes;\n    pcVar18 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    rVar7 = re_node_set_init_copy(prVar13,nodes);\n    if (rVar7 == _REG_NOERROR) {\n      iVar17 = nodes->nelem;\n      prVar16->entrance_nodes = prVar13;\n      prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);\n      if (0 < iVar17) {\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }\nLAB_0001cde8:\n      rVar7 = register_state(dfa,prVar16,hash);\n      if (rVar7 == _REG_NOERROR) {\n        return prVar16;\n      }\nLAB_0001ce04:\n      free_state(prVar16);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(prVar16);\n    }\n  }\nLAB_0001ce18:\n  *err = _REG_ESPACE;\n  return (re_dfastate_t *)0x0;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "re_dfastate_t **pprVar6;" type_identifier (pointer_declarator "**pprVar6" * (pointer_declarator "*pprVar6" * identifier)) ;) (declaration "reg_errcode_t rVar7;" type_identifier identifier ;) (declaration "code *pcVar8;" type_identifier (pointer_declarator "*pcVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "re_node_set *prVar10;" type_identifier (pointer_declarator "*prVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int *piVar12;" primitive_type (pointer_declarator "*piVar12" * identifier) ;) (declaration "re_node_set *prVar13;" type_identifier (pointer_declarator "*prVar13" * identifier) ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "re_dfastate_t *prVar16;" type_identifier (pointer_declarator "*prVar16" * identifier) ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "code *pcVar18;" type_identifier (pointer_declarator "*pcVar18" * identifier) ;) (declaration "uint hash;" type_identifier identifier ;) (expression_statement "iVar17 = nodes->nelem;" (assignment_expression "iVar17 = nodes->nelem" identifier = (field_expression "nodes->nelem" identifier -> field_identifier)) ;) (if_statement "if (iVar17 == 0) {\n    *err = _REG_NOERROR;\n    return (re_dfastate_t *)0x0;\n  }" if (parenthesized_expression "(iVar17 == 0)" ( (binary_expression "iVar17 == 0" identifier == number_literal) )) (compound_statement "{\n    *err = _REG_NOERROR;\n    return (re_dfastate_t *)0x0;\n  }" { (expression_statement "*err = _REG_NOERROR;" (assignment_expression "*err = _REG_NOERROR" (pointer_expression "*err" * identifier) = identifier) ;) (return_statement "return (re_dfastate_t *)0x0;" return (cast_expression "(re_dfastate_t *)0x0" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "hash = context + iVar17;" (assignment_expression "hash = context + iVar17" identifier = (binary_expression "context + iVar17" identifier + identifier)) ;) (if_statement "if (0 < iVar17) {\n    piVar5 = nodes->elems;\n    piVar12 = piVar5 + iVar17;\n    do {\n      iVar11 = *piVar5;\n      piVar5 = piVar5 + 1;\n      hash = hash + iVar11;\n    } while (piVar12 != piVar5);\n  }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n    piVar5 = nodes->elems;\n    piVar12 = piVar5 + iVar17;\n    do {\n      iVar11 = *piVar5;\n      piVar5 = piVar5 + 1;\n      hash = hash + iVar11;\n    } while (piVar12 != piVar5);\n  }" { (expression_statement "piVar5 = nodes->elems;" (assignment_expression "piVar5 = nodes->elems" identifier = (field_expression "nodes->elems" identifier -> field_identifier)) ;) (expression_statement "piVar12 = piVar5 + iVar17;" (assignment_expression "piVar12 = piVar5 + iVar17" identifier = (binary_expression "piVar5 + iVar17" identifier + identifier)) ;) (do_statement "do {\n      iVar11 = *piVar5;\n      piVar5 = piVar5 + 1;\n      hash = hash + iVar11;\n    } while (piVar12 != piVar5);" do (compound_statement "{\n      iVar11 = *piVar5;\n      piVar5 = piVar5 + 1;\n      hash = hash + iVar11;\n    }" { (expression_statement "iVar11 = *piVar5;" (assignment_expression "iVar11 = *piVar5" identifier = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "piVar5 = piVar5 + 1;" (assignment_expression "piVar5 = piVar5 + 1" identifier = (binary_expression "piVar5 + 1" identifier + number_literal)) ;) (expression_statement "hash = hash + iVar11;" (assignment_expression "hash = hash + iVar11" identifier = (binary_expression "hash + iVar11" identifier + identifier)) ;) }) while (parenthesized_expression "(piVar12 != piVar5)" ( (binary_expression "piVar12 != piVar5" identifier != identifier) )) ;) })) (expression_statement "iVar15 = dfa->state_table[hash & dfa->state_hash_mask].num;" (assignment_expression "iVar15 = dfa->state_table[hash & dfa->state_hash_mask].num" identifier = (field_expression "dfa->state_table[hash & dfa->state_hash_mask].num" (subscript_expression "dfa->state_table[hash & dfa->state_hash_mask]" (field_expression "dfa->state_table" identifier -> field_identifier) [ (binary_expression "hash & dfa->state_hash_mask" identifier & (field_expression "dfa->state_hash_mask" identifier -> field_identifier)) ]) . field_identifier)) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar15) {\n    pprVar6 = dfa->state_table[hash & dfa->state_hash_mask].array;\n    do {\n      prVar16 = *pprVar6;\n      if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }\n      iVar11 = iVar11 + 1;\n      pprVar6 = pprVar6 + 1;\n    } while (iVar11 != iVar15);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    pprVar6 = dfa->state_table[hash & dfa->state_hash_mask].array;\n    do {\n      prVar16 = *pprVar6;\n      if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }\n      iVar11 = iVar11 + 1;\n      pprVar6 = pprVar6 + 1;\n    } while (iVar11 != iVar15);\n  }" { (expression_statement "pprVar6 = dfa->state_table[hash & dfa->state_hash_mask].array;" (assignment_expression "pprVar6 = dfa->state_table[hash & dfa->state_hash_mask].array" identifier = (field_expression "dfa->state_table[hash & dfa->state_hash_mask].array" (subscript_expression "dfa->state_table[hash & dfa->state_hash_mask]" (field_expression "dfa->state_table" identifier -> field_identifier) [ (binary_expression "hash & dfa->state_hash_mask" identifier & (field_expression "dfa->state_hash_mask" identifier -> field_identifier)) ]) . field_identifier)) ;) (do_statement "do {\n      prVar16 = *pprVar6;\n      if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }\n      iVar11 = iVar11 + 1;\n      pprVar6 = pprVar6 + 1;\n    } while (iVar11 != iVar15);" do (compound_statement "{\n      prVar16 = *pprVar6;\n      if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }\n      iVar11 = iVar11 + 1;\n      pprVar6 = pprVar6 + 1;\n    }" { (expression_statement "prVar16 = *pprVar6;" (assignment_expression "prVar16 = *pprVar6" identifier = (pointer_expression "*pprVar6" * identifier)) ;) (if_statement "if ((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)) {\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }" if (parenthesized_expression "((((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14))" ( (binary_expression "(((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)) &&\n         (iVar14 = prVar13->nelem, iVar17 == iVar14)" (parenthesized_expression "(((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0))" ( (binary_expression "((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)) &&\n          (prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)" (parenthesized_expression "((prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context))" ( (binary_expression "(prVar16->hash == hash) && (*(uint *)&prVar16->field_0x34 >> 0x1c == context)" (parenthesized_expression "(prVar16->hash == hash)" ( (binary_expression "prVar16->hash == hash" (field_expression "prVar16->hash" identifier -> field_identifier) == identifier) )) && (parenthesized_expression "(*(uint *)&prVar16->field_0x34 >> 0x1c == context)" ( (binary_expression "*(uint *)&prVar16->field_0x34 >> 0x1c == context" (binary_expression "*(uint *)&prVar16->field_0x34 >> 0x1c" (pointer_expression "*(uint *)&prVar16->field_0x34" * (cast_expression "(uint *)&prVar16->field_0x34" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar16->field_0x34" & (field_expression "prVar16->field_0x34" identifier -> field_identifier)))) >> number_literal) == identifier) ))) )) && (parenthesized_expression "(prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0)" ( (comma_expression "prVar13 = prVar16->entrance_nodes, prVar13 != (re_node_set *)0x0" (assignment_expression "prVar13 = prVar16->entrance_nodes" identifier = (field_expression "prVar16->entrance_nodes" identifier -> field_identifier)) , (binary_expression "prVar13 != (re_node_set *)0x0" identifier != (cast_expression "(re_node_set *)0x0" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) && (parenthesized_expression "(iVar14 = prVar13->nelem, iVar17 == iVar14)" ( (comma_expression "iVar14 = prVar13->nelem, iVar17 == iVar14" (assignment_expression "iVar14 = prVar13->nelem" identifier = (field_expression "prVar13->nelem" identifier -> field_identifier)) , (binary_expression "iVar17 == iVar14" identifier == identifier)) ))) )) (compound_statement "{\n        do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);\n      }" { (do_statement "do {\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        } while (prVar13->elems[iVar14] == nodes->elems[iVar14]);" do (compound_statement "{\n          iVar14 = iVar14 + -1;\n          if (iVar14 < 0) {\n            return prVar16;\n          }\n        }" { (expression_statement "iVar14 = iVar14 + -1;" (assignment_expression "iVar14 = iVar14 + -1" identifier = (binary_expression "iVar14 + -1" identifier + number_literal)) ;) (if_statement "if (iVar14 < 0) {\n            return prVar16;\n          }" if (parenthesized_expression "(iVar14 < 0)" ( (binary_expression "iVar14 < 0" identifier < number_literal) )) (compound_statement "{\n            return prVar16;\n          }" { (return_statement "return prVar16;" return identifier ;) })) }) while (parenthesized_expression "(prVar13->elems[iVar14] == nodes->elems[iVar14])" ( (binary_expression "prVar13->elems[iVar14] == nodes->elems[iVar14]" (subscript_expression "prVar13->elems[iVar14]" (field_expression "prVar13->elems" identifier -> field_identifier) [ identifier ]) == (subscript_expression "nodes->elems[iVar14]" (field_expression "nodes->elems" identifier -> field_identifier) [ identifier ])) )) ;) })) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "pprVar6 = pprVar6 + 1;" (assignment_expression "pprVar6 = pprVar6 + 1" identifier = (binary_expression "pprVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar11 != iVar15)" ( (binary_expression "iVar11 != iVar15" identifier != identifier) )) ;) })) (expression_statement "prVar16 = (re_dfastate_t *)(*(code *)PTR_calloc_0003d254)(0x38,1);" (assignment_expression "prVar16 = (re_dfastate_t *)(*(code *)PTR_calloc_0003d254)(0x38,1)" identifier = (cast_expression "(re_dfastate_t *)(*(code *)PTR_calloc_0003d254)(0x38,1)" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_calloc_0003d254)(0x38,1)" (parenthesized_expression "(*(code *)PTR_calloc_0003d254)" ( (pointer_expression "*(code *)PTR_calloc_0003d254" * (cast_expression "(code *)PTR_calloc_0003d254" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x38,1)" ( number_literal , number_literal ))))) ;) (if_statement "if (prVar16 != (re_dfastate_t *)0x0) {\n    prVar13 = &prVar16->nodes;\n    pcVar18 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    rVar7 = re_node_set_init_copy(prVar13,nodes);\n    if (rVar7 == _REG_NOERROR) {\n      iVar17 = nodes->nelem;\n      prVar16->entrance_nodes = prVar13;\n      prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);\n      if (0 < iVar17) {\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }\nLAB_0001cde8:\n      rVar7 = register_state(dfa,prVar16,hash);\n      if (rVar7 == _REG_NOERROR) {\n        return prVar16;\n      }\nLAB_0001ce04:\n      free_state(prVar16);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(prVar16);\n    }\n  }" if (parenthesized_expression "(prVar16 != (re_dfastate_t *)0x0)" ( (binary_expression "prVar16 != (re_dfastate_t *)0x0" identifier != (cast_expression "(re_dfastate_t *)0x0" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    prVar13 = &prVar16->nodes;\n    pcVar18 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    rVar7 = re_node_set_init_copy(prVar13,nodes);\n    if (rVar7 == _REG_NOERROR) {\n      iVar17 = nodes->nelem;\n      prVar16->entrance_nodes = prVar13;\n      prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);\n      if (0 < iVar17) {\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }\nLAB_0001cde8:\n      rVar7 = register_state(dfa,prVar16,hash);\n      if (rVar7 == _REG_NOERROR) {\n        return prVar16;\n      }\nLAB_0001ce04:\n      free_state(prVar16);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(prVar16);\n    }\n  }" { (expression_statement "prVar13 = &prVar16->nodes;" (assignment_expression "prVar13 = &prVar16->nodes" identifier = (pointer_expression "&prVar16->nodes" & (field_expression "prVar16->nodes" identifier -> field_identifier))) ;) (expression_statement "pcVar18 = (code *)(PTR_LAB_0003d238 + -0x37f0);" (assignment_expression "pcVar18 = (code *)(PTR_LAB_0003d238 + -0x37f0)" identifier = (cast_expression "(code *)(PTR_LAB_0003d238 + -0x37f0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0003d238 + -0x37f0)" ( (binary_expression "PTR_LAB_0003d238 + -0x37f0" identifier + number_literal) )))) ;) (expression_statement "rVar7 = re_node_set_init_copy(prVar13,nodes);" (assignment_expression "rVar7 = re_node_set_init_copy(prVar13,nodes)" identifier = (call_expression "re_node_set_init_copy(prVar13,nodes)" identifier (argument_list "(prVar13,nodes)" ( identifier , identifier )))) ;) (if_statement "if (rVar7 == _REG_NOERROR) {\n      iVar17 = nodes->nelem;\n      prVar16->entrance_nodes = prVar13;\n      prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);\n      if (0 < iVar17) {\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }\nLAB_0001cde8:\n      rVar7 = register_state(dfa,prVar16,hash);\n      if (rVar7 == _REG_NOERROR) {\n        return prVar16;\n      }\nLAB_0001ce04:\n      free_state(prVar16);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(prVar16);\n    }" if (parenthesized_expression "(rVar7 == _REG_NOERROR)" ( (binary_expression "rVar7 == _REG_NOERROR" identifier == identifier) )) (compound_statement "{\n      iVar17 = nodes->nelem;\n      prVar16->entrance_nodes = prVar13;\n      prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);\n      if (0 < iVar17) {\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }\nLAB_0001cde8:\n      rVar7 = register_state(dfa,prVar16,hash);\n      if (rVar7 == _REG_NOERROR) {\n        return prVar16;\n      }\nLAB_0001ce04:\n      free_state(prVar16);\n    }" { (expression_statement "iVar17 = nodes->nelem;" (assignment_expression "iVar17 = nodes->nelem" identifier = (field_expression "nodes->nelem" identifier -> field_identifier)) ;) (expression_statement "prVar16->entrance_nodes = prVar13;" (assignment_expression "prVar16->entrance_nodes = prVar13" (field_expression "prVar16->entrance_nodes" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4);" (assignment_expression "prVar16->field_0x34 = prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4)" (field_expression "prVar16->field_0x34" identifier -> field_identifier) = (binary_expression "prVar16->field_0x34 & 0xf | (byte)((context & 0xf) << 4)" (binary_expression "prVar16->field_0x34 & 0xf" (field_expression "prVar16->field_0x34" identifier -> field_identifier) & number_literal) | (call_expression "(byte)((context & 0xf) << 4)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((context & 0xf) << 4)" ( (binary_expression "(context & 0xf) << 4" (parenthesized_expression "(context & 0xf)" ( (binary_expression "context & 0xf" identifier & number_literal) )) << number_literal) ))))) ;) (if_statement "if (0 < iVar17) {\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n        iVar15 = 0;\n        pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar11 = 0;\n        do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);\n      }" { (expression_statement "iVar15 = 0;" (assignment_expression "iVar15 = 0" identifier = number_literal) ;) (expression_statement "pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c);" (assignment_expression "pcVar8 = (code *)(PTR_LAB_0003d238 + -0x4d3c)" identifier = (cast_expression "(code *)(PTR_LAB_0003d238 + -0x4d3c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0003d238 + -0x4d3c)" ( (binary_expression "PTR_LAB_0003d238 + -0x4d3c" identifier + number_literal) )))) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        } while (iVar15 < iVar17);" do (compound_statement "{\n          while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }\n          bVar2 = prVar16->field_0x34;\n          bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);\n          prVar16->field_0x34 = bVar2 & 0xfb | bVar4;\n          if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }\n          if (uVar1 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }\n          if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }\n          iVar17 = nodes->nelem;\n          iVar15 = iVar15 + 1;\n          iVar11 = iVar11 + 1;\n        }" { (while_statement "while( true ) {\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;\n            uVar1 = (uint)(iVar14 << 8) >> 0x16;\n            if (cVar3 != '\x01') break;\n            if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar15 = iVar15 + 1;\n            if (iVar17 <= iVar15) goto LAB_0001cde8;\n          }" { (expression_statement "iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4;" (assignment_expression "iVar14 = *(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4" identifier = (pointer_expression "*(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4" * (cast_expression "(int *)&dfa->nodes[nodes->elems[iVar15]].field_0x4" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&dfa->nodes[nodes->elems[iVar15]].field_0x4" & (field_expression "dfa->nodes[nodes->elems[iVar15]].field_0x4" (subscript_expression "dfa->nodes[nodes->elems[iVar15]]" (field_expression "dfa->nodes" identifier -> field_identifier) [ (subscript_expression "nodes->elems[iVar15]" (field_expression "nodes->elems" identifier -> field_identifier) [ identifier ]) ]) . field_identifier))))) ;) (expression_statement "cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4;" (assignment_expression "cVar3 = dfa->nodes[nodes->elems[iVar15]].field_0x4" identifier = (field_expression "dfa->nodes[nodes->elems[iVar15]].field_0x4" (subscript_expression "dfa->nodes[nodes->elems[iVar15]]" (field_expression "dfa->nodes" identifier -> field_identifier) [ (subscript_expression "nodes->elems[iVar15]" (field_expression "nodes->elems" identifier -> field_identifier) [ identifier ]) ]) . field_identifier)) ;) (expression_statement "uVar1 = (uint)(iVar14 << 8) >> 0x16;" (assignment_expression "uVar1 = (uint)(iVar14 << 8) >> 0x16" identifier = (binary_expression "(uint)(iVar14 << 8) >> 0x16" (call_expression "(uint)(iVar14 << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar14 << 8)" ( (binary_expression "iVar14 << 8" identifier << number_literal) ))) >> number_literal)) ;) (if_statement "if (cVar3 != '\x01') break;" if (parenthesized_expression "(cVar3 != '\x01')" ( (binary_expression "cVar3 != '\x01'" identifier != (char_literal "'\x01'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (if_statement "if (uVar1 != 0) {\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }" if (parenthesized_expression "(uVar1 != 0)" ( (binary_expression "uVar1 != 0" identifier != number_literal) )) (compound_statement "{\n              prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;\n              goto LAB_0001cd4c;\n            }" { (expression_statement "prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)\n              ;" (assignment_expression "prVar16->field_0x34 =\n                   prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)" (field_expression "prVar16->field_0x34" identifier -> field_identifier) = (binary_expression "prVar16->field_0x34 & 0xfb |\n                   (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)" (binary_expression "prVar16->field_0x34 & 0xfb" (field_expression "prVar16->field_0x34" identifier -> field_identifier) & number_literal) | (call_expression "(byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f)" ( (binary_expression "(uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f" (call_expression "(uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14)" ( (binary_expression "*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14" (binary_expression "*(int *)&prVar16->field_0x34 << 5" (pointer_expression "*(int *)&prVar16->field_0x34" * (cast_expression "(int *)&prVar16->field_0x34" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar16->field_0x34" & (field_expression "prVar16->field_0x34" identifier -> field_identifier)))) << number_literal) | (binary_expression "iVar14 << 0x14" identifier << number_literal)) ))) >> number_literal) )) << number_literal) ))))) ;) (goto_statement "goto LAB_0001cd4c;" goto statement_identifier ;) })) (labeled_statement "LAB_0001ccec:\n            iVar15 = iVar15 + 1;" statement_identifier : (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;)) (if_statement "if (iVar17 <= iVar15) goto LAB_0001cde8;" if (parenthesized_expression "(iVar17 <= iVar15)" ( (binary_expression "iVar17 <= iVar15" identifier <= identifier) )) (goto_statement "goto LAB_0001cde8;" goto statement_identifier ;)) })) (expression_statement "bVar2 = prVar16->field_0x34;" (assignment_expression "bVar2 = prVar16->field_0x34" identifier = (field_expression "prVar16->field_0x34" identifier -> field_identifier)) ;) (expression_statement "bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2);" (assignment_expression "bVar4 = (byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)" identifier = (call_expression "(byte)(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f)" ( (binary_expression "(uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14) >> 0x1f" (call_expression "(uint)(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14)" ( (binary_expression "*(int *)&prVar16->field_0x34 << 5 | iVar14 << 0x14" (binary_expression "*(int *)&prVar16->field_0x34 << 5" (pointer_expression "*(int *)&prVar16->field_0x34" * (cast_expression "(int *)&prVar16->field_0x34" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar16->field_0x34" & (field_expression "prVar16->field_0x34" identifier -> field_identifier)))) << number_literal) | (binary_expression "iVar14 << 0x14" identifier << number_literal)) ))) >> number_literal) )) << number_literal) )))) ;) (expression_statement "prVar16->field_0x34 = bVar2 & 0xfb | bVar4;" (assignment_expression "prVar16->field_0x34 = bVar2 & 0xfb | bVar4" (field_expression "prVar16->field_0x34" identifier -> field_identifier) = (binary_expression "bVar2 & 0xfb | bVar4" (binary_expression "bVar2 & 0xfb" identifier & number_literal) | identifier)) ;) (if_statement "if (cVar3 == '\x02') {\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }\n          else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }" if (parenthesized_expression "(cVar3 == '\x02')" ( (binary_expression "cVar3 == '\x02'" identifier == (char_literal "'\x02'" ' escape_sequence ')) )) (compound_statement "{\n            prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;\n          }" { (expression_statement "prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8;" (assignment_expression "prVar16->field_0x34 = bVar2 & 0xf3 | bVar4 | 8" (field_expression "prVar16->field_0x34" identifier -> field_identifier) = (binary_expression "bVar2 & 0xf3 | bVar4 | 8" (binary_expression "bVar2 & 0xf3 | bVar4" (binary_expression "bVar2 & 0xf3" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }" else (if_statement "if (cVar3 == '\x04') {\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }" if (parenthesized_expression "(cVar3 == '\x04')" ( (binary_expression "cVar3 == '\x04'" identifier == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n            prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;\n          }" { (expression_statement "prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2;" (assignment_expression "prVar16->field_0x34 = bVar2 & 0xf9 | bVar4 | 2" (field_expression "prVar16->field_0x34" identifier -> field_identifier) = (binary_expression "bVar2 & 0xf9 | bVar4 | 2" (binary_expression "bVar2 & 0xf9 | bVar4" (binary_expression "bVar2 & 0xf9" identifier & number_literal) | identifier) | number_literal)) ;) })))) (if_statement "if (uVar1 == 0) goto LAB_0001ccec;" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001ccec;" goto statement_identifier ;)) (labeled_statement "LAB_0001cd4c:\n          if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }" statement_identifier : (if_statement "if (prVar13 == prVar16->entrance_nodes) {\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }" if (parenthesized_expression "(prVar13 == prVar16->entrance_nodes)" ( (binary_expression "prVar13 == prVar16->entrance_nodes" identifier == (field_expression "prVar16->entrance_nodes" identifier -> field_identifier)) )) (compound_statement "{\n            prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);\n            prVar16->entrance_nodes = prVar10;\n            if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;\n            iVar17 = (*pcVar18)(prVar10,nodes);\n            if (iVar17 != 0) goto LAB_0001ce18;\n            prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;\n            iVar11 = 0;\n          }" { (expression_statement "prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc);" (assignment_expression "prVar10 = (re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc)" identifier = (cast_expression "(re_node_set *)(*(code *)PTR_malloc_0003d2f8)(0xc)" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_malloc_0003d2f8)(0xc)" (parenthesized_expression "(*(code *)PTR_malloc_0003d2f8)" ( (pointer_expression "*(code *)PTR_malloc_0003d2f8" * (cast_expression "(code *)PTR_malloc_0003d2f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0xc)" ( number_literal ))))) ;) (expression_statement "prVar16->entrance_nodes = prVar10;" (assignment_expression "prVar16->entrance_nodes = prVar10" (field_expression "prVar16->entrance_nodes" identifier -> field_identifier) = identifier) ;) (if_statement "if (prVar10 == (re_node_set *)0x0) goto LAB_0001ce04;" if (parenthesized_expression "(prVar10 == (re_node_set *)0x0)" ( (binary_expression "prVar10 == (re_node_set *)0x0" identifier == (cast_expression "(re_node_set *)0x0" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0001ce04;" goto statement_identifier ;)) (expression_statement "iVar17 = (*pcVar18)(prVar10,nodes);" (assignment_expression "iVar17 = (*pcVar18)(prVar10,nodes)" identifier = (call_expression "(*pcVar18)(prVar10,nodes)" (parenthesized_expression "(*pcVar18)" ( (pointer_expression "*pcVar18" * identifier) )) (argument_list "(prVar10,nodes)" ( identifier , identifier )))) ;) (if_statement "if (iVar17 != 0) goto LAB_0001ce18;" if (parenthesized_expression "(iVar17 != 0)" ( (binary_expression "iVar17 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0001ce18;" goto statement_identifier ;)) (expression_statement "prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1;" (assignment_expression "prVar16->field_0x34 = prVar16->field_0x34 & 0xfe | 1" (field_expression "prVar16->field_0x34" identifier -> field_identifier) = (binary_expression "prVar16->field_0x34 & 0xfe | 1" (binary_expression "prVar16->field_0x34 & 0xfe" (field_expression "prVar16->field_0x34" identifier -> field_identifier) & number_literal) | number_literal)) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) }))) (if_statement "if ((uVar1 & 1) == 0) {\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }" if (parenthesized_expression "((uVar1 & 1) == 0)" ( (binary_expression "(uVar1 & 1) == 0" (parenthesized_expression "(uVar1 & 1)" ( (binary_expression "uVar1 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n            if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }\n          }" { (if_statement "if ((uVar1 & 2) != 0) {\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }" if (parenthesized_expression "((uVar1 & 2) != 0)" ( (binary_expression "(uVar1 & 2) != 0" (parenthesized_expression "(uVar1 & 2)" ( (binary_expression "uVar1 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n              uVar9 = context & 1;\n              goto joined_r0x0001ce48;\n            }" { (expression_statement "uVar9 = context & 1;" (assignment_expression "uVar9 = context & 1" identifier = (binary_expression "context & 1" identifier & number_literal)) ;) (goto_statement "goto joined_r0x0001ce48;" goto statement_identifier ;) })) (labeled_statement "LAB_0001cd78:\n            if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }" statement_identifier : (if_statement "if ((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))) {\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }" if (parenthesized_expression "((((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0))))" ( (binary_expression "(((uVar1 & 0x10) == 0) || ((context & 2) != 0)) &&\n               (((uVar1 & 0x40) == 0 || ((context & 4) != 0)))" (parenthesized_expression "(((uVar1 & 0x10) == 0) || ((context & 2) != 0))" ( (binary_expression "((uVar1 & 0x10) == 0) || ((context & 2) != 0)" (parenthesized_expression "((uVar1 & 0x10) == 0)" ( (binary_expression "(uVar1 & 0x10) == 0" (parenthesized_expression "(uVar1 & 0x10)" ( (binary_expression "uVar1 & 0x10" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "((context & 2) != 0)" ( (binary_expression "(context & 2) != 0" (parenthesized_expression "(context & 2)" ( (binary_expression "context & 2" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(((uVar1 & 0x40) == 0 || ((context & 4) != 0)))" ( (parenthesized_expression "((uVar1 & 0x40) == 0 || ((context & 4) != 0))" ( (binary_expression "(uVar1 & 0x40) == 0 || ((context & 4) != 0)" (binary_expression "(uVar1 & 0x40) == 0" (parenthesized_expression "(uVar1 & 0x40)" ( (binary_expression "uVar1 & 0x40" identifier & number_literal) )) == number_literal) || (parenthesized_expression "((context & 4) != 0)" ( (binary_expression "(context & 4) != 0" (parenthesized_expression "(context & 4)" ( (binary_expression "context & 4" identifier & number_literal) )) != number_literal) ))) )) ))) )) (compound_statement "{\n              iVar17 = nodes->nelem;\n              goto LAB_0001ccec;\n            }" { (expression_statement "iVar17 = nodes->nelem;" (assignment_expression "iVar17 = nodes->nelem" identifier = (field_expression "nodes->nelem" identifier -> field_identifier)) ;) (goto_statement "goto LAB_0001ccec;" goto statement_identifier ;) }))) }) (else_clause "else {\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }" else (compound_statement "{\n            uVar9 = uVar1 & 2;\n            if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }\n          }" { (expression_statement "uVar9 = uVar1 & 2;" (assignment_expression "uVar9 = uVar1 & 2" identifier = (binary_expression "uVar1 & 2" identifier & number_literal)) ;) (if_statement "if ((context & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }" if (parenthesized_expression "((context & 1) != 0)" ( (binary_expression "(context & 1) != 0" (parenthesized_expression "(context & 1)" ( (binary_expression "context & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\njoined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;\n            }" { (labeled_statement "joined_r0x0001ce48:\n              if (uVar9 == 0) goto LAB_0001cd78;" statement_identifier : (if_statement "if (uVar9 == 0) goto LAB_0001cd78;" if (parenthesized_expression "(uVar9 == 0)" ( (binary_expression "uVar9 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001cd78;" goto statement_identifier ;))) })) }))) (if_statement "if ((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))\n          {\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }" if (parenthesized_expression "((-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17))" ( (binary_expression "(-1 < iVar15 - iVar11) && (iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17)" (parenthesized_expression "(-1 < iVar15 - iVar11)" ( (binary_expression "-1 < iVar15 - iVar11" number_literal < (binary_expression "iVar15 - iVar11" identifier - identifier)) )) && (parenthesized_expression "(iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17)" ( (comma_expression "iVar17 = (prVar16->nodes).nelem, iVar15 - iVar11 < iVar17" (assignment_expression "iVar17 = (prVar16->nodes).nelem" identifier = (field_expression "(prVar16->nodes).nelem" (parenthesized_expression "(prVar16->nodes)" ( (field_expression "prVar16->nodes" identifier -> field_identifier) )) . field_identifier)) , (binary_expression "iVar15 - iVar11 < iVar17" (binary_expression "iVar15 - iVar11" identifier - identifier) < identifier)) ))) )) (compound_statement "{\n            (prVar16->nodes).nelem = iVar17 + -1;\n            (*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);\n          }" { (expression_statement "(prVar16->nodes).nelem = iVar17 + -1;" (assignment_expression "(prVar16->nodes).nelem = iVar17 + -1" (field_expression "(prVar16->nodes).nelem" (parenthesized_expression "(prVar16->nodes)" ( (field_expression "prVar16->nodes" identifier -> field_identifier) )) . field_identifier) = (binary_expression "iVar17 + -1" identifier + number_literal)) ;) (expression_statement "(*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems);" (call_expression "(*pcVar8)(&(prVar16->nodes).nelem,&(prVar16->nodes).elems)" (parenthesized_expression "(*pcVar8)" ( (pointer_expression "*pcVar8" * identifier) )) (argument_list "(&(prVar16->nodes).nelem,&(prVar16->nodes).elems)" ( (pointer_expression "&(prVar16->nodes).nelem" & (field_expression "(prVar16->nodes).nelem" (parenthesized_expression "(prVar16->nodes)" ( (field_expression "prVar16->nodes" identifier -> field_identifier) )) . field_identifier)) , (pointer_expression "&(prVar16->nodes).elems" & (field_expression "(prVar16->nodes).elems" (parenthesized_expression "(prVar16->nodes)" ( (field_expression "prVar16->nodes" identifier -> field_identifier) )) . field_identifier)) ))) ;) })) (expression_statement "iVar17 = nodes->nelem;" (assignment_expression "iVar17 = nodes->nelem" identifier = (field_expression "nodes->nelem" identifier -> field_identifier)) ;) (expression_statement "iVar15 = iVar15 + 1;" (assignment_expression "iVar15 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 < iVar17)" ( (binary_expression "iVar15 < iVar17" identifier < identifier) )) ;) })) (labeled_statement "LAB_0001cde8:\n      rVar7 = register_state(dfa,prVar16,hash);" statement_identifier : (expression_statement "rVar7 = register_state(dfa,prVar16,hash);" (assignment_expression "rVar7 = register_state(dfa,prVar16,hash)" identifier = (call_expression "register_state(dfa,prVar16,hash)" identifier (argument_list "(dfa,prVar16,hash)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (rVar7 == _REG_NOERROR) {\n        return prVar16;\n      }" if (parenthesized_expression "(rVar7 == _REG_NOERROR)" ( (binary_expression "rVar7 == _REG_NOERROR" identifier == identifier) )) (compound_statement "{\n        return prVar16;\n      }" { (return_statement "return prVar16;" return identifier ;) })) (labeled_statement "LAB_0001ce04:\n      free_state(prVar16);" statement_identifier : (expression_statement "free_state(prVar16);" (call_expression "free_state(prVar16)" identifier (argument_list "(prVar16)" ( identifier ))) ;)) }) (else_clause "else {\n      (*(code *)PTR_free_0003d354)(prVar16);\n    }" else (compound_statement "{\n      (*(code *)PTR_free_0003d354)(prVar16);\n    }" { (expression_statement "(*(code *)PTR_free_0003d354)(prVar16);" (call_expression "(*(code *)PTR_free_0003d354)(prVar16)" (parenthesized_expression "(*(code *)PTR_free_0003d354)" ( (pointer_expression "*(code *)PTR_free_0003d354" * (cast_expression "(code *)PTR_free_0003d354" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(prVar16)" ( identifier ))) ;) }))) })) (labeled_statement "LAB_0001ce18:\n  *err = _REG_ESPACE;" statement_identifier : (expression_statement "*err = _REG_ESPACE;" (assignment_expression "*err = _REG_ESPACE" (pointer_expression "*err" * identifier) = identifier) ;)) (return_statement "return (re_dfastate_t *)0x0;" return (cast_expression "(re_dfastate_t *)0x0" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "uint * FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)\n\n{\n  byte bVar1;\n  char cVar2;\n  byte bVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  code *pcVar6;\n  uint uVar7;\n  int iVar8;\n  int iVar9;\n  int *piVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uint *puVar14;\n  uint *puVar15;\n  int iVar16;\n  code *pcVar17;\n  uint uVar18;\n  \n  iVar16 = *(int *)(param_3 + 4);\n  if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }\n  uVar18 = param_4 + iVar16;\n  if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }\n  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);\n  iVar13 = *piVar4;\n  iVar8 = 0;\n  if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }\n  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }\nLAB_0001ce18:\n  *param_1 = 0xc;\n  return (uint *)0x0;\n}\n\n" (function_definition "uint * FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)\n\n{\n  byte bVar1;\n  char cVar2;\n  byte bVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  code *pcVar6;\n  uint uVar7;\n  int iVar8;\n  int iVar9;\n  int *piVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uint *puVar14;\n  uint *puVar15;\n  int iVar16;\n  code *pcVar17;\n  uint uVar18;\n  \n  iVar16 = *(int *)(param_3 + 4);\n  if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }\n  uVar18 = param_4 + iVar16;\n  if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }\n  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);\n  iVar13 = *piVar4;\n  iVar8 = 0;\n  if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }\n  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }\nLAB_0001ce18:\n  *param_1 = 0xc;\n  return (uint *)0x0;\n}" type_identifier (pointer_declarator "* FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)" * (function_declarator "FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)" identifier (parameter_list "(undefined4 *param_1,int *param_2,int param_3,uint param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "uint param_4" type_identifier identifier) )))) (compound_statement "{\n  byte bVar1;\n  char cVar2;\n  byte bVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  code *pcVar6;\n  uint uVar7;\n  int iVar8;\n  int iVar9;\n  int *piVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uint *puVar14;\n  uint *puVar15;\n  int iVar16;\n  code *pcVar17;\n  uint uVar18;\n  \n  iVar16 = *(int *)(param_3 + 4);\n  if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }\n  uVar18 = param_4 + iVar16;\n  if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }\n  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);\n  iVar13 = *piVar4;\n  iVar8 = 0;\n  if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }\n  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }\nLAB_0001ce18:\n  *param_1 = 0xc;\n  return (uint *)0x0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "code *pcVar6;" type_identifier (pointer_declarator "*pcVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "int *piVar10;" primitive_type (pointer_declarator "*piVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "code *pcVar17;" type_identifier (pointer_declarator "*pcVar17" * identifier) ;) (declaration "uint uVar18;" type_identifier identifier ;) (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (if_statement "if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }" if (parenthesized_expression "(iVar16 == 0)" ( (binary_expression "iVar16 == 0" identifier == number_literal) )) (compound_statement "{\n    *param_1 = 0;\n    return (uint *)0x0;\n  }" { (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "uVar18 = param_4 + iVar16;" (assignment_expression "uVar18 = param_4 + iVar16" identifier = (binary_expression "param_4 + iVar16" identifier + identifier)) ;) (if_statement "if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }" if (parenthesized_expression "(0 < iVar16)" ( (binary_expression "0 < iVar16" number_literal < identifier) )) (compound_statement "{\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }" { (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" identifier = (pointer_expression "*(int **)(param_3 + 8)" * (cast_expression "(int **)(param_3 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) ))))) ;) (expression_statement "piVar10 = piVar4 + iVar16;" (assignment_expression "piVar10 = piVar4 + iVar16" identifier = (binary_expression "piVar4 + iVar16" identifier + identifier)) ;) (do_statement "do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);" do (compound_statement "{\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    }" { (expression_statement "iVar8 = *piVar4;" (assignment_expression "iVar8 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" identifier = (binary_expression "piVar4 + 1" identifier + number_literal)) ;) (expression_statement "uVar18 = uVar18 + iVar8;" (assignment_expression "uVar18 = uVar18 + iVar8" identifier = (binary_expression "uVar18 + iVar8" identifier + identifier)) ;) }) while (parenthesized_expression "(piVar10 != piVar4)" ( (binary_expression "piVar10 != piVar4" identifier != identifier) )) ;) })) (expression_statement "piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);" (assignment_expression "piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" identifier = (cast_expression "(int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" ( (binary_expression "param_2[8] + (uVar18 & param_2[0x11]) * 0xc" (subscript_expression "param_2[8]" identifier [ number_literal ]) + (binary_expression "(uVar18 & param_2[0x11]) * 0xc" (parenthesized_expression "(uVar18 & param_2[0x11])" ( (binary_expression "uVar18 & param_2[0x11]" identifier & (subscript_expression "param_2[0x11]" identifier [ number_literal ])) )) * number_literal)) )))) ;) (expression_statement "iVar13 = *piVar4;" (assignment_expression "iVar13 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }" if (parenthesized_expression "(0 < iVar13)" ( (binary_expression "0 < iVar13" number_literal < identifier) )) (compound_statement "{\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }" { (expression_statement "puVar5 = (undefined4 *)piVar4[2];" (assignment_expression "puVar5 = (undefined4 *)piVar4[2]" identifier = (cast_expression "(undefined4 *)piVar4[2]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar4[2]" identifier [ number_literal ]))) ;) (do_statement "do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);" do (compound_statement "{\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "puVar14 = (uint *)*puVar5;" (assignment_expression "puVar14 = (uint *)*puVar5" identifier = (cast_expression "(uint *)*puVar5" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar5" * identifier))) ;) (if_statement "if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }" if (parenthesized_expression "((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))" ( (binary_expression "(((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12)" (parenthesized_expression "(((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0))" ( (binary_expression "((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)" (parenthesized_expression "((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4))" ( (binary_expression "(*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)" (parenthesized_expression "(*puVar14 == uVar18)" ( (binary_expression "*puVar14 == uVar18" (pointer_expression "*puVar14" * identifier) == identifier) )) && (parenthesized_expression "(puVar14[0xd] >> 0x1c == param_4)" ( (binary_expression "puVar14[0xd] >> 0x1c == param_4" (binary_expression "puVar14[0xd] >> 0x1c" (subscript_expression "puVar14[0xd]" identifier [ number_literal ]) >> number_literal) == identifier) ))) )) && (parenthesized_expression "(uVar11 = puVar14[10], uVar11 != 0)" ( (comma_expression "uVar11 = puVar14[10], uVar11 != 0" (assignment_expression "uVar11 = puVar14[10]" identifier = (subscript_expression "puVar14[10]" identifier [ number_literal ])) , (binary_expression "uVar11 != 0" identifier != number_literal)) ))) )) && (parenthesized_expression "(iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12)" ( (comma_expression "iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12" (assignment_expression "iVar12 = *(int *)(uVar11 + 4)" identifier = (pointer_expression "*(int *)(uVar11 + 4)" * (cast_expression "(int *)(uVar11 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar11 + 4)" ( (binary_expression "uVar11 + 4" identifier + number_literal) ))))) , (binary_expression "iVar16 == iVar12" identifier == identifier)) ))) )) (compound_statement "{\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }" { (do_statement "do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));" do (compound_statement "{\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        }" { (expression_statement "iVar12 = iVar12 + -1;" (assignment_expression "iVar12 = iVar12 + -1" identifier = (binary_expression "iVar12 + -1" identifier + number_literal)) ;) (if_statement "if (iVar12 < 0) {\n            return puVar14;\n          }" if (parenthesized_expression "(iVar12 < 0)" ( (binary_expression "iVar12 < 0" identifier < number_literal) )) (compound_statement "{\n            return puVar14;\n          }" { (return_statement "return puVar14;" return identifier ;) })) }) while (parenthesized_expression "(*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4))" ( (binary_expression "*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" (pointer_expression "*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4)" * (cast_expression "(int *)(*(int *)(uVar11 + 8) + iVar12 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(uVar11 + 8) + iVar12 * 4)" ( (binary_expression "*(int *)(uVar11 + 8) + iVar12 * 4" (pointer_expression "*(int *)(uVar11 + 8)" * (cast_expression "(int *)(uVar11 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar11 + 8)" ( (binary_expression "uVar11 + 8" identifier + number_literal) )))) + (binary_expression "iVar12 * 4" identifier * number_literal)) )))) == (pointer_expression "*(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" * (cast_expression "(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 8) + iVar12 * 4)" ( (binary_expression "*(int *)(param_3 + 8) + iVar12 * 4" (pointer_expression "*(int *)(param_3 + 8)" * (cast_expression "(int *)(param_3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) )))) + (binary_expression "iVar12 * 4" identifier * number_literal)) ))))) )) ;) })) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar8 != iVar13)" ( (binary_expression "iVar8 != iVar13" identifier != identifier) )) ;) })) (expression_statement "puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);" (assignment_expression "puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1)" identifier = (cast_expression "(uint *)(*(code *)PTR_calloc_0003d254)(0x38,1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_calloc_0003d254)(0x38,1)" (parenthesized_expression "(*(code *)PTR_calloc_0003d254)" ( (pointer_expression "*(code *)PTR_calloc_0003d254" * (cast_expression "(code *)PTR_calloc_0003d254" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0x38,1)" ( number_literal , number_literal ))))) ;) (if_statement "if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }" if (parenthesized_expression "(puVar14 != (uint *)0x0)" ( (binary_expression "puVar14 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }" { (expression_statement "puVar15 = puVar14 + 1;" (assignment_expression "puVar15 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);" (assignment_expression "pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0)" identifier = (cast_expression "(code *)(PTR_LAB_0003d238 + -0x37f0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0003d238 + -0x37f0)" ( (binary_expression "PTR_LAB_0003d238 + -0x37f0" identifier + number_literal) )))) ;) (expression_statement "iVar16 = FUN_0001c810(puVar15,param_3);" (assignment_expression "iVar16 = FUN_0001c810(puVar15,param_3)" identifier = (call_expression "FUN_0001c810(puVar15,param_3)" identifier (argument_list "(puVar15,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" if (parenthesized_expression "(iVar16 == 0)" ( (binary_expression "iVar16 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }" { (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (expression_statement "puVar14[10] = (uint)puVar15;" (assignment_expression "puVar14[10] = (uint)puVar15" (subscript_expression "puVar14[10]" identifier [ number_literal ]) = (cast_expression "(uint)puVar15" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);" (assignment_expression "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4)" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "*(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4)" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xf" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) & number_literal) | (call_expression "(byte)((param_4 & 0xf) << 4)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "((param_4 & 0xf) << 4)" ( (binary_expression "(param_4 & 0xf) << 4" (parenthesized_expression "(param_4 & 0xf)" ( (binary_expression "param_4 & 0xf" identifier & number_literal) )) << number_literal) ))))) ;) (if_statement "if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }" if (parenthesized_expression "(0 < iVar16)" ( (binary_expression "0 < iVar16" number_literal < identifier) )) (compound_statement "{\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }" { (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);" (assignment_expression "pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c)" identifier = (cast_expression "(code *)(PTR_LAB_0003d238 + -0x4d3c)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0003d238 + -0x4d3c)" ( (binary_expression "PTR_LAB_0003d238 + -0x4d3c" identifier + number_literal) )))) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);" do (compound_statement "{\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        }" { (while_statement "while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }" { (expression_statement "iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;" (assignment_expression "iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" identifier = (binary_expression "*param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" (pointer_expression "*param_2" * identifier) + (binary_expression "*(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" (pointer_expression "*(int *)(*(int *)(param_3 + 8) + iVar13 * 4)" * (cast_expression "(int *)(*(int *)(param_3 + 8) + iVar13 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_3 + 8) + iVar13 * 4)" ( (binary_expression "*(int *)(param_3 + 8) + iVar13 * 4" (pointer_expression "*(int *)(param_3 + 8)" * (cast_expression "(int *)(param_3 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 8)" ( (binary_expression "param_3 + 8" identifier + number_literal) )))) + (binary_expression "iVar13 * 4" identifier * number_literal)) )))) * number_literal))) ;) (expression_statement "iVar9 = *(int *)(iVar12 + 4);" (assignment_expression "iVar9 = *(int *)(iVar12 + 4)" identifier = (pointer_expression "*(int *)(iVar12 + 4)" * (cast_expression "(int *)(iVar12 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + 4)" ( (binary_expression "iVar12 + 4" identifier + number_literal) ))))) ;) (expression_statement "cVar2 = *(char *)(iVar12 + 4);" (assignment_expression "cVar2 = *(char *)(iVar12 + 4)" identifier = (pointer_expression "*(char *)(iVar12 + 4)" * (cast_expression "(char *)(iVar12 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + 4)" ( (binary_expression "iVar12 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar11 = (uint)(iVar9 << 8) >> 0x16;" (assignment_expression "uVar11 = (uint)(iVar9 << 8) >> 0x16" identifier = (binary_expression "(uint)(iVar9 << 8) >> 0x16" (call_expression "(uint)(iVar9 << 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar9 << 8)" ( (binary_expression "iVar9 << 8" identifier << number_literal) ))) >> number_literal)) ;) (if_statement "if (cVar2 != '\x01') break;" if (parenthesized_expression "(cVar2 != '\x01')" ( (binary_expression "cVar2 != '\x01'" identifier != (char_literal "'\x01'" ' escape_sequence ')) )) (break_statement "break;" break ;)) (if_statement "if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }" if (parenthesized_expression "(uVar11 != 0)" ( (binary_expression "uVar11 != 0" identifier != number_literal) )) (compound_statement "{\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }" { (expression_statement "*(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);" (assignment_expression "*(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfb" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) & number_literal) | (call_expression "(byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f)" ( (binary_expression "(puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f" (parenthesized_expression "(puVar14[0xd] << 5 | iVar9 << 0x14)" ( (binary_expression "puVar14[0xd] << 5 | iVar9 << 0x14" (binary_expression "puVar14[0xd] << 5" (subscript_expression "puVar14[0xd]" identifier [ number_literal ]) << number_literal) | (binary_expression "iVar9 << 0x14" identifier << number_literal)) )) >> number_literal) )) << number_literal) ))))) ;) (goto_statement "goto LAB_0001cd4c;" goto statement_identifier ;) })) (labeled_statement "LAB_0001ccec:\n            iVar13 = iVar13 + 1;" statement_identifier : (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;)) (if_statement "if (iVar16 <= iVar13) goto LAB_0001cde8;" if (parenthesized_expression "(iVar16 <= iVar13)" ( (binary_expression "iVar16 <= iVar13" identifier <= identifier) )) (goto_statement "goto LAB_0001cde8;" goto statement_identifier ;)) })) (expression_statement "bVar1 = *(byte *)(puVar14 + 0xd);" (assignment_expression "bVar1 = *(byte *)(puVar14 + 0xd)" identifier = (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) ))))) ;) (expression_statement "bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);" (assignment_expression "bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" identifier = (call_expression "(byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" ( (binary_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f)" ( (binary_expression "(puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f" (parenthesized_expression "(puVar14[0xd] << 5 | iVar9 << 0x14)" ( (binary_expression "puVar14[0xd] << 5 | iVar9 << 0x14" (binary_expression "puVar14[0xd] << 5" (subscript_expression "puVar14[0xd]" identifier [ number_literal ]) << number_literal) | (binary_expression "iVar9 << 0x14" identifier << number_literal)) )) >> number_literal) )) << number_literal) )))) ;) (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar1 & 0xfb | bVar3" (binary_expression "bVar1 & 0xfb" identifier & number_literal) | identifier)) ;) (if_statement "if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" if (parenthesized_expression "(cVar2 == '\x02')" ( (binary_expression "cVar2 == '\x02'" identifier == (char_literal "'\x02'" ' escape_sequence ')) )) (compound_statement "{\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }" { (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar1 & 0xf3 | bVar3 | 8" (binary_expression "bVar1 & 0xf3 | bVar3" (binary_expression "bVar1 & 0xf3" identifier & number_literal) | identifier) | number_literal)) ;) }) (else_clause "else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" else (if_statement "if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" if (parenthesized_expression "(cVar2 == '\x04')" ( (binary_expression "cVar2 == '\x04'" identifier == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" { (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "bVar1 & 0xf9 | bVar3 | 2" (binary_expression "bVar1 & 0xf9 | bVar3" (binary_expression "bVar1 & 0xf9" identifier & number_literal) | identifier) | number_literal)) ;) })))) (if_statement "if (uVar11 == 0) goto LAB_0001ccec;" if (parenthesized_expression "(uVar11 == 0)" ( (binary_expression "uVar11 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001ccec;" goto statement_identifier ;)) (labeled_statement "LAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" statement_identifier : (if_statement "if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" if (parenthesized_expression "(puVar15 == (uint *)puVar14[10])" ( (binary_expression "puVar15 == (uint *)puVar14[10]" identifier == (cast_expression "(uint *)puVar14[10]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar14[10]" identifier [ number_literal ]))) )) (compound_statement "{\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" { (expression_statement "uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);" (assignment_expression "uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc)" identifier = (call_expression "(*(code *)PTR_malloc_0003d2f8)(0xc)" (parenthesized_expression "(*(code *)PTR_malloc_0003d2f8)" ( (pointer_expression "*(code *)PTR_malloc_0003d2f8" * (cast_expression "(code *)PTR_malloc_0003d2f8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0xc)" ( number_literal )))) ;) (expression_statement "puVar14[10] = uVar7;" (assignment_expression "puVar14[10] = uVar7" (subscript_expression "puVar14[10]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar7 == 0) goto LAB_0001ce04;" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001ce04;" goto statement_identifier ;)) (expression_statement "iVar16 = (*pcVar17)(uVar7,param_3);" (assignment_expression "iVar16 = (*pcVar17)(uVar7,param_3)" identifier = (call_expression "(*pcVar17)(uVar7,param_3)" (parenthesized_expression "(*pcVar17)" ( (pointer_expression "*pcVar17" * identifier) )) (argument_list "(uVar7,param_3)" ( identifier , identifier )))) ;) (if_statement "if (iVar16 != 0) goto LAB_0001ce18;" if (parenthesized_expression "(iVar16 != 0)" ( (binary_expression "iVar16 != 0" identifier != number_literal) )) (goto_statement "goto LAB_0001ce18;" goto statement_identifier ;)) (expression_statement "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;" (assignment_expression "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) = (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfe | 1" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfe" (pointer_expression "*(byte *)(puVar14 + 0xd)" * (cast_expression "(byte *)(puVar14 + 0xd)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar14 + 0xd)" ( (binary_expression "puVar14 + 0xd" identifier + number_literal) )))) & number_literal) | number_literal)) ;) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" identifier = number_literal) ;) }))) (if_statement "if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" if (parenthesized_expression "((uVar11 & 1) == 0)" ( (binary_expression "(uVar11 & 1) == 0" (parenthesized_expression "(uVar11 & 1)" ( (binary_expression "uVar11 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }" { (if_statement "if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }" if (parenthesized_expression "((uVar11 & 2) != 0)" ( (binary_expression "(uVar11 & 2) != 0" (parenthesized_expression "(uVar11 & 2)" ( (binary_expression "uVar11 & 2" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }" { (expression_statement "uVar7 = param_4 & 1;" (assignment_expression "uVar7 = param_4 & 1" identifier = (binary_expression "param_4 & 1" identifier & number_literal)) ;) (goto_statement "goto joined_r0x0001ce48;" goto statement_identifier ;) })) (labeled_statement "LAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" statement_identifier : (if_statement "if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" if (parenthesized_expression "((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0))))" ( (binary_expression "(((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))" (parenthesized_expression "(((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0))" ( (binary_expression "((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)" (parenthesized_expression "((uVar11 & 0x10) == 0)" ( (binary_expression "(uVar11 & 0x10) == 0" (parenthesized_expression "(uVar11 & 0x10)" ( (binary_expression "uVar11 & 0x10" identifier & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_4 & 2) != 0)" ( (binary_expression "(param_4 & 2) != 0" (parenthesized_expression "(param_4 & 2)" ( (binary_expression "param_4 & 2" identifier & number_literal) )) != number_literal) ))) )) && (parenthesized_expression "(((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))" ( (parenthesized_expression "((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0))" ( (binary_expression "(uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)" (binary_expression "(uVar11 & 0x40) == 0" (parenthesized_expression "(uVar11 & 0x40)" ( (binary_expression "uVar11 & 0x40" identifier & number_literal) )) == number_literal) || (parenthesized_expression "((param_4 & 4) != 0)" ( (binary_expression "(param_4 & 4) != 0" (parenthesized_expression "(param_4 & 4)" ( (binary_expression "param_4 & 4" identifier & number_literal) )) != number_literal) ))) )) ))) )) (compound_statement "{\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" { (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (goto_statement "goto LAB_0001ccec;" goto statement_identifier ;) }))) }) (else_clause "else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" else (compound_statement "{\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" { (expression_statement "uVar7 = uVar11 & 2;" (assignment_expression "uVar7 = uVar11 & 2" identifier = (binary_expression "uVar11 & 2" identifier & number_literal)) ;) (if_statement "if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }" if (parenthesized_expression "((param_4 & 1) != 0)" ( (binary_expression "(param_4 & 1) != 0" (parenthesized_expression "(param_4 & 1)" ( (binary_expression "param_4 & 1" identifier & number_literal) )) != number_literal) )) (compound_statement "{\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }" { (labeled_statement "joined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;" statement_identifier : (if_statement "if (uVar7 == 0) goto LAB_0001cd78;" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0001cd78;" goto statement_identifier ;))) })) }))) (if_statement "if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }" if (parenthesized_expression "((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2]))" ( (binary_expression "(-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])" (parenthesized_expression "(-1 < iVar13 - iVar8)" ( (binary_expression "-1 < iVar13 - iVar8" number_literal < (binary_expression "iVar13 - iVar8" identifier - identifier)) )) && (parenthesized_expression "(iVar13 - iVar8 < (int)puVar14[2])" ( (binary_expression "iVar13 - iVar8 < (int)puVar14[2]" (binary_expression "iVar13 - iVar8" identifier - identifier) < (cast_expression "(int)puVar14[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "puVar14[2]" identifier [ number_literal ]))) ))) )) (compound_statement "{\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }" { (expression_statement "puVar14[2] = puVar14[2] - 1;" (assignment_expression "puVar14[2] = puVar14[2] - 1" (subscript_expression "puVar14[2]" identifier [ number_literal ]) = (binary_expression "puVar14[2] - 1" (subscript_expression "puVar14[2]" identifier [ number_literal ]) - number_literal)) ;) (expression_statement "(*pcVar6)(puVar14 + 2,puVar14 + 3);" (call_expression "(*pcVar6)(puVar14 + 2,puVar14 + 3)" (parenthesized_expression "(*pcVar6)" ( (pointer_expression "*pcVar6" * identifier) )) (argument_list "(puVar14 + 2,puVar14 + 3)" ( (binary_expression "puVar14 + 2" identifier + number_literal) , (binary_expression "puVar14 + 3" identifier + number_literal) ))) ;) })) (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" identifier = (pointer_expression "*(int *)(param_3 + 4)" * (cast_expression "(int *)(param_3 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 4)" ( (binary_expression "param_3 + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" identifier = (binary_expression "iVar13 + 1" identifier + number_literal)) ;) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar13 < iVar16)" ( (binary_expression "iVar13 < iVar16" identifier < identifier) )) ;) })) (labeled_statement "LAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);" statement_identifier : (expression_statement "iVar16 = FUN_000193d4(param_2,puVar14,uVar18);" (assignment_expression "iVar16 = FUN_000193d4(param_2,puVar14,uVar18)" identifier = (call_expression "FUN_000193d4(param_2,puVar14,uVar18)" identifier (argument_list "(param_2,puVar14,uVar18)" ( identifier , identifier , identifier )))) ;)) (if_statement "if (iVar16 == 0) {\n        return puVar14;\n      }" if (parenthesized_expression "(iVar16 == 0)" ( (binary_expression "iVar16 == 0" identifier == number_literal) )) (compound_statement "{\n        return puVar14;\n      }" { (return_statement "return puVar14;" return identifier ;) })) (labeled_statement "LAB_0001ce04:\n      FUN_0001aabc(puVar14);" statement_identifier : (expression_statement "FUN_0001aabc(puVar14);" (call_expression "FUN_0001aabc(puVar14)" identifier (argument_list "(puVar14)" ( identifier ))) ;)) }) (else_clause "else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" else (compound_statement "{\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" { (expression_statement "(*(code *)PTR_free_0003d354)(puVar14);" (call_expression "(*(code *)PTR_free_0003d354)(puVar14)" (parenthesized_expression "(*(code *)PTR_free_0003d354)" ( (pointer_expression "*(code *)PTR_free_0003d354" * (cast_expression "(code *)PTR_free_0003d354" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar14)" ( identifier ))) ;) }))) })) (labeled_statement "LAB_0001ce18:\n  *param_1 = 0xc;" statement_identifier : (expression_statement "*param_1 = 0xc;" (assignment_expression "*param_1 = 0xc" (pointer_expression "*param_1" * identifier) = number_literal) ;)) (return_statement "return (uint *)0x0;" return (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (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 IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & (subscript_expression IDENT [ LIT ])) )) * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (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 IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == IDENT) )) && (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) >> LIT) == IDENT) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) , (binary_expression IDENT != LIT)) ))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) , (binary_expression IDENT == IDENT)) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return IDENT ;) })) }) while (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_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 != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( LIT , 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 = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT) ))))) ;) (if_statement if (parenthesized_expression ( (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 IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT << LIT) ))) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) << LIT) | (binary_expression IDENT << LIT)) )) >> LIT) )) << LIT) ))))) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) << LIT) | (binary_expression IDENT << LIT)) )) >> LIT) )) << LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression IDENT & LIT) | IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (binary_expression IDENT & LIT) | IDENT) | LIT)) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (binary_expression IDENT & LIT) | IDENT) | LIT)) ;) })))) (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 IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (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 ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (goto_statement goto statement_identifier ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;))) })) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - IDENT)) )) && (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) - LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) }))) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;)) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "uint * FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)\n\n{\n  byte bVar1;\n  char cVar2;\n  byte bVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  code *pcVar6;\n  uint uVar7;\n  int iVar8;\n  int iVar9;\n  int *piVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uint *puVar14;\n  uint *puVar15;\n  int iVar16;\n  code *pcVar17;\n  uint uVar18;\n  \n  iVar16 = *(int *)(param_3 + 4);\n  if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }\n  uVar18 = param_4 + iVar16;\n  if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }\n  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);\n  iVar13 = *piVar4;\n  iVar8 = 0;\n  if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }\n  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }\nLAB_0001ce18:\n  *param_1 = 0xc;\n  return (uint *)0x0;\n}" (type_identifier "uint") (pointer_declarator "* FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)" (* "*") (function_declarator "FUN_0001cadc(undefined4 *param_1,int *param_2,int param_3,uint param_4)" (identifier "FUN_0001cadc") (parameter_list "(undefined4 *param_1,int *param_2,int param_3,uint param_4)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")")))) (compound_statement "{\n  byte bVar1;\n  char cVar2;\n  byte bVar3;\n  int *piVar4;\n  undefined4 *puVar5;\n  code *pcVar6;\n  uint uVar7;\n  int iVar8;\n  int iVar9;\n  int *piVar10;\n  uint uVar11;\n  int iVar12;\n  int iVar13;\n  uint *puVar14;\n  uint *puVar15;\n  int iVar16;\n  code *pcVar17;\n  uint uVar18;\n  \n  iVar16 = *(int *)(param_3 + 4);\n  if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }\n  uVar18 = param_4 + iVar16;\n  if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }\n  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);\n  iVar13 = *piVar4;\n  iVar8 = 0;\n  if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }\n  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);\n  if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }\nLAB_0001ce18:\n  *param_1 = 0xc;\n  return (uint *)0x0;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "code *pcVar6;" (type_identifier "code") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "int *piVar10;" (primitive_type "int") (pointer_declarator "*piVar10" (* "*") (identifier "piVar10")) (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "int iVar13;" (primitive_type "int") (identifier "iVar13") (; ";")) (declaration "uint *puVar14;" (type_identifier "uint") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "uint *puVar15;" (type_identifier "uint") (pointer_declarator "*puVar15" (* "*") (identifier "puVar15")) (; ";")) (declaration "int iVar16;" (primitive_type "int") (identifier "iVar16") (; ";")) (declaration "code *pcVar17;" (type_identifier "code") (pointer_declarator "*pcVar17" (* "*") (identifier "pcVar17")) (; ";")) (declaration "uint uVar18;" (type_identifier "uint") (identifier "uVar18") (; ";")) (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" (identifier "iVar16") (= "=") (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (iVar16 == 0) {\n    *param_1 = 0;\n    return (uint *)0x0;\n  }" (if "if") (parenthesized_expression "(iVar16 == 0)" (( "(") (binary_expression "iVar16 == 0" (identifier "iVar16") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    *param_1 = 0;\n    return (uint *)0x0;\n  }" ({ "{") (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "0")) (; ";")) (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "uVar18 = param_4 + iVar16;" (assignment_expression "uVar18 = param_4 + iVar16" (identifier "uVar18") (= "=") (binary_expression "param_4 + iVar16" (identifier "param_4") (+ "+") (identifier "iVar16"))) (; ";")) (if_statement "if (0 < iVar16) {\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }" (if "if") (parenthesized_expression "(0 < iVar16)" (( "(") (binary_expression "0 < iVar16" (number_literal "0") (< "<") (identifier "iVar16")) () ")")) (compound_statement "{\n    piVar4 = *(int **)(param_3 + 8);\n    piVar10 = piVar4 + iVar16;\n    do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);\n  }" ({ "{") (expression_statement "piVar4 = *(int **)(param_3 + 8);" (assignment_expression "piVar4 = *(int **)(param_3 + 8)" (identifier "piVar4") (= "=") (pointer_expression "*(int **)(param_3 + 8)" (* "*") (cast_expression "(int **)(param_3 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_3 + 8)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "piVar10 = piVar4 + iVar16;" (assignment_expression "piVar10 = piVar4 + iVar16" (identifier "piVar10") (= "=") (binary_expression "piVar4 + iVar16" (identifier "piVar4") (+ "+") (identifier "iVar16"))) (; ";")) (do_statement "do {\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    } while (piVar10 != piVar4);" (do "do") (compound_statement "{\n      iVar8 = *piVar4;\n      piVar4 = piVar4 + 1;\n      uVar18 = uVar18 + iVar8;\n    }" ({ "{") (expression_statement "iVar8 = *piVar4;" (assignment_expression "iVar8 = *piVar4" (identifier "iVar8") (= "=") (pointer_expression "*piVar4" (* "*") (identifier "piVar4"))) (; ";")) (expression_statement "piVar4 = piVar4 + 1;" (assignment_expression "piVar4 = piVar4 + 1" (identifier "piVar4") (= "=") (binary_expression "piVar4 + 1" (identifier "piVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar18 = uVar18 + iVar8;" (assignment_expression "uVar18 = uVar18 + iVar8" (identifier "uVar18") (= "=") (binary_expression "uVar18 + iVar8" (identifier "uVar18") (+ "+") (identifier "iVar8"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar10 != piVar4)" (( "(") (binary_expression "piVar10 != piVar4" (identifier "piVar10") (!= "!=") (identifier "piVar4")) () ")")) (; ";")) (} "}"))) (expression_statement "piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);" (assignment_expression "piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" (identifier "piVar4") (= "=") (cast_expression "(int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2[8] + (uVar18 & param_2[0x11]) * 0xc)" (( "(") (binary_expression "param_2[8] + (uVar18 & param_2[0x11]) * 0xc" (subscript_expression "param_2[8]" (identifier "param_2") ([ "[") (number_literal "8") (] "]")) (+ "+") (binary_expression "(uVar18 & param_2[0x11]) * 0xc" (parenthesized_expression "(uVar18 & param_2[0x11])" (( "(") (binary_expression "uVar18 & param_2[0x11]" (identifier "uVar18") (& "&") (subscript_expression "param_2[0x11]" (identifier "param_2") ([ "[") (number_literal "0x11") (] "]"))) () ")")) (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "iVar13 = *piVar4;" (assignment_expression "iVar13 = *piVar4" (identifier "iVar13") (= "=") (pointer_expression "*piVar4" (* "*") (identifier "piVar4"))) (; ";")) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (if_statement "if (0 < iVar13) {\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }" (if "if") (parenthesized_expression "(0 < iVar13)" (( "(") (binary_expression "0 < iVar13" (number_literal "0") (< "<") (identifier "iVar13")) () ")")) (compound_statement "{\n    puVar5 = (undefined4 *)piVar4[2];\n    do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);\n  }" ({ "{") (expression_statement "puVar5 = (undefined4 *)piVar4[2];" (assignment_expression "puVar5 = (undefined4 *)piVar4[2]" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)piVar4[2]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar4[2]" (identifier "piVar4") ([ "[") (number_literal "2") (] "]")))) (; ";")) (do_statement "do {\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    } while (iVar8 != iVar13);" (do "do") (compound_statement "{\n      puVar14 = (uint *)*puVar5;\n      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }\n      iVar8 = iVar8 + 1;\n      puVar5 = puVar5 + 1;\n    }" ({ "{") (expression_statement "puVar14 = (uint *)*puVar5;" (assignment_expression "puVar14 = (uint *)*puVar5" (identifier "puVar14") (= "=") (cast_expression "(uint *)*puVar5" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar5" (* "*") (identifier "puVar5")))) (; ";")) (if_statement "if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))\n      {\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }" (if "if") (parenthesized_expression "((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))" (( "(") (binary_expression "(((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12)" (parenthesized_expression "(((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0))" (( "(") (binary_expression "((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&\n          (uVar11 = puVar14[10], uVar11 != 0)" (parenthesized_expression "((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4))" (( "(") (binary_expression "(*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)" (parenthesized_expression "(*puVar14 == uVar18)" (( "(") (binary_expression "*puVar14 == uVar18" (pointer_expression "*puVar14" (* "*") (identifier "puVar14")) (== "==") (identifier "uVar18")) () ")")) (&& "&&") (parenthesized_expression "(puVar14[0xd] >> 0x1c == param_4)" (( "(") (binary_expression "puVar14[0xd] >> 0x1c == param_4" (binary_expression "puVar14[0xd] >> 0x1c" (subscript_expression "puVar14[0xd]" (identifier "puVar14") ([ "[") (number_literal "0xd") (] "]")) (>> ">>") (number_literal "0x1c")) (== "==") (identifier "param_4")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar11 = puVar14[10], uVar11 != 0)" (( "(") (comma_expression "uVar11 = puVar14[10], uVar11 != 0" (assignment_expression "uVar11 = puVar14[10]" (identifier "uVar11") (= "=") (subscript_expression "puVar14[10]" (identifier "puVar14") ([ "[") (number_literal "10") (] "]"))) (, ",") (binary_expression "uVar11 != 0" (identifier "uVar11") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12)" (( "(") (comma_expression "iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12" (assignment_expression "iVar12 = *(int *)(uVar11 + 4)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(uVar11 + 4)" (* "*") (cast_expression "(int *)(uVar11 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar11 + 4)" (( "(") (binary_expression "uVar11 + 4" (identifier "uVar11") (+ "+") (number_literal "4")) () ")"))))) (, ",") (binary_expression "iVar16 == iVar12" (identifier "iVar16") (== "==") (identifier "iVar12"))) () ")"))) () ")")) (compound_statement "{\n        do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));\n      }" ({ "{") (do_statement "do {\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));" (do "do") (compound_statement "{\n          iVar12 = iVar12 + -1;\n          if (iVar12 < 0) {\n            return puVar14;\n          }\n        }" ({ "{") (expression_statement "iVar12 = iVar12 + -1;" (assignment_expression "iVar12 = iVar12 + -1" (identifier "iVar12") (= "=") (binary_expression "iVar12 + -1" (identifier "iVar12") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (iVar12 < 0) {\n            return puVar14;\n          }" (if "if") (parenthesized_expression "(iVar12 < 0)" (( "(") (binary_expression "iVar12 < 0" (identifier "iVar12") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n            return puVar14;\n          }" ({ "{") (return_statement "return puVar14;" (return "return") (identifier "puVar14") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4))" (( "(") (binary_expression "*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==\n                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" (pointer_expression "*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4)" (* "*") (cast_expression "(int *)(*(int *)(uVar11 + 8) + iVar12 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(uVar11 + 8) + iVar12 * 4)" (( "(") (binary_expression "*(int *)(uVar11 + 8) + iVar12 * 4" (pointer_expression "*(int *)(uVar11 + 8)" (* "*") (cast_expression "(int *)(uVar11 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar11 + 8)" (( "(") (binary_expression "uVar11 + 8" (identifier "uVar11") (+ "+") (number_literal "8")) () ")")))) (+ "+") (binary_expression "iVar12 * 4" (identifier "iVar12") (* "*") (number_literal "4"))) () ")")))) (== "==") (pointer_expression "*(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" (* "*") (cast_expression "(int *)(*(int *)(param_3 + 8) + iVar12 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 8) + iVar12 * 4)" (( "(") (binary_expression "*(int *)(param_3 + 8) + iVar12 * 4" (pointer_expression "*(int *)(param_3 + 8)" (* "*") (cast_expression "(int *)(param_3 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 8)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) () ")")))) (+ "+") (binary_expression "iVar12 * 4" (identifier "iVar12") (* "*") (number_literal "4"))) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" (identifier "iVar8") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar8 != iVar13)" (( "(") (binary_expression "iVar8 != iVar13" (identifier "iVar8") (!= "!=") (identifier "iVar13")) () ")")) (; ";")) (} "}"))) (expression_statement "puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);" (assignment_expression "puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1)" (identifier "puVar14") (= "=") (cast_expression "(uint *)(*(code *)PTR_calloc_0003d254)(0x38,1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_calloc_0003d254)(0x38,1)" (parenthesized_expression "(*(code *)PTR_calloc_0003d254)" (( "(") (pointer_expression "*(code *)PTR_calloc_0003d254" (* "*") (cast_expression "(code *)PTR_calloc_0003d254" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_calloc_0003d254"))) () ")")) (argument_list "(0x38,1)" (( "(") (number_literal "0x38") (, ",") (number_literal "1") () ")"))))) (; ";")) (if_statement "if (puVar14 != (uint *)0x0) {\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }" (if "if") (parenthesized_expression "(puVar14 != (uint *)0x0)" (( "(") (binary_expression "puVar14 != (uint *)0x0" (identifier "puVar14") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    puVar15 = puVar14 + 1;\n    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);\n    iVar16 = FUN_0001c810(puVar15,param_3);\n    if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }\n  }" ({ "{") (expression_statement "puVar15 = puVar14 + 1;" (assignment_expression "puVar15 = puVar14 + 1" (identifier "puVar15") (= "=") (binary_expression "puVar14 + 1" (identifier "puVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);" (assignment_expression "pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0)" (identifier "pcVar17") (= "=") (cast_expression "(code *)(PTR_LAB_0003d238 + -0x37f0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0003d238 + -0x37f0)" (( "(") (binary_expression "PTR_LAB_0003d238 + -0x37f0" (identifier "PTR_LAB_0003d238") (+ "+") (number_literal "-0x37f0")) () ")")))) (; ";")) (expression_statement "iVar16 = FUN_0001c810(puVar15,param_3);" (assignment_expression "iVar16 = FUN_0001c810(puVar15,param_3)" (identifier "iVar16") (= "=") (call_expression "FUN_0001c810(puVar15,param_3)" (identifier "FUN_0001c810") (argument_list "(puVar15,param_3)" (( "(") (identifier "puVar15") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar16 == 0) {\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }\n    else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" (if "if") (parenthesized_expression "(iVar16 == 0)" (( "(") (binary_expression "iVar16 == 0" (identifier "iVar16") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      iVar16 = *(int *)(param_3 + 4);\n      puVar14[10] = (uint)puVar15;\n      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);\n      if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }\nLAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);\n      if (iVar16 == 0) {\n        return puVar14;\n      }\nLAB_0001ce04:\n      FUN_0001aabc(puVar14);\n    }" ({ "{") (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" (identifier "iVar16") (= "=") (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "puVar14[10] = (uint)puVar15;" (assignment_expression "puVar14[10] = (uint)puVar15" (subscript_expression "puVar14[10]" (identifier "puVar14") ([ "[") (number_literal "10") (] "]")) (= "=") (cast_expression "(uint)puVar15" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "puVar15"))) (; ";")) (expression_statement "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);" (assignment_expression "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4)" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "*(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4)" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xf" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (& "&") (number_literal "0xf")) (| "|") (call_expression "(byte)((param_4 & 0xf) << 4)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "((param_4 & 0xf) << 4)" (( "(") (binary_expression "(param_4 & 0xf) << 4" (parenthesized_expression "(param_4 & 0xf)" (( "(") (binary_expression "param_4 & 0xf" (identifier "param_4") (& "&") (number_literal "0xf")) () ")")) (<< "<<") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (0 < iVar16) {\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }" (if "if") (parenthesized_expression "(0 < iVar16)" (( "(") (binary_expression "0 < iVar16" (number_literal "0") (< "<") (identifier "iVar16")) () ")")) (compound_statement "{\n        iVar13 = 0;\n        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);\n        iVar8 = 0;\n        do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);\n      }" ({ "{") (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" (identifier "iVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);" (assignment_expression "pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c)" (identifier "pcVar6") (= "=") (cast_expression "(code *)(PTR_LAB_0003d238 + -0x4d3c)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0003d238 + -0x4d3c)" (( "(") (binary_expression "PTR_LAB_0003d238 + -0x4d3c" (identifier "PTR_LAB_0003d238") (+ "+") (number_literal "-0x4d3c")) () ")")))) (; ";")) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        } while (iVar13 < iVar16);" (do "do") (compound_statement "{\n          while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }\n          bVar1 = *(byte *)(puVar14 + 0xd);\n          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;\n          if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }\n          if (uVar11 == 0) goto LAB_0001ccec;\nLAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }\n          if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }\n          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }\n          iVar16 = *(int *)(param_3 + 4);\n          iVar13 = iVar13 + 1;\n          iVar8 = iVar8 + 1;\n        }" ({ "{") (while_statement "while( true ) {\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;\n            iVar9 = *(int *)(iVar12 + 4);\n            cVar2 = *(char *)(iVar12 + 4);\n            uVar11 = (uint)(iVar9 << 8) >> 0x16;\n            if (cVar2 != '\x01') break;\n            if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }\nLAB_0001ccec:\n            iVar13 = iVar13 + 1;\n            if (iVar16 <= iVar13) goto LAB_0001cde8;\n          }" ({ "{") (expression_statement "iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;" (assignment_expression "iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" (identifier "iVar12") (= "=") (binary_expression "*param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (binary_expression "*(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8" (pointer_expression "*(int *)(*(int *)(param_3 + 8) + iVar13 * 4)" (* "*") (cast_expression "(int *)(*(int *)(param_3 + 8) + iVar13 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_3 + 8) + iVar13 * 4)" (( "(") (binary_expression "*(int *)(param_3 + 8) + iVar13 * 4" (pointer_expression "*(int *)(param_3 + 8)" (* "*") (cast_expression "(int *)(param_3 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 8)" (( "(") (binary_expression "param_3 + 8" (identifier "param_3") (+ "+") (number_literal "8")) () ")")))) (+ "+") (binary_expression "iVar13 * 4" (identifier "iVar13") (* "*") (number_literal "4"))) () ")")))) (* "*") (number_literal "8")))) (; ";")) (expression_statement "iVar9 = *(int *)(iVar12 + 4);" (assignment_expression "iVar9 = *(int *)(iVar12 + 4)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(iVar12 + 4)" (* "*") (cast_expression "(int *)(iVar12 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar12 + 4)" (( "(") (binary_expression "iVar12 + 4" (identifier "iVar12") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "cVar2 = *(char *)(iVar12 + 4);" (assignment_expression "cVar2 = *(char *)(iVar12 + 4)" (identifier "cVar2") (= "=") (pointer_expression "*(char *)(iVar12 + 4)" (* "*") (cast_expression "(char *)(iVar12 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar12 + 4)" (( "(") (binary_expression "iVar12 + 4" (identifier "iVar12") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "uVar11 = (uint)(iVar9 << 8) >> 0x16;" (assignment_expression "uVar11 = (uint)(iVar9 << 8) >> 0x16" (identifier "uVar11") (= "=") (binary_expression "(uint)(iVar9 << 8) >> 0x16" (call_expression "(uint)(iVar9 << 8)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar9 << 8)" (( "(") (binary_expression "iVar9 << 8" (identifier "iVar9") (<< "<<") (number_literal "8")) () ")"))) (>> ">>") (number_literal "0x16"))) (; ";")) (if_statement "if (cVar2 != '\x01') break;" (if "if") (parenthesized_expression "(cVar2 != '\x01')" (( "(") (binary_expression "cVar2 != '\x01'" (identifier "cVar2") (!= "!=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (uVar11 != 0) {\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }" (if "if") (parenthesized_expression "(uVar11 != 0)" (( "(") (binary_expression "uVar11 != 0" (identifier "uVar11") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n              *(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);\n              goto LAB_0001cd4c;\n            }" ({ "{") (expression_statement "*(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);" (assignment_expression "*(byte *)(puVar14 + 0xd) =\n                   *(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfb |\n                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfb" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (& "&") (number_literal "0xfb")) (| "|") (call_expression "(byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (( "(") (binary_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f)" (( "(") (binary_expression "(puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f" (parenthesized_expression "(puVar14[0xd] << 5 | iVar9 << 0x14)" (( "(") (binary_expression "puVar14[0xd] << 5 | iVar9 << 0x14" (binary_expression "puVar14[0xd] << 5" (subscript_expression "puVar14[0xd]" (identifier "puVar14") ([ "[") (number_literal "0xd") (] "]")) (<< "<<") (number_literal "5")) (| "|") (binary_expression "iVar9 << 0x14" (identifier "iVar9") (<< "<<") (number_literal "0x14"))) () ")")) (>> ">>") (number_literal "0x1f")) () ")")) (<< "<<") (number_literal "2")) () ")"))))) (; ";")) (goto_statement "goto LAB_0001cd4c;" (goto "goto") (statement_identifier "LAB_0001cd4c") (; ";")) (} "}"))) (labeled_statement "LAB_0001ccec:\n            iVar13 = iVar13 + 1;" (statement_identifier "LAB_0001ccec") (: ":") (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + 1" (identifier "iVar13") (+ "+") (number_literal "1"))) (; ";"))) (if_statement "if (iVar16 <= iVar13) goto LAB_0001cde8;" (if "if") (parenthesized_expression "(iVar16 <= iVar13)" (( "(") (binary_expression "iVar16 <= iVar13" (identifier "iVar16") (<= "<=") (identifier "iVar13")) () ")")) (goto_statement "goto LAB_0001cde8;" (goto "goto") (statement_identifier "LAB_0001cde8") (; ";"))) (} "}"))) (expression_statement "bVar1 = *(byte *)(puVar14 + 0xd);" (assignment_expression "bVar1 = *(byte *)(puVar14 + 0xd)" (identifier "bVar1") (= "=") (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")"))))) (; ";")) (expression_statement "bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);" (assignment_expression "bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (identifier "bVar3") (= "=") (call_expression "(byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2)" (( "(") (binary_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2" (parenthesized_expression "((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f)" (( "(") (binary_expression "(puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f" (parenthesized_expression "(puVar14[0xd] << 5 | iVar9 << 0x14)" (( "(") (binary_expression "puVar14[0xd] << 5 | iVar9 << 0x14" (binary_expression "puVar14[0xd] << 5" (subscript_expression "puVar14[0xd]" (identifier "puVar14") ([ "[") (number_literal "0xd") (] "]")) (<< "<<") (number_literal "5")) (| "|") (binary_expression "iVar9 << 0x14" (identifier "iVar9") (<< "<<") (number_literal "0x14"))) () ")")) (>> ">>") (number_literal "0x1f")) () ")")) (<< "<<") (number_literal "2")) () ")")))) (; ";")) (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "bVar1 & 0xfb | bVar3" (binary_expression "bVar1 & 0xfb" (identifier "bVar1") (& "&") (number_literal "0xfb")) (| "|") (identifier "bVar3"))) (; ";")) (if_statement "if (cVar2 == '\x02') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }\n          else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" (if "if") (parenthesized_expression "(cVar2 == '\x02')" (( "(") (binary_expression "cVar2 == '\x02'" (identifier "cVar2") (== "==") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'"))) () ")")) (compound_statement "{\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;\n          }" ({ "{") (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "bVar1 & 0xf3 | bVar3 | 8" (binary_expression "bVar1 & 0xf3 | bVar3" (binary_expression "bVar1 & 0xf3" (identifier "bVar1") (& "&") (number_literal "0xf3")) (| "|") (identifier "bVar3")) (| "|") (number_literal "8"))) (; ";")) (} "}")) (else_clause "else if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" (else "else") (if_statement "if (cVar2 == '\x04') {\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" (if "if") (parenthesized_expression "(cVar2 == '\x04')" (( "(") (binary_expression "cVar2 == '\x04'" (identifier "cVar2") (== "==") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'"))) () ")")) (compound_statement "{\n            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;\n          }" ({ "{") (expression_statement "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;" (assignment_expression "*(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "bVar1 & 0xf9 | bVar3 | 2" (binary_expression "bVar1 & 0xf9 | bVar3" (binary_expression "bVar1 & 0xf9" (identifier "bVar1") (& "&") (number_literal "0xf9")) (| "|") (identifier "bVar3")) (| "|") (number_literal "2"))) (; ";")) (} "}"))))) (if_statement "if (uVar11 == 0) goto LAB_0001ccec;" (if "if") (parenthesized_expression "(uVar11 == 0)" (( "(") (binary_expression "uVar11 == 0" (identifier "uVar11") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0001ccec;" (goto "goto") (statement_identifier "LAB_0001ccec") (; ";"))) (labeled_statement "LAB_0001cd4c:\n          if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" (statement_identifier "LAB_0001cd4c") (: ":") (if_statement "if (puVar15 == (uint *)puVar14[10]) {\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" (if "if") (parenthesized_expression "(puVar15 == (uint *)puVar14[10])" (( "(") (binary_expression "puVar15 == (uint *)puVar14[10]" (identifier "puVar15") (== "==") (cast_expression "(uint *)puVar14[10]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar14[10]" (identifier "puVar14") ([ "[") (number_literal "10") (] "]")))) () ")")) (compound_statement "{\n            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);\n            puVar14[10] = uVar7;\n            if (uVar7 == 0) goto LAB_0001ce04;\n            iVar16 = (*pcVar17)(uVar7,param_3);\n            if (iVar16 != 0) goto LAB_0001ce18;\n            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;\n            iVar8 = 0;\n          }" ({ "{") (expression_statement "uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);" (assignment_expression "uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc)" (identifier "uVar7") (= "=") (call_expression "(*(code *)PTR_malloc_0003d2f8)(0xc)" (parenthesized_expression "(*(code *)PTR_malloc_0003d2f8)" (( "(") (pointer_expression "*(code *)PTR_malloc_0003d2f8" (* "*") (cast_expression "(code *)PTR_malloc_0003d2f8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_malloc_0003d2f8"))) () ")")) (argument_list "(0xc)" (( "(") (number_literal "0xc") () ")")))) (; ";")) (expression_statement "puVar14[10] = uVar7;" (assignment_expression "puVar14[10] = uVar7" (subscript_expression "puVar14[10]" (identifier "puVar14") ([ "[") (number_literal "10") (] "]")) (= "=") (identifier "uVar7")) (; ";")) (if_statement "if (uVar7 == 0) goto LAB_0001ce04;" (if "if") (parenthesized_expression "(uVar7 == 0)" (( "(") (binary_expression "uVar7 == 0" (identifier "uVar7") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0001ce04;" (goto "goto") (statement_identifier "LAB_0001ce04") (; ";"))) (expression_statement "iVar16 = (*pcVar17)(uVar7,param_3);" (assignment_expression "iVar16 = (*pcVar17)(uVar7,param_3)" (identifier "iVar16") (= "=") (call_expression "(*pcVar17)(uVar7,param_3)" (parenthesized_expression "(*pcVar17)" (( "(") (pointer_expression "*pcVar17" (* "*") (identifier "pcVar17")) () ")")) (argument_list "(uVar7,param_3)" (( "(") (identifier "uVar7") (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (iVar16 != 0) goto LAB_0001ce18;" (if "if") (parenthesized_expression "(iVar16 != 0)" (( "(") (binary_expression "iVar16 != 0" (identifier "iVar16") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0001ce18;" (goto "goto") (statement_identifier "LAB_0001ce18") (; ";"))) (expression_statement "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;" (assignment_expression "*(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfe | 1" (binary_expression "*(byte *)(puVar14 + 0xd) & 0xfe" (pointer_expression "*(byte *)(puVar14 + 0xd)" (* "*") (cast_expression "(byte *)(puVar14 + 0xd)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar14 + 0xd)" (( "(") (binary_expression "puVar14 + 0xd" (identifier "puVar14") (+ "+") (number_literal "0xd")) () ")")))) (& "&") (number_literal "0xfe")) (| "|") (number_literal "1"))) (; ";")) (expression_statement "iVar8 = 0;" (assignment_expression "iVar8 = 0" (identifier "iVar8") (= "=") (number_literal "0")) (; ";")) (} "}")))) (if_statement "if ((uVar11 & 1) == 0) {\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }\n          else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" (if "if") (parenthesized_expression "((uVar11 & 1) == 0)" (( "(") (binary_expression "(uVar11 & 1) == 0" (parenthesized_expression "(uVar11 & 1)" (( "(") (binary_expression "uVar11 & 1" (identifier "uVar11") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }\nLAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }\n          }" ({ "{") (if_statement "if ((uVar11 & 2) != 0) {\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }" (if "if") (parenthesized_expression "((uVar11 & 2) != 0)" (( "(") (binary_expression "(uVar11 & 2) != 0" (parenthesized_expression "(uVar11 & 2)" (( "(") (binary_expression "uVar11 & 2" (identifier "uVar11") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n              uVar7 = param_4 & 1;\n              goto joined_r0x0001ce48;\n            }" ({ "{") (expression_statement "uVar7 = param_4 & 1;" (assignment_expression "uVar7 = param_4 & 1" (identifier "uVar7") (= "=") (binary_expression "param_4 & 1" (identifier "param_4") (& "&") (number_literal "1"))) (; ";")) (goto_statement "goto joined_r0x0001ce48;" (goto "goto") (statement_identifier "joined_r0x0001ce48") (; ";")) (} "}"))) (labeled_statement "LAB_0001cd78:\n            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" (statement_identifier "LAB_0001cd78") (: ":") (if_statement "if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" (if "if") (parenthesized_expression "((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0))))" (( "(") (binary_expression "(((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&\n               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))" (parenthesized_expression "(((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0))" (( "(") (binary_expression "((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)" (parenthesized_expression "((uVar11 & 0x10) == 0)" (( "(") (binary_expression "(uVar11 & 0x10) == 0" (parenthesized_expression "(uVar11 & 0x10)" (( "(") (binary_expression "uVar11 & 0x10" (identifier "uVar11") (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((param_4 & 2) != 0)" (( "(") (binary_expression "(param_4 & 2) != 0" (parenthesized_expression "(param_4 & 2)" (( "(") (binary_expression "param_4 & 2" (identifier "param_4") (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))" (( "(") (parenthesized_expression "((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0))" (( "(") (binary_expression "(uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)" (binary_expression "(uVar11 & 0x40) == 0" (parenthesized_expression "(uVar11 & 0x40)" (( "(") (binary_expression "uVar11 & 0x40" (identifier "uVar11") (& "&") (number_literal "0x40")) () ")")) (== "==") (number_literal "0")) (|| "||") (parenthesized_expression "((param_4 & 4) != 0)" (( "(") (binary_expression "(param_4 & 4) != 0" (parenthesized_expression "(param_4 & 4)" (( "(") (binary_expression "param_4 & 4" (identifier "param_4") (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n              iVar16 = *(int *)(param_3 + 4);\n              goto LAB_0001ccec;\n            }" ({ "{") (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" (identifier "iVar16") (= "=") (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (goto_statement "goto LAB_0001ccec;" (goto "goto") (statement_identifier "LAB_0001ccec") (; ";")) (} "}")))) (} "}")) (else_clause "else {\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" (else "else") (compound_statement "{\n            uVar7 = uVar11 & 2;\n            if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }\n          }" ({ "{") (expression_statement "uVar7 = uVar11 & 2;" (assignment_expression "uVar7 = uVar11 & 2" (identifier "uVar7") (= "=") (binary_expression "uVar11 & 2" (identifier "uVar11") (& "&") (number_literal "2"))) (; ";")) (if_statement "if ((param_4 & 1) != 0) {\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }" (if "if") (parenthesized_expression "((param_4 & 1) != 0)" (( "(") (binary_expression "(param_4 & 1) != 0" (parenthesized_expression "(param_4 & 1)" (( "(") (binary_expression "param_4 & 1" (identifier "param_4") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\njoined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;\n            }" ({ "{") (labeled_statement "joined_r0x0001ce48:\n              if (uVar7 == 0) goto LAB_0001cd78;" (statement_identifier "joined_r0x0001ce48") (: ":") (if_statement "if (uVar7 == 0) goto LAB_0001cd78;" (if "if") (parenthesized_expression "(uVar7 == 0)" (( "(") (binary_expression "uVar7 == 0" (identifier "uVar7") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0001cd78;" (goto "goto") (statement_identifier "LAB_0001cd78") (; ";")))) (} "}"))) (} "}")))) (if_statement "if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }" (if "if") (parenthesized_expression "((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2]))" (( "(") (binary_expression "(-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])" (parenthesized_expression "(-1 < iVar13 - iVar8)" (( "(") (binary_expression "-1 < iVar13 - iVar8" (number_literal "-1") (< "<") (binary_expression "iVar13 - iVar8" (identifier "iVar13") (- "-") (identifier "iVar8"))) () ")")) (&& "&&") (parenthesized_expression "(iVar13 - iVar8 < (int)puVar14[2])" (( "(") (binary_expression "iVar13 - iVar8 < (int)puVar14[2]" (binary_expression "iVar13 - iVar8" (identifier "iVar13") (- "-") (identifier "iVar8")) (< "<") (cast_expression "(int)puVar14[2]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "puVar14[2]" (identifier "puVar14") ([ "[") (number_literal "2") (] "]")))) () ")"))) () ")")) (compound_statement "{\n            puVar14[2] = puVar14[2] - 1;\n            (*pcVar6)(puVar14 + 2,puVar14 + 3);\n          }" ({ "{") (expression_statement "puVar14[2] = puVar14[2] - 1;" (assignment_expression "puVar14[2] = puVar14[2] - 1" (subscript_expression "puVar14[2]" (identifier "puVar14") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "puVar14[2] - 1" (subscript_expression "puVar14[2]" (identifier "puVar14") ([ "[") (number_literal "2") (] "]")) (- "-") (number_literal "1"))) (; ";")) (expression_statement "(*pcVar6)(puVar14 + 2,puVar14 + 3);" (call_expression "(*pcVar6)(puVar14 + 2,puVar14 + 3)" (parenthesized_expression "(*pcVar6)" (( "(") (pointer_expression "*pcVar6" (* "*") (identifier "pcVar6")) () ")")) (argument_list "(puVar14 + 2,puVar14 + 3)" (( "(") (binary_expression "puVar14 + 2" (identifier "puVar14") (+ "+") (number_literal "2")) (, ",") (binary_expression "puVar14 + 3" (identifier "puVar14") (+ "+") (number_literal "3")) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar16 = *(int *)(param_3 + 4);" (assignment_expression "iVar16 = *(int *)(param_3 + 4)" (identifier "iVar16") (= "=") (pointer_expression "*(int *)(param_3 + 4)" (* "*") (cast_expression "(int *)(param_3 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 4)" (( "(") (binary_expression "param_3 + 4" (identifier "param_3") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "iVar13 = iVar13 + 1;" (assignment_expression "iVar13 = iVar13 + 1" (identifier "iVar13") (= "=") (binary_expression "iVar13 + 1" (identifier "iVar13") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar8 = iVar8 + 1;" (assignment_expression "iVar8 = iVar8 + 1" (identifier "iVar8") (= "=") (binary_expression "iVar8 + 1" (identifier "iVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar13 < iVar16)" (( "(") (binary_expression "iVar13 < iVar16" (identifier "iVar13") (< "<") (identifier "iVar16")) () ")")) (; ";")) (} "}"))) (labeled_statement "LAB_0001cde8:\n      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);" (statement_identifier "LAB_0001cde8") (: ":") (expression_statement "iVar16 = FUN_000193d4(param_2,puVar14,uVar18);" (assignment_expression "iVar16 = FUN_000193d4(param_2,puVar14,uVar18)" (identifier "iVar16") (= "=") (call_expression "FUN_000193d4(param_2,puVar14,uVar18)" (identifier "FUN_000193d4") (argument_list "(param_2,puVar14,uVar18)" (( "(") (identifier "param_2") (, ",") (identifier "puVar14") (, ",") (identifier "uVar18") () ")")))) (; ";"))) (if_statement "if (iVar16 == 0) {\n        return puVar14;\n      }" (if "if") (parenthesized_expression "(iVar16 == 0)" (( "(") (binary_expression "iVar16 == 0" (identifier "iVar16") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return puVar14;\n      }" ({ "{") (return_statement "return puVar14;" (return "return") (identifier "puVar14") (; ";")) (} "}"))) (labeled_statement "LAB_0001ce04:\n      FUN_0001aabc(puVar14);" (statement_identifier "LAB_0001ce04") (: ":") (expression_statement "FUN_0001aabc(puVar14);" (call_expression "FUN_0001aabc(puVar14)" (identifier "FUN_0001aabc") (argument_list "(puVar14)" (( "(") (identifier "puVar14") () ")"))) (; ";"))) (} "}")) (else_clause "else {\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" (else "else") (compound_statement "{\n      (*(code *)PTR_free_0003d354)(puVar14);\n    }" ({ "{") (expression_statement "(*(code *)PTR_free_0003d354)(puVar14);" (call_expression "(*(code *)PTR_free_0003d354)(puVar14)" (parenthesized_expression "(*(code *)PTR_free_0003d354)" (( "(") (pointer_expression "*(code *)PTR_free_0003d354" (* "*") (cast_expression "(code *)PTR_free_0003d354" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_free_0003d354"))) () ")")) (argument_list "(puVar14)" (( "(") (identifier "puVar14") () ")"))) (; ";")) (} "}")))) (} "}"))) (labeled_statement "LAB_0001ce18:\n  *param_1 = 0xc;" (statement_identifier "LAB_0001ce18") (: ":") (expression_statement "*param_1 = 0xc;" (assignment_expression "*param_1 = 0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "0xc")) (; ";"))) (return_statement "return (uint *)0x0;" (return "return") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

type_1 *
function_1(type_2 *err,type_3 *dfa,type_4 *nodes,type_5 var_2)

{
  type_5 var_17;
  type_6 var_18;
  char var_16;
  type_6 var_19;
  int *var_3;
  type_1 **var_10;
  type_2 var_14;
  type_7 *pcVar8;
  type_5 var_21;
  type_4 *var_20;
  int var_5;
  int *var_6;
  type_4 *var_8;
  int var_9;
  int var_7;
  type_1 *var_11;
  int var_1;
  type_7 *pcVar18;
  type_5 var_4;
  
  var_1 = nodes->nelem;
  if (var_1 == 0) {
    *err = var_15;
    return (type_1 *)0x0;
  }
  var_4 = var_2 + var_1;
  if (0 < var_1) {
    var_3 = nodes->elems;
    var_6 = var_3 + var_1;
    do {
      var_5 = *var_3;
      var_3 = var_3 + 1;
      var_4 = var_4 + var_5;
    } while (var_6 != var_3);
  }
  var_7 = dfa->state_table[var_4 & dfa->state_hash_mask].num;
  var_5 = 0;
  if (0 < var_7) {
    var_10 = dfa->state_table[var_4 & dfa->state_hash_mask].array;
    do {
      var_11 = *var_10;
      if ((((var_11->var_4 == var_4) && (*(type_5 *)&var_11->field_0x34 >> 0x1c == var_2)) &&
          (var_8 = var_11->entrance_nodes, var_8 != (type_4 *)0x0)) &&
         (var_9 = var_8->nelem, var_1 == var_9)) {
        do {
          var_9 = var_9 + -1;
          if (var_9 < 0) {
            return var_11;
          }
        } while (var_8->elems[var_9] == nodes->elems[var_9]);
      }
      var_5 = var_5 + 1;
      var_10 = var_10 + 1;
    } while (var_5 != var_7);
  }
  var_11 = (type_1 *)(*(type_7 *)PTR_calloc_0003d254)(0x38,1);
  if (var_11 != (type_1 *)0x0) {
    var_8 = &var_11->nodes;
    pcVar18 = (type_7 *)(var_12 + -0x37f0);
    var_14 = var_13(var_8,nodes);
    if (var_14 == var_15) {
      var_1 = nodes->nelem;
      var_11->entrance_nodes = var_8;
      var_11->field_0x34 = var_11->field_0x34 & 0xf | (type_6)((var_2 & 0xf) << 4);
      if (0 < var_1) {
        var_7 = 0;
        pcVar8 = (type_7 *)(var_12 + -0x4d3c);
        var_5 = 0;
        do {
          while( true ) {
            var_9 = *(int *)&dfa->nodes[nodes->elems[var_7]].field_0x4;
            var_16 = dfa->nodes[nodes->elems[var_7]].field_0x4;
            var_17 = (type_5)(var_9 << 8) >> 0x16;
            if (var_16 != '\x01') break;
            if (var_17 != 0) {
              var_11->field_0x34 =
                   var_11->field_0x34 & 0xfb |
                   (type_6)(((type_5)(*(int *)&var_11->field_0x34 << 5 | var_9 << 0x14) >> 0x1f) << 2)
              ;
              goto LAB_0001cd4c;
            }
LAB_0001ccec:
            var_7 = var_7 + 1;
            if (var_1 <= var_7) goto LAB_0001cde8;
          }
          var_18 = var_11->field_0x34;
          var_19 = (type_6)(((type_5)(*(int *)&var_11->field_0x34 << 5 | var_9 << 0x14) >> 0x1f) << 2);
          var_11->field_0x34 = var_18 & 0xfb | var_19;
          if (var_16 == '\x02') {
            var_11->field_0x34 = var_18 & 0xf3 | var_19 | 8;
          }
          else if (var_16 == '\x04') {
            var_11->field_0x34 = var_18 & 0xf9 | var_19 | 2;
          }
          if (var_17 == 0) goto LAB_0001ccec;
LAB_0001cd4c:
          if (var_8 == var_11->entrance_nodes) {
            var_20 = (type_4 *)(*(type_7 *)PTR_malloc_0003d2f8)(0xc);
            var_11->entrance_nodes = var_20;
            if (var_20 == (type_4 *)0x0) goto LAB_0001ce04;
            var_1 = (*pcVar18)(var_20,nodes);
            if (var_1 != 0) goto LAB_0001ce18;
            var_11->field_0x34 = var_11->field_0x34 & 0xfe | 1;
            var_5 = 0;
          }
          if ((var_17 & 1) == 0) {
            if ((var_17 & 2) != 0) {
              var_21 = var_2 & 1;
              goto joined_r0x0001ce48;
            }
LAB_0001cd78:
            if ((((var_17 & 0x10) == 0) || ((var_2 & 2) != 0)) &&
               (((var_17 & 0x40) == 0 || ((var_2 & 4) != 0)))) {
              var_1 = nodes->nelem;
              goto LAB_0001ccec;
            }
          }
          else {
            var_21 = var_17 & 2;
            if ((var_2 & 1) != 0) {
joined_r0x0001ce48:
              if (var_21 == 0) goto LAB_0001cd78;
            }
          }
          if ((-1 < var_7 - var_5) && (var_1 = (var_11->nodes).nelem, var_7 - var_5 < var_1))
          {
            (var_11->nodes).nelem = var_1 + -1;
            (*pcVar8)(&(var_11->nodes).nelem,&(var_11->nodes).elems);
          }
          var_1 = nodes->nelem;
          var_7 = var_7 + 1;
          var_5 = var_5 + 1;
        } while (var_7 < var_1);
      }
LAB_0001cde8:
      var_14 = var_22(dfa,var_11,var_4);
      if (var_14 == var_15) {
        return var_11;
      }
LAB_0001ce04:
      var_23(var_11);
    }
    else {
      (*(type_7 *)PTR_free_0003d354)(var_11);
    }
  }
LAB_0001ce18:
  *err = _REG_ESPACE;
  return (type_1 *)0x0;
}


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

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

{
  byte bVar1;
  char cVar2;
  byte bVar3;
  int *piVar4;
  undefined4 *puVar5;
  code *pcVar6;
  uint uVar7;
  int iVar8;
  int iVar9;
  int *piVar10;
  uint uVar11;
  int iVar12;
  int iVar13;
  uint *puVar14;
  uint *puVar15;
  int iVar16;
  code *pcVar17;
  uint uVar18;
  
  iVar16 = *(int *)(param_3 + 4);
  if (iVar16 == 0) {
    *param_1 = 0;
    return (uint *)0x0;
  }
  uVar18 = param_4 + iVar16;
  if (0 < iVar16) {
    piVar4 = *(int **)(param_3 + 8);
    piVar10 = piVar4 + iVar16;
    do {
      iVar8 = *piVar4;
      piVar4 = piVar4 + 1;
      uVar18 = uVar18 + iVar8;
    } while (piVar10 != piVar4);
  }
  piVar4 = (int *)(param_2[8] + (uVar18 & param_2[0x11]) * 0xc);
  iVar13 = *piVar4;
  iVar8 = 0;
  if (0 < iVar13) {
    puVar5 = (undefined4 *)piVar4[2];
    do {
      puVar14 = (uint *)*puVar5;
      if ((((*puVar14 == uVar18) && (puVar14[0xd] >> 0x1c == param_4)) &&
          (uVar11 = puVar14[10], uVar11 != 0)) && (iVar12 = *(int *)(uVar11 + 4), iVar16 == iVar12))
      {
        do {
          iVar12 = iVar12 + -1;
          if (iVar12 < 0) {
            return puVar14;
          }
        } while (*(int *)(*(int *)(uVar11 + 8) + iVar12 * 4) ==
                 *(int *)(*(int *)(param_3 + 8) + iVar12 * 4));
      }
      iVar8 = iVar8 + 1;
      puVar5 = puVar5 + 1;
    } while (iVar8 != iVar13);
  }
  puVar14 = (uint *)(*(code *)PTR_calloc_0003d254)(0x38,1);
  if (puVar14 != (uint *)0x0) {
    puVar15 = puVar14 + 1;
    pcVar17 = (code *)(PTR_LAB_0003d238 + -0x37f0);
    iVar16 = FUN_0001c810(puVar15,param_3);
    if (iVar16 == 0) {
      iVar16 = *(int *)(param_3 + 4);
      puVar14[10] = (uint)puVar15;
      *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xf | (byte)((param_4 & 0xf) << 4);
      if (0 < iVar16) {
        iVar13 = 0;
        pcVar6 = (code *)(PTR_LAB_0003d238 + -0x4d3c);
        iVar8 = 0;
        do {
          while( true ) {
            iVar12 = *param_2 + *(int *)(*(int *)(param_3 + 8) + iVar13 * 4) * 8;
            iVar9 = *(int *)(iVar12 + 4);
            cVar2 = *(char *)(iVar12 + 4);
            uVar11 = (uint)(iVar9 << 8) >> 0x16;
            if (cVar2 != '\x01') break;
            if (uVar11 != 0) {
              *(byte *)(puVar14 + 0xd) =
                   *(byte *)(puVar14 + 0xd) & 0xfb |
                   (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);
              goto LAB_0001cd4c;
            }
LAB_0001ccec:
            iVar13 = iVar13 + 1;
            if (iVar16 <= iVar13) goto LAB_0001cde8;
          }
          bVar1 = *(byte *)(puVar14 + 0xd);
          bVar3 = (byte)(((puVar14[0xd] << 5 | iVar9 << 0x14) >> 0x1f) << 2);
          *(byte *)(puVar14 + 0xd) = bVar1 & 0xfb | bVar3;
          if (cVar2 == '\x02') {
            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf3 | bVar3 | 8;
          }
          else if (cVar2 == '\x04') {
            *(byte *)(puVar14 + 0xd) = bVar1 & 0xf9 | bVar3 | 2;
          }
          if (uVar11 == 0) goto LAB_0001ccec;
LAB_0001cd4c:
          if (puVar15 == (uint *)puVar14[10]) {
            uVar7 = (*(code *)PTR_malloc_0003d2f8)(0xc);
            puVar14[10] = uVar7;
            if (uVar7 == 0) goto LAB_0001ce04;
            iVar16 = (*pcVar17)(uVar7,param_3);
            if (iVar16 != 0) goto LAB_0001ce18;
            *(byte *)(puVar14 + 0xd) = *(byte *)(puVar14 + 0xd) & 0xfe | 1;
            iVar8 = 0;
          }
          if ((uVar11 & 1) == 0) {
            if ((uVar11 & 2) != 0) {
              uVar7 = param_4 & 1;
              goto joined_r0x0001ce48;
            }
LAB_0001cd78:
            if ((((uVar11 & 0x10) == 0) || ((param_4 & 2) != 0)) &&
               (((uVar11 & 0x40) == 0 || ((param_4 & 4) != 0)))) {
              iVar16 = *(int *)(param_3 + 4);
              goto LAB_0001ccec;
            }
          }
          else {
            uVar7 = uVar11 & 2;
            if ((param_4 & 1) != 0) {
joined_r0x0001ce48:
              if (uVar7 == 0) goto LAB_0001cd78;
            }
          }
          if ((-1 < iVar13 - iVar8) && (iVar13 - iVar8 < (int)puVar14[2])) {
            puVar14[2] = puVar14[2] - 1;
            (*pcVar6)(puVar14 + 2,puVar14 + 3);
          }
          iVar16 = *(int *)(param_3 + 4);
          iVar13 = iVar13 + 1;
          iVar8 = iVar8 + 1;
        } while (iVar13 < iVar16);
      }
LAB_0001cde8:
      iVar16 = FUN_000193d4(param_2,puVar14,uVar18);
      if (iVar16 == 0) {
        return puVar14;
      }
LAB_0001ce04:
      FUN_0001aabc(puVar14);
    }
    else {
      (*(code *)PTR_free_0003d354)(puVar14);
    }
  }
LAB_0001ce18:
  *param_1 = 0xc;
  return (uint *)0x0;
}

