
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

reg_errcode_t __regparm3
re_compile_internal(regex_t *preg,char *pattern,size_t length,reg_syntax_t syntax)

{
  byte bVar1;
  int iVar2;
  uchar *puVar3;
  bin_tree_storage_t *pbVar4;
  bin_tree_storage_t *pbVar5;
  byte bVar6;
  _Bool _Var7;
  re_token_t *prVar8;
  re_state_table_entry *prVar9;
  size_t sVar10;
  byte *pbVar11;
  reg_errcode_t rVar12;
  bin_tree_t *right;
  bin_tree_t *token;
  bin_tree_t *pbVar13;
  Idx *pIVar14;
  Idx *pIVar15;
  re_node_set *prVar16;
  re_node_set *prVar17;
  anon_union_4_5_a39f51ca_for_opr aVar18;
  re_dfastate_t *prVar19;
  re_bitset_ptr_t pbVar20;
  wint_t wVar21;
  re_token_t *prVar22;
  re_dfa_t *dfa;
  uint uVar23;
  int iVar24;
  size_t sVar25;
  size_t *__ptr;
  byte bVar26;
  uint *puVar27;
  uint uVar28;
  int iVar29;
  re_dfa_t *prVar30;
  re_hashval_t rVar31;
  undefined4 *puVar32;
  byte *pbVar33;
  uchar **ppuVar34;
  size_t __size;
  size_t sVar35;
  int in_GS_OFFSET;
  bool bVar36;
  bool bVar37;
  Idx IVar38;
  reg_errcode_t *in_stack_ffffff44;
  re_dfa_t *local_ac;
  bin_tree_storage_t **local_a4;
  anon_union_4_5_a39f51ca_for_opr local_94;
  reg_errcode_t err;
  re_token_t current_token;
  re_token_t t;
  Idx *local_78;
  re_string_t regexp;
  
  bVar26 = 0;
  dfa = preg->buffer;
  iVar2 = *(int *)(in_GS_OFFSET + 0x14);
  preg->field_0x1c = preg->field_0x1c & 0x90;
  err = _REG_NOERROR;
  preg->syntax = syntax;
  preg->used = 0;
  preg->re_nsub = 0;
  if (preg->allocated < 0x88) {
    dfa = (re_dfa_t *)realloc(dfa,0x88);
    if (dfa == (re_dfa_t *)0x0) {
      rVar12 = _REG_ESPACE;
      goto LAB_00023f97;
    }
    preg->allocated = 0x88;
    preg->buffer = dfa;
  }
  puVar32 = (undefined4 *)((uint)&dfa->nodes_alloc & 0xfffffffc);
  preg->used = 0x88;
  dfa->nodes = (re_token_t *)0x0;
  dfa->subexp_map = (Idx *)0x0;
  uVar23 = (uint)((int)dfa + (0x88 - (int)puVar32)) >> 2;
  for (; uVar23 != 0; uVar23 = uVar23 - 1) {
    *puVar32 = 0;
    puVar32 = puVar32 + (uint)bVar26 * -2 + 1;
  }
  dfa->str_tree_storage_idx = 0x1f;
  if (length < 0xaaaaaaa) {
    sVar35 = length + 1;
    dfa->nodes_alloc = sVar35;
    prVar8 = (re_token_t *)malloc(sVar35 * 8);
    dfa->nodes = prVar8;
    if (length == 0) {
      rVar31 = 0;
      uVar23 = 1;
    }
    else {
      uVar23 = 1;
      do {
        uVar23 = uVar23 * 2;
      } while (uVar23 <= length);
      rVar31 = uVar23 - 1;
    }
    prVar9 = (re_state_table_entry *)calloc(0xc,uVar23);
    dfa->state_hash_mask = rVar31;
    dfa->state_table = prVar9;
    sVar10 = __ctype_get_mb_cur_max();
    dfa->mb_cur_max = sVar10;
    pbVar11 = (byte *)nl_langinfo(0xe);
    if ((((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&
       ((pbVar11[2] & 0xdf) == 0x46)) {
      bVar36 = pbVar11[3] < 0x2d;
      bVar37 = pbVar11[3] == 0x2d;
      iVar24 = 2;
      pbVar11 = pbVar11 + bVar37 + 3;
      pbVar33 = &DAT_00027a0a;
      do {
        if (iVar24 == 0) break;
        iVar24 = iVar24 + -1;
        bVar36 = *pbVar11 < *pbVar33;
        bVar37 = *pbVar11 == *pbVar33;
        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;
        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;
      } while (bVar37);
      if ((!bVar36 && !bVar37) == bVar36) {
        dfa->field_0x58 = dfa->field_0x58 | 4;
      }
    }
    bVar1 = dfa->field_0x58;
    dfa->field_0x58 = bVar1 & 0xf7;
    if (1 < dfa->mb_cur_max) {
      if ((bVar1 & 4) == 0) {
        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);
        dfa->sb_char = pbVar20;
        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;
        iVar24 = 0;
        do {
          uVar23 = iVar24 * 8;
          iVar29 = 0;
          do {
            while( true ) {
              wVar21 = btowc(uVar23);
              if (wVar21 != 0xffffffff) break;
              if ((uVar23 & 0xffffff80) == 0) {
LAB_000240ac:
                dfa->field_0x58 = dfa->field_0x58 | 8;
              }
LAB_000240b4:
              iVar29 = iVar29 + 1;
              uVar23 = uVar23 + 1;
              if (iVar29 == 0x20) goto LAB_00024110;
            }
            puVar27 = (uint *)((int)dfa->sb_char + iVar24);
            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);
            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;
            if (wVar21 != uVar23) goto LAB_000240ac;
            iVar29 = iVar29 + 1;
            uVar23 = uVar23 + 1;
          } while (iVar29 != 0x20);
LAB_00024110:
          iVar24 = iVar24 + 4;
        } while (iVar24 != 0x20);
      }
      else {
        dfa->sb_char = utf8_sb_map;
      }
    }
    if ((dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0)) {
      err = _REG_NOERROR;
      puVar3 = preg->translate;
      ppuVar34 = &regexp.mbs;
      for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {
        *ppuVar34 = (uchar *)0x0;
        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;
      }
      uVar23 = syntax & 0x400000;
      regexp.icase = uVar23 != 0;
      iVar24 = dfa->mb_cur_max;
      regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;
      regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;
      regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;
      regexp.raw_mbs = (uchar *)pattern;
      regexp.raw_len = length;
      regexp.len = length;
      regexp.raw_stop = length;
      regexp.stop = length;
      regexp.trans = puVar3;
      regexp.mb_cur_max = iVar24;
      if (length == 0) {
LAB_00023881:
        if (regexp.mbs_allocated != '\0') {
          pattern = (char *)regexp.mbs;
        }
        regexp.mbs = (uchar *)pattern;
        if (uVar23 == 0) {
          if (iVar24 < 2) {
            IVar38 = regexp.bufs_len;
            regexp.valid_raw_len = regexp.bufs_len;
            if (puVar3 != (uchar *)0x0) {
              if (regexp.len <= regexp.bufs_len) {
                regexp.bufs_len = regexp.len;
              }
              IVar38 = regexp.valid_len;
              regexp.valid_raw_len = regexp.valid_len;
              if (regexp.valid_len < regexp.bufs_len) {
                do {
                  ((uchar *)pattern)[regexp.valid_len] =
                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];
                  regexp.valid_len = regexp.valid_len + 1;
                  IVar38 = regexp.bufs_len;
                  regexp.valid_raw_len = regexp.bufs_len;
                } while (regexp.bufs_len != regexp.valid_len);
              }
            }
          }
          else {
            build_wcs_buffer(&regexp);
            IVar38 = regexp.valid_len;
          }
        }
        else {
          if (1 < iVar24) {
            do {
              rVar12 = build_wcs_upper_buffer(&regexp);
              if (rVar12 != _REG_NOERROR) break;
              IVar38 = regexp.valid_len;
              if (((int)length <= regexp.valid_raw_len) ||
                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;
              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);
            } while (rVar12 == _REG_NOERROR);
            goto LAB_00023d90;
          }
          build_upper_buffer(&regexp);
          IVar38 = regexp.valid_len;
        }
LAB_00023966:
        regexp.valid_len = IVar38;
        err = _REG_NOERROR;
        prVar30 = preg->buffer;
        preg->re_nsub = 0;
        prVar30->syntax = syntax;
        IVar38 = 0x2399b;
        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);
        regexp.cur_idx = regexp.cur_idx + iVar24;
        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,
                              in_stack_ffffff44);
        if (err == _REG_NOERROR) {
          t._4_1_ = 2;
          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,
                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,
                                    (re_token_t *)0x0,(re_dfa_t *)&t);
          pbVar13 = token;
          if (right != (bin_tree_t *)0x0) {
LAB_000239ff:
            local_a4 = &prVar30->str_tree_storage;
            local_ac = (re_dfa_t *)&t;
            t._4_1_ = 0x10;
            pbVar13 = create_token_tree((re_dfa_t *)local_a4,
                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,
                                        (re_token_t *)token,local_ac);
          }
          local_ac = (re_dfa_t *)&t;
          prVar30 = preg->buffer;
          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {
            err = _REG_ESPACE;
            dfa->str_tree = (bin_tree_t *)0x0;
          }
          else {
            dfa->str_tree = pbVar13;
            sVar10 = prVar30->nodes_alloc * 4;
            __size = prVar30->nodes_alloc * 0xc;
            pIVar14 = (Idx *)malloc(sVar10);
            prVar30->nexts = pIVar14;
            pIVar15 = (Idx *)malloc(sVar10);
            prVar30->org_indices = pIVar15;
            prVar16 = (re_node_set *)malloc(__size);
            prVar30->edests = prVar16;
            prVar17 = (re_node_set *)malloc(__size);
            prVar30->eclosures = prVar17;
            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&
                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {
              sVar35 = preg->re_nsub;
              pIVar14 = (Idx *)malloc(sVar35 * 4);
              prVar30->subexp_map = pIVar14;
              if (pIVar14 != (Idx *)0x0) {
                sVar25 = 0;
                if (sVar35 != 0) {
                  do {
                    pIVar14[sVar25] = sVar25;
                    sVar25 = sVar25 + 1;
                  } while (sVar25 != sVar35);
                }
                preorder(prVar30->str_tree,optimize_subexps,prVar30);
                if (preg->re_nsub == 0) {
                  __ptr = (size_t *)prVar30->subexp_map;
LAB_00023b4c:
                  free(__ptr);
                  prVar30->subexp_map = (Idx *)0x0;
                }
                else {
                  __ptr = (size_t *)prVar30->subexp_map;
                  sVar35 = *__ptr;
                  if (sVar35 == 0) {
                    do {
                      sVar35 = sVar35 + 1;
                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;
                    } while (__ptr[sVar35] == sVar35);
                  }
                }
              }
              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);
              if ((rVar12 == _REG_NOERROR) &&
                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))
              {
                preorder(prVar30->str_tree,calc_next,prVar30);
                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);
                if (rVar12 == _REG_NOERROR) {
                  bVar36 = false;
                  sVar35 = 0;
                  do {
                    sVar25 = sVar35;
                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;
LAB_00023be5:
                    while( true ) {
                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;
                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);
                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;
                      sVar35 = sVar25 + 1;
                      if (prVar30->eclosures[sVar25].nelem != 0) break;
                      free(local_78);
                      bVar36 = true;
                      sVar25 = sVar35;
                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;
                    }
                  } while( true );
                }
              }
              goto LAB_00023d90;
            }
            err = _REG_ESPACE;
          }
        }
        else {
          if (right != (bin_tree_t *)0x0) {
            t._4_1_ = 2;
            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,
                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0
                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);
            goto LAB_000239ff;
          }
          dfa->str_tree = (bin_tree_t *)0x0;
          prVar30 = preg->buffer;
        }
      }
      else {
        rVar12 = re_string_realloc_buffers(&regexp,sVar35);
        if (rVar12 == _REG_NOERROR) {
          iVar24 = dfa->mb_cur_max;
          goto LAB_00023881;
        }
LAB_00023d90:
        prVar30 = preg->buffer;
        err = rVar12;
      }
LAB_00023ff8:
      pbVar5 = prVar30->str_tree_storage;
      while (pbVar5 != (bin_tree_storage_t *)0x0) {
        pbVar4 = pbVar5->next;
        free(pbVar5);
        pbVar5 = pbVar4;
      }
      prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;
      prVar30->str_tree_storage_idx = 0x1f;
      prVar30->str_tree = (bin_tree_t *)0x0;
      free(prVar30->org_indices);
      prVar30->org_indices = (Idx *)0x0;
      re_string_destruct(&regexp);
      free_dfa_content(dfa);
      preg->buffer = (re_dfa_t *)0x0;
      preg->allocated = 0;
      rVar12 = err;
      goto LAB_00023f97;
    }
  }
LAB_00023fc0:
  err = _REG_ESPACE;
  goto LAB_00023fc8;
code_r0x00023bf6:
  sVar35 = sVar25 + 1;
  sVar25 = sVar35;
  if (prVar30->nodes_len == sVar35) {
LAB_00023bfe:
    if (!bVar36) {
      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||
          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;
      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);
      prVar30->inveclosures = prVar16;
      if (prVar16 != (re_node_set *)0x0) {
        uVar28 = 0;
        if (sVar35 != 0) goto LAB_00023cf3;
        goto LAB_00023dab;
      }
      err = _REG_ESPACE;
      prVar30 = preg->buffer;
      goto LAB_00023ff8;
    }
LAB_00023c09:
    bVar36 = false;
    sVar25 = 0;
  }
  goto LAB_00023be5;
LAB_00023cf3:
  while( true ) {
    prVar16 = prVar16 + uVar28;
    prVar16->alloc = 0;
    prVar16->nelem = 0;
    prVar16->elems = (Idx *)0x0;
    if (prVar30->nodes_len <= uVar28 + 1) break;
    prVar16 = prVar30->inveclosures;
    uVar28 = uVar28 + 1;
  }
  if (prVar30->nodes_len != 0) {
    prVar16 = prVar30->eclosures;
    uVar28 = 0;
    do {
      iVar24 = 0;
      pIVar14 = prVar16[uVar28].elems;
      if (0 < prVar16[uVar28].nelem) {
        do {
          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);
          if (!_Var7) {
            rVar12 = _REG_ESPACE;
            goto LAB_00023d90;
          }
          prVar16 = prVar30->eclosures;
          iVar24 = iVar24 + 1;
        } while (iVar24 < prVar16[uVar28].nelem);
      }
      uVar28 = uVar28 + 1;
    } while (uVar28 < prVar30->nodes_len);
  }
LAB_00023dab:
  err = _REG_NOERROR;
  bVar26 = (byte)dfa->field_0x58 >> 2 & uVar23 == 0;
  if ((bVar26 != 0) && (preg->translate == (uchar *)0x0)) {
    if (dfa->nodes_len == 0) {
LAB_00024424:
      bVar6 = 0;
    }
    else {
      prVar8 = dfa->nodes;
      bVar6 = 0;
      sVar35 = 0;
      bVar1 = 0;
      prVar22 = prVar8;
      do {
        switch(prVar22->field_0x4) {
        default:
                    /* WARNING: Subroutine does not return */
          abort();
        case 1:
          if ((char)(prVar22->opr).c < '\0') {
            bVar1 = bVar26;
          }
          break;
        case 2:
        case 4:
        case 8:
        case 9:
        case 10:
        case 0xb:
          break;
        case 3:
          iVar24 = 4;
          do {
            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;
            iVar24 = iVar24 + 1;
          } while (iVar24 != 8);
          break;
        case 5:
          bVar6 = bVar26;
          break;
        case 6:
          goto _L3750;
        case 0xc:
          pbVar20 = (prVar22->opr).sbcset;
          if (pbVar20 != (re_bitset_ptr_t)0x20) {
            if (pbVar20 < (re_bitset_ptr_t)0x21) {
              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;
            }
            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {
_L3750:
              goto LAB_00023dcb;
            }
          }
        }
        sVar35 = sVar35 + 1;
        prVar22 = prVar22 + 1;
      } while (sVar35 != dfa->nodes_len);
      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;
      prVar22 = prVar8 + sVar35;
      do {
        if (prVar8->field_0x4 == '\x01') {
          if ((char)(prVar8->opr).c < '\0') {
            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;
          }
        }
        else if (prVar8->field_0x4 == '\x05') {
          prVar8->field_0x4 = 7;
        }
        prVar8 = prVar8 + 1;
      } while (prVar22 != prVar8);
    }
    dfa->mb_cur_max = 1;
    dfa->field_0x58 = (0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9;
  }
LAB_00023dcb:
  iVar24 = dfa->str_tree->first->node_idx;
  dfa->init_node = iVar24;
  aVar18.idx = re_node_set_init_copy((re_node_set *)local_ac,dfa->eclosures + iVar24);
  local_94.idx = aVar18.idx;
  current_token.opr.idx = aVar18.idx;
  if (aVar18.sbcset == (re_bitset_ptr_t)0x0) {
    if ((0 < dfa->nbackref) && (0 < (int)t._4_4_)) {
      iVar24 = 0;
      prVar16 = (re_node_set *)t._4_4_;
LAB_00023e3b:
      do {
        prVar8 = dfa->nodes + local_78[iVar24];
        if (prVar8->field_0x4 == '\x04') {
          prVar17 = (re_node_set *)0x0;
          do {
            prVar22 = dfa->nodes + local_78[(int)prVar17];
            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {
              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;
              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);
              if (IVar38 == 0) {
                local_94.idx = re_node_set_merge((re_node_set *)local_ac,
                                                 dfa->eclosures + (int)prVar17);
                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;
                iVar24 = 1;
                prVar16 = (re_node_set *)t._4_4_;
                if (1 < (int)t._4_4_) goto LAB_00023e3b;
                goto LAB_00023ee2;
              }
              break;
            }
            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);
          } while (prVar16 != prVar17);
        }
        iVar24 = iVar24 + 1;
      } while (iVar24 < (int)prVar16);
    }
LAB_00023ee2:
    prVar19 = re_acquire_state_context
                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0);
    dfa->init_state = prVar19;
    if (prVar19 == (re_dfastate_t *)0x0) {
LAB_000241e0:
      local_94 = current_token.opr;
    }
    else {
      if ((char)prVar19->field_0x34 < '\0') {
        prVar19 = re_acquire_state_context
                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);
        dfa->init_state_word = prVar19;
        prVar19 = re_acquire_state_context
                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);
        dfa->init_state_nl = prVar19;
        prVar19 = re_acquire_state_context
                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);
        dfa->init_state_begbuf = prVar19;
        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||
            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))
        goto LAB_000241e0;
      }
      else {
        dfa->init_state_begbuf = prVar19;
        dfa->init_state_nl = prVar19;
        dfa->init_state_word = prVar19;
      }
      free(local_78);
      local_94.idx = aVar18.idx;
    }
  }
LAB_00023f26:
  prVar30 = preg->buffer;
  pbVar5 = prVar30->str_tree_storage;
  err = (reg_errcode_t)local_94;
  while (pbVar5 != (bin_tree_storage_t *)0x0) {
    pbVar4 = pbVar5->next;
    free(pbVar5);
    pbVar5 = pbVar4;
  }
  prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;
  prVar30->str_tree_storage_idx = 0x1f;
  prVar30->str_tree = (bin_tree_t *)0x0;
  free(prVar30->org_indices);
  prVar30->org_indices = (Idx *)0x0;
  re_string_destruct(&regexp);
  rVar12 = err;
  if (err == _REG_NOERROR) goto LAB_00023f97;
LAB_00023fc8:
  free_dfa_content(dfa);
  preg->buffer = (re_dfa_t *)0x0;
  preg->allocated = 0;
  rVar12 = err;
LAB_00023f97:
  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail_local();
  }
  return rVar12;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

int __regparm3 FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)

{
  int *piVar1;
  byte bVar2;
  undefined4 *puVar3;
  byte bVar4;
  char cVar5;
  void *pvVar6;
  size_t sVar7;
  byte *pbVar8;
  int iVar9;
  int iVar10;
  void *pvVar11;
  void *pvVar12;
  void *pvVar13;
  int iVar14;
  wint_t wVar15;
  uint *puVar16;
  int *__ptr;
  uint uVar17;
  int iVar18;
  int iVar19;
  int *piVar20;
  byte bVar21;
  uint uVar22;
  undefined4 *puVar23;
  byte *pbVar24;
  size_t __size;
  uint *puVar25;
  int in_GS_OFFSET;
  bool bVar26;
  bool bVar27;
  undefined1 *local_ac;
  int local_94;
  int local_8c;
  int local_88 [2];
  undefined1 local_80 [4];
  int local_7c;
  void *local_78;
  int local_74;
  int local_70 [5];
  int local_5c;
  uint local_58;
  uint local_54;
  uint local_50;
  int local_4c;
  uint local_48;
  uint local_44;
  uint local_40;
  uint local_3c;
  int local_34;
  undefined1 local_2c;
  byte local_2b;
  byte local_2a;
  char local_29;
  int local_24;
  int local_20;
  undefined4 uStack_14;
  
  bVar21 = 0;
  uStack_14 = 0x23639;
  __ptr = (int *)*param_1;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;
  local_8c = 0;
  param_1[3] = param_4;
  param_1[2] = 0;
  param_1[6] = 0;
  if ((uint)param_1[1] < 0x88) {
    __ptr = (int *)realloc(__ptr,0x88);
    if (__ptr == (int *)0x0) {
      iVar9 = 0xc;
      goto LAB_00023f97;
    }
    param_1[1] = 0x88;
    *param_1 = (int)__ptr;
  }
  param_1[2] = 0x88;
  *__ptr = 0;
  __ptr[0x21] = 0;
  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);
  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;
      uVar17 != 0; uVar17 = uVar17 - 1) {
    *puVar23 = 0;
    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;
  }
  __ptr[0x10] = 0x1f;
  if (param_3 < 0xaaaaaaa) {
    iVar9 = param_3 + 1;
    __ptr[1] = iVar9;
    pvVar6 = malloc(iVar9 * 8);
    *__ptr = (int)pvVar6;
    if (param_3 == 0) {
      iVar18 = 0;
      uVar17 = 1;
    }
    else {
      uVar17 = 1;
      do {
        uVar17 = uVar17 * 2;
      } while (uVar17 <= param_3);
      iVar18 = uVar17 - 1;
    }
    pvVar6 = calloc(0xc,uVar17);
    __ptr[0x11] = iVar18;
    __ptr[8] = (int)pvVar6;
    sVar7 = __ctype_get_mb_cur_max();
    __ptr[0x17] = sVar7;
    pbVar8 = (byte *)nl_langinfo(0xe);
    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)
       ) {
      bVar26 = pbVar8[3] < 0x2d;
      bVar27 = pbVar8[3] == 0x2d;
      iVar18 = 2;
      pbVar8 = pbVar8 + bVar27 + 3;
      pbVar24 = &DAT_00027a0a;
      do {
        if (iVar18 == 0) break;
        iVar18 = iVar18 + -1;
        bVar26 = *pbVar8 < *pbVar24;
        bVar27 = *pbVar8 == *pbVar24;
        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;
        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;
      } while (bVar27);
      if ((!bVar26 && !bVar27) == bVar26) {
        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;
      }
    }
    bVar2 = *(byte *)(__ptr + 0x16);
    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;
    if (1 < __ptr[0x17]) {
      if ((bVar2 & 4) == 0) {
        pvVar6 = calloc(0x20,1);
        __ptr[0xf] = (int)pvVar6;
        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;
        iVar18 = 0;
        do {
          uVar17 = iVar18 * 8;
          iVar19 = 0;
          do {
            while( true ) {
              wVar15 = btowc(uVar17);
              if (wVar15 != 0xffffffff) break;
              if ((uVar17 & 0xffffff80) == 0) {
LAB_000240ac:
                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;
              }
LAB_000240b4:
              iVar19 = iVar19 + 1;
              uVar17 = uVar17 + 1;
              if (iVar19 == 0x20) goto LAB_00024110;
            }
            *(uint *)(__ptr[0xf] + iVar18) =
                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);
            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;
            if (wVar15 != uVar17) goto LAB_000240ac;
            iVar19 = iVar19 + 1;
            uVar17 = uVar17 + 1;
          } while (iVar19 != 0x20);
LAB_00024110:
          iVar18 = iVar18 + 4;
        } while (iVar18 != 0x20);
      }
      else {
        __ptr[0xf] = (int)&DAT_00027f60;
      }
    }
    if ((*__ptr != 0) && (__ptr[8] != 0)) {
      local_8c = 0;
      iVar18 = param_1[5];
      piVar20 = local_70;
      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {
        *piVar20 = 0;
        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;
      }
      uVar17 = param_4 & 0x400000;
      local_2c = uVar17 != 0;
      iVar19 = __ptr[0x17];
      local_29 = iVar18 != 0 || uVar17 != 0;
      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;
      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;
      local_74 = param_2;
      local_48 = param_3;
      local_44 = param_3;
      local_40 = param_3;
      local_3c = param_3;
      local_34 = iVar18;
      local_24 = iVar19;
      if (param_3 == 0) {
LAB_00023881:
        if (local_29 != '\0') {
          param_2 = local_70[0];
        }
        local_70[0] = param_2;
        if (uVar17 == 0) {
          if (iVar19 < 2) {
            uVar22 = local_50;
            local_54 = local_50;
            if (iVar18 != 0) {
              if ((int)local_44 <= (int)local_50) {
                local_50 = local_44;
              }
              uVar22 = local_58;
              local_54 = local_58;
              if ((int)local_58 < (int)local_50) {
                do {
                  *(undefined1 *)(param_2 + local_58) =
                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));
                  local_58 = local_58 + 1;
                  uVar22 = local_50;
                  local_54 = local_50;
                } while (local_50 != local_58);
              }
            }
          }
          else {
            FUN_00017860();
            uVar22 = local_58;
          }
        }
        else {
          if (1 < iVar19) {
            do {
              iVar9 = FUN_00017a40(&local_74);
              if (iVar9 != 0) break;
              uVar22 = local_58;
              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)
                 ) goto LAB_00023966;
              iVar9 = FUN_000174a0(&local_74,local_50 * 2);
            } while (iVar9 == 0);
            goto LAB_00023d90;
          }
          FUN_000177e0();
          uVar22 = local_58;
        }
LAB_00023966:
        local_58 = uVar22;
        local_8c = 0;
        param_1[6] = 0;
        *(uint *)(*param_1 + 0x80) = param_4;
        iVar9 = FUN_00021720();
        local_4c = local_4c + iVar9;
        iVar9 = FUN_000234b0(param_4,0,&local_8c);
        if (local_8c == 0) {
          local_7c = CONCAT31(local_7c._1_3_,2);
          iVar18 = FUN_00019970(0,local_80);
          iVar10 = iVar18;
          if (iVar9 != 0) {
LAB_000239ff:
            local_ac = local_80;
            local_7c = CONCAT31(local_7c._1_3_,0x10);
            iVar10 = FUN_00019970(iVar18,local_ac);
          }
          local_ac = local_80;
          iVar19 = *param_1;
          if (iVar18 == 0 || iVar10 == 0) {
            local_8c = 0xc;
            __ptr[0xd] = 0;
          }
          else {
            __ptr[0xd] = iVar10;
            sVar7 = *(int *)(iVar19 + 4) * 4;
            __size = *(int *)(iVar19 + 4) * 0xc;
            pvVar6 = malloc(sVar7);
            *(void **)(iVar19 + 0xc) = pvVar6;
            pvVar11 = malloc(sVar7);
            *(void **)(iVar19 + 0x10) = pvVar11;
            pvVar12 = malloc(__size);
            *(void **)(iVar19 + 0x14) = pvVar12;
            pvVar13 = malloc(__size);
            *(void **)(iVar19 + 0x18) = pvVar13;
            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))
               && (pvVar13 != (void *)0x0)) {
              iVar9 = param_1[6];
              pvVar6 = malloc(iVar9 * 4);
              *(void **)(iVar19 + 0x84) = pvVar6;
              if (pvVar6 != (void *)0x0) {
                iVar18 = 0;
                if (iVar9 != 0) {
                  do {
                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;
                    iVar18 = iVar18 + 1;
                  } while (iVar18 != iVar9);
                }
                FUN_000190d0();
                if (param_1[6] == 0) {
                  piVar20 = *(int **)(iVar19 + 0x84);
LAB_00023b4c:
                  free(piVar20);
                  *(undefined4 *)(iVar19 + 0x84) = 0;
                }
                else {
                  piVar20 = *(int **)(iVar19 + 0x84);
                  iVar9 = *piVar20;
                  if (iVar9 == 0) {
                    do {
                      iVar9 = iVar9 + 1;
                      if (iVar9 == param_1[6]) goto LAB_00023b4c;
                    } while (piVar20[iVar9] == iVar9);
                  }
                }
              }
              iVar9 = FUN_00017080();
              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {
                FUN_000190d0();
                iVar9 = FUN_000190d0();
                if (iVar9 == 0) {
                  bVar26 = false;
                  iVar18 = 0;
                  do {
                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;
LAB_00023be5:
                    while( true ) {
                      iVar10 = iVar18 * 0xc;
                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)
                      goto code_r0x00023bf6;
                      iVar9 = FUN_00019310(1);
                      if (iVar9 != 0) goto LAB_00023d90;
                      iVar18 = iVar18 + 1;
                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;
                      free(local_78);
                      bVar26 = true;
                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;
                    }
                  } while( true );
                }
              }
              goto LAB_00023d90;
            }
            local_8c = 0xc;
          }
        }
        else {
          if (iVar9 != 0) {
            local_7c = CONCAT31(local_7c._1_3_,2);
            iVar18 = FUN_00019970(0,local_80);
            goto LAB_000239ff;
          }
          __ptr[0xd] = 0;
          iVar19 = *param_1;
        }
      }
      else {
        iVar9 = FUN_000174a0(&local_74,iVar9);
        if (iVar9 == 0) {
          iVar19 = __ptr[0x17];
          goto LAB_00023881;
        }
LAB_00023d90:
        iVar19 = *param_1;
        local_8c = iVar9;
      }
LAB_00023ff8:
      puVar23 = *(undefined4 **)(iVar19 + 0x38);
      while (puVar23 != (undefined4 *)0x0) {
        puVar3 = (undefined4 *)*puVar23;
        free(puVar23);
        puVar23 = puVar3;
      }
      *(undefined4 *)(iVar19 + 0x38) = 0;
      *(undefined4 *)(iVar19 + 0x40) = 0x1f;
      *(undefined4 *)(iVar19 + 0x34) = 0;
      free(*(void **)(iVar19 + 0x10));
      *(undefined4 *)(iVar19 + 0x10) = 0;
      FUN_000188a0();
      FUN_0001c4f0();
      *param_1 = 0;
      param_1[1] = 0;
      iVar9 = local_8c;
      goto LAB_00023f97;
    }
  }
LAB_00023fc0:
  local_8c = 0xc;
  goto LAB_00023fc8;
code_r0x00023bf6:
  iVar18 = iVar18 + 1;
  if (*(int *)(iVar19 + 8) == iVar18) {
LAB_00023bfe:
    if (!bVar26) {
      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||
          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))
      goto LAB_00023dab;
      pvVar6 = malloc(iVar18 * 0xc);
      *(void **)(iVar19 + 0x1c) = pvVar6;
      if (pvVar6 != (void *)0x0) {
        uVar22 = 0;
        if (iVar18 != 0) goto LAB_00023cf3;
        goto LAB_00023dab;
      }
      local_8c = 0xc;
      iVar19 = *param_1;
      goto LAB_00023ff8;
    }
LAB_00023c09:
    bVar26 = false;
    iVar18 = 0;
  }
  goto LAB_00023be5;
LAB_00023cf3:
  while( true ) {
    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);
    *puVar23 = 0;
    puVar23[1] = 0;
    puVar23[2] = 0;
    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;
    pvVar6 = *(void **)(iVar19 + 0x1c);
    uVar22 = uVar22 + 1;
  }
  if (*(uint *)(iVar19 + 8) != 0) {
    iVar9 = *(int *)(iVar19 + 0x18);
    uVar22 = 0;
    do {
      iVar14 = 0;
      iVar10 = uVar22 * 0xc + iVar9;
      iVar18 = *(int *)(iVar10 + 8);
      if (0 < *(int *)(iVar10 + 4)) {
        do {
          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)
          ;
          if (cVar5 == '\0') {
            iVar9 = 0xc;
            goto LAB_00023d90;
          }
          iVar9 = *(int *)(iVar19 + 0x18);
          iVar14 = iVar14 + 1;
        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));
      }
      uVar22 = uVar22 + 1;
    } while (uVar22 < *(uint *)(iVar19 + 8));
  }
LAB_00023dab:
  local_8c = 0;
  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;
  if ((bVar21 != 0) && (param_1[5] == 0)) {
    if (__ptr[2] == 0) {
LAB_00024424:
      bVar4 = 0;
    }
    else {
      puVar25 = (uint *)*__ptr;
      bVar4 = 0;
      iVar9 = 0;
      bVar2 = 0;
      puVar16 = puVar25;
      do {
        switch((char)puVar16[1]) {
        default:
                    /* WARNING: Subroutine does not return */
          abort();
        case '\x01':
          if ((char)*puVar16 < '\0') {
            bVar2 = bVar21;
          }
          break;
        case '\x02':
        case '\x04':
        case '\b':
        case '\t':
        case '\n':
        case '\v':
          break;
        case '\x03':
          iVar18 = 4;
          do {
            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;
            iVar18 = iVar18 + 1;
          } while (iVar18 != 8);
          break;
        case '\x05':
          bVar4 = bVar21;
          break;
        case '\x06':
          goto code_r0x00024350;
        case '\f':
          uVar17 = *puVar16;
          if (uVar17 != 0x20) {
            if (uVar17 < 0x21) {
              if (uVar17 != 0x10) goto code_r0x00024350;
            }
            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {
code_r0x00024350:
              goto LAB_00023dcb;
            }
          }
        }
        iVar9 = iVar9 + 1;
        puVar16 = puVar16 + 2;
      } while (iVar9 != __ptr[2]);
      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;
      puVar16 = puVar25 + iVar9 * 2;
      do {
        if ((char)puVar25[1] == '\x01') {
          if ((char)*puVar25 < '\0') {
            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;
          }
        }
        else if ((char)puVar25[1] == '\x05') {
          *(char *)(puVar25 + 1) = '\a';
        }
        puVar25 = puVar25 + 2;
      } while (puVar16 != puVar25);
    }
    __ptr[0x17] = 1;
    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;
  }
LAB_00023dcb:
  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);
  __ptr[0x12] = iVar9;
  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);
  local_94 = iVar9;
  local_88[0] = iVar9;
  if (iVar9 == 0) {
    if ((0 < __ptr[0x13]) && (0 < local_7c)) {
      iVar19 = 0;
      iVar18 = local_7c;
LAB_00023e3b:
      do {
        iVar10 = *(int *)((int)local_78 + iVar19 * 4);
        piVar20 = (int *)(*__ptr + iVar10 * 8);
        if ((char)piVar20[1] == '\x04') {
          iVar14 = 0;
          do {
            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);
            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {
              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);
              iVar14 = FUN_00018c70();
              if (iVar14 == 0) {
                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);
                if (local_94 != 0) goto LAB_00023f26;
                iVar19 = 1;
                iVar18 = local_7c;
                if (1 < local_7c) goto LAB_00023e3b;
                goto LAB_00023ee2;
              }
              break;
            }
            iVar14 = iVar14 + 1;
          } while (iVar18 != iVar14);
        }
        iVar19 = iVar19 + 1;
      } while (iVar19 < iVar18);
    }
LAB_00023ee2:
    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);
    __ptr[9] = iVar18;
    if (iVar18 == 0) {
LAB_000241e0:
      local_94 = local_88[0];
    }
    else {
      if (*(char *)(iVar18 + 0x34) < '\0') {
        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);
        __ptr[10] = iVar18;
        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);
        __ptr[0xb] = iVar18;
        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);
        __ptr[0xc] = iVar18;
        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;
      }
      else {
        __ptr[0xc] = iVar18;
        __ptr[0xb] = iVar18;
        __ptr[10] = iVar18;
      }
      free(local_78);
      local_94 = iVar9;
    }
  }
LAB_00023f26:
  iVar9 = *param_1;
  puVar23 = *(undefined4 **)(iVar9 + 0x38);
  local_8c = local_94;
  while (puVar23 != (undefined4 *)0x0) {
    puVar3 = (undefined4 *)*puVar23;
    free(puVar23);
    puVar23 = puVar3;
  }
  *(undefined4 *)(iVar9 + 0x38) = 0;
  *(undefined4 *)(iVar9 + 0x40) = 0x1f;
  *(undefined4 *)(iVar9 + 0x34) = 0;
  free(*(void **)(iVar9 + 0x10));
  *(undefined4 *)(iVar9 + 0x10) = 0;
  FUN_000188a0();
  iVar9 = local_8c;
  if (local_8c == 0) goto LAB_00023f97;
LAB_00023fc8:
  FUN_0001c4f0();
  *param_1 = 0;
  param_1[1] = 0;
  iVar9 = local_8c;
LAB_00023f97:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_000253d0();
  }
  return iVar9;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00011b40
ADD EBX,0xb9c7
SUB ESP,0xac
MOV EBP,dword ptr [EAX]
MOV dword ptr [ESP + 0xc],EAX
MOV dword ptr [ESP + 0x18],EDX
MOV dword ptr [ESP + 0x10],ECX
MOV dword ptr [ESP + 0x8],EBX
MOV ECX,dword ptr GS:[0x14]
MOV dword ptr [ESP + 0x9c],ECX
XOR ECX,ECX
MOV ECX,dword ptr [ESP + 0xc0]
AND byte ptr [EAX + 0x1c],0x90
CMP dword ptr [EAX + 0x4],0x87
MOV dword ptr [ESP + 0x30],0x0
MOV dword ptr [EAX + 0xc],ECX
MOV dword ptr [EAX + 0x8],0x0
MOV dword ptr [EAX + 0x18],0x0
JBE 0x00024210
LEA EDI,[EBP + 0x4]
MOV ECX,EBP
MOV EAX,dword ptr [ESP + 0xc]
AND EDI,0xfffffffc
SUB ECX,EDI
MOV dword ptr [EAX + 0x8],0x88
XOR EAX,EAX
ADD ECX,0x88
MOV dword ptr [EBP],0x0
MOV dword ptr [EBP + 0x84],0x0
SHR ECX,0x2
STOSD.REP ES:EDI
MOV dword ptr [EBP + 0x40],0x1f
CMP dword ptr [ESP + 0x10],0xaaaaaa9
JA 0x00023fc0
MOV ESI,dword ptr [ESP + 0x10]
SUB ESP,0xc
LEA EAX,[ESI + 0x1]
MOV dword ptr [ESP + 0x2c],EAX
MOV dword ptr [EBP + 0x4],EAX
SHL EAX,0x3
PUSH EAX
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x00011220
ADD ESP,0x10
MOV dword ptr [EBP],EAX
TEST ESI,ESI
JZ 0x00024248
MOV EAX,0x1
LEA ESI,[ESI]
ADD EAX,EAX
CMP dword ptr [ESP + 0x10],EAX
JNC 0x00023718
LEA ESI,[EAX + -0x1]
SUB ESP,0x8
PUSH EAX
PUSH 0xc
MOV EDI,dword ptr [ESP + 0x18]
MOV EBX,EDI
CALL 0x00011440
MOV dword ptr [EBP + 0x44],ESI
MOV dword ptr [EBP + 0x20],EAX
CALL 0x00011190
MOV dword ptr [EBP + 0x5c],EAX
MOV dword ptr [ESP],0xe
CALL 0x00011320
ADD ESP,0x10
MOVZX EDX,byte ptr [EAX]
AND EDX,0xffffffdf
CMP DL,0x55
JNZ 0x000237a0
MOVZX EDX,byte ptr [EAX + 0x1]
AND EDX,0xffffffdf
CMP DL,0x54
JNZ 0x000237a0
MOVZX EDX,byte ptr [EAX + 0x2]
AND EDX,0xffffffdf
CMP DL,0x46
JNZ 0x000237a0
XOR EDX,EDX
CMP byte ptr [EAX + 0x3],0x2d
MOV ECX,0x2
SETZ DL
LEA EDI,[EDI + 0xffff8a0a]
LEA ESI,[EAX + EDX*0x1 + 0x3]
CMPSB.REPE ES:EDI,ESI
SETA AL
SBB AL,0x0
TEST AL,AL
JNZ 0x000237a0
OR byte ptr [EBP + 0x58],0x4
LEA ESI,[ESI]
NOP
MOVZX EAX,byte ptr [EBP + 0x58]
MOV EDX,EAX
AND EDX,0xfffffff7
CMP dword ptr [EBP + 0x5c],0x1
MOV byte ptr [EBP + 0x58],DL
JLE 0x000237c7
TEST AL,0x4
JZ 0x00024070
MOV EAX,dword ptr [ESP + 0x8]
LEA EAX,[EAX + 0xffff8f60]
MOV dword ptr [EBP + 0x3c],EAX
MOV EAX,dword ptr [EBP]
TEST EAX,EAX
JZ 0x00023fc0
MOV EAX,dword ptr [EBP + 0x20]
TEST EAX,EAX
JZ 0x00023fc0
MOV EAX,dword ptr [ESP + 0xc]
LEA EBX,[ESP + 0x4c]
MOV ECX,0x13
MOV dword ptr [ESP + 0x30],0x0
MOV EDI,EBX
MOV EBX,dword ptr [ESP + 0x18]
MOV EDX,dword ptr [EAX + 0x14]
LEA EAX,[ESP + 0x48]
MOV dword ptr [ESP + 0x14],EAX
XOR EAX,EAX
STOSD.REP ES:EDI
MOV EAX,dword ptr [ESP + 0xc0]
MOV ESI,EDX
MOV EDI,dword ptr [ESP + 0x10]
MOV dword ptr [ESP + 0x88],EDX
AND EAX,0x400000
MOV dword ptr [ESP + 0x48],EBX
MOV EBX,dword ptr [EBP + 0x5c]
MOV dword ptr [ESP + 0x1c],EAX
SETNZ byte ptr [ESP + 0x90]
OR ESI,EAX
MOVZX EAX,byte ptr [EBP + 0x58]
SETNZ CL
MOV dword ptr [ESP + 0x78],EDI
MOV EDX,EAX
SHR AL,0x3
MOV dword ptr [ESP + 0x74],EDI
SHR DL,0x2
AND EAX,0x1
MOV byte ptr [ESP + 0x93],CL
AND EDX,0x1
MOV dword ptr [ESP + 0x98],EBX
MOV byte ptr [ESP + 0x91],DL
MOV byte ptr [ESP + 0x92],AL
MOV dword ptr [ESP + 0x80],EDI
MOV dword ptr [ESP + 0x7c],EDI
TEST EDI,EDI
JNZ 0x00023c68
MOV EAX,dword ptr [ESP + 0x18]
TEST CL,CL
MOV EDI,dword ptr [ESP + 0x1c]
CMOVNZ EAX,dword ptr [ESP + 0x4c]
MOV dword ptr [ESP + 0x18],EAX
MOV dword ptr [ESP + 0x4c],EAX
TEST EDI,EDI
JZ 0x00023900
CMP EBX,0x1
JLE 0x000241f0
MOV ESI,dword ptr [ESP + 0x10]
MOV EBX,dword ptr [ESP + 0x14]
SUB ESP,0xc
PUSH EBX
CALL 0x00017a40
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00023d90
CMP ESI,dword ptr [ESP + 0x68]
JLE 0x000242c8
MOV EAX,dword ptr [ESP + 0x6c]
MOV EDX,dword ptr [EBP + 0x5c]
ADD EDX,dword ptr [ESP + 0x64]
CMP EAX,EDX
JG 0x000242c8
SUB ESP,0x8
ADD EAX,EAX
PUSH EAX
PUSH EBX
CALL 0x000174a0
ADD ESP,0x10
TEST EAX,EAX
JZ 0x000238ad
JMP 0x00023d90
CMP EBX,0x1
JG 0x00024128
MOV EDX,dword ptr [ESP + 0x6c]
TEST ESI,ESI
JZ 0x00023956
CMP dword ptr [ESP + 0x78],EDX
MOV EAX,dword ptr [ESP + 0x64]
CMOVLE EDX,dword ptr [ESP + 0x78]
CMP EDX,EAX
JLE 0x000243d0
MOV EBX,dword ptr [ESP + 0x18]
JMP 0x00023934
MOV EBX,dword ptr [ESP + 0x4c]
MOV ECX,dword ptr [ESP + 0x48]
MOV ESI,dword ptr [ESP + 0x88]
ADD ECX,EAX
ADD ECX,dword ptr [ESP + 0x60]
MOVZX ECX,byte ptr [ECX]
MOVZX ECX,byte ptr [ESI + ECX*0x1]
MOV byte ptr [EBX + EAX*0x1],CL
ADD EAX,0x1
CMP EDX,EAX
JNZ 0x00023930
MOV dword ptr [ESP + 0x64],EDX
MOV dword ptr [ESP + 0x68],EDX
MOV dword ptr [ESP + 0x30],0x0
MOV ESI,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [ESP + 0xc0]
LEA EDI,[ESP + 0x34]
MOV EDX,dword ptr [ESP + 0x14]
MOV dword ptr [ESP + 0x24],EDI
MOV EBX,dword ptr [ESI]
MOV dword ptr [ESI + 0x18],0x0
MOV ECX,EAX
OR ECX,0x800000
MOV dword ptr [EBX + 0x80],EAX
MOV EAX,EDI
CALL 0x00021720
ADD dword ptr [ESP + 0x70],EAX
SUB ESP,0x4
MOV ECX,EDI
LEA EAX,[ESP + 0x34]
MOV EDX,ESI
PUSH EAX
PUSH 0x0
PUSH dword ptr [ESP + 0xcc]
MOV EAX,dword ptr [ESP + 0x24]
CALL 0x000234b0
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x30]
MOV ESI,EAX
TEST ECX,ECX
JNZ 0x00024270
LEA EAX,[EBX + 0x38]
MOV byte ptr [ESP + 0x40],0x2
SUB ESP,0x8
ADD EBX,0x40
MOV dword ptr [ESP + 0x20],EAX
LEA ECX,[ESP + 0x44]
MOV EDX,EBX
MOV dword ptr [ESP + 0x18],ECX
PUSH ECX
XOR ECX,ECX
PUSH 0x0
CALL 0x00019970
ADD ESP,0x10
MOV EDI,EAX
MOV EDX,EAX
TEST ESI,ESI
JZ 0x00023a20
MOV byte ptr [ESP + 0x40],0x10
SUB ESP,0x8
MOV EDX,EBX
MOV ECX,ESI
PUSH dword ptr [ESP + 0x18]
PUSH EDI
MOV EAX,dword ptr [ESP + 0x28]
CALL 0x00019970
MOV EDX,EDI
ADD ESP,0x10
MOV EDI,EAX
TEST EDX,EDX
MOV EBX,dword ptr [ESP + 0xc]
SETZ DL
TEST EDI,EDI
SETZ AL
MOV ESI,dword ptr [EBX]
OR DL,AL
JNZ 0x000242b0
MOV dword ptr [EBP + 0x34],EDI
MOV EDI,dword ptr [ESI + 0x4]
SUB ESP,0xc
LEA EDX,[EDI*0x4 + 0x0]
LEA EDI,[EDI + EDI*0x2]
PUSH EDX
MOV EBX,dword ptr [ESP + 0x18]
SHL EDI,0x2
MOV dword ptr [ESP + 0x28],EDX
CALL 0x00011220
MOV EDX,dword ptr [ESP + 0x28]
MOV EBX,dword ptr [ESP + 0x18]
MOV dword ptr [ESI + 0xc],EAX
MOV dword ptr [ESP + 0x30],EAX
MOV dword ptr [ESP],EDX
CALL 0x00011220
MOV EBX,dword ptr [ESP + 0x18]
MOV dword ptr [ESI + 0x10],EAX
MOV dword ptr [ESP + 0x28],EAX
MOV dword ptr [ESP],EDI
CALL 0x00011220
MOV EBX,dword ptr [ESP + 0x18]
MOV dword ptr [ESI + 0x14],EAX
MOV dword ptr [ESP + 0x38],EAX
MOV dword ptr [ESP],EDI
CALL 0x00011220
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x20]
MOV EDX,dword ptr [ESP + 0x18]
MOV dword ptr [ESI + 0x18],EAX
TEST ECX,ECX
JZ 0x00023ff0
TEST EDX,EDX
JZ 0x00023ff0
MOV EDX,dword ptr [ESP + 0x28]
TEST EDX,EDX
JZ 0x00023ff0
TEST EAX,EAX
JZ 0x00023ff0
MOV EAX,dword ptr [ESP + 0xc]
SUB ESP,0xc
MOV EDI,dword ptr [EAX + 0x18]
LEA EAX,[EDI*0x4 + 0x0]
PUSH EAX
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x00011220
ADD ESP,0x10
MOV dword ptr [ESI + 0x84],EAX
TEST EAX,EAX
JZ 0x00023b70
XOR EDX,EDX
TEST EDI,EDI
JZ 0x00023b0a
LEA ESI,[ESI]
MOV dword ptr [EAX + EDX*0x4],EDX
ADD EDX,0x1
CMP EDX,EDI
JNZ 0x00023b00
MOV EBX,dword ptr [ESP + 0x8]
MOV EAX,dword ptr [ESI + 0x34]
MOV ECX,ESI
LEA EDX,[EBX + 0xfffe9de0]
CALL 0x000190d0
MOV EAX,dword ptr [ESP + 0xc]
MOV ECX,dword ptr [EAX + 0x18]
TEST ECX,ECX
JZ 0x000243e0
MOV EDX,dword ptr [ESI + 0x84]
MOV EAX,dword ptr [EDX]
TEST EAX,EAX
JZ 0x00023b45
JMP 0x00023b70
CMP dword ptr [EDX + EAX*0x4],EAX
JNZ 0x00023b70
ADD EAX,0x1
CMP EAX,ECX
JNZ 0x00023b40
SUB ESP,0xc
PUSH EDX
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x000110a0
ADD ESP,0x10
MOV dword ptr [ESI + 0x84],0x0
LEA ESI,[ESI]
LEA ESI,[ESI]
MOV EBX,dword ptr [ESP + 0x8]
MOV EAX,dword ptr [ESI + 0x34]
MOV ECX,dword ptr [ESP + 0xc]
LEA EDX,[EBX + 0xfffead20]
CALL 0x00017080
TEST EAX,EAX
JNZ 0x00023d90
MOV EAX,dword ptr [ESI + 0x34]
MOV ECX,ESI
LEA EDX,[EBX + 0xfffed460]
CALL 0x00017080
TEST EAX,EAX
JNZ 0x00023d90
MOV EAX,dword ptr [ESI + 0x34]
MOV ECX,ESI
LEA EDX,[EBX + 0xfffe9e70]
CALL 0x000190d0
MOV EAX,dword ptr [ESI + 0x34]
MOV ECX,ESI
LEA EDX,[EBX + 0xfffe99d0]
CALL 0x000190d0
MOV dword ptr [ESP + 0x28],EAX
TEST EAX,EAX
JNZ 0x000243a0
MOV byte ptr [ESP + 0x18],0x0
XOR EDI,EDI
LEA ESI,[ESI]
CMP dword ptr [ESI + 0x8],EDI
JZ 0x00023bfe
LEA EBX,[EDI + EDI*0x2]
MOV EAX,dword ptr [ESI + 0x18]
SHL EBX,0x2
MOV EAX,dword ptr [EAX + EBX*0x1 + 0x4]
TEST EAX,EAX
JZ 0x00023c18
ADD EDI,0x1
CMP dword ptr [ESI + 0x8],EDI
JNZ 0x00023be5
CMP byte ptr [ESP + 0x18],0x0
JZ 0x00023c98
MOV byte ptr [ESP + 0x18],0x0
XOR EDI,EDI
JMP 0x00023be5
SUB ESP,0xc
MOV ECX,EDI
MOV EDX,ESI
PUSH 0x1
MOV EAX,dword ptr [ESP + 0x20]
CALL 0x00019310
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00023d90
MOV EAX,dword ptr [ESI + 0x18]
ADD EDI,0x1
MOV EAX,dword ptr [EAX + EBX*0x1 + 0x4]
TEST EAX,EAX
JNZ 0x00023be0
SUB ESP,0xc
PUSH dword ptr [ESP + 0x50]
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x000110a0
ADD ESP,0x10
MOV byte ptr [ESP + 0x18],0x1
CMP dword ptr [ESI + 0x8],EDI
JNZ 0x00023be5
JMP 0x00023c09
SUB ESP,0x8
PUSH dword ptr [ESP + 0x28]
PUSH dword ptr [ESP + 0x20]
CALL 0x000174a0
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00023d90
MOVZX ECX,byte ptr [ESP + 0x93]
MOV EBX,dword ptr [EBP + 0x5c]
JMP 0x00023881
MOV EAX,dword ptr [ESP + 0xc]
TEST byte ptr [EAX + 0x1c],0x10
JNZ 0x00023da0
MOV EBX,dword ptr [EAX + 0x18]
TEST EBX,EBX
JZ 0x00023da0
TEST byte ptr [ESI + 0x58],0x1
JZ 0x00023da0
LEA EAX,[EDI + EDI*0x2]
SUB ESP,0xc
SHL EAX,0x2
PUSH EAX
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x00011220
ADD ESP,0x10
MOV dword ptr [ESI + 0x1c],EAX
TEST EAX,EAX
JZ 0x000243f0
XOR EDX,EDX
TEST EDI,EDI
JNZ 0x00023cf3
JMP 0x00023dab
MOV EAX,dword ptr [ESI + 0x1c]
LEA ECX,[EDX + EDX*0x2]
ADD EDX,0x1
LEA EAX,[EAX + ECX*0x4]
MOV dword ptr [EAX],0x0
MOV dword ptr [EAX + 0x4],0x0
MOV dword ptr [EAX + 0x8],0x0
MOV EAX,dword ptr [ESI + 0x8]
CMP EAX,EDX
JA 0x00023cf0
TEST EAX,EAX
JZ 0x00023dab
XOR ECX,ECX
MOV EAX,dword ptr [ESI + 0x18]
MOV dword ptr [ESP + 0x2c],EBP
MOV EBP,ECX
LEA EDI,[EBP + EBP*0x2]
XOR EBX,EBX
LEA ECX,[EDI*0x4 + 0x0]
MOV dword ptr [ESP + 0x20],ECX
ADD ECX,EAX
MOV EDX,dword ptr [ECX + 0x4]
MOV EDI,dword ptr [ECX + 0x8]
TEST EDX,EDX
JG 0x00023d64
JMP 0x00024258
MOV EAX,dword ptr [ESI + 0x18]
MOV ECX,dword ptr [ESP + 0x20]
ADD EBX,0x1
CMP EBX,dword ptr [EAX + ECX*0x1 + 0x4]
JGE 0x00024258
SUB ESP,0x8
PUSH EBP
MOV EAX,dword ptr [EDI + EBX*0x4]
LEA ECX,[EAX + EAX*0x2]
MOV EAX,dword ptr [ESI + 0x1c]
LEA EAX,[EAX + ECX*0x4]
PUSH EAX
CALL 0x00017540
ADD ESP,0x10
TEST AL,AL
JNZ 0x00023d50
MOV EBP,dword ptr [ESP + 0x2c]
MOV EAX,0xc
LEA ESI,[ESI]
MOV dword ptr [ESP + 0x30],EAX
MOV EAX,dword ptr [ESP + 0xc]
MOV ESI,dword ptr [EAX]
JMP 0x00023ff8
MOV ECX,dword ptr [ESI + 0x4c]
TEST ECX,ECX
JNZ 0x00023cbb
MOV EAX,dword ptr [ESP + 0x1c]
MOVZX EBX,byte ptr [EBP + 0x58]
MOV dword ptr [ESP + 0x30],0x0
SHR BL,0x2
TEST EAX,EAX
SETZ AL
AND BL,AL
JNZ 0x00024140
MOV EAX,dword ptr [EBP + 0x34]
SUB ESP,0x8
MOV EAX,dword ptr [EAX + 0xc]
MOV EAX,dword ptr [EAX + 0x1c]
MOV dword ptr [EBP + 0x48],EAX
LEA EDX,[EAX + EAX*0x2]
MOV EAX,dword ptr [EBP + 0x18]
LEA EAX,[EAX + EDX*0x4]
PUSH EAX
PUSH dword ptr [ESP + 0x1c]
CALL 0x00019db0
MOV dword ptr [ESP + 0x38],EAX
MOV dword ptr [ESP + 0x44],EAX
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00023f26
MOV EDI,dword ptr [EBP + 0x4c]
TEST EDI,EDI
JLE 0x00023ee2
MOV EDI,dword ptr [ESP + 0x40]
TEST EDI,EDI
JLE 0x00023ee2
LEA EAX,[ESP + 0x44]
XOR EBX,EBX
MOV dword ptr [ESP + 0x2c],EAX
MOV EAX,EDI
MOV EDI,EBP
MOV EBP,EAX
JMP 0x00023e3b
ADD EBX,0x1
CMP EBP,EBX
JLE 0x00023ee0
MOV ECX,dword ptr [ESP + 0x44]
MOV ESI,dword ptr [EDI]
MOV EDX,dword ptr [ECX + EBX*0x4]
LEA EAX,[ESI + EDX*0x8]
CMP byte ptr [EAX + 0x4],0x4
MOV dword ptr [ESP + 0x18],EAX
JNZ 0x00023e30
XOR EAX,EAX
MOV dword ptr [ESP + 0x1c],ECX
MOV dword ptr [ESP + 0x20],EDX
JMP 0x00023e67
ADD EAX,0x1
CMP EBP,EAX
JZ 0x00023e30
MOV ECX,dword ptr [ESP + 0x1c]
MOV EDX,dword ptr [ECX + EAX*0x4]
LEA EDX,[ESI + EDX*0x8]
CMP byte ptr [EDX + 0x4],0x9
JNZ 0x00023e60
MOV ECX,dword ptr [ESP + 0x18]
MOV ECX,dword ptr [ECX]
CMP dword ptr [EDX],ECX
JNZ 0x00023e60
MOV EDX,dword ptr [ESP + 0x20]
MOV ESI,dword ptr [EDI + 0x14]
LEA EAX,[EDX + EDX*0x2]
MOV EDX,dword ptr [ESP + 0x2c]
LEA EAX,[ESI + EAX*0x4]
MOV EAX,dword ptr [EAX + 0x8]
MOV ESI,dword ptr [EAX]
MOV EAX,EBP
MOV ECX,ESI
CALL 0x00018c70
TEST EAX,EAX
JNZ 0x00023e30
MOV EAX,dword ptr [EDI + 0x18]
LEA EDX,[ESI + ESI*0x2]
SUB ESP,0x8
LEA EAX,[EAX + EDX*0x4]
PUSH EAX
PUSH dword ptr [ESP + 0x1c]
CALL 0x00019140
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x000243b0
MOV EBP,dword ptr [ESP + 0x40]
MOV EBX,0x1
CMP EBP,EBX
JG 0x00023e3b
LEA ESI,[ESI]
LEA ESI,[ESI]
MOV EBP,EDI
PUSH 0x0
PUSH dword ptr [ESP + 0x14]
PUSH EBP
PUSH dword ptr [ESP + 0x30]
CALL 0x0001a040
ADD ESP,0x10
MOV dword ptr [EBP + 0x24],EAX
TEST EAX,EAX
JZ 0x000241e0
CMP byte ptr [EAX + 0x34],0x0
JS 0x00024190
MOV dword ptr [EBP + 0x30],EAX
MOV dword ptr [EBP + 0x2c],EAX
MOV dword ptr [EBP + 0x28],EAX
SUB ESP,0xc
PUSH dword ptr [ESP + 0x50]
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x000110a0
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0x28]
MOV dword ptr [ESP + 0x30],EAX
MOV EAX,dword ptr [ESP + 0xc]
MOV EDI,dword ptr [EAX]
MOV EAX,dword ptr [EDI + 0x38]
TEST EAX,EAX
JZ 0x00023f58
LEA ESI,[ESI]
NOP
SUB ESP,0xc
MOV ESI,dword ptr [EAX]
PUSH EAX
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x000110a0
MOV EAX,ESI
ADD ESP,0x10
TEST ESI,ESI
JNZ 0x00023f40
SUB ESP,0xc
MOV dword ptr [EDI + 0x38],0x0
MOV dword ptr [EDI + 0x40],0x1f
MOV dword ptr [EDI + 0x34],0x0
PUSH dword ptr [EDI + 0x10]
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x000110a0
MOV dword ptr [EDI + 0x10],0x0
MOV EAX,dword ptr [ESP + 0x24]
CALL 0x000188a0
MOV EAX,dword ptr [ESP + 0x40]
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00023fc8
MOV EBX,dword ptr [ESP + 0x9c]
XOR EBX,dword ptr GS:[0x14]
JNZ 0x00024452
ADD ESP,0xac
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV dword ptr [ESP + 0x30],0xc
MOV EAX,EBP
CALL 0x0001c4f0
MOV EAX,dword ptr [ESP + 0xc]
MOV dword ptr [EAX],0x0
MOV dword ptr [EAX + 0x4],0x0
MOV EAX,dword ptr [ESP + 0x30]
JMP 0x00023f97
MOV dword ptr [ESP + 0x30],0xc
MOV EAX,dword ptr [ESI + 0x38]
TEST EAX,EAX
JZ 0x00024018
NOP
SUB ESP,0xc
MOV EDI,dword ptr [EAX]
PUSH EAX
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x000110a0
MOV EAX,EDI
ADD ESP,0x10
TEST EDI,EDI
JNZ 0x00024000
SUB ESP,0xc
MOV dword ptr [ESI + 0x38],0x0
MOV dword ptr [ESI + 0x40],0x1f
MOV dword ptr [ESI + 0x34],0x0
PUSH dword ptr [ESI + 0x10]
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x000110a0
MOV dword ptr [ESI + 0x10],0x0
MOV EAX,dword ptr [ESP + 0x24]
CALL 0x000188a0
MOV EAX,EBP
CALL 0x0001c4f0
MOV EAX,dword ptr [ESP + 0x1c]
MOV dword ptr [EAX],0x0
MOV dword ptr [EAX + 0x4],0x0
MOV EAX,dword ptr [ESP + 0x40]
ADD ESP,0x10
JMP 0x00023f97
SUB ESP,0x8
PUSH 0x1
PUSH 0x20
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x00011440
ADD ESP,0x10
MOV dword ptr [EBP + 0x3c],EAX
TEST EAX,EAX
JZ 0x00023fc0
MOV dword ptr [ESP + 0x14],EBP
XOR EDI,EDI
LEA ESI,[ESI]
LEA ESI,[EDI*0x8 + 0x0]
XOR EBP,EBP
JMP 0x000240bf
TEST EDX,EDX
JNZ 0x000240b4
MOV EAX,dword ptr [ESP + 0x14]
OR byte ptr [EAX + 0x58],0x8
ADD EBP,0x1
ADD ESI,0x1
CMP EBP,0x20
JZ 0x00024110
SUB ESP,0xc
PUSH ESI
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x000112d0
MOV EDX,ESI
ADD ESP,0x10
AND EDX,0xffffff80
CMP EAX,-0x1
JZ 0x000240a8
MOV ECX,dword ptr [ESP + 0x14]
MOV EBX,dword ptr [ECX + 0x3c]
MOV ECX,EBP
ADD EBX,EDI
MOV dword ptr [ESP + 0x1c],EBX
MOV EBX,0x1
SHL EBX,CL
MOV ECX,EBX
MOV EBX,dword ptr [ESP + 0x1c]
OR dword ptr [EBX],ECX
TEST EDX,EDX
JNZ 0x000240b4
CMP EAX,ESI
JNZ 0x000240ac
ADD EBP,0x1
ADD ESI,0x1
CMP EBP,0x20
JNZ 0x000240bf
LEA ESI,[ESI]
ADD EDI,0x4
CMP EDI,0x20
JNZ 0x00024098
MOV EBP,dword ptr [ESP + 0x14]
JMP 0x000237c7
MOV EAX,dword ptr [ESP + 0x14]
CALL 0x00017860
MOV dword ptr [ESP + 0x30],0x0
JMP 0x00023966
MOV EAX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [EAX + 0x14]
TEST EAX,EAX
JNZ 0x00023dcb
MOV ESI,dword ptr [EBP + 0x8]
TEST ESI,ESI
JZ 0x00024424
MOV EDI,dword ptr [EBP]
MOV EDX,dword ptr [ESP + 0x28]
MOV byte ptr [ESP + 0x20],0x0
MOV dword ptr [ESP + 0x1c],EBP
MOV dword ptr [ESP + 0x28],EDI
MOV EAX,EDI
CMP byte ptr [EAX + 0x4],0xc
JA 0x0001147e
MOV EDI,dword ptr [ESP + 0x8]
MOVZX ECX,byte ptr [EAX + 0x4]
MOV EBP,dword ptr [EDI + ECX*0x4 + 0xffff8eac]
ADD EBP,EDI
JMP EBP
PUSH 0x1
MOV ESI,dword ptr [ESP + 0x14]
PUSH ESI
PUSH EBP
MOV EBX,dword ptr [ESP + 0x30]
PUSH EBX
CALL 0x0001a040
MOV dword ptr [EBP + 0x28],EAX
PUSH 0x2
PUSH ESI
PUSH EBP
PUSH EBX
CALL 0x0001a040
ADD ESP,0x20
MOV dword ptr [EBP + 0x2c],EAX
PUSH 0x6
PUSH ESI
PUSH EBP
PUSH EBX
CALL 0x0001a040
MOV ECX,dword ptr [EBP + 0x28]
ADD ESP,0x10
MOV dword ptr [EBP + 0x30],EAX
TEST ECX,ECX
JZ 0x000241e0
MOV EDX,dword ptr [EBP + 0x2c]
TEST EDX,EDX
JZ 0x000241e0
TEST EAX,EAX
JNZ 0x00023f13
LEA ESI,[ESI]
NOP
MOV EAX,dword ptr [ESP + 0x34]
MOV dword ptr [ESP + 0x28],EAX
JMP 0x00023f26
MOV EAX,dword ptr [ESP + 0x14]
CALL 0x000177e0
MOV dword ptr [ESP + 0x30],0x0
JMP 0x00023966
SUB ESP,0x8
PUSH 0x88
PUSH EBP
MOV EBX,dword ptr [ESP + 0x18]
CALL 0x00011210
ADD ESP,0x10
MOV EBP,EAX
TEST EAX,EAX
JZ 0x00024408
MOV EAX,dword ptr [ESP + 0xc]
MOV dword ptr [EAX + 0x4],0x88
MOV dword ptr [EAX],EBP
JMP 0x00023698
XOR ESI,ESI
MOV EAX,0x1
JMP 0x00023723
ADD EBP,0x1
CMP dword ptr [ESI + 0x8],EBP
JA 0x00023d2a
MOV EBP,dword ptr [ESP + 0x2c]
JMP 0x00023dab
TEST EAX,EAX
JZ 0x00024412
LEA EAX,[EBX + 0x38]
MOV byte ptr [ESP + 0x40],0x2
SUB ESP,0x8
ADD EBX,0x40
MOV dword ptr [ESP + 0x20],EAX
LEA ECX,[ESP + 0x44]
MOV EDX,EBX
MOV dword ptr [ESP + 0x18],ECX
PUSH ECX
XOR ECX,ECX
PUSH 0x0
CALL 0x00019970
ADD ESP,0x10
MOV EDI,EAX
JMP 0x000239ff
MOV dword ptr [ESP + 0x30],0xc
MOV dword ptr [EBP + 0x34],0x0
JMP 0x00023ff8
MOV dword ptr [ESP + 0x30],0x0
JMP 0x00023966
MOV EAX,dword ptr [ESP + 0x28]
JMP 0x00023d90
MOV EBP,EDI
MOV dword ptr [ESP + 0x28],EAX
JMP 0x00023f26
MOV EDX,EAX
JMP 0x00023956
MOV EDX,dword ptr [ESI + 0x84]
JMP 0x00023b4c
MOV EAX,dword ptr [ESP + 0xc]
MOV dword ptr [ESP + 0x30],0xc
MOV ESI,dword ptr [EAX]
JMP 0x00023ff8
MOV EAX,0xc
JMP 0x00023f97
MOV EAX,dword ptr [ESP + 0xc]
MOV dword ptr [EBP + 0x34],0x0
MOV ESI,dword ptr [EAX]
JMP 0x00023ff8
MOV byte ptr [ESP + 0x20],0x0
MOV EAX,dword ptr [EBP + 0x4c]
MOVZX EDX,byte ptr [EBP + 0x58]
MOV dword ptr [EBP + 0x5c],0x1
TEST EAX,EAX
SETG AL
OR AL,byte ptr [ESP + 0x20]
AND EDX,0xfffffff9
AND EAX,0x1
ADD EAX,EAX
OR EAX,EDX
MOV byte ptr [EBP + 0x58],AL
JMP 0x00023dcb
CALL 0x000253d0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint __regparm3 FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  int *piVar1;\n  byte bVar2;\n  undefined4 *puVar3;\n  byte bVar4;\n  char cVar5;\n  void *pvVar6;\n  size_t sVar7;\n  byte *pbVar8;\n  int iVar9;\n  int iVar10;\n  void *pvVar11;\n  void *pvVar12;\n  void *pvVar13;\n  int iVar14;\n  wint_t wVar15;\n  uint *puVar16;\n  int *__ptr;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  int *piVar20;\n  byte bVar21;\n  uint uVar22;\n  undefined4 *puVar23;\n  byte *pbVar24;\n  size_t __size;\n  uint *puVar25;\n  int in_GS_OFFSET;\n  bool bVar26;\n  bool bVar27;\n  undefined1 *local_ac;\n  int local_94;\n  int local_8c;\n  int local_88 [2];\n  undefined1 local_80 [4];\n  int local_7c;\n  void *local_78;\n  int local_74;\n  int local_70 [5];\n  int local_5c;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  int local_4c;\n  uint local_48;\n  uint local_44;\n  uint local_40;\n  uint local_3c;\n  int local_34;\n  undefined1 local_2c;\n  byte local_2b;\n  byte local_2a;\n  char local_29;\n  int local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar21 = 0;\n  uStack_14 = 0x23639;\n  __ptr = (int *)*param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;\n  local_8c = 0;\n  param_1[3] = param_4;\n  param_1[2] = 0;\n  param_1[6] = 0;\n  if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }\n  param_1[2] = 0x88;\n  *__ptr = 0;\n  __ptr[0x21] = 0;\n  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);\n  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }\n  __ptr[0x10] = 0x1f;\n  if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  local_8c = 0xc;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  iVar18 = iVar18 + 1;\n  if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }\n  if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }\nLAB_00023dab:\n  local_8c = 0;\n  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;\n  if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }\nLAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);\n  __ptr[0x12] = iVar9;\n  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);\n  local_94 = iVar9;\n  local_88[0] = iVar9;\n  if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }\nLAB_00023f26:\n  iVar9 = *param_1;\n  puVar23 = *(undefined4 **)(iVar9 + 0x38);\n  local_8c = local_94;\n  while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }\n  *(undefined4 *)(iVar9 + 0x38) = 0;\n  *(undefined4 *)(iVar9 + 0x40) = 0x1f;\n  *(undefined4 *)(iVar9 + 0x34) = 0;\n  free(*(void **)(iVar9 + 0x10));\n  *(undefined4 *)(iVar9 + 0x10) = 0;\n  FUN_000188a0();\n  iVar9 = local_8c;\n  if (local_8c == 0) goto LAB_00023f97;\nLAB_00023fc8:\n  FUN_0001c4f0();\n  *param_1 = 0;\n  param_1[1] = 0;\n  iVar9 = local_8c;\nLAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000253d0();\n  }\n  return iVar9;\n}\n\n" comment (function_definition "int __regparm3 FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  int *piVar1;\n  byte bVar2;\n  undefined4 *puVar3;\n  byte bVar4;\n  char cVar5;\n  void *pvVar6;\n  size_t sVar7;\n  byte *pbVar8;\n  int iVar9;\n  int iVar10;\n  void *pvVar11;\n  void *pvVar12;\n  void *pvVar13;\n  int iVar14;\n  wint_t wVar15;\n  uint *puVar16;\n  int *__ptr;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  int *piVar20;\n  byte bVar21;\n  uint uVar22;\n  undefined4 *puVar23;\n  byte *pbVar24;\n  size_t __size;\n  uint *puVar25;\n  int in_GS_OFFSET;\n  bool bVar26;\n  bool bVar27;\n  undefined1 *local_ac;\n  int local_94;\n  int local_8c;\n  int local_88 [2];\n  undefined1 local_80 [4];\n  int local_7c;\n  void *local_78;\n  int local_74;\n  int local_70 [5];\n  int local_5c;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  int local_4c;\n  uint local_48;\n  uint local_44;\n  uint local_40;\n  uint local_3c;\n  int local_34;\n  undefined1 local_2c;\n  byte local_2b;\n  byte local_2a;\n  char local_29;\n  int local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar21 = 0;\n  uStack_14 = 0x23639;\n  __ptr = (int *)*param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;\n  local_8c = 0;\n  param_1[3] = param_4;\n  param_1[2] = 0;\n  param_1[6] = 0;\n  if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }\n  param_1[2] = 0x88;\n  *__ptr = 0;\n  __ptr[0x21] = 0;\n  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);\n  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }\n  __ptr[0x10] = 0x1f;\n  if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  local_8c = 0xc;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  iVar18 = iVar18 + 1;\n  if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }\n  if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }\nLAB_00023dab:\n  local_8c = 0;\n  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;\n  if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }\nLAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);\n  __ptr[0x12] = iVar9;\n  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);\n  local_94 = iVar9;\n  local_88[0] = iVar9;\n  if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }\nLAB_00023f26:\n  iVar9 = *param_1;\n  puVar23 = *(undefined4 **)(iVar9 + 0x38);\n  local_8c = local_94;\n  while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }\n  *(undefined4 *)(iVar9 + 0x38) = 0;\n  *(undefined4 *)(iVar9 + 0x40) = 0x1f;\n  *(undefined4 *)(iVar9 + 0x34) = 0;\n  free(*(void **)(iVar9 + 0x10));\n  *(undefined4 *)(iVar9 + 0x10) = 0;\n  FUN_000188a0();\n  iVar9 = local_8c;\n  if (local_8c == 0) goto LAB_00023f97;\nLAB_00023fc8:\n  FUN_0001c4f0();\n  *param_1 = 0;\n  param_1[1] = 0;\n  iVar9 = local_8c;\nLAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000253d0();\n  }\n  return iVar9;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)" identifier (parameter_list "(int *param_1,int param_2,uint param_3,uint param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  int *piVar1;\n  byte bVar2;\n  undefined4 *puVar3;\n  byte bVar4;\n  char cVar5;\n  void *pvVar6;\n  size_t sVar7;\n  byte *pbVar8;\n  int iVar9;\n  int iVar10;\n  void *pvVar11;\n  void *pvVar12;\n  void *pvVar13;\n  int iVar14;\n  wint_t wVar15;\n  uint *puVar16;\n  int *__ptr;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  int *piVar20;\n  byte bVar21;\n  uint uVar22;\n  undefined4 *puVar23;\n  byte *pbVar24;\n  size_t __size;\n  uint *puVar25;\n  int in_GS_OFFSET;\n  bool bVar26;\n  bool bVar27;\n  undefined1 *local_ac;\n  int local_94;\n  int local_8c;\n  int local_88 [2];\n  undefined1 local_80 [4];\n  int local_7c;\n  void *local_78;\n  int local_74;\n  int local_70 [5];\n  int local_5c;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  int local_4c;\n  uint local_48;\n  uint local_44;\n  uint local_40;\n  uint local_3c;\n  int local_34;\n  undefined1 local_2c;\n  byte local_2b;\n  byte local_2a;\n  char local_29;\n  int local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar21 = 0;\n  uStack_14 = 0x23639;\n  __ptr = (int *)*param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;\n  local_8c = 0;\n  param_1[3] = param_4;\n  param_1[2] = 0;\n  param_1[6] = 0;\n  if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }\n  param_1[2] = 0x88;\n  *__ptr = 0;\n  __ptr[0x21] = 0;\n  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);\n  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }\n  __ptr[0x10] = 0x1f;\n  if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  local_8c = 0xc;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  iVar18 = iVar18 + 1;\n  if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }\n  if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }\nLAB_00023dab:\n  local_8c = 0;\n  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;\n  if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }\nLAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);\n  __ptr[0x12] = iVar9;\n  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);\n  local_94 = iVar9;\n  local_88[0] = iVar9;\n  if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }\nLAB_00023f26:\n  iVar9 = *param_1;\n  puVar23 = *(undefined4 **)(iVar9 + 0x38);\n  local_8c = local_94;\n  while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }\n  *(undefined4 *)(iVar9 + 0x38) = 0;\n  *(undefined4 *)(iVar9 + 0x40) = 0x1f;\n  *(undefined4 *)(iVar9 + 0x34) = 0;\n  free(*(void **)(iVar9 + 0x10));\n  *(undefined4 *)(iVar9 + 0x10) = 0;\n  FUN_000188a0();\n  iVar9 = local_8c;\n  if (local_8c == 0) goto LAB_00023f97;\nLAB_00023fc8:\n  FUN_0001c4f0();\n  *param_1 = 0;\n  param_1[1] = 0;\n  iVar9 = local_8c;\nLAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000253d0();\n  }\n  return iVar9;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "char cVar5;" primitive_type identifier ;) (declaration "void *pvVar6;" primitive_type (pointer_declarator "*pvVar6" * identifier) ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "void *pvVar11;" primitive_type (pointer_declarator "*pvVar11" * identifier) ;) (declaration "void *pvVar12;" primitive_type (pointer_declarator "*pvVar12" * identifier) ;) (declaration "void *pvVar13;" primitive_type (pointer_declarator "*pvVar13" * identifier) ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "wint_t wVar15;" type_identifier identifier ;) (declaration "uint *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "int *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "int *piVar20;" primitive_type (pointer_declarator "*piVar20" * identifier) ;) (declaration "byte bVar21;" type_identifier identifier ;) (declaration "uint uVar22;" type_identifier identifier ;) (declaration "undefined4 *puVar23;" type_identifier (pointer_declarator "*puVar23" * identifier) ;) (declaration "byte *pbVar24;" type_identifier (pointer_declarator "*pbVar24" * identifier) ;) (declaration "size_t __size;" primitive_type identifier ;) (declaration "uint *puVar25;" type_identifier (pointer_declarator "*puVar25" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar26;" primitive_type identifier ;) (declaration "bool bVar27;" primitive_type identifier ;) (declaration "undefined1 *local_ac;" type_identifier (pointer_declarator "*local_ac" * identifier) ;) (declaration "int local_94;" primitive_type identifier ;) (declaration "int local_8c;" primitive_type identifier ;) (declaration "int local_88 [2];" primitive_type (array_declarator "local_88 [2]" identifier [ number_literal ]) ;) (declaration "undefined1 local_80 [4];" type_identifier (array_declarator "local_80 [4]" identifier [ number_literal ]) ;) (declaration "int local_7c;" primitive_type identifier ;) (declaration "void *local_78;" primitive_type (pointer_declarator "*local_78" * identifier) ;) (declaration "int local_74;" primitive_type identifier ;) (declaration "int local_70 [5];" primitive_type (array_declarator "local_70 [5]" identifier [ number_literal ]) ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "uint local_58;" type_identifier identifier ;) (declaration "uint local_54;" type_identifier identifier ;) (declaration "uint local_50;" type_identifier identifier ;) (declaration "int local_4c;" primitive_type identifier ;) (declaration "uint local_48;" type_identifier identifier ;) (declaration "uint local_44;" type_identifier identifier ;) (declaration "uint local_40;" type_identifier identifier ;) (declaration "uint local_3c;" type_identifier identifier ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "undefined1 local_2c;" type_identifier identifier ;) (declaration "byte local_2b;" type_identifier identifier ;) (declaration "byte local_2a;" type_identifier identifier ;) (declaration "char local_29;" primitive_type identifier ;) (declaration "int local_24;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "bVar21 = 0;" (assignment_expression "bVar21 = 0" identifier = number_literal) ;) (expression_statement "uStack_14 = 0x23639;" (assignment_expression "uStack_14 = 0x23639" identifier = number_literal) ;) (expression_statement "__ptr = (int *)*param_1;" (assignment_expression "__ptr = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;" (assignment_expression "*(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90" (pointer_expression "*(byte *)(param_1 + 7)" * (cast_expression "(byte *)(param_1 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 7)" ( (binary_expression "param_1 + 7" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 7) & 0x90" (pointer_expression "*(byte *)(param_1 + 7)" * (cast_expression "(byte *)(param_1 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 7)" ( (binary_expression "param_1 + 7" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" identifier = number_literal) ;) (expression_statement "param_1[3] = param_4;" (assignment_expression "param_1[3] = param_4" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }" if (parenthesized_expression "((uint)param_1[1] < 0x88)" ( (binary_expression "(uint)param_1[1] < 0x88" (cast_expression "(uint)param_1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) < number_literal) )) (compound_statement "{\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }" { (expression_statement "__ptr = (int *)realloc(__ptr,0x88);" (assignment_expression "__ptr = (int *)realloc(__ptr,0x88)" identifier = (cast_expression "(int *)realloc(__ptr,0x88)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "realloc(__ptr,0x88)" identifier (argument_list "(__ptr,0x88)" ( identifier , number_literal ))))) ;) (if_statement "if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }" if (parenthesized_expression "(__ptr == (int *)0x0)" ( (binary_expression "__ptr == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }" { (expression_statement "iVar9 = 0xc;" (assignment_expression "iVar9 = 0xc" identifier = number_literal) ;) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;) })) (expression_statement "param_1[1] = 0x88;" (assignment_expression "param_1[1] = 0x88" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*param_1 = (int)__ptr;" (assignment_expression "*param_1 = (int)__ptr" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)__ptr" ( (type_descriptor "int" primitive_type) ) identifier)) ;) })) (expression_statement "param_1[2] = 0x88;" (assignment_expression "param_1[2] = 0x88" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*__ptr = 0;" (assignment_expression "*__ptr = 0" (pointer_expression "*__ptr" * identifier) = number_literal) ;) (expression_statement "__ptr[0x21] = 0;" (assignment_expression "__ptr[0x21] = 0" (subscript_expression "__ptr[0x21]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);" (assignment_expression "puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc)" identifier = (cast_expression "(undefined4 *)((uint)(__ptr + 1) & 0xfffffffc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)(__ptr + 1) & 0xfffffffc)" ( (binary_expression "(uint)(__ptr + 1) & 0xfffffffc" (call_expression "(uint)(__ptr + 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(__ptr + 1)" ( (binary_expression "__ptr + 1" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }" for ( (assignment_expression "uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2" identifier = (binary_expression "(uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2" (call_expression "(uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)))" ( (binary_expression "(int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))" (cast_expression "(int)__ptr" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))" ( (binary_expression "0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)" number_literal - (cast_expression "(int)((uint)(__ptr + 1) & 0xfffffffc)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(__ptr + 1) & 0xfffffffc)" ( (binary_expression "(uint)(__ptr + 1) & 0xfffffffc" (call_expression "(uint)(__ptr + 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(__ptr + 1)" ( (binary_expression "__ptr + 1" identifier + number_literal) ))) & number_literal) )))) ))) ))) >> number_literal)) ; (binary_expression "uVar17 != 0" identifier != number_literal) ; (assignment_expression "uVar17 = uVar17 - 1" identifier = (binary_expression "uVar17 - 1" identifier - number_literal)) ) (compound_statement "{\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }" { (expression_statement "*puVar23 = 0;" (assignment_expression "*puVar23 = 0" (pointer_expression "*puVar23" * identifier) = number_literal) ;) (expression_statement "puVar23 = puVar23 + (uint)bVar21 * -2 + 1;" (assignment_expression "puVar23 = puVar23 + (uint)bVar21 * -2 + 1" identifier = (binary_expression "puVar23 + (uint)bVar21 * -2 + 1" (binary_expression "puVar23 + (uint)bVar21 * -2" identifier + (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (expression_statement "__ptr[0x10] = 0x1f;" (assignment_expression "__ptr[0x10] = 0x1f" (subscript_expression "__ptr[0x10]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }" if (parenthesized_expression "(param_3 < 0xaaaaaaa)" ( (binary_expression "param_3 < 0xaaaaaaa" identifier < number_literal) )) (compound_statement "{\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }" { (expression_statement "iVar9 = param_3 + 1;" (assignment_expression "iVar9 = param_3 + 1" identifier = (binary_expression "param_3 + 1" identifier + number_literal)) ;) (expression_statement "__ptr[1] = iVar9;" (assignment_expression "__ptr[1] = iVar9" (subscript_expression "__ptr[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pvVar6 = malloc(iVar9 * 8);" (assignment_expression "pvVar6 = malloc(iVar9 * 8)" identifier = (call_expression "malloc(iVar9 * 8)" identifier (argument_list "(iVar9 * 8)" ( (binary_expression "iVar9 * 8" identifier * number_literal) )))) ;) (expression_statement "*__ptr = (int)pvVar6;" (assignment_expression "*__ptr = (int)pvVar6" (pointer_expression "*__ptr" * identifier) = (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar18 = 0;\n      uVar17 = 1;\n    }" { (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (expression_statement "uVar17 = 1;" (assignment_expression "uVar17 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" else (compound_statement "{\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" { (expression_statement "uVar17 = 1;" (assignment_expression "uVar17 = 1" identifier = number_literal) ;) (do_statement "do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);" do (compound_statement "{\n        uVar17 = uVar17 * 2;\n      }" { (expression_statement "uVar17 = uVar17 * 2;" (assignment_expression "uVar17 = uVar17 * 2" identifier = (binary_expression "uVar17 * 2" identifier * number_literal)) ;) }) while (parenthesized_expression "(uVar17 <= param_3)" ( (binary_expression "uVar17 <= param_3" identifier <= identifier) )) ;) (expression_statement "iVar18 = uVar17 - 1;" (assignment_expression "iVar18 = uVar17 - 1" identifier = (binary_expression "uVar17 - 1" identifier - number_literal)) ;) }))) (expression_statement "pvVar6 = calloc(0xc,uVar17);" (assignment_expression "pvVar6 = calloc(0xc,uVar17)" identifier = (call_expression "calloc(0xc,uVar17)" identifier (argument_list "(0xc,uVar17)" ( number_literal , identifier )))) ;) (expression_statement "__ptr[0x11] = iVar18;" (assignment_expression "__ptr[0x11] = iVar18" (subscript_expression "__ptr[0x11]" identifier [ number_literal ]) = identifier) ;) (expression_statement "__ptr[8] = (int)pvVar6;" (assignment_expression "__ptr[8] = (int)pvVar6" (subscript_expression "__ptr[8]" identifier [ number_literal ]) = (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "sVar7 = __ctype_get_mb_cur_max();" (assignment_expression "sVar7 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;) (expression_statement "__ptr[0x17] = sVar7;" (assignment_expression "__ptr[0x17] = sVar7" (subscript_expression "__ptr[0x17]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pbVar8 = (byte *)nl_langinfo(0xe);" (assignment_expression "pbVar8 = (byte *)nl_langinfo(0xe)" identifier = (cast_expression "(byte *)nl_langinfo(0xe)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "nl_langinfo(0xe)" identifier (argument_list "(0xe)" ( number_literal ))))) ;) (if_statement "if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }" if (parenthesized_expression "((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       )" ( (binary_expression "(((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)" (parenthesized_expression "(((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54))" ( (binary_expression "((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)" (parenthesized_expression "((*pbVar8 & 0xdf) == 0x55)" ( (binary_expression "(*pbVar8 & 0xdf) == 0x55" (parenthesized_expression "(*pbVar8 & 0xdf)" ( (binary_expression "*pbVar8 & 0xdf" (pointer_expression "*pbVar8" * identifier) & number_literal) )) == number_literal) )) && (parenthesized_expression "((pbVar8[1] & 0xdf) == 0x54)" ( (binary_expression "(pbVar8[1] & 0xdf) == 0x54" (parenthesized_expression "(pbVar8[1] & 0xdf)" ( (binary_expression "pbVar8[1] & 0xdf" (subscript_expression "pbVar8[1]" identifier [ number_literal ]) & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((pbVar8[2] & 0xdf) == 0x46)" ( (binary_expression "(pbVar8[2] & 0xdf) == 0x46" (parenthesized_expression "(pbVar8[2] & 0xdf)" ( (binary_expression "pbVar8[2] & 0xdf" (subscript_expression "pbVar8[2]" identifier [ number_literal ]) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }" { (expression_statement "bVar26 = pbVar8[3] < 0x2d;" (assignment_expression "bVar26 = pbVar8[3] < 0x2d" identifier = (binary_expression "pbVar8[3] < 0x2d" (subscript_expression "pbVar8[3]" identifier [ number_literal ]) < number_literal)) ;) (expression_statement "bVar27 = pbVar8[3] == 0x2d;" (assignment_expression "bVar27 = pbVar8[3] == 0x2d" identifier = (binary_expression "pbVar8[3] == 0x2d" (subscript_expression "pbVar8[3]" identifier [ number_literal ]) == number_literal)) ;) (expression_statement "iVar18 = 2;" (assignment_expression "iVar18 = 2" identifier = number_literal) ;) (expression_statement "pbVar8 = pbVar8 + bVar27 + 3;" (assignment_expression "pbVar8 = pbVar8 + bVar27 + 3" identifier = (binary_expression "pbVar8 + bVar27 + 3" (binary_expression "pbVar8 + bVar27" identifier + identifier) + number_literal)) ;) (expression_statement "pbVar24 = &DAT_00027a0a;" (assignment_expression "pbVar24 = &DAT_00027a0a" identifier = (pointer_expression "&DAT_00027a0a" & identifier)) ;) (do_statement "do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);" do (compound_statement "{\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      }" { (if_statement "if (iVar18 == 0) break;" if (parenthesized_expression "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ;) (expression_statement "bVar26 = *pbVar8 < *pbVar24;" (assignment_expression "bVar26 = *pbVar8 < *pbVar24" identifier = (binary_expression "*pbVar8 < *pbVar24" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar24" * identifier))) ;) (expression_statement "bVar27 = *pbVar8 == *pbVar24;" (assignment_expression "bVar27 = *pbVar8 == *pbVar24" identifier = (binary_expression "*pbVar8 == *pbVar24" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar24" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar21 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar21 * -2" identifier + (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;" (assignment_expression "pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1" identifier = (binary_expression "pbVar24 + (uint)bVar21 * -2 + 1" (binary_expression "pbVar24 + (uint)bVar21 * -2" identifier + (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar27)" ( identifier )) ;) (if_statement "if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }" if (parenthesized_expression "((!bVar26 && !bVar27) == bVar26)" ( (binary_expression "(!bVar26 && !bVar27) == bVar26" (parenthesized_expression "(!bVar26 && !bVar27)" ( (binary_expression "!bVar26 && !bVar27" (unary_expression "!bVar26" ! identifier) && (unary_expression "!bVar27" ! identifier)) )) == identifier) )) (compound_statement "{\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }" { (expression_statement "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;" (assignment_expression "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) = (binary_expression "*(byte *)(__ptr + 0x16) | 4" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) | number_literal)) ;) })) })) (expression_statement "bVar2 = *(byte *)(__ptr + 0x16);" (assignment_expression "bVar2 = *(byte *)(__ptr + 0x16)" identifier = (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) ))))) ;) (expression_statement "*(byte *)(__ptr + 0x16) = bVar2 & 0xf7;" (assignment_expression "*(byte *)(__ptr + 0x16) = bVar2 & 0xf7" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xf7" identifier & number_literal)) ;) (if_statement "if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }" if (parenthesized_expression "(1 < __ptr[0x17])" ( (binary_expression "1 < __ptr[0x17]" number_literal < (subscript_expression "__ptr[0x17]" identifier [ number_literal ])) )) (compound_statement "{\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }" { (if_statement "if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" if (parenthesized_expression "((bVar2 & 4) == 0)" ( (binary_expression "(bVar2 & 4) == 0" (parenthesized_expression "(bVar2 & 4)" ( (binary_expression "bVar2 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }" { (expression_statement "pvVar6 = calloc(0x20,1);" (assignment_expression "pvVar6 = calloc(0x20,1)" identifier = (call_expression "calloc(0x20,1)" identifier (argument_list "(0x20,1)" ( number_literal , number_literal )))) ;) (expression_statement "__ptr[0xf] = (int)pvVar6;" (assignment_expression "__ptr[0xf] = (int)pvVar6" (subscript_expression "__ptr[0xf]" identifier [ number_literal ]) = (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (pvVar6 == (void *)0x0) goto LAB_00023fc0;" if (parenthesized_expression "(pvVar6 == (void *)0x0)" ( (binary_expression "pvVar6 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00023fc0;" goto statement_identifier ;)) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);" do (compound_statement "{\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        }" { (expression_statement "uVar17 = iVar18 * 8;" (assignment_expression "uVar17 = iVar18 * 8" identifier = (binary_expression "iVar18 * 8" identifier * number_literal)) ;) (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" identifier = number_literal) ;) (do_statement "do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);" do (compound_statement "{\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          }" { (while_statement "while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }" { (expression_statement "wVar15 = btowc(uVar17);" (assignment_expression "wVar15 = btowc(uVar17)" identifier = (call_expression "btowc(uVar17)" identifier (argument_list "(uVar17)" ( identifier )))) ;) (if_statement "if (wVar15 != 0xffffffff) break;" if (parenthesized_expression "(wVar15 != 0xffffffff)" ( (binary_expression "wVar15 != 0xffffffff" identifier != number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }" if (parenthesized_expression "((uVar17 & 0xffffff80) == 0)" ( (binary_expression "(uVar17 & 0xffffff80) == 0" (parenthesized_expression "(uVar17 & 0xffffff80)" ( (binary_expression "uVar17 & 0xffffff80" identifier & number_literal) )) == number_literal) )) (compound_statement "{\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }" { (labeled_statement "LAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;" statement_identifier : (expression_statement "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;" (assignment_expression "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) = (binary_expression "*(byte *)(__ptr + 0x16) | 8" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) | number_literal)) ;)) })) (labeled_statement "LAB_000240b4:\n              iVar19 = iVar19 + 1;" statement_identifier : (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;)) (expression_statement "uVar17 = uVar17 + 1;" (assignment_expression "uVar17 = uVar17 + 1" identifier = (binary_expression "uVar17 + 1" identifier + number_literal)) ;) (if_statement "if (iVar19 == 0x20) goto LAB_00024110;" if (parenthesized_expression "(iVar19 == 0x20)" ( (binary_expression "iVar19 == 0x20" identifier == number_literal) )) (goto_statement "goto LAB_00024110;" goto statement_identifier ;)) })) (expression_statement "*(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);" (assignment_expression "*(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f)" (pointer_expression "*(uint *)(__ptr[0xf] + iVar18)" * (cast_expression "(uint *)(__ptr[0xf] + iVar18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr[0xf] + iVar18)" ( (binary_expression "__ptr[0xf] + iVar18" (subscript_expression "__ptr[0xf]" identifier [ number_literal ]) + identifier) )))) = (binary_expression "*(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f)" (pointer_expression "*(uint *)(__ptr[0xf] + iVar18)" * (cast_expression "(uint *)(__ptr[0xf] + iVar18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr[0xf] + iVar18)" ( (binary_expression "__ptr[0xf] + iVar18" (subscript_expression "__ptr[0xf]" identifier [ number_literal ]) + identifier) )))) | (binary_expression "1 << ((byte)iVar19 & 0x1f)" number_literal << (parenthesized_expression "((byte)iVar19 & 0x1f)" ( (binary_expression "(byte)iVar19 & 0x1f" (cast_expression "(byte)iVar19" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))))) ;) (if_statement "if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;" if (parenthesized_expression "((uVar17 & 0xffffff80) != 0)" ( (binary_expression "(uVar17 & 0xffffff80) != 0" (parenthesized_expression "(uVar17 & 0xffffff80)" ( (binary_expression "uVar17 & 0xffffff80" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_000240b4;" goto statement_identifier ;)) (if_statement "if (wVar15 != uVar17) goto LAB_000240ac;" if (parenthesized_expression "(wVar15 != uVar17)" ( (binary_expression "wVar15 != uVar17" identifier != identifier) )) (goto_statement "goto LAB_000240ac;" goto statement_identifier ;)) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) (expression_statement "uVar17 = uVar17 + 1;" (assignment_expression "uVar17 = uVar17 + 1" identifier = (binary_expression "uVar17 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 != 0x20)" ( (binary_expression "iVar19 != 0x20" identifier != number_literal) )) ;) (labeled_statement "LAB_00024110:\n          iVar18 = iVar18 + 4;" statement_identifier : (expression_statement "iVar18 = iVar18 + 4;" (assignment_expression "iVar18 = iVar18 + 4" identifier = (binary_expression "iVar18 + 4" identifier + number_literal)) ;)) }) while (parenthesized_expression "(iVar18 != 0x20)" ( (binary_expression "iVar18 != 0x20" identifier != number_literal) )) ;) }) (else_clause "else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" else (compound_statement "{\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" { (expression_statement "__ptr[0xf] = (int)&DAT_00027f60;" (assignment_expression "__ptr[0xf] = (int)&DAT_00027f60" (subscript_expression "__ptr[0xf]" identifier [ number_literal ]) = (cast_expression "(int)&DAT_00027f60" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&DAT_00027f60" & identifier))) ;) }))) })) (if_statement "if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }" if (parenthesized_expression "((*__ptr != 0) && (__ptr[8] != 0))" ( (binary_expression "(*__ptr != 0) && (__ptr[8] != 0)" (parenthesized_expression "(*__ptr != 0)" ( (binary_expression "*__ptr != 0" (pointer_expression "*__ptr" * identifier) != number_literal) )) && (parenthesized_expression "(__ptr[8] != 0)" ( (binary_expression "__ptr[8] != 0" (subscript_expression "__ptr[8]" identifier [ number_literal ]) != number_literal) ))) )) (compound_statement "{\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }" { (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" identifier = number_literal) ;) (expression_statement "iVar18 = param_1[5];" (assignment_expression "iVar18 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "piVar20 = local_70;" (assignment_expression "piVar20 = local_70" identifier = identifier) ;) (for_statement "for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }" for ( (assignment_expression "iVar19 = 0x13" identifier = number_literal) ; (binary_expression "iVar19 != 0" identifier != number_literal) ; (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ) (compound_statement "{\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }" { (expression_statement "*piVar20 = 0;" (assignment_expression "*piVar20 = 0" (pointer_expression "*piVar20" * identifier) = number_literal) ;) (expression_statement "piVar20 = piVar20 + (uint)bVar21 * -2 + 1;" (assignment_expression "piVar20 = piVar20 + (uint)bVar21 * -2 + 1" identifier = (binary_expression "piVar20 + (uint)bVar21 * -2 + 1" (binary_expression "piVar20 + (uint)bVar21 * -2" identifier + (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (expression_statement "uVar17 = param_4 & 0x400000;" (assignment_expression "uVar17 = param_4 & 0x400000" identifier = (binary_expression "param_4 & 0x400000" identifier & number_literal)) ;) (expression_statement "local_2c = uVar17 != 0;" (assignment_expression "local_2c = uVar17 != 0" identifier = (binary_expression "uVar17 != 0" identifier != number_literal)) ;) (expression_statement "iVar19 = __ptr[0x17];" (assignment_expression "iVar19 = __ptr[0x17]" identifier = (subscript_expression "__ptr[0x17]" identifier [ number_literal ])) ;) (expression_statement "local_29 = iVar18 != 0 || uVar17 != 0;" (assignment_expression "local_29 = iVar18 != 0 || uVar17 != 0" identifier = (binary_expression "iVar18 != 0 || uVar17 != 0" (binary_expression "iVar18 != 0" identifier != number_literal) || (binary_expression "uVar17 != 0" identifier != number_literal))) ;) (expression_statement "local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;" (assignment_expression "local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1" identifier = (binary_expression "*(byte *)(__ptr + 0x16) >> 3 & 1" (binary_expression "*(byte *)(__ptr + 0x16) >> 3" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;" (assignment_expression "local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1" identifier = (binary_expression "*(byte *)(__ptr + 0x16) >> 2 & 1" (binary_expression "*(byte *)(__ptr + 0x16) >> 2" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "local_74 = param_2;" (assignment_expression "local_74 = param_2" identifier = identifier) ;) (expression_statement "local_48 = param_3;" (assignment_expression "local_48 = param_3" identifier = identifier) ;) (expression_statement "local_44 = param_3;" (assignment_expression "local_44 = param_3" identifier = identifier) ;) (expression_statement "local_40 = param_3;" (assignment_expression "local_40 = param_3" identifier = identifier) ;) (expression_statement "local_3c = param_3;" (assignment_expression "local_3c = param_3" identifier = identifier) ;) (expression_statement "local_34 = iVar18;" (assignment_expression "local_34 = iVar18" identifier = identifier) ;) (expression_statement "local_24 = iVar19;" (assignment_expression "local_24 = iVar19" identifier = identifier) ;) (if_statement "if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }" { (labeled_statement "LAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }" statement_identifier : (if_statement "if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }" if (parenthesized_expression "(local_29 != '\0')" ( (binary_expression "local_29 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          param_2 = local_70[0];\n        }" { (expression_statement "param_2 = local_70[0];" (assignment_expression "param_2 = local_70[0]" identifier = (subscript_expression "local_70[0]" identifier [ number_literal ])) ;) }))) (expression_statement "local_70[0] = param_2;" (assignment_expression "local_70[0] = param_2" (subscript_expression "local_70[0]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" if (parenthesized_expression "(uVar17 == 0)" ( (binary_expression "uVar17 == 0" identifier == number_literal) )) (compound_statement "{\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }" { (if_statement "if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }" if (parenthesized_expression "(iVar19 < 2)" ( (binary_expression "iVar19 < 2" identifier < number_literal) )) (compound_statement "{\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }" { (expression_statement "uVar22 = local_50;" (assignment_expression "uVar22 = local_50" identifier = identifier) ;) (expression_statement "local_54 = local_50;" (assignment_expression "local_54 = local_50" identifier = identifier) ;) (if_statement "if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }" if (parenthesized_expression "(iVar18 != 0)" ( (binary_expression "iVar18 != 0" identifier != number_literal) )) (compound_statement "{\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }" { (if_statement "if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }" if (parenthesized_expression "((int)local_44 <= (int)local_50)" ( (binary_expression "(int)local_44 <= (int)local_50" (cast_expression "(int)local_44" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                local_50 = local_44;\n              }" { (expression_statement "local_50 = local_44;" (assignment_expression "local_50 = local_44" identifier = identifier) ;) })) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" identifier = identifier) ;) (expression_statement "local_54 = local_58;" (assignment_expression "local_54 = local_58" identifier = identifier) ;) (if_statement "if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }" if (parenthesized_expression "((int)local_58 < (int)local_50)" ( (binary_expression "(int)local_58 < (int)local_50" (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }" { (do_statement "do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);" do (compound_statement "{\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                }" { (expression_statement "*(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));" (assignment_expression "*(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" (pointer_expression "*(undefined1 *)(param_2 + local_58)" * (cast_expression "(undefined1 *)(param_2 + local_58)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + local_58)" ( (binary_expression "param_2 + local_58" identifier + identifier) )))) = (pointer_expression "*(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" * (cast_expression "(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" ( (binary_expression "local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c)" identifier + (binary_expression "(uint)*(byte *)(local_74 + local_58 + local_5c)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(local_74 + local_58 + local_5c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_74 + local_58 + local_5c)" ( (binary_expression "local_74 + local_58 + local_5c" (binary_expression "local_74 + local_58" identifier + identifier) + identifier) ))))) ))))) ;) (expression_statement "local_58 = local_58 + 1;" (assignment_expression "local_58 = local_58 + 1" identifier = (binary_expression "local_58 + 1" identifier + number_literal)) ;) (expression_statement "uVar22 = local_50;" (assignment_expression "uVar22 = local_50" identifier = identifier) ;) (expression_statement "local_54 = local_50;" (assignment_expression "local_54 = local_50" identifier = identifier) ;) }) while (parenthesized_expression "(local_50 != local_58)" ( (binary_expression "local_50 != local_58" identifier != identifier) )) ;) })) })) }) (else_clause "else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }" else (compound_statement "{\n            FUN_00017860();\n            uVar22 = local_58;\n          }" { (expression_statement "FUN_00017860();" (call_expression "FUN_00017860()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" identifier = identifier) ;) }))) }) (else_clause "else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" else (compound_statement "{\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" { (if_statement "if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }" if (parenthesized_expression "(1 < iVar19)" ( (binary_expression "1 < iVar19" number_literal < identifier) )) (compound_statement "{\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }" { (do_statement "do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);" do (compound_statement "{\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            }" { (expression_statement "iVar9 = FUN_00017a40(&local_74);" (assignment_expression "iVar9 = FUN_00017a40(&local_74)" identifier = (call_expression "FUN_00017a40(&local_74)" identifier (argument_list "(&local_74)" ( (pointer_expression "&local_74" & identifier) )))) ;) (if_statement "if (iVar9 != 0) break;" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" identifier = identifier) ;) (if_statement "if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;" if (parenthesized_expression "(((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 )" ( (binary_expression "((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)" (parenthesized_expression "((int)param_3 <= (int)local_54)" ( (binary_expression "(int)param_3 <= (int)local_54" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)local_54" ( (type_descriptor "int" primitive_type) ) identifier)) )) || (parenthesized_expression "((int)(__ptr[0x17] + local_58) < (int)local_50)" ( (binary_expression "(int)(__ptr[0x17] + local_58) < (int)local_50" (cast_expression "(int)(__ptr[0x17] + local_58)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(__ptr[0x17] + local_58)" ( (binary_expression "__ptr[0x17] + local_58" (subscript_expression "__ptr[0x17]" identifier [ number_literal ]) + identifier) ))) < (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (goto_statement "goto LAB_00023966;" goto statement_identifier ;)) (expression_statement "iVar9 = FUN_000174a0(&local_74,local_50 * 2);" (assignment_expression "iVar9 = FUN_000174a0(&local_74,local_50 * 2)" identifier = (call_expression "FUN_000174a0(&local_74,local_50 * 2)" identifier (argument_list "(&local_74,local_50 * 2)" ( (pointer_expression "&local_74" & identifier) , (binary_expression "local_50 * 2" identifier * number_literal) )))) ;) }) while (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) ;) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "FUN_000177e0();" (call_expression "FUN_000177e0()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" identifier = identifier) ;) }))) (labeled_statement "LAB_00023966:\n        local_58 = uVar22;" statement_identifier : (expression_statement "local_58 = uVar22;" (assignment_expression "local_58 = uVar22" identifier = identifier) ;)) (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" identifier = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(uint *)(*param_1 + 0x80) = param_4;" (assignment_expression "*(uint *)(*param_1 + 0x80) = param_4" (pointer_expression "*(uint *)(*param_1 + 0x80)" * (cast_expression "(uint *)(*param_1 + 0x80)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x80)" ( (binary_expression "*param_1 + 0x80" (pointer_expression "*param_1" * identifier) + number_literal) )))) = identifier) ;) (expression_statement "iVar9 = FUN_00021720();" (assignment_expression "iVar9 = FUN_00021720()" identifier = (call_expression "FUN_00021720()" identifier (argument_list "()" ( )))) ;) (expression_statement "local_4c = local_4c + iVar9;" (assignment_expression "local_4c = local_4c + iVar9" identifier = (binary_expression "local_4c + iVar9" identifier + identifier)) ;) (expression_statement "iVar9 = FUN_000234b0(param_4,0,&local_8c);" (assignment_expression "iVar9 = FUN_000234b0(param_4,0,&local_8c)" identifier = (call_expression "FUN_000234b0(param_4,0,&local_8c)" identifier (argument_list "(param_4,0,&local_8c)" ( identifier , number_literal , (pointer_expression "&local_8c" & identifier) )))) ;) (if_statement "if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" if (parenthesized_expression "(local_8c == 0)" ( (binary_expression "local_8c == 0" identifier == number_literal) )) (compound_statement "{\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }" { (expression_statement "local_7c = CONCAT31(local_7c._1_3_,2);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,2)" identifier = (call_expression "CONCAT31(local_7c._1_3_,2)" identifier (argument_list "(local_7c._1_3_,2)" ( (field_expression "local_7c._1_3_" identifier . field_identifier) , number_literal )))) ;) (expression_statement "iVar18 = FUN_00019970(0,local_80);" (assignment_expression "iVar18 = FUN_00019970(0,local_80)" identifier = (call_expression "FUN_00019970(0,local_80)" identifier (argument_list "(0,local_80)" ( number_literal , identifier )))) ;) (expression_statement "iVar10 = iVar18;" (assignment_expression "iVar10 = iVar18" identifier = identifier) ;) (if_statement "if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }" { (labeled_statement "LAB_000239ff:\n            local_ac = local_80;" statement_identifier : (expression_statement "local_ac = local_80;" (assignment_expression "local_ac = local_80" identifier = identifier) ;)) (expression_statement "local_7c = CONCAT31(local_7c._1_3_,0x10);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,0x10)" identifier = (call_expression "CONCAT31(local_7c._1_3_,0x10)" identifier (argument_list "(local_7c._1_3_,0x10)" ( (field_expression "local_7c._1_3_" identifier . field_identifier) , number_literal )))) ;) (expression_statement "iVar10 = FUN_00019970(iVar18,local_ac);" (assignment_expression "iVar10 = FUN_00019970(iVar18,local_ac)" identifier = (call_expression "FUN_00019970(iVar18,local_ac)" identifier (argument_list "(iVar18,local_ac)" ( identifier , identifier )))) ;) })) (expression_statement "local_ac = local_80;" (assignment_expression "local_ac = local_80" identifier = identifier) ;) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" if (parenthesized_expression "(iVar18 == 0 || iVar10 == 0)" ( (binary_expression "iVar18 == 0 || iVar10 == 0" (binary_expression "iVar18 == 0" identifier == number_literal) || (binary_expression "iVar10 == 0" identifier == number_literal)) )) (compound_statement "{\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }" { (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" identifier = number_literal) ;) (expression_statement "__ptr[0xd] = 0;" (assignment_expression "__ptr[0xd] = 0" (subscript_expression "__ptr[0xd]" identifier [ number_literal ]) = number_literal) ;) }) (else_clause "else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" else (compound_statement "{\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" { (expression_statement "__ptr[0xd] = iVar10;" (assignment_expression "__ptr[0xd] = iVar10" (subscript_expression "__ptr[0xd]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar7 = *(int *)(iVar19 + 4) * 4;" (assignment_expression "sVar7 = *(int *)(iVar19 + 4) * 4" identifier = (binary_expression "*(int *)(iVar19 + 4) * 4" (pointer_expression "*(int *)(iVar19 + 4)" * (cast_expression "(int *)(iVar19 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 4)" ( (binary_expression "iVar19 + 4" identifier + number_literal) )))) * number_literal)) ;) (expression_statement "__size = *(int *)(iVar19 + 4) * 0xc;" (assignment_expression "__size = *(int *)(iVar19 + 4) * 0xc" identifier = (binary_expression "*(int *)(iVar19 + 4) * 0xc" (pointer_expression "*(int *)(iVar19 + 4)" * (cast_expression "(int *)(iVar19 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 4)" ( (binary_expression "iVar19 + 4" identifier + number_literal) )))) * number_literal)) ;) (expression_statement "pvVar6 = malloc(sVar7);" (assignment_expression "pvVar6 = malloc(sVar7)" identifier = (call_expression "malloc(sVar7)" identifier (argument_list "(sVar7)" ( identifier )))) ;) (expression_statement "*(void **)(iVar19 + 0xc) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0xc) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0xc)" * (cast_expression "(void **)(iVar19 + 0xc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0xc)" ( (binary_expression "iVar19 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "pvVar11 = malloc(sVar7);" (assignment_expression "pvVar11 = malloc(sVar7)" identifier = (call_expression "malloc(sVar7)" identifier (argument_list "(sVar7)" ( identifier )))) ;) (expression_statement "*(void **)(iVar19 + 0x10) = pvVar11;" (assignment_expression "*(void **)(iVar19 + 0x10) = pvVar11" (pointer_expression "*(void **)(iVar19 + 0x10)" * (cast_expression "(void **)(iVar19 + 0x10)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x10)" ( (binary_expression "iVar19 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "pvVar12 = malloc(__size);" (assignment_expression "pvVar12 = malloc(__size)" identifier = (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier )))) ;) (expression_statement "*(void **)(iVar19 + 0x14) = pvVar12;" (assignment_expression "*(void **)(iVar19 + 0x14) = pvVar12" (pointer_expression "*(void **)(iVar19 + 0x14)" * (cast_expression "(void **)(iVar19 + 0x14)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x14)" ( (binary_expression "iVar19 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "pvVar13 = malloc(__size);" (assignment_expression "pvVar13 = malloc(__size)" identifier = (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier )))) ;) (expression_statement "*(void **)(iVar19 + 0x18) = pvVar13;" (assignment_expression "*(void **)(iVar19 + 0x18) = pvVar13" (pointer_expression "*(void **)(iVar19 + 0x18)" * (cast_expression "(void **)(iVar19 + 0x18)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }" if (parenthesized_expression "((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0))" ( (binary_expression "(((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)" (parenthesized_expression "(((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))" ( (binary_expression "((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0)" (parenthesized_expression "((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0))" ( (binary_expression "(pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)" (parenthesized_expression "(pvVar6 != (void *)0x0)" ( (binary_expression "pvVar6 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(pvVar11 != (void *)0x0)" ( (binary_expression "pvVar11 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) && (parenthesized_expression "(pvVar12 != (void *)0x0)" ( (binary_expression "pvVar12 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) && (parenthesized_expression "(pvVar13 != (void *)0x0)" ( (binary_expression "pvVar13 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }" { (expression_statement "iVar9 = param_1[6];" (assignment_expression "iVar9 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (expression_statement "pvVar6 = malloc(iVar9 * 4);" (assignment_expression "pvVar6 = malloc(iVar9 * 4)" identifier = (call_expression "malloc(iVar9 * 4)" identifier (argument_list "(iVar9 * 4)" ( (binary_expression "iVar9 * 4" identifier * number_literal) )))) ;) (expression_statement "*(void **)(iVar19 + 0x84) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0x84) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0x84)" * (cast_expression "(void **)(iVar19 + 0x84)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x84)" ( (binary_expression "iVar19 + 0x84" identifier + number_literal) )))) = identifier) ;) (if_statement "if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }" if (parenthesized_expression "(pvVar6 != (void *)0x0)" ( (binary_expression "pvVar6 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }" { (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (if_statement "if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }" { (do_statement "do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);" do (compound_statement "{\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  }" { (expression_statement "*(int *)((int)pvVar6 + iVar18 * 4) = iVar18;" (assignment_expression "*(int *)((int)pvVar6 + iVar18 * 4) = iVar18" (pointer_expression "*(int *)((int)pvVar6 + iVar18 * 4)" * (cast_expression "(int *)((int)pvVar6 + iVar18 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar6 + iVar18 * 4)" ( (binary_expression "(int)pvVar6 + iVar18 * 4" (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar18 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 != iVar9)" ( (binary_expression "iVar18 != iVar9" identifier != identifier) )) ;) })) (expression_statement "FUN_000190d0();" (call_expression "FUN_000190d0()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" if (parenthesized_expression "(param_1[6] == 0)" ( (binary_expression "param_1[6] == 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }" { (expression_statement "piVar20 = *(int **)(iVar19 + 0x84);" (assignment_expression "piVar20 = *(int **)(iVar19 + 0x84)" identifier = (pointer_expression "*(int **)(iVar19 + 0x84)" * (cast_expression "(int **)(iVar19 + 0x84)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x84)" ( (binary_expression "iVar19 + 0x84" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00023b4c:\n                  free(piVar20);" statement_identifier : (expression_statement "free(piVar20);" (call_expression "free(piVar20)" identifier (argument_list "(piVar20)" ( identifier ))) ;)) (expression_statement "*(undefined4 *)(iVar19 + 0x84) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x84) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x84)" * (cast_expression "(undefined4 *)(iVar19 + 0x84)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x84)" ( (binary_expression "iVar19 + 0x84" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" else (compound_statement "{\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" { (expression_statement "piVar20 = *(int **)(iVar19 + 0x84);" (assignment_expression "piVar20 = *(int **)(iVar19 + 0x84)" identifier = (pointer_expression "*(int **)(iVar19 + 0x84)" * (cast_expression "(int **)(iVar19 + 0x84)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x84)" ( (binary_expression "iVar19 + 0x84" identifier + number_literal) ))))) ;) (expression_statement "iVar9 = *piVar20;" (assignment_expression "iVar9 = *piVar20" identifier = (pointer_expression "*piVar20" * identifier)) ;) (if_statement "if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }" { (do_statement "do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);" do (compound_statement "{\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    }" { (expression_statement "iVar9 = iVar9 + 1;" (assignment_expression "iVar9 = iVar9 + 1" identifier = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (if_statement "if (iVar9 == param_1[6]) goto LAB_00023b4c;" if (parenthesized_expression "(iVar9 == param_1[6])" ( (binary_expression "iVar9 == param_1[6]" identifier == (subscript_expression "param_1[6]" identifier [ number_literal ])) )) (goto_statement "goto LAB_00023b4c;" goto statement_identifier ;)) }) while (parenthesized_expression "(piVar20[iVar9] == iVar9)" ( (binary_expression "piVar20[iVar9] == iVar9" (subscript_expression "piVar20[iVar9]" identifier [ identifier ]) == identifier) )) ;) })) }))) })) (expression_statement "iVar9 = FUN_00017080();" (assignment_expression "iVar9 = FUN_00017080()" identifier = (call_expression "FUN_00017080()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }" if (parenthesized_expression "((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0))" ( (binary_expression "(iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)" (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) && (parenthesized_expression "(iVar9 = FUN_00017080(), iVar9 == 0)" ( (comma_expression "iVar9 = FUN_00017080(), iVar9 == 0" (assignment_expression "iVar9 = FUN_00017080()" identifier = (call_expression "FUN_00017080()" identifier (argument_list "()" ( )))) , (binary_expression "iVar9 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }" { (expression_statement "FUN_000190d0();" (call_expression "FUN_000190d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar9 = FUN_000190d0();" (assignment_expression "iVar9 = FUN_000190d0()" identifier = (call_expression "FUN_000190d0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }" { (expression_statement "bVar26 = false;" (assignment_expression "bVar26 = false" identifier = false) ;) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (do_statement "do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );" do (compound_statement "{\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  }" { (if_statement "if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;" if (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" ( (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" * (cast_expression "(int *)(iVar19 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_00023bfe;" goto statement_identifier ;)) (labeled_statement "LAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" statement_identifier : (while_statement "while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" { (expression_statement "iVar10 = iVar18 * 0xc;" (assignment_expression "iVar10 = iVar18 * 0xc" identifier = (binary_expression "iVar18 * 0xc" identifier * number_literal)) ;) (if_statement "if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;" if (parenthesized_expression "(*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)" ( (binary_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0" (pointer_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" * (cast_expression "(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar19 + 0x18) + 4 + iVar10)" ( (binary_expression "*(int *)(iVar19 + 0x18) + 4 + iVar10" (binary_expression "*(int *)(iVar19 + 0x18) + 4" (pointer_expression "*(int *)(iVar19 + 0x18)" * (cast_expression "(int *)(iVar19 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) )))) + number_literal) + identifier) )))) != number_literal) )) (goto_statement "goto code_r0x00023bf6;" goto statement_identifier ;)) (expression_statement "iVar9 = FUN_00019310(1);" (assignment_expression "iVar9 = FUN_00019310(1)" identifier = (call_expression "FUN_00019310(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar9 != 0) goto LAB_00023d90;" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;)) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (if_statement "if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;" if (parenthesized_expression "(*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)" ( (binary_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0" (pointer_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" * (cast_expression "(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar19 + 0x18) + 4 + iVar10)" ( (binary_expression "*(int *)(iVar19 + 0x18) + 4 + iVar10" (binary_expression "*(int *)(iVar19 + 0x18) + 4" (pointer_expression "*(int *)(iVar19 + 0x18)" * (cast_expression "(int *)(iVar19 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) )))) + number_literal) + identifier) )))) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "bVar26 = true;" (assignment_expression "bVar26 = true" identifier = true) ;) (if_statement "if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;" if (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" ( (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" * (cast_expression "(int *)(iVar19 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_00023c09;" goto statement_identifier ;)) }))) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" identifier = number_literal) ;) }))) }) (else_clause "else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" else (compound_statement "{\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" { (if_statement "if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }" { (expression_statement "local_7c = CONCAT31(local_7c._1_3_,2);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,2)" identifier = (call_expression "CONCAT31(local_7c._1_3_,2)" identifier (argument_list "(local_7c._1_3_,2)" ( (field_expression "local_7c._1_3_" identifier . field_identifier) , number_literal )))) ;) (expression_statement "iVar18 = FUN_00019970(0,local_80);" (assignment_expression "iVar18 = FUN_00019970(0,local_80)" identifier = (call_expression "FUN_00019970(0,local_80)" identifier (argument_list "(0,local_80)" ( number_literal , identifier )))) ;) (goto_statement "goto LAB_000239ff;" goto statement_identifier ;) })) (expression_statement "__ptr[0xd] = 0;" (assignment_expression "__ptr[0xd] = 0" (subscript_expression "__ptr[0xd]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) }))) }) (else_clause "else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" else (compound_statement "{\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" { (expression_statement "iVar9 = FUN_000174a0(&local_74,iVar9);" (assignment_expression "iVar9 = FUN_000174a0(&local_74,iVar9)" identifier = (call_expression "FUN_000174a0(&local_74,iVar9)" identifier (argument_list "(&local_74,iVar9)" ( (pointer_expression "&local_74" & identifier) , identifier )))) ;) (if_statement "if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }" { (expression_statement "iVar19 = __ptr[0x17];" (assignment_expression "iVar19 = __ptr[0x17]" identifier = (subscript_expression "__ptr[0x17]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_00023881;" goto statement_identifier ;) })) (labeled_statement "LAB_00023d90:\n        iVar19 = *param_1;" statement_identifier : (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "local_8c = iVar9;" (assignment_expression "local_8c = iVar9" identifier = identifier) ;) }))) (labeled_statement "LAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);" statement_identifier : (expression_statement "puVar23 = *(undefined4 **)(iVar19 + 0x38);" (assignment_expression "puVar23 = *(undefined4 **)(iVar19 + 0x38)" identifier = (pointer_expression "*(undefined4 **)(iVar19 + 0x38)" * (cast_expression "(undefined4 **)(iVar19 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x38)" ( (binary_expression "iVar19 + 0x38" identifier + number_literal) ))))) ;)) (while_statement "while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }" while (parenthesized_expression "(puVar23 != (undefined4 *)0x0)" ( (binary_expression "puVar23 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }" { (expression_statement "puVar3 = (undefined4 *)*puVar23;" (assignment_expression "puVar3 = (undefined4 *)*puVar23" identifier = (cast_expression "(undefined4 *)*puVar23" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar23" * identifier))) ;) (expression_statement "free(puVar23);" (call_expression "free(puVar23)" identifier (argument_list "(puVar23)" ( identifier ))) ;) (expression_statement "puVar23 = puVar3;" (assignment_expression "puVar23 = puVar3" identifier = identifier) ;) })) (expression_statement "*(undefined4 *)(iVar19 + 0x38) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x38) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x38)" * (cast_expression "(undefined4 *)(iVar19 + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x38)" ( (binary_expression "iVar19 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar19 + 0x40) = 0x1f;" (assignment_expression "*(undefined4 *)(iVar19 + 0x40) = 0x1f" (pointer_expression "*(undefined4 *)(iVar19 + 0x40)" * (cast_expression "(undefined4 *)(iVar19 + 0x40)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x40)" ( (binary_expression "iVar19 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar19 + 0x34) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x34) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x34)" * (cast_expression "(undefined4 *)(iVar19 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x34)" ( (binary_expression "iVar19 + 0x34" identifier + number_literal) )))) = number_literal) ;) (expression_statement "free(*(void **)(iVar19 + 0x10));" (call_expression "free(*(void **)(iVar19 + 0x10))" identifier (argument_list "(*(void **)(iVar19 + 0x10))" ( (pointer_expression "*(void **)(iVar19 + 0x10)" * (cast_expression "(void **)(iVar19 + 0x10)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x10)" ( (binary_expression "iVar19 + 0x10" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined4 *)(iVar19 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x10)" * (cast_expression "(undefined4 *)(iVar19 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x10)" ( (binary_expression "iVar19 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_000188a0();" (call_expression "FUN_000188a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0001c4f0();" (call_expression "FUN_0001c4f0()" identifier (argument_list "()" ( ))) ;) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" identifier = identifier) ;) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;) })) })) (labeled_statement "LAB_00023fc0:\n  local_8c = 0xc;" statement_identifier : (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" identifier = number_literal) ;)) (goto_statement "goto LAB_00023fc8;" goto statement_identifier ;) (labeled_statement "code_r0x00023bf6:\n  iVar18 = iVar18 + 1;" statement_identifier : (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;)) (if_statement "if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }" if (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" ( (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" * (cast_expression "(int *)(iVar19 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) == identifier) )) (compound_statement "{\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }" { (labeled_statement "LAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" statement_identifier : (if_statement "if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" if (parenthesized_expression "(!bVar26)" ( (unary_expression "!bVar26" ! identifier) )) (compound_statement "{\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" { (if_statement "if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;" if (parenthesized_expression "(((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))" ( (binary_expression "((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0)" (parenthesized_expression "((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0))" ( (binary_expression "(((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)" (parenthesized_expression "(((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0))" ( (binary_expression "((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)" (parenthesized_expression "((*(byte *)(param_1 + 7) & 0x10) != 0)" ( (binary_expression "(*(byte *)(param_1 + 7) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 7) & 0x10)" ( (binary_expression "*(byte *)(param_1 + 7) & 0x10" (pointer_expression "*(byte *)(param_1 + 7)" * (cast_expression "(byte *)(param_1 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 7)" ( (binary_expression "param_1 + 7" identifier + number_literal) )))) & number_literal) )) != number_literal) )) || (parenthesized_expression "(param_1[6] == 0)" ( (binary_expression "param_1[6] == 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "((*(byte *)(iVar19 + 0x58) & 1) == 0)" ( (binary_expression "(*(byte *)(iVar19 + 0x58) & 1) == 0" (parenthesized_expression "(*(byte *)(iVar19 + 0x58) & 1)" ( (binary_expression "*(byte *)(iVar19 + 0x58) & 1" (pointer_expression "*(byte *)(iVar19 + 0x58)" * (cast_expression "(byte *)(iVar19 + 0x58)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x58)" ( (binary_expression "iVar19 + 0x58" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "(*(int *)(iVar19 + 0x4c) == 0)" ( (binary_expression "*(int *)(iVar19 + 0x4c) == 0" (pointer_expression "*(int *)(iVar19 + 0x4c)" * (cast_expression "(int *)(iVar19 + 0x4c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x4c)" ( (binary_expression "iVar19 + 0x4c" identifier + number_literal) )))) == number_literal) ))) )) (goto_statement "goto LAB_00023dab;" goto statement_identifier ;)) (expression_statement "pvVar6 = malloc(iVar18 * 0xc);" (assignment_expression "pvVar6 = malloc(iVar18 * 0xc)" identifier = (call_expression "malloc(iVar18 * 0xc)" identifier (argument_list "(iVar18 * 0xc)" ( (binary_expression "iVar18 * 0xc" identifier * number_literal) )))) ;) (expression_statement "*(void **)(iVar19 + 0x1c) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0x1c) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0x1c)" * (cast_expression "(void **)(iVar19 + 0x1c)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x1c)" ( (binary_expression "iVar19 + 0x1c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }" if (parenthesized_expression "(pvVar6 != (void *)0x0)" ( (binary_expression "pvVar6 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }" { (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" identifier = number_literal) ;) (if_statement "if (iVar18 != 0) goto LAB_00023cf3;" if (parenthesized_expression "(iVar18 != 0)" ( (binary_expression "iVar18 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00023cf3;" goto statement_identifier ;)) (goto_statement "goto LAB_00023dab;" goto statement_identifier ;) })) (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" identifier = number_literal) ;) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (goto_statement "goto LAB_00023ff8;" goto statement_identifier ;) }))) (labeled_statement "LAB_00023c09:\n    bVar26 = false;" statement_identifier : (expression_statement "bVar26 = false;" (assignment_expression "bVar26 = false" identifier = false) ;)) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) })) (goto_statement "goto LAB_00023be5;" goto statement_identifier ;) (labeled_statement "LAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" statement_identifier : (while_statement "while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" { (expression_statement "puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);" (assignment_expression "puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc)" identifier = (cast_expression "(undefined4 *)((int)pvVar6 + uVar22 * 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar6 + uVar22 * 0xc)" ( (binary_expression "(int)pvVar6 + uVar22 * 0xc" (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "uVar22 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "*puVar23 = 0;" (assignment_expression "*puVar23 = 0" (pointer_expression "*puVar23" * identifier) = number_literal) ;) (expression_statement "puVar23[1] = 0;" (assignment_expression "puVar23[1] = 0" (subscript_expression "puVar23[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar23[2] = 0;" (assignment_expression "puVar23[2] = 0" (subscript_expression "puVar23[2]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;" if (parenthesized_expression "(*(uint *)(iVar19 + 8) <= uVar22 + 1)" ( (binary_expression "*(uint *)(iVar19 + 8) <= uVar22 + 1" (pointer_expression "*(uint *)(iVar19 + 8)" * (cast_expression "(uint *)(iVar19 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) <= (binary_expression "uVar22 + 1" identifier + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "pvVar6 = *(void **)(iVar19 + 0x1c);" (assignment_expression "pvVar6 = *(void **)(iVar19 + 0x1c)" identifier = (pointer_expression "*(void **)(iVar19 + 0x1c)" * (cast_expression "(void **)(iVar19 + 0x1c)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x1c)" ( (binary_expression "iVar19 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "uVar22 = uVar22 + 1;" (assignment_expression "uVar22 = uVar22 + 1" identifier = (binary_expression "uVar22 + 1" identifier + number_literal)) ;) }))) (if_statement "if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }" if (parenthesized_expression "(*(uint *)(iVar19 + 8) != 0)" ( (binary_expression "*(uint *)(iVar19 + 8) != 0" (pointer_expression "*(uint *)(iVar19 + 8)" * (cast_expression "(uint *)(iVar19 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }" { (expression_statement "iVar9 = *(int *)(iVar19 + 0x18);" (assignment_expression "iVar9 = *(int *)(iVar19 + 0x18)" identifier = (pointer_expression "*(int *)(iVar19 + 0x18)" * (cast_expression "(int *)(iVar19 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));" do (compound_statement "{\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    }" { (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) (expression_statement "iVar10 = uVar22 * 0xc + iVar9;" (assignment_expression "iVar10 = uVar22 * 0xc + iVar9" identifier = (binary_expression "uVar22 * 0xc + iVar9" (binary_expression "uVar22 * 0xc" identifier * number_literal) + identifier)) ;) (expression_statement "iVar18 = *(int *)(iVar10 + 8);" (assignment_expression "iVar18 = *(int *)(iVar10 + 8)" identifier = (pointer_expression "*(int *)(iVar10 + 8)" * (cast_expression "(int *)(iVar10 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar10 + 8)" ( (binary_expression "iVar10 + 8" identifier + number_literal) ))))) ;) (if_statement "if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }" if (parenthesized_expression "(0 < *(int *)(iVar10 + 4))" ( (binary_expression "0 < *(int *)(iVar10 + 4)" number_literal < (pointer_expression "*(int *)(iVar10 + 4)" * (cast_expression "(int *)(iVar10 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar10 + 4)" ( (binary_expression "iVar10 + 4" identifier + number_literal) ))))) )) (compound_statement "{\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }" { (do_statement "do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));" do (compound_statement "{\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        }" { (expression_statement "cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;" (assignment_expression "cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" identifier = (call_expression "FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" identifier (argument_list "(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" ( (binary_expression "*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc" (pointer_expression "*(int *)(iVar19 + 0x1c)" * (cast_expression "(int *)(iVar19 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x1c)" ( (binary_expression "iVar19 + 0x1c" identifier + number_literal) )))) + (binary_expression "*(int *)(iVar18 + iVar14 * 4) * 0xc" (pointer_expression "*(int *)(iVar18 + iVar14 * 4)" * (cast_expression "(int *)(iVar18 + iVar14 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + iVar14 * 4)" ( (binary_expression "iVar18 + iVar14 * 4" identifier + (binary_expression "iVar14 * 4" identifier * number_literal)) )))) * number_literal)) , identifier )))) ;) (if_statement "if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }" if (parenthesized_expression "(cVar5 == '\0')" ( (binary_expression "cVar5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }" { (expression_statement "iVar9 = 0xc;" (assignment_expression "iVar9 = 0xc" identifier = number_literal) ;) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "iVar9 = *(int *)(iVar19 + 0x18);" (assignment_expression "iVar9 = *(int *)(iVar19 + 0x18)" identifier = (pointer_expression "*(int *)(iVar19 + 0x18)" * (cast_expression "(int *)(iVar19 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" identifier = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc))" ( (binary_expression "iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc)" identifier < (pointer_expression "*(int *)(iVar9 + 4 + uVar22 * 0xc)" * (cast_expression "(int *)(iVar9 + 4 + uVar22 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 4 + uVar22 * 0xc)" ( (binary_expression "iVar9 + 4 + uVar22 * 0xc" (binary_expression "iVar9 + 4" identifier + number_literal) + (binary_expression "uVar22 * 0xc" identifier * number_literal)) ))))) )) ;) })) (expression_statement "uVar22 = uVar22 + 1;" (assignment_expression "uVar22 = uVar22 + 1" identifier = (binary_expression "uVar22 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar22 < *(uint *)(iVar19 + 8))" ( (binary_expression "uVar22 < *(uint *)(iVar19 + 8)" identifier < (pointer_expression "*(uint *)(iVar19 + 8)" * (cast_expression "(uint *)(iVar19 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) ))))) )) ;) })) (labeled_statement "LAB_00023dab:\n  local_8c = 0;" statement_identifier : (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" identifier = number_literal) ;)) (expression_statement "bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;" (assignment_expression "bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0" identifier = (binary_expression "*(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0" (binary_expression "*(byte *)(__ptr + 0x16) >> 2" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) >> number_literal) & (binary_expression "uVar17 == 0" identifier == number_literal))) ;) (if_statement "if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }" if (parenthesized_expression "((bVar21 != 0) && (param_1[5] == 0))" ( (binary_expression "(bVar21 != 0) && (param_1[5] == 0)" (parenthesized_expression "(bVar21 != 0)" ( (binary_expression "bVar21 != 0" identifier != number_literal) )) && (parenthesized_expression "(param_1[5] == 0)" ( (binary_expression "param_1[5] == 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }" { (if_statement "if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" if (parenthesized_expression "(__ptr[2] == 0)" ( (binary_expression "__ptr[2] == 0" (subscript_expression "__ptr[2]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\nLAB_00024424:\n      bVar4 = 0;\n    }" { (labeled_statement "LAB_00024424:\n      bVar4 = 0;" statement_identifier : (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;)) }) (else_clause "else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" else (compound_statement "{\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" { (expression_statement "puVar25 = (uint *)*__ptr;" (assignment_expression "puVar25 = (uint *)*__ptr" identifier = (cast_expression "(uint *)*__ptr" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*__ptr" * identifier))) ;) (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (expression_statement "bVar2 = 0;" (assignment_expression "bVar2 = 0" identifier = number_literal) ;) (expression_statement "puVar16 = puVar25;" (assignment_expression "puVar16 = puVar25" identifier = identifier) ;) (do_statement "do {\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);" do (compound_statement "{\n        switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      }" { (switch_statement "switch((char)puVar16[1]) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }" switch (parenthesized_expression "((char)puVar16[1])" ( (cast_expression "(char)puVar16[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "puVar16[1]" identifier [ number_literal ])) )) (compound_statement "{\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }" { (case_statement "default:\n                    /* WARNING: Subroutine does not return */\n          abort();" default : comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) (case_statement "case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;" case (char_literal "'\x01'" ' escape_sequence ') : (if_statement "if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }" if (parenthesized_expression "((char)*puVar16 < '\0')" ( (binary_expression "(char)*puVar16 < '\0'" (cast_expression "(char)*puVar16" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*puVar16" * identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            bVar2 = bVar21;\n          }" { (expression_statement "bVar2 = bVar21;" (assignment_expression "bVar2 = bVar21" identifier = identifier) ;) })) (break_statement "break;" break ;)) (case_statement "case '\x02':" case (char_literal "'\x02'" ' escape_sequence ') :) (case_statement "case '\x04':" case (char_literal "'\x04'" ' escape_sequence ') :) (case_statement "case '\b':" case (char_literal "'\b'" ' escape_sequence ') :) (case_statement "case '\t':" case (char_literal "'\t'" ' escape_sequence ') :) (case_statement "case '\n':" case (char_literal "'\n'" ' escape_sequence ') :) (case_statement "case '\v':\n          break;" case (char_literal "'\v'" ' escape_sequence ') : (break_statement "break;" break ;)) (case_statement "case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;" case (char_literal "'\x03'" ' escape_sequence ') : (expression_statement "iVar18 = 4;" (assignment_expression "iVar18 = 4" identifier = number_literal) ;) (do_statement "do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);" do (compound_statement "{\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          }" { (if_statement "if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;" if (parenthesized_expression "(*(int *)(*puVar16 + iVar18 * 4) != 0)" ( (binary_expression "*(int *)(*puVar16 + iVar18 * 4) != 0" (pointer_expression "*(int *)(*puVar16 + iVar18 * 4)" * (cast_expression "(int *)(*puVar16 + iVar18 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*puVar16 + iVar18 * 4)" ( (binary_expression "*puVar16 + iVar18 * 4" (pointer_expression "*puVar16" * identifier) + (binary_expression "iVar18 * 4" identifier * number_literal)) )))) != number_literal) )) (goto_statement "goto LAB_00023dcb;" goto statement_identifier ;)) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 != 8)" ( (binary_expression "iVar18 != 8" identifier != number_literal) )) ;) (break_statement "break;" break ;)) (case_statement "case '\x05':\n          bVar4 = bVar21;\n          break;" case (char_literal "'\x05'" ' escape_sequence ') : (expression_statement "bVar4 = bVar21;" (assignment_expression "bVar4 = bVar21" identifier = identifier) ;) (break_statement "break;" break ;)) (case_statement "case '\x06':\n          goto code_r0x00024350;" case (char_literal "'\x06'" ' escape_sequence ') : (goto_statement "goto code_r0x00024350;" goto statement_identifier ;)) (case_statement "case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" case (char_literal "'\f'" ' escape_sequence ') : (expression_statement "uVar17 = *puVar16;" (assignment_expression "uVar17 = *puVar16" identifier = (pointer_expression "*puVar16" * identifier)) ;) (if_statement "if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" if (parenthesized_expression "(uVar17 != 0x20)" ( (binary_expression "uVar17 != 0x20" identifier != number_literal) )) (compound_statement "{\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" { (if_statement "if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" if (parenthesized_expression "(uVar17 < 0x21)" ( (binary_expression "uVar17 < 0x21" identifier < number_literal) )) (compound_statement "{\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }" { (if_statement "if (uVar17 != 0x10) goto code_r0x00024350;" if (parenthesized_expression "(uVar17 != 0x10)" ( (binary_expression "uVar17 != 0x10" identifier != number_literal) )) (goto_statement "goto code_r0x00024350;" goto statement_identifier ;)) }) (else_clause "else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" else (if_statement "if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" if (parenthesized_expression "((uVar17 != 0x40) && (uVar17 != 0x80))" ( (binary_expression "(uVar17 != 0x40) && (uVar17 != 0x80)" (parenthesized_expression "(uVar17 != 0x40)" ( (binary_expression "uVar17 != 0x40" identifier != number_literal) )) && (parenthesized_expression "(uVar17 != 0x80)" ( (binary_expression "uVar17 != 0x80" identifier != number_literal) ))) )) (compound_statement "{\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" { (labeled_statement "code_r0x00024350:\n              goto LAB_00023dcb;" statement_identifier : (goto_statement "goto LAB_00023dcb;" goto statement_identifier ;)) })))) }))) })) (expression_statement "iVar9 = iVar9 + 1;" (assignment_expression "iVar9 = iVar9 + 1" identifier = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (expression_statement "puVar16 = puVar16 + 2;" (assignment_expression "puVar16 = puVar16 + 2" identifier = (binary_expression "puVar16 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar9 != __ptr[2])" ( (binary_expression "iVar9 != __ptr[2]" identifier != (subscript_expression "__ptr[2]" identifier [ number_literal ])) )) ;) (if_statement "if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;" if (parenthesized_expression "(bVar2 == 0 && bVar4 == 0)" ( (binary_expression "bVar2 == 0 && bVar4 == 0" (binary_expression "bVar2 == 0" identifier == number_literal) && (binary_expression "bVar4 == 0" identifier == number_literal)) )) (goto_statement "goto LAB_00024424;" goto statement_identifier ;)) (expression_statement "puVar16 = puVar25 + iVar9 * 2;" (assignment_expression "puVar16 = puVar25 + iVar9 * 2" identifier = (binary_expression "puVar25 + iVar9 * 2" identifier + (binary_expression "iVar9 * 2" identifier * number_literal))) ;) (do_statement "do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);" do (compound_statement "{\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      }" { (if_statement "if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" if (parenthesized_expression "((char)puVar25[1] == '\x01')" ( (binary_expression "(char)puVar25[1] == '\x01'" (cast_expression "(char)puVar25[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "puVar25[1]" identifier [ number_literal ])) == (char_literal "'\x01'" ' escape_sequence ')) )) (compound_statement "{\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }" { (if_statement "if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }" if (parenthesized_expression "((char)*puVar25 < '\0')" ( (binary_expression "(char)*puVar25 < '\0'" (cast_expression "(char)*puVar25" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*puVar25" * identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }" { (expression_statement "*(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;" (assignment_expression "*(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf" (pointer_expression "*(byte *)((int)puVar25 + 6)" * (cast_expression "(byte *)((int)puVar25 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar25 + 6)" ( (binary_expression "(int)puVar25 + 6" (cast_expression "(int)puVar25" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "*(byte *)((int)puVar25 + 6) & 0xdf" (pointer_expression "*(byte *)((int)puVar25 + 6)" * (cast_expression "(byte *)((int)puVar25 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar25 + 6)" ( (binary_expression "(int)puVar25 + 6" (cast_expression "(int)puVar25" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal)) ;) })) }) (else_clause "else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" else (if_statement "if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" if (parenthesized_expression "((char)puVar25[1] == '\x05')" ( (binary_expression "(char)puVar25[1] == '\x05'" (cast_expression "(char)puVar25[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "puVar25[1]" identifier [ number_literal ])) == (char_literal "'\x05'" ' escape_sequence ')) )) (compound_statement "{\n          *(char *)(puVar25 + 1) = '\a';\n        }" { (expression_statement "*(char *)(puVar25 + 1) = '\a';" (assignment_expression "*(char *)(puVar25 + 1) = '\a'" (pointer_expression "*(char *)(puVar25 + 1)" * (cast_expression "(char *)(puVar25 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + 1)" ( (binary_expression "puVar25 + 1" identifier + number_literal) )))) = (char_literal "'\a'" ' escape_sequence ')) ;) })))) (expression_statement "puVar25 = puVar25 + 2;" (assignment_expression "puVar25 = puVar25 + 2" identifier = (binary_expression "puVar25 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar16 != puVar25)" ( (binary_expression "puVar16 != puVar25" identifier != identifier) )) ;) }))) (expression_statement "__ptr[0x17] = 1;" (assignment_expression "__ptr[0x17] = 1" (subscript_expression "__ptr[0x17]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;" (assignment_expression "*(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) = (binary_expression "(0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9" (binary_expression "(0 < __ptr[0x13] | bVar4) * '\x02'" (parenthesized_expression "(0 < __ptr[0x13] | bVar4)" ( (binary_expression "0 < __ptr[0x13] | bVar4" (binary_expression "0 < __ptr[0x13]" number_literal < (subscript_expression "__ptr[0x13]" identifier [ number_literal ])) | identifier) )) * (char_literal "'\x02'" ' escape_sequence ')) | (binary_expression "*(byte *)(__ptr + 0x16) & 0xf9" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) & number_literal))) ;) })) (labeled_statement "LAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);" statement_identifier : (expression_statement "iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);" (assignment_expression "iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" identifier = (pointer_expression "*(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" * (cast_expression "(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" ( (binary_expression "*(int *)(__ptr[0xd] + 0xc) + 0x1c" (pointer_expression "*(int *)(__ptr[0xd] + 0xc)" * (cast_expression "(int *)(__ptr[0xd] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr[0xd] + 0xc)" ( (binary_expression "__ptr[0xd] + 0xc" (subscript_expression "__ptr[0xd]" identifier [ number_literal ]) + number_literal) )))) + number_literal) ))))) ;)) (expression_statement "__ptr[0x12] = iVar9;" (assignment_expression "__ptr[0x12] = iVar9" (subscript_expression "__ptr[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);" (assignment_expression "iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc)" identifier = (call_expression "FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc)" identifier (argument_list "(local_ac,__ptr[6] + iVar9 * 0xc)" ( identifier , (binary_expression "__ptr[6] + iVar9 * 0xc" (subscript_expression "__ptr[6]" identifier [ number_literal ]) + (binary_expression "iVar9 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "local_94 = iVar9;" (assignment_expression "local_94 = iVar9" identifier = identifier) ;) (expression_statement "local_88[0] = iVar9;" (assignment_expression "local_88[0] = iVar9" (subscript_expression "local_88[0]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }" { (if_statement "if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }" if (parenthesized_expression "((0 < __ptr[0x13]) && (0 < local_7c))" ( (binary_expression "(0 < __ptr[0x13]) && (0 < local_7c)" (parenthesized_expression "(0 < __ptr[0x13])" ( (binary_expression "0 < __ptr[0x13]" number_literal < (subscript_expression "__ptr[0x13]" identifier [ number_literal ])) )) && (parenthesized_expression "(0 < local_7c)" ( (binary_expression "0 < local_7c" number_literal < identifier) ))) )) (compound_statement "{\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }" { (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" identifier = number_literal) ;) (expression_statement "iVar18 = local_7c;" (assignment_expression "iVar18 = local_7c" identifier = identifier) ;) (labeled_statement "LAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);" statement_identifier : (do_statement "do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);" do (compound_statement "{\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      }" { (expression_statement "iVar10 = *(int *)((int)local_78 + iVar19 * 4);" (assignment_expression "iVar10 = *(int *)((int)local_78 + iVar19 * 4)" identifier = (pointer_expression "*(int *)((int)local_78 + iVar19 * 4)" * (cast_expression "(int *)((int)local_78 + iVar19 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_78 + iVar19 * 4)" ( (binary_expression "(int)local_78 + iVar19 * 4" (cast_expression "(int)local_78" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar19 * 4" identifier * number_literal)) ))))) ;) (expression_statement "piVar20 = (int *)(*__ptr + iVar10 * 8);" (assignment_expression "piVar20 = (int *)(*__ptr + iVar10 * 8)" identifier = (cast_expression "(int *)(*__ptr + iVar10 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*__ptr + iVar10 * 8)" ( (binary_expression "*__ptr + iVar10 * 8" (pointer_expression "*__ptr" * identifier) + (binary_expression "iVar10 * 8" identifier * number_literal)) )))) ;) (if_statement "if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }" if (parenthesized_expression "((char)piVar20[1] == '\x04')" ( (binary_expression "(char)piVar20[1] == '\x04'" (cast_expression "(char)piVar20[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "piVar20[1]" identifier [ number_literal ])) == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }" { (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) (do_statement "do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);" do (compound_statement "{\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          }" { (expression_statement "piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);" (assignment_expression "piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" identifier = (cast_expression "(int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" ( (binary_expression "*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8" (pointer_expression "*__ptr" * identifier) + (binary_expression "*(int *)((int)local_78 + iVar14 * 4) * 8" (pointer_expression "*(int *)((int)local_78 + iVar14 * 4)" * (cast_expression "(int *)((int)local_78 + iVar14 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_78 + iVar14 * 4)" ( (binary_expression "(int)local_78 + iVar14 * 4" (cast_expression "(int)local_78" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar14 * 4" identifier * number_literal)) )))) * number_literal)) )))) ;) (if_statement "if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }" if (parenthesized_expression "(((char)piVar1[1] == '\t') && (*piVar1 == *piVar20))" ( (binary_expression "((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)" (parenthesized_expression "((char)piVar1[1] == '\t')" ( (binary_expression "(char)piVar1[1] == '\t'" (cast_expression "(char)piVar1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "piVar1[1]" identifier [ number_literal ])) == (char_literal "'\t'" ' escape_sequence ')) )) && (parenthesized_expression "(*piVar1 == *piVar20)" ( (binary_expression "*piVar1 == *piVar20" (pointer_expression "*piVar1" * identifier) == (pointer_expression "*piVar20" * identifier)) ))) )) (compound_statement "{\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }" { (expression_statement "iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);" (assignment_expression "iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8)" identifier = (pointer_expression "**(int **)(__ptr[5] + iVar10 * 0xc + 8)" * (pointer_expression "*(int **)(__ptr[5] + iVar10 * 0xc + 8)" * (cast_expression "(int **)(__ptr[5] + iVar10 * 0xc + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(__ptr[5] + iVar10 * 0xc + 8)" ( (binary_expression "__ptr[5] + iVar10 * 0xc + 8" (binary_expression "__ptr[5] + iVar10 * 0xc" (subscript_expression "__ptr[5]" identifier [ number_literal ]) + (binary_expression "iVar10 * 0xc" identifier * number_literal)) + number_literal) )))))) ;) (expression_statement "iVar14 = FUN_00018c70();" (assignment_expression "iVar14 = FUN_00018c70()" identifier = (call_expression "FUN_00018c70()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }" if (parenthesized_expression "(iVar14 == 0)" ( (binary_expression "iVar14 == 0" identifier == number_literal) )) (compound_statement "{\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }" { (expression_statement "local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);" (assignment_expression "local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc)" identifier = (call_expression "FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc)" identifier (argument_list "(local_ac,__ptr[6] + iVar10 * 0xc)" ( identifier , (binary_expression "__ptr[6] + iVar10 * 0xc" (subscript_expression "__ptr[6]" identifier [ number_literal ]) + (binary_expression "iVar10 * 0xc" identifier * number_literal)) )))) ;) (if_statement "if (local_94 != 0) goto LAB_00023f26;" if (parenthesized_expression "(local_94 != 0)" ( (binary_expression "local_94 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00023f26;" goto statement_identifier ;)) (expression_statement "iVar19 = 1;" (assignment_expression "iVar19 = 1" identifier = number_literal) ;) (expression_statement "iVar18 = local_7c;" (assignment_expression "iVar18 = local_7c" identifier = identifier) ;) (if_statement "if (1 < local_7c) goto LAB_00023e3b;" if (parenthesized_expression "(1 < local_7c)" ( (binary_expression "1 < local_7c" number_literal < identifier) )) (goto_statement "goto LAB_00023e3b;" goto statement_identifier ;)) (goto_statement "goto LAB_00023ee2;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" identifier = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 != iVar14)" ( (binary_expression "iVar18 != iVar14" identifier != identifier) )) ;) })) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 < iVar18)" ( (binary_expression "iVar19 < iVar18" identifier < identifier) )) ;)) })) (labeled_statement "LAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);" statement_identifier : (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0)" identifier = (call_expression "FUN_0001a040(local_88,__ptr,local_ac,0)" identifier (argument_list "(local_88,__ptr,local_ac,0)" ( identifier , identifier , identifier , number_literal )))) ;)) (expression_statement "__ptr[9] = iVar18;" (assignment_expression "__ptr[9] = iVar18" (subscript_expression "__ptr[9]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" if (parenthesized_expression "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_000241e0:\n      local_94 = local_88[0];\n    }" { (labeled_statement "LAB_000241e0:\n      local_94 = local_88[0];" statement_identifier : (expression_statement "local_94 = local_88[0];" (assignment_expression "local_94 = local_88[0]" identifier = (subscript_expression "local_88[0]" identifier [ number_literal ])) ;)) }) (else_clause "else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" else (compound_statement "{\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" { (if_statement "if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" if (parenthesized_expression "(*(char *)(iVar18 + 0x34) < '\0')" ( (binary_expression "*(char *)(iVar18 + 0x34) < '\0'" (pointer_expression "*(char *)(iVar18 + 0x34)" * (cast_expression "(char *)(iVar18 + 0x34)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + 0x34)" ( (binary_expression "iVar18 + 0x34" identifier + number_literal) )))) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }" { (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1)" identifier = (call_expression "FUN_0001a040(local_88,__ptr,local_ac,1)" identifier (argument_list "(local_88,__ptr,local_ac,1)" ( identifier , identifier , identifier , number_literal )))) ;) (expression_statement "__ptr[10] = iVar18;" (assignment_expression "__ptr[10] = iVar18" (subscript_expression "__ptr[10]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2)" identifier = (call_expression "FUN_0001a040(local_88,__ptr,local_ac,2)" identifier (argument_list "(local_88,__ptr,local_ac,2)" ( identifier , identifier , identifier , number_literal )))) ;) (expression_statement "__ptr[0xb] = iVar18;" (assignment_expression "__ptr[0xb] = iVar18" (subscript_expression "__ptr[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6)" identifier = (call_expression "FUN_0001a040(local_88,__ptr,local_ac,6)" identifier (argument_list "(local_88,__ptr,local_ac,6)" ( identifier , identifier , identifier , number_literal )))) ;) (expression_statement "__ptr[0xc] = iVar18;" (assignment_expression "__ptr[0xc] = iVar18" (subscript_expression "__ptr[0xc]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;" if (parenthesized_expression "(((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0))" ( (binary_expression "((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)" (parenthesized_expression "((__ptr[10] == 0) || (__ptr[0xb] == 0))" ( (binary_expression "(__ptr[10] == 0) || (__ptr[0xb] == 0)" (parenthesized_expression "(__ptr[10] == 0)" ( (binary_expression "__ptr[10] == 0" (subscript_expression "__ptr[10]" identifier [ number_literal ]) == number_literal) )) || (parenthesized_expression "(__ptr[0xb] == 0)" ( (binary_expression "__ptr[0xb] == 0" (subscript_expression "__ptr[0xb]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) ))) )) (goto_statement "goto LAB_000241e0;" goto statement_identifier ;)) }) (else_clause "else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" else (compound_statement "{\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" { (expression_statement "__ptr[0xc] = iVar18;" (assignment_expression "__ptr[0xc] = iVar18" (subscript_expression "__ptr[0xc]" identifier [ number_literal ]) = identifier) ;) (expression_statement "__ptr[0xb] = iVar18;" (assignment_expression "__ptr[0xb] = iVar18" (subscript_expression "__ptr[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "__ptr[10] = iVar18;" (assignment_expression "__ptr[10] = iVar18" (subscript_expression "__ptr[10]" identifier [ number_literal ]) = identifier) ;) }))) (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "local_94 = iVar9;" (assignment_expression "local_94 = iVar9" identifier = identifier) ;) }))) })) (labeled_statement "LAB_00023f26:\n  iVar9 = *param_1;" statement_identifier : (expression_statement "iVar9 = *param_1;" (assignment_expression "iVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "puVar23 = *(undefined4 **)(iVar9 + 0x38);" (assignment_expression "puVar23 = *(undefined4 **)(iVar9 + 0x38)" identifier = (pointer_expression "*(undefined4 **)(iVar9 + 0x38)" * (cast_expression "(undefined4 **)(iVar9 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar9 + 0x38)" ( (binary_expression "iVar9 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "local_8c = local_94;" (assignment_expression "local_8c = local_94" identifier = identifier) ;) (while_statement "while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }" while (parenthesized_expression "(puVar23 != (undefined4 *)0x0)" ( (binary_expression "puVar23 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }" { (expression_statement "puVar3 = (undefined4 *)*puVar23;" (assignment_expression "puVar3 = (undefined4 *)*puVar23" identifier = (cast_expression "(undefined4 *)*puVar23" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar23" * identifier))) ;) (expression_statement "free(puVar23);" (call_expression "free(puVar23)" identifier (argument_list "(puVar23)" ( identifier ))) ;) (expression_statement "puVar23 = puVar3;" (assignment_expression "puVar23 = puVar3" identifier = identifier) ;) })) (expression_statement "*(undefined4 *)(iVar9 + 0x38) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x38) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x38)" * (cast_expression "(undefined4 *)(iVar9 + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x38)" ( (binary_expression "iVar9 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar9 + 0x40) = 0x1f;" (assignment_expression "*(undefined4 *)(iVar9 + 0x40) = 0x1f" (pointer_expression "*(undefined4 *)(iVar9 + 0x40)" * (cast_expression "(undefined4 *)(iVar9 + 0x40)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x40)" ( (binary_expression "iVar9 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar9 + 0x34) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x34) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x34)" * (cast_expression "(undefined4 *)(iVar9 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x34)" ( (binary_expression "iVar9 + 0x34" identifier + number_literal) )))) = number_literal) ;) (expression_statement "free(*(void **)(iVar9 + 0x10));" (call_expression "free(*(void **)(iVar9 + 0x10))" identifier (argument_list "(*(void **)(iVar9 + 0x10))" ( (pointer_expression "*(void **)(iVar9 + 0x10)" * (cast_expression "(void **)(iVar9 + 0x10)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar9 + 0x10)" ( (binary_expression "iVar9 + 0x10" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined4 *)(iVar9 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x10)" * (cast_expression "(undefined4 *)(iVar9 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x10)" ( (binary_expression "iVar9 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_000188a0();" (call_expression "FUN_000188a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" identifier = identifier) ;) (if_statement "if (local_8c == 0) goto LAB_00023f97;" if (parenthesized_expression "(local_8c == 0)" ( (binary_expression "local_8c == 0" identifier == number_literal) )) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;)) (labeled_statement "LAB_00023fc8:\n  FUN_0001c4f0();" statement_identifier : (expression_statement "FUN_0001c4f0();" (call_expression "FUN_0001c4f0()" identifier (argument_list "()" ( ))) ;)) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" identifier = identifier) ;) (labeled_statement "LAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000253d0();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_000253d0();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_000253d0();\n  }" { comment (expression_statement "FUN_000253d0();" (call_expression "FUN_000253d0()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar9;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nreg_errcode_t __regparm3\nre_compile_internal(regex_t *preg,char *pattern,size_t length,reg_syntax_t syntax)\n\n{\n  byte bVar1;\n  int iVar2;\n  uchar *puVar3;\n  bin_tree_storage_t *pbVar4;\n  bin_tree_storage_t *pbVar5;\n  byte bVar6;\n  _Bool _Var7;\n  re_token_t *prVar8;\n  re_state_table_entry *prVar9;\n  size_t sVar10;\n  byte *pbVar11;\n  reg_errcode_t rVar12;\n  bin_tree_t *right;\n  bin_tree_t *token;\n  bin_tree_t *pbVar13;\n  Idx *pIVar14;\n  Idx *pIVar15;\n  re_node_set *prVar16;\n  re_node_set *prVar17;\n  anon_union_4_5_a39f51ca_for_opr aVar18;\n  re_dfastate_t *prVar19;\n  re_bitset_ptr_t pbVar20;\n  wint_t wVar21;\n  re_token_t *prVar22;\n  re_dfa_t *dfa;\n  uint uVar23;\n  int iVar24;\n  size_t sVar25;\n  size_t *__ptr;\n  byte bVar26;\n  uint *puVar27;\n  uint uVar28;\n  int iVar29;\n  re_dfa_t *prVar30;\n  re_hashval_t rVar31;\n  undefined4 *puVar32;\n  byte *pbVar33;\n  uchar **ppuVar34;\n  size_t __size;\n  size_t sVar35;\n  int in_GS_OFFSET;\n  bool bVar36;\n  bool bVar37;\n  Idx IVar38;\n  reg_errcode_t *in_stack_ffffff44;\n  re_dfa_t *local_ac;\n  bin_tree_storage_t **local_a4;\n  anon_union_4_5_a39f51ca_for_opr local_94;\n  reg_errcode_t err;\n  re_token_t current_token;\n  re_token_t t;\n  Idx *local_78;\n  re_string_t regexp;\n  \n  bVar26 = 0;\n  dfa = preg->buffer;\n  iVar2 = *(int *)(in_GS_OFFSET + 0x14);\n  preg->field_0x1c = preg->field_0x1c & 0x90;\n  err = _REG_NOERROR;\n  preg->syntax = syntax;\n  preg->used = 0;\n  preg->re_nsub = 0;\n  if (preg->allocated < 0x88) {\n    dfa = (re_dfa_t *)realloc(dfa,0x88);\n    if (dfa == (re_dfa_t *)0x0) {\n      rVar12 = _REG_ESPACE;\n      goto LAB_00023f97;\n    }\n    preg->allocated = 0x88;\n    preg->buffer = dfa;\n  }\n  puVar32 = (undefined4 *)((uint)&dfa->nodes_alloc & 0xfffffffc);\n  preg->used = 0x88;\n  dfa->nodes = (re_token_t *)0x0;\n  dfa->subexp_map = (Idx *)0x0;\n  uVar23 = (uint)((int)dfa + (0x88 - (int)puVar32)) >> 2;\n  for (; uVar23 != 0; uVar23 = uVar23 - 1) {\n    *puVar32 = 0;\n    puVar32 = puVar32 + (uint)bVar26 * -2 + 1;\n  }\n  dfa->str_tree_storage_idx = 0x1f;\n  if (length < 0xaaaaaaa) {\n    sVar35 = length + 1;\n    dfa->nodes_alloc = sVar35;\n    prVar8 = (re_token_t *)malloc(sVar35 * 8);\n    dfa->nodes = prVar8;\n    if (length == 0) {\n      rVar31 = 0;\n      uVar23 = 1;\n    }\n    else {\n      uVar23 = 1;\n      do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);\n      rVar31 = uVar23 - 1;\n    }\n    prVar9 = (re_state_table_entry *)calloc(0xc,uVar23);\n    dfa->state_hash_mask = rVar31;\n    dfa->state_table = prVar9;\n    sVar10 = __ctype_get_mb_cur_max();\n    dfa->mb_cur_max = sVar10;\n    pbVar11 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&\n       ((pbVar11[2] & 0xdf) == 0x46)) {\n      bVar36 = pbVar11[3] < 0x2d;\n      bVar37 = pbVar11[3] == 0x2d;\n      iVar24 = 2;\n      pbVar11 = pbVar11 + bVar37 + 3;\n      pbVar33 = &DAT_00027a0a;\n      do {\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      } while (bVar37);\n      if ((!bVar36 && !bVar37) == bVar36) {\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }\n    }\n    bVar1 = dfa->field_0x58;\n    dfa->field_0x58 = bVar1 & 0xf7;\n    if (1 < dfa->mb_cur_max) {\n      if ((bVar1 & 4) == 0) {\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }\n      else {\n        dfa->sb_char = utf8_sb_map;\n      }\n    }\n    if ((dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0)) {\n      err = _REG_NOERROR;\n      puVar3 = preg->translate;\n      ppuVar34 = &regexp.mbs;\n      for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }\n      uVar23 = syntax & 0x400000;\n      regexp.icase = uVar23 != 0;\n      iVar24 = dfa->mb_cur_max;\n      regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;\n      regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;\n      regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;\n      regexp.raw_mbs = (uchar *)pattern;\n      regexp.raw_len = length;\n      regexp.len = length;\n      regexp.raw_stop = length;\n      regexp.stop = length;\n      regexp.trans = puVar3;\n      regexp.mb_cur_max = iVar24;\n      if (length == 0) {\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }\n      else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }\nLAB_00023ff8:\n      pbVar5 = prVar30->str_tree_storage;\n      while (pbVar5 != (bin_tree_storage_t *)0x0) {\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }\n      prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n      prVar30->str_tree_storage_idx = 0x1f;\n      prVar30->str_tree = (bin_tree_t *)0x0;\n      free(prVar30->org_indices);\n      prVar30->org_indices = (Idx *)0x0;\n      re_string_destruct(&regexp);\n      free_dfa_content(dfa);\n      preg->buffer = (re_dfa_t *)0x0;\n      preg->allocated = 0;\n      rVar12 = err;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  err = _REG_ESPACE;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  sVar35 = sVar25 + 1;\n  sVar25 = sVar35;\n  if (prVar30->nodes_len == sVar35) {\nLAB_00023bfe:\n    if (!bVar36) {\n      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;\n      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);\n      prVar30->inveclosures = prVar16;\n      if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      err = _REG_ESPACE;\n      prVar30 = preg->buffer;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar36 = false;\n    sVar25 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    prVar16 = prVar16 + uVar28;\n    prVar16->alloc = 0;\n    prVar16->nelem = 0;\n    prVar16->elems = (Idx *)0x0;\n    if (prVar30->nodes_len <= uVar28 + 1) break;\n    prVar16 = prVar30->inveclosures;\n    uVar28 = uVar28 + 1;\n  }\n  if (prVar30->nodes_len != 0) {\n    prVar16 = prVar30->eclosures;\n    uVar28 = 0;\n    do {\n      iVar24 = 0;\n      pIVar14 = prVar16[uVar28].elems;\n      if (0 < prVar16[uVar28].nelem) {\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }\n      uVar28 = uVar28 + 1;\n    } while (uVar28 < prVar30->nodes_len);\n  }\nLAB_00023dab:\n  err = _REG_NOERROR;\n  bVar26 = (byte)dfa->field_0x58 >> 2 & uVar23 == 0;\n  if ((bVar26 != 0) && (preg->translate == (uchar *)0x0)) {\n    if (dfa->nodes_len == 0) {\nLAB_00024424:\n      bVar6 = 0;\n    }\n    else {\n      prVar8 = dfa->nodes;\n      bVar6 = 0;\n      sVar35 = 0;\n      bVar1 = 0;\n      prVar22 = prVar8;\n      do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);\n      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;\n      prVar22 = prVar8 + sVar35;\n      do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);\n    }\n    dfa->mb_cur_max = 1;\n    dfa->field_0x58 = (0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9;\n  }\nLAB_00023dcb:\n  iVar24 = dfa->str_tree->first->node_idx;\n  dfa->init_node = iVar24;\n  aVar18.idx = re_node_set_init_copy((re_node_set *)local_ac,dfa->eclosures + iVar24);\n  local_94.idx = aVar18.idx;\n  current_token.opr.idx = aVar18.idx;\n  if (aVar18.sbcset == (re_bitset_ptr_t)0x0) {\n    if ((0 < dfa->nbackref) && (0 < (int)t._4_4_)) {\n      iVar24 = 0;\n      prVar16 = (re_node_set *)t._4_4_;\nLAB_00023e3b:\n      do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);\n    }\nLAB_00023ee2:\n    prVar19 = re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0);\n    dfa->init_state = prVar19;\n    if (prVar19 == (re_dfastate_t *)0x0) {\nLAB_000241e0:\n      local_94 = current_token.opr;\n    }\n    else {\n      if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }\n      free(local_78);\n      local_94.idx = aVar18.idx;\n    }\n  }\nLAB_00023f26:\n  prVar30 = preg->buffer;\n  pbVar5 = prVar30->str_tree_storage;\n  err = (reg_errcode_t)local_94;\n  while (pbVar5 != (bin_tree_storage_t *)0x0) {\n    pbVar4 = pbVar5->next;\n    free(pbVar5);\n    pbVar5 = pbVar4;\n  }\n  prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n  prVar30->str_tree_storage_idx = 0x1f;\n  prVar30->str_tree = (bin_tree_t *)0x0;\n  free(prVar30->org_indices);\n  prVar30->org_indices = (Idx *)0x0;\n  re_string_destruct(&regexp);\n  rVar12 = err;\n  if (err == _REG_NOERROR) goto LAB_00023f97;\nLAB_00023fc8:\n  free_dfa_content(dfa);\n  preg->buffer = (re_dfa_t *)0x0;\n  preg->allocated = 0;\n  rVar12 = err;\nLAB_00023f97:\n  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return rVar12;\n}\n\n" comment (function_definition "reg_errcode_t __regparm3\nre_compile_internal(regex_t *preg,char *pattern,size_t length,reg_syntax_t syntax)\n\n{\n  byte bVar1;\n  int iVar2;\n  uchar *puVar3;\n  bin_tree_storage_t *pbVar4;\n  bin_tree_storage_t *pbVar5;\n  byte bVar6;\n  _Bool _Var7;\n  re_token_t *prVar8;\n  re_state_table_entry *prVar9;\n  size_t sVar10;\n  byte *pbVar11;\n  reg_errcode_t rVar12;\n  bin_tree_t *right;\n  bin_tree_t *token;\n  bin_tree_t *pbVar13;\n  Idx *pIVar14;\n  Idx *pIVar15;\n  re_node_set *prVar16;\n  re_node_set *prVar17;\n  anon_union_4_5_a39f51ca_for_opr aVar18;\n  re_dfastate_t *prVar19;\n  re_bitset_ptr_t pbVar20;\n  wint_t wVar21;\n  re_token_t *prVar22;\n  re_dfa_t *dfa;\n  uint uVar23;\n  int iVar24;\n  size_t sVar25;\n  size_t *__ptr;\n  byte bVar26;\n  uint *puVar27;\n  uint uVar28;\n  int iVar29;\n  re_dfa_t *prVar30;\n  re_hashval_t rVar31;\n  undefined4 *puVar32;\n  byte *pbVar33;\n  uchar **ppuVar34;\n  size_t __size;\n  size_t sVar35;\n  int in_GS_OFFSET;\n  bool bVar36;\n  bool bVar37;\n  Idx IVar38;\n  reg_errcode_t *in_stack_ffffff44;\n  re_dfa_t *local_ac;\n  bin_tree_storage_t **local_a4;\n  anon_union_4_5_a39f51ca_for_opr local_94;\n  reg_errcode_t err;\n  re_token_t current_token;\n  re_token_t t;\n  Idx *local_78;\n  re_string_t regexp;\n  \n  bVar26 = 0;\n  dfa = preg->buffer;\n  iVar2 = *(int *)(in_GS_OFFSET + 0x14);\n  preg->field_0x1c = preg->field_0x1c & 0x90;\n  err = _REG_NOERROR;\n  preg->syntax = syntax;\n  preg->used = 0;\n  preg->re_nsub = 0;\n  if (preg->allocated < 0x88) {\n    dfa = (re_dfa_t *)realloc(dfa,0x88);\n    if (dfa == (re_dfa_t *)0x0) {\n      rVar12 = _REG_ESPACE;\n      goto LAB_00023f97;\n    }\n    preg->allocated = 0x88;\n    preg->buffer = dfa;\n  }\n  puVar32 = (undefined4 *)((uint)&dfa->nodes_alloc & 0xfffffffc);\n  preg->used = 0x88;\n  dfa->nodes = (re_token_t *)0x0;\n  dfa->subexp_map = (Idx *)0x0;\n  uVar23 = (uint)((int)dfa + (0x88 - (int)puVar32)) >> 2;\n  for (; uVar23 != 0; uVar23 = uVar23 - 1) {\n    *puVar32 = 0;\n    puVar32 = puVar32 + (uint)bVar26 * -2 + 1;\n  }\n  dfa->str_tree_storage_idx = 0x1f;\n  if (length < 0xaaaaaaa) {\n    sVar35 = length + 1;\n    dfa->nodes_alloc = sVar35;\n    prVar8 = (re_token_t *)malloc(sVar35 * 8);\n    dfa->nodes = prVar8;\n    if (length == 0) {\n      rVar31 = 0;\n      uVar23 = 1;\n    }\n    else {\n      uVar23 = 1;\n      do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);\n      rVar31 = uVar23 - 1;\n    }\n    prVar9 = (re_state_table_entry *)calloc(0xc,uVar23);\n    dfa->state_hash_mask = rVar31;\n    dfa->state_table = prVar9;\n    sVar10 = __ctype_get_mb_cur_max();\n    dfa->mb_cur_max = sVar10;\n    pbVar11 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&\n       ((pbVar11[2] & 0xdf) == 0x46)) {\n      bVar36 = pbVar11[3] < 0x2d;\n      bVar37 = pbVar11[3] == 0x2d;\n      iVar24 = 2;\n      pbVar11 = pbVar11 + bVar37 + 3;\n      pbVar33 = &DAT_00027a0a;\n      do {\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      } while (bVar37);\n      if ((!bVar36 && !bVar37) == bVar36) {\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }\n    }\n    bVar1 = dfa->field_0x58;\n    dfa->field_0x58 = bVar1 & 0xf7;\n    if (1 < dfa->mb_cur_max) {\n      if ((bVar1 & 4) == 0) {\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }\n      else {\n        dfa->sb_char = utf8_sb_map;\n      }\n    }\n    if ((dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0)) {\n      err = _REG_NOERROR;\n      puVar3 = preg->translate;\n      ppuVar34 = &regexp.mbs;\n      for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }\n      uVar23 = syntax & 0x400000;\n      regexp.icase = uVar23 != 0;\n      iVar24 = dfa->mb_cur_max;\n      regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;\n      regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;\n      regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;\n      regexp.raw_mbs = (uchar *)pattern;\n      regexp.raw_len = length;\n      regexp.len = length;\n      regexp.raw_stop = length;\n      regexp.stop = length;\n      regexp.trans = puVar3;\n      regexp.mb_cur_max = iVar24;\n      if (length == 0) {\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }\n      else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }\nLAB_00023ff8:\n      pbVar5 = prVar30->str_tree_storage;\n      while (pbVar5 != (bin_tree_storage_t *)0x0) {\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }\n      prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n      prVar30->str_tree_storage_idx = 0x1f;\n      prVar30->str_tree = (bin_tree_t *)0x0;\n      free(prVar30->org_indices);\n      prVar30->org_indices = (Idx *)0x0;\n      re_string_destruct(&regexp);\n      free_dfa_content(dfa);\n      preg->buffer = (re_dfa_t *)0x0;\n      preg->allocated = 0;\n      rVar12 = err;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  err = _REG_ESPACE;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  sVar35 = sVar25 + 1;\n  sVar25 = sVar35;\n  if (prVar30->nodes_len == sVar35) {\nLAB_00023bfe:\n    if (!bVar36) {\n      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;\n      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);\n      prVar30->inveclosures = prVar16;\n      if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      err = _REG_ESPACE;\n      prVar30 = preg->buffer;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar36 = false;\n    sVar25 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    prVar16 = prVar16 + uVar28;\n    prVar16->alloc = 0;\n    prVar16->nelem = 0;\n    prVar16->elems = (Idx *)0x0;\n    if (prVar30->nodes_len <= uVar28 + 1) break;\n    prVar16 = prVar30->inveclosures;\n    uVar28 = uVar28 + 1;\n  }\n  if (prVar30->nodes_len != 0) {\n    prVar16 = prVar30->eclosures;\n    uVar28 = 0;\n    do {\n      iVar24 = 0;\n      pIVar14 = prVar16[uVar28].elems;\n      if (0 < prVar16[uVar28].nelem) {\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }\n      uVar28 = uVar28 + 1;\n    } while (uVar28 < prVar30->nodes_len);\n  }\nLAB_00023dab:\n  err = _REG_NOERROR;\n  bVar26 = (byte)dfa->field_0x58 >> 2 & uVar23 == 0;\n  if ((bVar26 != 0) && (preg->translate == (uchar *)0x0)) {\n    if (dfa->nodes_len == 0) {\nLAB_00024424:\n      bVar6 = 0;\n    }\n    else {\n      prVar8 = dfa->nodes;\n      bVar6 = 0;\n      sVar35 = 0;\n      bVar1 = 0;\n      prVar22 = prVar8;\n      do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);\n      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;\n      prVar22 = prVar8 + sVar35;\n      do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);\n    }\n    dfa->mb_cur_max = 1;\n    dfa->field_0x58 = (0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9;\n  }\nLAB_00023dcb:\n  iVar24 = dfa->str_tree->first->node_idx;\n  dfa->init_node = iVar24;\n  aVar18.idx = re_node_set_init_copy((re_node_set *)local_ac,dfa->eclosures + iVar24);\n  local_94.idx = aVar18.idx;\n  current_token.opr.idx = aVar18.idx;\n  if (aVar18.sbcset == (re_bitset_ptr_t)0x0) {\n    if ((0 < dfa->nbackref) && (0 < (int)t._4_4_)) {\n      iVar24 = 0;\n      prVar16 = (re_node_set *)t._4_4_;\nLAB_00023e3b:\n      do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);\n    }\nLAB_00023ee2:\n    prVar19 = re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0);\n    dfa->init_state = prVar19;\n    if (prVar19 == (re_dfastate_t *)0x0) {\nLAB_000241e0:\n      local_94 = current_token.opr;\n    }\n    else {\n      if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }\n      free(local_78);\n      local_94.idx = aVar18.idx;\n    }\n  }\nLAB_00023f26:\n  prVar30 = preg->buffer;\n  pbVar5 = prVar30->str_tree_storage;\n  err = (reg_errcode_t)local_94;\n  while (pbVar5 != (bin_tree_storage_t *)0x0) {\n    pbVar4 = pbVar5->next;\n    free(pbVar5);\n    pbVar5 = pbVar4;\n  }\n  prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n  prVar30->str_tree_storage_idx = 0x1f;\n  prVar30->str_tree = (bin_tree_t *)0x0;\n  free(prVar30->org_indices);\n  prVar30->org_indices = (Idx *)0x0;\n  re_string_destruct(&regexp);\n  rVar12 = err;\n  if (err == _REG_NOERROR) goto LAB_00023f97;\nLAB_00023fc8:\n  free_dfa_content(dfa);\n  preg->buffer = (re_dfa_t *)0x0;\n  preg->allocated = 0;\n  rVar12 = err;\nLAB_00023f97:\n  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return rVar12;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "re_compile_internal(regex_t *preg,char *pattern,size_t length,reg_syntax_t syntax)" identifier (parameter_list "(regex_t *preg,char *pattern,size_t length,reg_syntax_t syntax)" ( (parameter_declaration "regex_t *preg" type_identifier (pointer_declarator "*preg" * identifier)) , (parameter_declaration "char *pattern" primitive_type (pointer_declarator "*pattern" * identifier)) , (parameter_declaration "size_t length" primitive_type identifier) , (parameter_declaration "reg_syntax_t syntax" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  int iVar2;\n  uchar *puVar3;\n  bin_tree_storage_t *pbVar4;\n  bin_tree_storage_t *pbVar5;\n  byte bVar6;\n  _Bool _Var7;\n  re_token_t *prVar8;\n  re_state_table_entry *prVar9;\n  size_t sVar10;\n  byte *pbVar11;\n  reg_errcode_t rVar12;\n  bin_tree_t *right;\n  bin_tree_t *token;\n  bin_tree_t *pbVar13;\n  Idx *pIVar14;\n  Idx *pIVar15;\n  re_node_set *prVar16;\n  re_node_set *prVar17;\n  anon_union_4_5_a39f51ca_for_opr aVar18;\n  re_dfastate_t *prVar19;\n  re_bitset_ptr_t pbVar20;\n  wint_t wVar21;\n  re_token_t *prVar22;\n  re_dfa_t *dfa;\n  uint uVar23;\n  int iVar24;\n  size_t sVar25;\n  size_t *__ptr;\n  byte bVar26;\n  uint *puVar27;\n  uint uVar28;\n  int iVar29;\n  re_dfa_t *prVar30;\n  re_hashval_t rVar31;\n  undefined4 *puVar32;\n  byte *pbVar33;\n  uchar **ppuVar34;\n  size_t __size;\n  size_t sVar35;\n  int in_GS_OFFSET;\n  bool bVar36;\n  bool bVar37;\n  Idx IVar38;\n  reg_errcode_t *in_stack_ffffff44;\n  re_dfa_t *local_ac;\n  bin_tree_storage_t **local_a4;\n  anon_union_4_5_a39f51ca_for_opr local_94;\n  reg_errcode_t err;\n  re_token_t current_token;\n  re_token_t t;\n  Idx *local_78;\n  re_string_t regexp;\n  \n  bVar26 = 0;\n  dfa = preg->buffer;\n  iVar2 = *(int *)(in_GS_OFFSET + 0x14);\n  preg->field_0x1c = preg->field_0x1c & 0x90;\n  err = _REG_NOERROR;\n  preg->syntax = syntax;\n  preg->used = 0;\n  preg->re_nsub = 0;\n  if (preg->allocated < 0x88) {\n    dfa = (re_dfa_t *)realloc(dfa,0x88);\n    if (dfa == (re_dfa_t *)0x0) {\n      rVar12 = _REG_ESPACE;\n      goto LAB_00023f97;\n    }\n    preg->allocated = 0x88;\n    preg->buffer = dfa;\n  }\n  puVar32 = (undefined4 *)((uint)&dfa->nodes_alloc & 0xfffffffc);\n  preg->used = 0x88;\n  dfa->nodes = (re_token_t *)0x0;\n  dfa->subexp_map = (Idx *)0x0;\n  uVar23 = (uint)((int)dfa + (0x88 - (int)puVar32)) >> 2;\n  for (; uVar23 != 0; uVar23 = uVar23 - 1) {\n    *puVar32 = 0;\n    puVar32 = puVar32 + (uint)bVar26 * -2 + 1;\n  }\n  dfa->str_tree_storage_idx = 0x1f;\n  if (length < 0xaaaaaaa) {\n    sVar35 = length + 1;\n    dfa->nodes_alloc = sVar35;\n    prVar8 = (re_token_t *)malloc(sVar35 * 8);\n    dfa->nodes = prVar8;\n    if (length == 0) {\n      rVar31 = 0;\n      uVar23 = 1;\n    }\n    else {\n      uVar23 = 1;\n      do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);\n      rVar31 = uVar23 - 1;\n    }\n    prVar9 = (re_state_table_entry *)calloc(0xc,uVar23);\n    dfa->state_hash_mask = rVar31;\n    dfa->state_table = prVar9;\n    sVar10 = __ctype_get_mb_cur_max();\n    dfa->mb_cur_max = sVar10;\n    pbVar11 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&\n       ((pbVar11[2] & 0xdf) == 0x46)) {\n      bVar36 = pbVar11[3] < 0x2d;\n      bVar37 = pbVar11[3] == 0x2d;\n      iVar24 = 2;\n      pbVar11 = pbVar11 + bVar37 + 3;\n      pbVar33 = &DAT_00027a0a;\n      do {\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      } while (bVar37);\n      if ((!bVar36 && !bVar37) == bVar36) {\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }\n    }\n    bVar1 = dfa->field_0x58;\n    dfa->field_0x58 = bVar1 & 0xf7;\n    if (1 < dfa->mb_cur_max) {\n      if ((bVar1 & 4) == 0) {\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }\n      else {\n        dfa->sb_char = utf8_sb_map;\n      }\n    }\n    if ((dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0)) {\n      err = _REG_NOERROR;\n      puVar3 = preg->translate;\n      ppuVar34 = &regexp.mbs;\n      for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }\n      uVar23 = syntax & 0x400000;\n      regexp.icase = uVar23 != 0;\n      iVar24 = dfa->mb_cur_max;\n      regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;\n      regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;\n      regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;\n      regexp.raw_mbs = (uchar *)pattern;\n      regexp.raw_len = length;\n      regexp.len = length;\n      regexp.raw_stop = length;\n      regexp.stop = length;\n      regexp.trans = puVar3;\n      regexp.mb_cur_max = iVar24;\n      if (length == 0) {\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }\n      else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }\nLAB_00023ff8:\n      pbVar5 = prVar30->str_tree_storage;\n      while (pbVar5 != (bin_tree_storage_t *)0x0) {\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }\n      prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n      prVar30->str_tree_storage_idx = 0x1f;\n      prVar30->str_tree = (bin_tree_t *)0x0;\n      free(prVar30->org_indices);\n      prVar30->org_indices = (Idx *)0x0;\n      re_string_destruct(&regexp);\n      free_dfa_content(dfa);\n      preg->buffer = (re_dfa_t *)0x0;\n      preg->allocated = 0;\n      rVar12 = err;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  err = _REG_ESPACE;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  sVar35 = sVar25 + 1;\n  sVar25 = sVar35;\n  if (prVar30->nodes_len == sVar35) {\nLAB_00023bfe:\n    if (!bVar36) {\n      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;\n      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);\n      prVar30->inveclosures = prVar16;\n      if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      err = _REG_ESPACE;\n      prVar30 = preg->buffer;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar36 = false;\n    sVar25 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    prVar16 = prVar16 + uVar28;\n    prVar16->alloc = 0;\n    prVar16->nelem = 0;\n    prVar16->elems = (Idx *)0x0;\n    if (prVar30->nodes_len <= uVar28 + 1) break;\n    prVar16 = prVar30->inveclosures;\n    uVar28 = uVar28 + 1;\n  }\n  if (prVar30->nodes_len != 0) {\n    prVar16 = prVar30->eclosures;\n    uVar28 = 0;\n    do {\n      iVar24 = 0;\n      pIVar14 = prVar16[uVar28].elems;\n      if (0 < prVar16[uVar28].nelem) {\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }\n      uVar28 = uVar28 + 1;\n    } while (uVar28 < prVar30->nodes_len);\n  }\nLAB_00023dab:\n  err = _REG_NOERROR;\n  bVar26 = (byte)dfa->field_0x58 >> 2 & uVar23 == 0;\n  if ((bVar26 != 0) && (preg->translate == (uchar *)0x0)) {\n    if (dfa->nodes_len == 0) {\nLAB_00024424:\n      bVar6 = 0;\n    }\n    else {\n      prVar8 = dfa->nodes;\n      bVar6 = 0;\n      sVar35 = 0;\n      bVar1 = 0;\n      prVar22 = prVar8;\n      do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);\n      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;\n      prVar22 = prVar8 + sVar35;\n      do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);\n    }\n    dfa->mb_cur_max = 1;\n    dfa->field_0x58 = (0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9;\n  }\nLAB_00023dcb:\n  iVar24 = dfa->str_tree->first->node_idx;\n  dfa->init_node = iVar24;\n  aVar18.idx = re_node_set_init_copy((re_node_set *)local_ac,dfa->eclosures + iVar24);\n  local_94.idx = aVar18.idx;\n  current_token.opr.idx = aVar18.idx;\n  if (aVar18.sbcset == (re_bitset_ptr_t)0x0) {\n    if ((0 < dfa->nbackref) && (0 < (int)t._4_4_)) {\n      iVar24 = 0;\n      prVar16 = (re_node_set *)t._4_4_;\nLAB_00023e3b:\n      do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);\n    }\nLAB_00023ee2:\n    prVar19 = re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0);\n    dfa->init_state = prVar19;\n    if (prVar19 == (re_dfastate_t *)0x0) {\nLAB_000241e0:\n      local_94 = current_token.opr;\n    }\n    else {\n      if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }\n      free(local_78);\n      local_94.idx = aVar18.idx;\n    }\n  }\nLAB_00023f26:\n  prVar30 = preg->buffer;\n  pbVar5 = prVar30->str_tree_storage;\n  err = (reg_errcode_t)local_94;\n  while (pbVar5 != (bin_tree_storage_t *)0x0) {\n    pbVar4 = pbVar5->next;\n    free(pbVar5);\n    pbVar5 = pbVar4;\n  }\n  prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n  prVar30->str_tree_storage_idx = 0x1f;\n  prVar30->str_tree = (bin_tree_t *)0x0;\n  free(prVar30->org_indices);\n  prVar30->org_indices = (Idx *)0x0;\n  re_string_destruct(&regexp);\n  rVar12 = err;\n  if (err == _REG_NOERROR) goto LAB_00023f97;\nLAB_00023fc8:\n  free_dfa_content(dfa);\n  preg->buffer = (re_dfa_t *)0x0;\n  preg->allocated = 0;\n  rVar12 = err;\nLAB_00023f97:\n  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }\n  return rVar12;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "uchar *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "bin_tree_storage_t *pbVar4;" type_identifier (pointer_declarator "*pbVar4" * identifier) ;) (declaration "bin_tree_storage_t *pbVar5;" type_identifier (pointer_declarator "*pbVar5" * identifier) ;) (declaration "byte bVar6;" type_identifier identifier ;) (declaration "_Bool _Var7;" type_identifier identifier ;) (declaration "re_token_t *prVar8;" type_identifier (pointer_declarator "*prVar8" * identifier) ;) (declaration "re_state_table_entry *prVar9;" type_identifier (pointer_declarator "*prVar9" * identifier) ;) (declaration "size_t sVar10;" primitive_type identifier ;) (declaration "byte *pbVar11;" type_identifier (pointer_declarator "*pbVar11" * identifier) ;) (declaration "reg_errcode_t rVar12;" type_identifier identifier ;) (declaration "bin_tree_t *right;" type_identifier (pointer_declarator "*right" * identifier) ;) (declaration "bin_tree_t *token;" type_identifier (pointer_declarator "*token" * identifier) ;) (declaration "bin_tree_t *pbVar13;" type_identifier (pointer_declarator "*pbVar13" * identifier) ;) (declaration "Idx *pIVar14;" type_identifier (pointer_declarator "*pIVar14" * identifier) ;) (declaration "Idx *pIVar15;" type_identifier (pointer_declarator "*pIVar15" * identifier) ;) (declaration "re_node_set *prVar16;" type_identifier (pointer_declarator "*prVar16" * identifier) ;) (declaration "re_node_set *prVar17;" type_identifier (pointer_declarator "*prVar17" * identifier) ;) (declaration "anon_union_4_5_a39f51ca_for_opr aVar18;" type_identifier identifier ;) (declaration "re_dfastate_t *prVar19;" type_identifier (pointer_declarator "*prVar19" * identifier) ;) (declaration "re_bitset_ptr_t pbVar20;" type_identifier identifier ;) (declaration "wint_t wVar21;" type_identifier identifier ;) (declaration "re_token_t *prVar22;" type_identifier (pointer_declarator "*prVar22" * identifier) ;) (declaration "re_dfa_t *dfa;" type_identifier (pointer_declarator "*dfa" * identifier) ;) (declaration "uint uVar23;" type_identifier identifier ;) (declaration "int iVar24;" primitive_type identifier ;) (declaration "size_t sVar25;" primitive_type identifier ;) (declaration "size_t *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "byte bVar26;" type_identifier identifier ;) (declaration "uint *puVar27;" type_identifier (pointer_declarator "*puVar27" * identifier) ;) (declaration "uint uVar28;" type_identifier identifier ;) (declaration "int iVar29;" primitive_type identifier ;) (declaration "re_dfa_t *prVar30;" type_identifier (pointer_declarator "*prVar30" * identifier) ;) (declaration "re_hashval_t rVar31;" type_identifier identifier ;) (declaration "undefined4 *puVar32;" type_identifier (pointer_declarator "*puVar32" * identifier) ;) (declaration "byte *pbVar33;" type_identifier (pointer_declarator "*pbVar33" * identifier) ;) (declaration "uchar **ppuVar34;" type_identifier (pointer_declarator "**ppuVar34" * (pointer_declarator "*ppuVar34" * identifier)) ;) (declaration "size_t __size;" primitive_type identifier ;) (declaration "size_t sVar35;" primitive_type identifier ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar36;" primitive_type identifier ;) (declaration "bool bVar37;" primitive_type identifier ;) (declaration "Idx IVar38;" type_identifier identifier ;) (declaration "reg_errcode_t *in_stack_ffffff44;" type_identifier (pointer_declarator "*in_stack_ffffff44" * identifier) ;) (declaration "re_dfa_t *local_ac;" type_identifier (pointer_declarator "*local_ac" * identifier) ;) (declaration "bin_tree_storage_t **local_a4;" type_identifier (pointer_declarator "**local_a4" * (pointer_declarator "*local_a4" * identifier)) ;) (declaration "anon_union_4_5_a39f51ca_for_opr local_94;" type_identifier identifier ;) (declaration "reg_errcode_t err;" type_identifier identifier ;) (declaration "re_token_t current_token;" type_identifier identifier ;) (declaration "re_token_t t;" type_identifier identifier ;) (declaration "Idx *local_78;" type_identifier (pointer_declarator "*local_78" * identifier) ;) (declaration "re_string_t regexp;" type_identifier identifier ;) (expression_statement "bVar26 = 0;" (assignment_expression "bVar26 = 0" identifier = number_literal) ;) (expression_statement "dfa = preg->buffer;" (assignment_expression "dfa = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;) (expression_statement "iVar2 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "iVar2 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "preg->field_0x1c = preg->field_0x1c & 0x90;" (assignment_expression "preg->field_0x1c = preg->field_0x1c & 0x90" (field_expression "preg->field_0x1c" identifier -> field_identifier) = (binary_expression "preg->field_0x1c & 0x90" (field_expression "preg->field_0x1c" identifier -> field_identifier) & number_literal)) ;) (expression_statement "err = _REG_NOERROR;" (assignment_expression "err = _REG_NOERROR" identifier = identifier) ;) (expression_statement "preg->syntax = syntax;" (assignment_expression "preg->syntax = syntax" (field_expression "preg->syntax" identifier -> field_identifier) = identifier) ;) (expression_statement "preg->used = 0;" (assignment_expression "preg->used = 0" (field_expression "preg->used" identifier -> field_identifier) = number_literal) ;) (expression_statement "preg->re_nsub = 0;" (assignment_expression "preg->re_nsub = 0" (field_expression "preg->re_nsub" identifier -> field_identifier) = number_literal) ;) (if_statement "if (preg->allocated < 0x88) {\n    dfa = (re_dfa_t *)realloc(dfa,0x88);\n    if (dfa == (re_dfa_t *)0x0) {\n      rVar12 = _REG_ESPACE;\n      goto LAB_00023f97;\n    }\n    preg->allocated = 0x88;\n    preg->buffer = dfa;\n  }" if (parenthesized_expression "(preg->allocated < 0x88)" ( (binary_expression "preg->allocated < 0x88" (field_expression "preg->allocated" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n    dfa = (re_dfa_t *)realloc(dfa,0x88);\n    if (dfa == (re_dfa_t *)0x0) {\n      rVar12 = _REG_ESPACE;\n      goto LAB_00023f97;\n    }\n    preg->allocated = 0x88;\n    preg->buffer = dfa;\n  }" { (expression_statement "dfa = (re_dfa_t *)realloc(dfa,0x88);" (assignment_expression "dfa = (re_dfa_t *)realloc(dfa,0x88)" identifier = (cast_expression "(re_dfa_t *)realloc(dfa,0x88)" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "realloc(dfa,0x88)" identifier (argument_list "(dfa,0x88)" ( identifier , number_literal ))))) ;) (if_statement "if (dfa == (re_dfa_t *)0x0) {\n      rVar12 = _REG_ESPACE;\n      goto LAB_00023f97;\n    }" if (parenthesized_expression "(dfa == (re_dfa_t *)0x0)" ( (binary_expression "dfa == (re_dfa_t *)0x0" identifier == (cast_expression "(re_dfa_t *)0x0" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      rVar12 = _REG_ESPACE;\n      goto LAB_00023f97;\n    }" { (expression_statement "rVar12 = _REG_ESPACE;" (assignment_expression "rVar12 = _REG_ESPACE" identifier = identifier) ;) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;) })) (expression_statement "preg->allocated = 0x88;" (assignment_expression "preg->allocated = 0x88" (field_expression "preg->allocated" identifier -> field_identifier) = number_literal) ;) (expression_statement "preg->buffer = dfa;" (assignment_expression "preg->buffer = dfa" (field_expression "preg->buffer" identifier -> field_identifier) = identifier) ;) })) (expression_statement "puVar32 = (undefined4 *)((uint)&dfa->nodes_alloc & 0xfffffffc);" (assignment_expression "puVar32 = (undefined4 *)((uint)&dfa->nodes_alloc & 0xfffffffc)" identifier = (cast_expression "(undefined4 *)((uint)&dfa->nodes_alloc & 0xfffffffc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)&dfa->nodes_alloc & 0xfffffffc)" ( (binary_expression "(uint)&dfa->nodes_alloc & 0xfffffffc" (binary_expression "(uint)&dfa->nodes_alloc" (parenthesized_expression "(uint)" ( identifier )) & (field_expression "dfa->nodes_alloc" identifier -> field_identifier)) & number_literal) )))) ;) (expression_statement "preg->used = 0x88;" (assignment_expression "preg->used = 0x88" (field_expression "preg->used" identifier -> field_identifier) = number_literal) ;) (expression_statement "dfa->nodes = (re_token_t *)0x0;" (assignment_expression "dfa->nodes = (re_token_t *)0x0" (field_expression "dfa->nodes" identifier -> field_identifier) = (cast_expression "(re_token_t *)0x0" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "dfa->subexp_map = (Idx *)0x0;" (assignment_expression "dfa->subexp_map = (Idx *)0x0" (field_expression "dfa->subexp_map" identifier -> field_identifier) = (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar23 = (uint)((int)dfa + (0x88 - (int)puVar32)) >> 2;" (assignment_expression "uVar23 = (uint)((int)dfa + (0x88 - (int)puVar32)) >> 2" identifier = (binary_expression "(uint)((int)dfa + (0x88 - (int)puVar32)) >> 2" (call_expression "(uint)((int)dfa + (0x88 - (int)puVar32))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)dfa + (0x88 - (int)puVar32))" ( (binary_expression "(int)dfa + (0x88 - (int)puVar32)" (cast_expression "(int)dfa" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(0x88 - (int)puVar32)" ( (binary_expression "0x88 - (int)puVar32" number_literal - (cast_expression "(int)puVar32" ( (type_descriptor "int" primitive_type) ) identifier)) ))) ))) >> number_literal)) ;) (for_statement "for (; uVar23 != 0; uVar23 = uVar23 - 1) {\n    *puVar32 = 0;\n    puVar32 = puVar32 + (uint)bVar26 * -2 + 1;\n  }" for ( ; (binary_expression "uVar23 != 0" identifier != number_literal) ; (assignment_expression "uVar23 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ) (compound_statement "{\n    *puVar32 = 0;\n    puVar32 = puVar32 + (uint)bVar26 * -2 + 1;\n  }" { (expression_statement "*puVar32 = 0;" (assignment_expression "*puVar32 = 0" (pointer_expression "*puVar32" * identifier) = number_literal) ;) (expression_statement "puVar32 = puVar32 + (uint)bVar26 * -2 + 1;" (assignment_expression "puVar32 = puVar32 + (uint)bVar26 * -2 + 1" identifier = (binary_expression "puVar32 + (uint)bVar26 * -2 + 1" (binary_expression "puVar32 + (uint)bVar26 * -2" identifier + (binary_expression "(uint)bVar26 * -2" (cast_expression "(uint)bVar26" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (expression_statement "dfa->str_tree_storage_idx = 0x1f;" (assignment_expression "dfa->str_tree_storage_idx = 0x1f" (field_expression "dfa->str_tree_storage_idx" identifier -> field_identifier) = number_literal) ;) (if_statement "if (length < 0xaaaaaaa) {\n    sVar35 = length + 1;\n    dfa->nodes_alloc = sVar35;\n    prVar8 = (re_token_t *)malloc(sVar35 * 8);\n    dfa->nodes = prVar8;\n    if (length == 0) {\n      rVar31 = 0;\n      uVar23 = 1;\n    }\n    else {\n      uVar23 = 1;\n      do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);\n      rVar31 = uVar23 - 1;\n    }\n    prVar9 = (re_state_table_entry *)calloc(0xc,uVar23);\n    dfa->state_hash_mask = rVar31;\n    dfa->state_table = prVar9;\n    sVar10 = __ctype_get_mb_cur_max();\n    dfa->mb_cur_max = sVar10;\n    pbVar11 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&\n       ((pbVar11[2] & 0xdf) == 0x46)) {\n      bVar36 = pbVar11[3] < 0x2d;\n      bVar37 = pbVar11[3] == 0x2d;\n      iVar24 = 2;\n      pbVar11 = pbVar11 + bVar37 + 3;\n      pbVar33 = &DAT_00027a0a;\n      do {\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      } while (bVar37);\n      if ((!bVar36 && !bVar37) == bVar36) {\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }\n    }\n    bVar1 = dfa->field_0x58;\n    dfa->field_0x58 = bVar1 & 0xf7;\n    if (1 < dfa->mb_cur_max) {\n      if ((bVar1 & 4) == 0) {\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }\n      else {\n        dfa->sb_char = utf8_sb_map;\n      }\n    }\n    if ((dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0)) {\n      err = _REG_NOERROR;\n      puVar3 = preg->translate;\n      ppuVar34 = &regexp.mbs;\n      for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }\n      uVar23 = syntax & 0x400000;\n      regexp.icase = uVar23 != 0;\n      iVar24 = dfa->mb_cur_max;\n      regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;\n      regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;\n      regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;\n      regexp.raw_mbs = (uchar *)pattern;\n      regexp.raw_len = length;\n      regexp.len = length;\n      regexp.raw_stop = length;\n      regexp.stop = length;\n      regexp.trans = puVar3;\n      regexp.mb_cur_max = iVar24;\n      if (length == 0) {\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }\n      else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }\nLAB_00023ff8:\n      pbVar5 = prVar30->str_tree_storage;\n      while (pbVar5 != (bin_tree_storage_t *)0x0) {\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }\n      prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n      prVar30->str_tree_storage_idx = 0x1f;\n      prVar30->str_tree = (bin_tree_t *)0x0;\n      free(prVar30->org_indices);\n      prVar30->org_indices = (Idx *)0x0;\n      re_string_destruct(&regexp);\n      free_dfa_content(dfa);\n      preg->buffer = (re_dfa_t *)0x0;\n      preg->allocated = 0;\n      rVar12 = err;\n      goto LAB_00023f97;\n    }\n  }" if (parenthesized_expression "(length < 0xaaaaaaa)" ( (binary_expression "length < 0xaaaaaaa" identifier < number_literal) )) (compound_statement "{\n    sVar35 = length + 1;\n    dfa->nodes_alloc = sVar35;\n    prVar8 = (re_token_t *)malloc(sVar35 * 8);\n    dfa->nodes = prVar8;\n    if (length == 0) {\n      rVar31 = 0;\n      uVar23 = 1;\n    }\n    else {\n      uVar23 = 1;\n      do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);\n      rVar31 = uVar23 - 1;\n    }\n    prVar9 = (re_state_table_entry *)calloc(0xc,uVar23);\n    dfa->state_hash_mask = rVar31;\n    dfa->state_table = prVar9;\n    sVar10 = __ctype_get_mb_cur_max();\n    dfa->mb_cur_max = sVar10;\n    pbVar11 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&\n       ((pbVar11[2] & 0xdf) == 0x46)) {\n      bVar36 = pbVar11[3] < 0x2d;\n      bVar37 = pbVar11[3] == 0x2d;\n      iVar24 = 2;\n      pbVar11 = pbVar11 + bVar37 + 3;\n      pbVar33 = &DAT_00027a0a;\n      do {\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      } while (bVar37);\n      if ((!bVar36 && !bVar37) == bVar36) {\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }\n    }\n    bVar1 = dfa->field_0x58;\n    dfa->field_0x58 = bVar1 & 0xf7;\n    if (1 < dfa->mb_cur_max) {\n      if ((bVar1 & 4) == 0) {\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }\n      else {\n        dfa->sb_char = utf8_sb_map;\n      }\n    }\n    if ((dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0)) {\n      err = _REG_NOERROR;\n      puVar3 = preg->translate;\n      ppuVar34 = &regexp.mbs;\n      for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }\n      uVar23 = syntax & 0x400000;\n      regexp.icase = uVar23 != 0;\n      iVar24 = dfa->mb_cur_max;\n      regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;\n      regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;\n      regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;\n      regexp.raw_mbs = (uchar *)pattern;\n      regexp.raw_len = length;\n      regexp.len = length;\n      regexp.raw_stop = length;\n      regexp.stop = length;\n      regexp.trans = puVar3;\n      regexp.mb_cur_max = iVar24;\n      if (length == 0) {\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }\n      else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }\nLAB_00023ff8:\n      pbVar5 = prVar30->str_tree_storage;\n      while (pbVar5 != (bin_tree_storage_t *)0x0) {\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }\n      prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n      prVar30->str_tree_storage_idx = 0x1f;\n      prVar30->str_tree = (bin_tree_t *)0x0;\n      free(prVar30->org_indices);\n      prVar30->org_indices = (Idx *)0x0;\n      re_string_destruct(&regexp);\n      free_dfa_content(dfa);\n      preg->buffer = (re_dfa_t *)0x0;\n      preg->allocated = 0;\n      rVar12 = err;\n      goto LAB_00023f97;\n    }\n  }" { (expression_statement "sVar35 = length + 1;" (assignment_expression "sVar35 = length + 1" identifier = (binary_expression "length + 1" identifier + number_literal)) ;) (expression_statement "dfa->nodes_alloc = sVar35;" (assignment_expression "dfa->nodes_alloc = sVar35" (field_expression "dfa->nodes_alloc" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar8 = (re_token_t *)malloc(sVar35 * 8);" (assignment_expression "prVar8 = (re_token_t *)malloc(sVar35 * 8)" identifier = (cast_expression "(re_token_t *)malloc(sVar35 * 8)" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar35 * 8)" identifier (argument_list "(sVar35 * 8)" ( (binary_expression "sVar35 * 8" identifier * number_literal) ))))) ;) (expression_statement "dfa->nodes = prVar8;" (assignment_expression "dfa->nodes = prVar8" (field_expression "dfa->nodes" identifier -> field_identifier) = identifier) ;) (if_statement "if (length == 0) {\n      rVar31 = 0;\n      uVar23 = 1;\n    }\n    else {\n      uVar23 = 1;\n      do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);\n      rVar31 = uVar23 - 1;\n    }" if (parenthesized_expression "(length == 0)" ( (binary_expression "length == 0" identifier == number_literal) )) (compound_statement "{\n      rVar31 = 0;\n      uVar23 = 1;\n    }" { (expression_statement "rVar31 = 0;" (assignment_expression "rVar31 = 0" identifier = number_literal) ;) (expression_statement "uVar23 = 1;" (assignment_expression "uVar23 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      uVar23 = 1;\n      do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);\n      rVar31 = uVar23 - 1;\n    }" else (compound_statement "{\n      uVar23 = 1;\n      do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);\n      rVar31 = uVar23 - 1;\n    }" { (expression_statement "uVar23 = 1;" (assignment_expression "uVar23 = 1" identifier = number_literal) ;) (do_statement "do {\n        uVar23 = uVar23 * 2;\n      } while (uVar23 <= length);" do (compound_statement "{\n        uVar23 = uVar23 * 2;\n      }" { (expression_statement "uVar23 = uVar23 * 2;" (assignment_expression "uVar23 = uVar23 * 2" identifier = (binary_expression "uVar23 * 2" identifier * number_literal)) ;) }) while (parenthesized_expression "(uVar23 <= length)" ( (binary_expression "uVar23 <= length" identifier <= identifier) )) ;) (expression_statement "rVar31 = uVar23 - 1;" (assignment_expression "rVar31 = uVar23 - 1" identifier = (binary_expression "uVar23 - 1" identifier - number_literal)) ;) }))) (expression_statement "prVar9 = (re_state_table_entry *)calloc(0xc,uVar23);" (assignment_expression "prVar9 = (re_state_table_entry *)calloc(0xc,uVar23)" identifier = (cast_expression "(re_state_table_entry *)calloc(0xc,uVar23)" ( (type_descriptor "re_state_table_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "calloc(0xc,uVar23)" identifier (argument_list "(0xc,uVar23)" ( number_literal , identifier ))))) ;) (expression_statement "dfa->state_hash_mask = rVar31;" (assignment_expression "dfa->state_hash_mask = rVar31" (field_expression "dfa->state_hash_mask" identifier -> field_identifier) = identifier) ;) (expression_statement "dfa->state_table = prVar9;" (assignment_expression "dfa->state_table = prVar9" (field_expression "dfa->state_table" identifier -> field_identifier) = identifier) ;) (expression_statement "sVar10 = __ctype_get_mb_cur_max();" (assignment_expression "sVar10 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;) (expression_statement "dfa->mb_cur_max = sVar10;" (assignment_expression "dfa->mb_cur_max = sVar10" (field_expression "dfa->mb_cur_max" identifier -> field_identifier) = identifier) ;) (expression_statement "pbVar11 = (byte *)nl_langinfo(0xe);" (assignment_expression "pbVar11 = (byte *)nl_langinfo(0xe)" identifier = (cast_expression "(byte *)nl_langinfo(0xe)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "nl_langinfo(0xe)" identifier (argument_list "(0xe)" ( number_literal ))))) ;) (if_statement "if ((((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&\n       ((pbVar11[2] & 0xdf) == 0x46)) {\n      bVar36 = pbVar11[3] < 0x2d;\n      bVar37 = pbVar11[3] == 0x2d;\n      iVar24 = 2;\n      pbVar11 = pbVar11 + bVar37 + 3;\n      pbVar33 = &DAT_00027a0a;\n      do {\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      } while (bVar37);\n      if ((!bVar36 && !bVar37) == bVar36) {\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }\n    }" if (parenthesized_expression "((((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&\n       ((pbVar11[2] & 0xdf) == 0x46))" ( (binary_expression "(((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)) &&\n       ((pbVar11[2] & 0xdf) == 0x46)" (parenthesized_expression "(((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54))" ( (binary_expression "((*pbVar11 & 0xdf) == 0x55) && ((pbVar11[1] & 0xdf) == 0x54)" (parenthesized_expression "((*pbVar11 & 0xdf) == 0x55)" ( (binary_expression "(*pbVar11 & 0xdf) == 0x55" (parenthesized_expression "(*pbVar11 & 0xdf)" ( (binary_expression "*pbVar11 & 0xdf" (pointer_expression "*pbVar11" * identifier) & number_literal) )) == number_literal) )) && (parenthesized_expression "((pbVar11[1] & 0xdf) == 0x54)" ( (binary_expression "(pbVar11[1] & 0xdf) == 0x54" (parenthesized_expression "(pbVar11[1] & 0xdf)" ( (binary_expression "pbVar11[1] & 0xdf" (subscript_expression "pbVar11[1]" identifier [ number_literal ]) & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((pbVar11[2] & 0xdf) == 0x46)" ( (binary_expression "(pbVar11[2] & 0xdf) == 0x46" (parenthesized_expression "(pbVar11[2] & 0xdf)" ( (binary_expression "pbVar11[2] & 0xdf" (subscript_expression "pbVar11[2]" identifier [ number_literal ]) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n      bVar36 = pbVar11[3] < 0x2d;\n      bVar37 = pbVar11[3] == 0x2d;\n      iVar24 = 2;\n      pbVar11 = pbVar11 + bVar37 + 3;\n      pbVar33 = &DAT_00027a0a;\n      do {\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      } while (bVar37);\n      if ((!bVar36 && !bVar37) == bVar36) {\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }\n    }" { (expression_statement "bVar36 = pbVar11[3] < 0x2d;" (assignment_expression "bVar36 = pbVar11[3] < 0x2d" identifier = (binary_expression "pbVar11[3] < 0x2d" (subscript_expression "pbVar11[3]" identifier [ number_literal ]) < number_literal)) ;) (expression_statement "bVar37 = pbVar11[3] == 0x2d;" (assignment_expression "bVar37 = pbVar11[3] == 0x2d" identifier = (binary_expression "pbVar11[3] == 0x2d" (subscript_expression "pbVar11[3]" identifier [ number_literal ]) == number_literal)) ;) (expression_statement "iVar24 = 2;" (assignment_expression "iVar24 = 2" identifier = number_literal) ;) (expression_statement "pbVar11 = pbVar11 + bVar37 + 3;" (assignment_expression "pbVar11 = pbVar11 + bVar37 + 3" identifier = (binary_expression "pbVar11 + bVar37 + 3" (binary_expression "pbVar11 + bVar37" identifier + identifier) + number_literal)) ;) (expression_statement "pbVar33 = &DAT_00027a0a;" (assignment_expression "pbVar33 = &DAT_00027a0a" identifier = (pointer_expression "&DAT_00027a0a" & identifier)) ;) (do_statement "do {\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      } while (bVar37);" do (compound_statement "{\n        if (iVar24 == 0) break;\n        iVar24 = iVar24 + -1;\n        bVar36 = *pbVar11 < *pbVar33;\n        bVar37 = *pbVar11 == *pbVar33;\n        pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;\n        pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;\n      }" { (if_statement "if (iVar24 == 0) break;" if (parenthesized_expression "(iVar24 == 0)" ( (binary_expression "iVar24 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar24 = iVar24 + -1;" (assignment_expression "iVar24 = iVar24 + -1" identifier = (binary_expression "iVar24 + -1" identifier + number_literal)) ;) (expression_statement "bVar36 = *pbVar11 < *pbVar33;" (assignment_expression "bVar36 = *pbVar11 < *pbVar33" identifier = (binary_expression "*pbVar11 < *pbVar33" (pointer_expression "*pbVar11" * identifier) < (pointer_expression "*pbVar33" * identifier))) ;) (expression_statement "bVar37 = *pbVar11 == *pbVar33;" (assignment_expression "bVar37 = *pbVar11 == *pbVar33" identifier = (binary_expression "*pbVar11 == *pbVar33" (pointer_expression "*pbVar11" * identifier) == (pointer_expression "*pbVar33" * identifier))) ;) (expression_statement "pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1;" (assignment_expression "pbVar11 = pbVar11 + (uint)bVar26 * -2 + 1" identifier = (binary_expression "pbVar11 + (uint)bVar26 * -2 + 1" (binary_expression "pbVar11 + (uint)bVar26 * -2" identifier + (binary_expression "(uint)bVar26 * -2" (cast_expression "(uint)bVar26" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1;" (assignment_expression "pbVar33 = pbVar33 + (uint)bVar26 * -2 + 1" identifier = (binary_expression "pbVar33 + (uint)bVar26 * -2 + 1" (binary_expression "pbVar33 + (uint)bVar26 * -2" identifier + (binary_expression "(uint)bVar26 * -2" (cast_expression "(uint)bVar26" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar37)" ( identifier )) ;) (if_statement "if ((!bVar36 && !bVar37) == bVar36) {\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }" if (parenthesized_expression "((!bVar36 && !bVar37) == bVar36)" ( (binary_expression "(!bVar36 && !bVar37) == bVar36" (parenthesized_expression "(!bVar36 && !bVar37)" ( (binary_expression "!bVar36 && !bVar37" (unary_expression "!bVar36" ! identifier) && (unary_expression "!bVar37" ! identifier)) )) == identifier) )) (compound_statement "{\n        dfa->field_0x58 = dfa->field_0x58 | 4;\n      }" { (expression_statement "dfa->field_0x58 = dfa->field_0x58 | 4;" (assignment_expression "dfa->field_0x58 = dfa->field_0x58 | 4" (field_expression "dfa->field_0x58" identifier -> field_identifier) = (binary_expression "dfa->field_0x58 | 4" (field_expression "dfa->field_0x58" identifier -> field_identifier) | number_literal)) ;) })) })) (expression_statement "bVar1 = dfa->field_0x58;" (assignment_expression "bVar1 = dfa->field_0x58" identifier = (field_expression "dfa->field_0x58" identifier -> field_identifier)) ;) (expression_statement "dfa->field_0x58 = bVar1 & 0xf7;" (assignment_expression "dfa->field_0x58 = bVar1 & 0xf7" (field_expression "dfa->field_0x58" identifier -> field_identifier) = (binary_expression "bVar1 & 0xf7" identifier & number_literal)) ;) (if_statement "if (1 < dfa->mb_cur_max) {\n      if ((bVar1 & 4) == 0) {\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }\n      else {\n        dfa->sb_char = utf8_sb_map;\n      }\n    }" if (parenthesized_expression "(1 < dfa->mb_cur_max)" ( (binary_expression "1 < dfa->mb_cur_max" number_literal < (field_expression "dfa->mb_cur_max" identifier -> field_identifier)) )) (compound_statement "{\n      if ((bVar1 & 4) == 0) {\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }\n      else {\n        dfa->sb_char = utf8_sb_map;\n      }\n    }" { (if_statement "if ((bVar1 & 4) == 0) {\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }\n      else {\n        dfa->sb_char = utf8_sb_map;\n      }" if (parenthesized_expression "((bVar1 & 4) == 0)" ( (binary_expression "(bVar1 & 4) == 0" (parenthesized_expression "(bVar1 & 4)" ( (binary_expression "bVar1 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);\n        dfa->sb_char = pbVar20;\n        if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;\n        iVar24 = 0;\n        do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);\n      }" { (expression_statement "pbVar20 = (re_bitset_ptr_t)calloc(0x20,1);" (assignment_expression "pbVar20 = (re_bitset_ptr_t)calloc(0x20,1)" identifier = (cast_expression "(re_bitset_ptr_t)calloc(0x20,1)" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) (call_expression "calloc(0x20,1)" identifier (argument_list "(0x20,1)" ( number_literal , number_literal ))))) ;) (expression_statement "dfa->sb_char = pbVar20;" (assignment_expression "dfa->sb_char = pbVar20" (field_expression "dfa->sb_char" identifier -> field_identifier) = identifier) ;) (if_statement "if (pbVar20 == (re_bitset_ptr_t)0x0) goto LAB_00023fc0;" if (parenthesized_expression "(pbVar20 == (re_bitset_ptr_t)0x0)" ( (binary_expression "pbVar20 == (re_bitset_ptr_t)0x0" identifier == (cast_expression "(re_bitset_ptr_t)0x0" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) number_literal)) )) (goto_statement "goto LAB_00023fc0;" goto statement_identifier ;)) (expression_statement "iVar24 = 0;" (assignment_expression "iVar24 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        } while (iVar24 != 0x20);" do (compound_statement "{\n          uVar23 = iVar24 * 8;\n          iVar29 = 0;\n          do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);\nLAB_00024110:\n          iVar24 = iVar24 + 4;\n        }" { (expression_statement "uVar23 = iVar24 * 8;" (assignment_expression "uVar23 = iVar24 * 8" identifier = (binary_expression "iVar24 * 8" identifier * number_literal)) ;) (expression_statement "iVar29 = 0;" (assignment_expression "iVar29 = 0" identifier = number_literal) ;) (do_statement "do {\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          } while (iVar29 != 0x20);" do (compound_statement "{\n            while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }\n            puVar27 = (uint *)((int)dfa->sb_char + iVar24);\n            *puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);\n            if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar21 != uVar23) goto LAB_000240ac;\n            iVar29 = iVar29 + 1;\n            uVar23 = uVar23 + 1;\n          }" { (while_statement "while( true ) {\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              wVar21 = btowc(uVar23);\n              if (wVar21 != 0xffffffff) break;\n              if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }\nLAB_000240b4:\n              iVar29 = iVar29 + 1;\n              uVar23 = uVar23 + 1;\n              if (iVar29 == 0x20) goto LAB_00024110;\n            }" { (expression_statement "wVar21 = btowc(uVar23);" (assignment_expression "wVar21 = btowc(uVar23)" identifier = (call_expression "btowc(uVar23)" identifier (argument_list "(uVar23)" ( identifier )))) ;) (if_statement "if (wVar21 != 0xffffffff) break;" if (parenthesized_expression "(wVar21 != 0xffffffff)" ( (binary_expression "wVar21 != 0xffffffff" identifier != number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((uVar23 & 0xffffff80) == 0) {\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }" if (parenthesized_expression "((uVar23 & 0xffffff80) == 0)" ( (binary_expression "(uVar23 & 0xffffff80) == 0" (parenthesized_expression "(uVar23 & 0xffffff80)" ( (binary_expression "uVar23 & 0xffffff80" identifier & number_literal) )) == number_literal) )) (compound_statement "{\nLAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;\n              }" { (labeled_statement "LAB_000240ac:\n                dfa->field_0x58 = dfa->field_0x58 | 8;" statement_identifier : (expression_statement "dfa->field_0x58 = dfa->field_0x58 | 8;" (assignment_expression "dfa->field_0x58 = dfa->field_0x58 | 8" (field_expression "dfa->field_0x58" identifier -> field_identifier) = (binary_expression "dfa->field_0x58 | 8" (field_expression "dfa->field_0x58" identifier -> field_identifier) | number_literal)) ;)) })) (labeled_statement "LAB_000240b4:\n              iVar29 = iVar29 + 1;" statement_identifier : (expression_statement "iVar29 = iVar29 + 1;" (assignment_expression "iVar29 = iVar29 + 1" identifier = (binary_expression "iVar29 + 1" identifier + number_literal)) ;)) (expression_statement "uVar23 = uVar23 + 1;" (assignment_expression "uVar23 = uVar23 + 1" identifier = (binary_expression "uVar23 + 1" identifier + number_literal)) ;) (if_statement "if (iVar29 == 0x20) goto LAB_00024110;" if (parenthesized_expression "(iVar29 == 0x20)" ( (binary_expression "iVar29 == 0x20" identifier == number_literal) )) (goto_statement "goto LAB_00024110;" goto statement_identifier ;)) })) (expression_statement "puVar27 = (uint *)((int)dfa->sb_char + iVar24);" (assignment_expression "puVar27 = (uint *)((int)dfa->sb_char + iVar24)" identifier = (cast_expression "(uint *)((int)dfa->sb_char + iVar24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)dfa->sb_char + iVar24)" ( (binary_expression "(int)dfa->sb_char + iVar24" (cast_expression "(int)dfa->sb_char" ( (type_descriptor "int" primitive_type) ) (field_expression "dfa->sb_char" identifier -> field_identifier)) + identifier) )))) ;) (expression_statement "*puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f);" (assignment_expression "*puVar27 = *puVar27 | 1 << ((byte)iVar29 & 0x1f)" (pointer_expression "*puVar27" * identifier) = (binary_expression "*puVar27 | 1 << ((byte)iVar29 & 0x1f)" (pointer_expression "*puVar27" * identifier) | (binary_expression "1 << ((byte)iVar29 & 0x1f)" number_literal << (parenthesized_expression "((byte)iVar29 & 0x1f)" ( (binary_expression "(byte)iVar29 & 0x1f" (cast_expression "(byte)iVar29" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))))) ;) (if_statement "if ((uVar23 & 0xffffff80) != 0) goto LAB_000240b4;" if (parenthesized_expression "((uVar23 & 0xffffff80) != 0)" ( (binary_expression "(uVar23 & 0xffffff80) != 0" (parenthesized_expression "(uVar23 & 0xffffff80)" ( (binary_expression "uVar23 & 0xffffff80" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_000240b4;" goto statement_identifier ;)) (if_statement "if (wVar21 != uVar23) goto LAB_000240ac;" if (parenthesized_expression "(wVar21 != uVar23)" ( (binary_expression "wVar21 != uVar23" identifier != identifier) )) (goto_statement "goto LAB_000240ac;" goto statement_identifier ;)) (expression_statement "iVar29 = iVar29 + 1;" (assignment_expression "iVar29 = iVar29 + 1" identifier = (binary_expression "iVar29 + 1" identifier + number_literal)) ;) (expression_statement "uVar23 = uVar23 + 1;" (assignment_expression "uVar23 = uVar23 + 1" identifier = (binary_expression "uVar23 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar29 != 0x20)" ( (binary_expression "iVar29 != 0x20" identifier != number_literal) )) ;) (labeled_statement "LAB_00024110:\n          iVar24 = iVar24 + 4;" statement_identifier : (expression_statement "iVar24 = iVar24 + 4;" (assignment_expression "iVar24 = iVar24 + 4" identifier = (binary_expression "iVar24 + 4" identifier + number_literal)) ;)) }) while (parenthesized_expression "(iVar24 != 0x20)" ( (binary_expression "iVar24 != 0x20" identifier != number_literal) )) ;) }) (else_clause "else {\n        dfa->sb_char = utf8_sb_map;\n      }" else (compound_statement "{\n        dfa->sb_char = utf8_sb_map;\n      }" { (expression_statement "dfa->sb_char = utf8_sb_map;" (assignment_expression "dfa->sb_char = utf8_sb_map" (field_expression "dfa->sb_char" identifier -> field_identifier) = identifier) ;) }))) })) (if_statement "if ((dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0)) {\n      err = _REG_NOERROR;\n      puVar3 = preg->translate;\n      ppuVar34 = &regexp.mbs;\n      for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }\n      uVar23 = syntax & 0x400000;\n      regexp.icase = uVar23 != 0;\n      iVar24 = dfa->mb_cur_max;\n      regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;\n      regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;\n      regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;\n      regexp.raw_mbs = (uchar *)pattern;\n      regexp.raw_len = length;\n      regexp.len = length;\n      regexp.raw_stop = length;\n      regexp.stop = length;\n      regexp.trans = puVar3;\n      regexp.mb_cur_max = iVar24;\n      if (length == 0) {\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }\n      else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }\nLAB_00023ff8:\n      pbVar5 = prVar30->str_tree_storage;\n      while (pbVar5 != (bin_tree_storage_t *)0x0) {\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }\n      prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n      prVar30->str_tree_storage_idx = 0x1f;\n      prVar30->str_tree = (bin_tree_t *)0x0;\n      free(prVar30->org_indices);\n      prVar30->org_indices = (Idx *)0x0;\n      re_string_destruct(&regexp);\n      free_dfa_content(dfa);\n      preg->buffer = (re_dfa_t *)0x0;\n      preg->allocated = 0;\n      rVar12 = err;\n      goto LAB_00023f97;\n    }" if (parenthesized_expression "((dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0))" ( (binary_expression "(dfa->nodes != (re_token_t *)0x0) && (dfa->state_table != (re_state_table_entry *)0x0)" (parenthesized_expression "(dfa->nodes != (re_token_t *)0x0)" ( (binary_expression "dfa->nodes != (re_token_t *)0x0" (field_expression "dfa->nodes" identifier -> field_identifier) != (cast_expression "(re_token_t *)0x0" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(dfa->state_table != (re_state_table_entry *)0x0)" ( (binary_expression "dfa->state_table != (re_state_table_entry *)0x0" (field_expression "dfa->state_table" identifier -> field_identifier) != (cast_expression "(re_state_table_entry *)0x0" ( (type_descriptor "re_state_table_entry *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n      err = _REG_NOERROR;\n      puVar3 = preg->translate;\n      ppuVar34 = &regexp.mbs;\n      for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }\n      uVar23 = syntax & 0x400000;\n      regexp.icase = uVar23 != 0;\n      iVar24 = dfa->mb_cur_max;\n      regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;\n      regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;\n      regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;\n      regexp.raw_mbs = (uchar *)pattern;\n      regexp.raw_len = length;\n      regexp.len = length;\n      regexp.raw_stop = length;\n      regexp.stop = length;\n      regexp.trans = puVar3;\n      regexp.mb_cur_max = iVar24;\n      if (length == 0) {\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }\n      else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }\nLAB_00023ff8:\n      pbVar5 = prVar30->str_tree_storage;\n      while (pbVar5 != (bin_tree_storage_t *)0x0) {\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }\n      prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;\n      prVar30->str_tree_storage_idx = 0x1f;\n      prVar30->str_tree = (bin_tree_t *)0x0;\n      free(prVar30->org_indices);\n      prVar30->org_indices = (Idx *)0x0;\n      re_string_destruct(&regexp);\n      free_dfa_content(dfa);\n      preg->buffer = (re_dfa_t *)0x0;\n      preg->allocated = 0;\n      rVar12 = err;\n      goto LAB_00023f97;\n    }" { (expression_statement "err = _REG_NOERROR;" (assignment_expression "err = _REG_NOERROR" identifier = identifier) ;) (expression_statement "puVar3 = preg->translate;" (assignment_expression "puVar3 = preg->translate" identifier = (field_expression "preg->translate" identifier -> field_identifier)) ;) (expression_statement "ppuVar34 = &regexp.mbs;" (assignment_expression "ppuVar34 = &regexp.mbs" identifier = (pointer_expression "&regexp.mbs" & (field_expression "regexp.mbs" identifier . field_identifier))) ;) (for_statement "for (iVar24 = 0x13; iVar24 != 0; iVar24 = iVar24 + -1) {\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }" for ( (assignment_expression "iVar24 = 0x13" identifier = number_literal) ; (binary_expression "iVar24 != 0" identifier != number_literal) ; (assignment_expression "iVar24 = iVar24 + -1" identifier = (binary_expression "iVar24 + -1" identifier + number_literal)) ) (compound_statement "{\n        *ppuVar34 = (uchar *)0x0;\n        ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;\n      }" { (expression_statement "*ppuVar34 = (uchar *)0x0;" (assignment_expression "*ppuVar34 = (uchar *)0x0" (pointer_expression "*ppuVar34" * identifier) = (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1;" (assignment_expression "ppuVar34 = ppuVar34 + (uint)bVar26 * -2 + 1" identifier = (binary_expression "ppuVar34 + (uint)bVar26 * -2 + 1" (binary_expression "ppuVar34 + (uint)bVar26 * -2" identifier + (binary_expression "(uint)bVar26 * -2" (cast_expression "(uint)bVar26" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (expression_statement "uVar23 = syntax & 0x400000;" (assignment_expression "uVar23 = syntax & 0x400000" identifier = (binary_expression "syntax & 0x400000" identifier & number_literal)) ;) (expression_statement "regexp.icase = uVar23 != 0;" (assignment_expression "regexp.icase = uVar23 != 0" (field_expression "regexp.icase" identifier . field_identifier) = (binary_expression "uVar23 != 0" identifier != number_literal)) ;) (expression_statement "iVar24 = dfa->mb_cur_max;" (assignment_expression "iVar24 = dfa->mb_cur_max" identifier = (field_expression "dfa->mb_cur_max" identifier -> field_identifier)) ;) (expression_statement "regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0;" (assignment_expression "regexp.mbs_allocated = puVar3 != (uchar *)0x0 || uVar23 != 0" (field_expression "regexp.mbs_allocated" identifier . field_identifier) = (binary_expression "puVar3 != (uchar *)0x0 || uVar23 != 0" (binary_expression "puVar3 != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) || (binary_expression "uVar23 != 0" identifier != number_literal))) ;) (expression_statement "regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1;" (assignment_expression "regexp.map_notascii = (byte)dfa->field_0x58 >> 3 & 1" (field_expression "regexp.map_notascii" identifier . field_identifier) = (binary_expression "(byte)dfa->field_0x58 >> 3 & 1" (binary_expression "(byte)dfa->field_0x58 >> 3" (cast_expression "(byte)dfa->field_0x58" ( (type_descriptor "byte" type_identifier) ) (field_expression "dfa->field_0x58" identifier -> field_identifier)) >> number_literal) & number_literal)) ;) (expression_statement "regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1;" (assignment_expression "regexp.is_utf8 = (byte)dfa->field_0x58 >> 2 & 1" (field_expression "regexp.is_utf8" identifier . field_identifier) = (binary_expression "(byte)dfa->field_0x58 >> 2 & 1" (binary_expression "(byte)dfa->field_0x58 >> 2" (cast_expression "(byte)dfa->field_0x58" ( (type_descriptor "byte" type_identifier) ) (field_expression "dfa->field_0x58" identifier -> field_identifier)) >> number_literal) & number_literal)) ;) (expression_statement "regexp.raw_mbs = (uchar *)pattern;" (assignment_expression "regexp.raw_mbs = (uchar *)pattern" (field_expression "regexp.raw_mbs" identifier . field_identifier) = (cast_expression "(uchar *)pattern" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "regexp.raw_len = length;" (assignment_expression "regexp.raw_len = length" (field_expression "regexp.raw_len" identifier . field_identifier) = identifier) ;) (expression_statement "regexp.len = length;" (assignment_expression "regexp.len = length" (field_expression "regexp.len" identifier . field_identifier) = identifier) ;) (expression_statement "regexp.raw_stop = length;" (assignment_expression "regexp.raw_stop = length" (field_expression "regexp.raw_stop" identifier . field_identifier) = identifier) ;) (expression_statement "regexp.stop = length;" (assignment_expression "regexp.stop = length" (field_expression "regexp.stop" identifier . field_identifier) = identifier) ;) (expression_statement "regexp.trans = puVar3;" (assignment_expression "regexp.trans = puVar3" (field_expression "regexp.trans" identifier . field_identifier) = identifier) ;) (expression_statement "regexp.mb_cur_max = iVar24;" (assignment_expression "regexp.mb_cur_max = iVar24" (field_expression "regexp.mb_cur_max" identifier . field_identifier) = identifier) ;) (if_statement "if (length == 0) {\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }\n      else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }" if (parenthesized_expression "(length == 0)" ( (binary_expression "length == 0" identifier == number_literal) )) (compound_statement "{\nLAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }\n        regexp.mbs = (uchar *)pattern;\n        if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }\nLAB_00023966:\n        regexp.valid_len = IVar38;\n        err = _REG_NOERROR;\n        prVar30 = preg->buffer;\n        preg->re_nsub = 0;\n        prVar30->syntax = syntax;\n        IVar38 = 0x2399b;\n        iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);\n        regexp.cur_idx = regexp.cur_idx + iVar24;\n        right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);\n        if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }\n      }" { (labeled_statement "LAB_00023881:\n        if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }" statement_identifier : (if_statement "if (regexp.mbs_allocated != '\0') {\n          pattern = (char *)regexp.mbs;\n        }" if (parenthesized_expression "(regexp.mbs_allocated != '\0')" ( (binary_expression "regexp.mbs_allocated != '\0'" (field_expression "regexp.mbs_allocated" identifier . field_identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          pattern = (char *)regexp.mbs;\n        }" { (expression_statement "pattern = (char *)regexp.mbs;" (assignment_expression "pattern = (char *)regexp.mbs" identifier = (cast_expression "(char *)regexp.mbs" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "regexp.mbs" identifier . field_identifier))) ;) }))) (expression_statement "regexp.mbs = (uchar *)pattern;" (assignment_expression "regexp.mbs = (uchar *)pattern" (field_expression "regexp.mbs" identifier . field_identifier) = (cast_expression "(uchar *)pattern" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (uVar23 == 0) {\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }\n        else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }" if (parenthesized_expression "(uVar23 == 0)" ( (binary_expression "uVar23 == 0" identifier == number_literal) )) (compound_statement "{\n          if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }\n        }" { (if_statement "if (iVar24 < 2) {\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }\n          else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }" if (parenthesized_expression "(iVar24 < 2)" ( (binary_expression "iVar24 < 2" identifier < number_literal) )) (compound_statement "{\n            IVar38 = regexp.bufs_len;\n            regexp.valid_raw_len = regexp.bufs_len;\n            if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }\n          }" { (expression_statement "IVar38 = regexp.bufs_len;" (assignment_expression "IVar38 = regexp.bufs_len" identifier = (field_expression "regexp.bufs_len" identifier . field_identifier)) ;) (expression_statement "regexp.valid_raw_len = regexp.bufs_len;" (assignment_expression "regexp.valid_raw_len = regexp.bufs_len" (field_expression "regexp.valid_raw_len" identifier . field_identifier) = (field_expression "regexp.bufs_len" identifier . field_identifier)) ;) (if_statement "if (puVar3 != (uchar *)0x0) {\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }" if (parenthesized_expression "(puVar3 != (uchar *)0x0)" ( (binary_expression "puVar3 != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }\n              IVar38 = regexp.valid_len;\n              regexp.valid_raw_len = regexp.valid_len;\n              if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }\n            }" { (if_statement "if (regexp.len <= regexp.bufs_len) {\n                regexp.bufs_len = regexp.len;\n              }" if (parenthesized_expression "(regexp.len <= regexp.bufs_len)" ( (binary_expression "regexp.len <= regexp.bufs_len" (field_expression "regexp.len" identifier . field_identifier) <= (field_expression "regexp.bufs_len" identifier . field_identifier)) )) (compound_statement "{\n                regexp.bufs_len = regexp.len;\n              }" { (expression_statement "regexp.bufs_len = regexp.len;" (assignment_expression "regexp.bufs_len = regexp.len" (field_expression "regexp.bufs_len" identifier . field_identifier) = (field_expression "regexp.len" identifier . field_identifier)) ;) })) (expression_statement "IVar38 = regexp.valid_len;" (assignment_expression "IVar38 = regexp.valid_len" identifier = (field_expression "regexp.valid_len" identifier . field_identifier)) ;) (expression_statement "regexp.valid_raw_len = regexp.valid_len;" (assignment_expression "regexp.valid_raw_len = regexp.valid_len" (field_expression "regexp.valid_raw_len" identifier . field_identifier) = (field_expression "regexp.valid_len" identifier . field_identifier)) ;) (if_statement "if (regexp.valid_len < regexp.bufs_len) {\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }" if (parenthesized_expression "(regexp.valid_len < regexp.bufs_len)" ( (binary_expression "regexp.valid_len < regexp.bufs_len" (field_expression "regexp.valid_len" identifier . field_identifier) < (field_expression "regexp.bufs_len" identifier . field_identifier)) )) (compound_statement "{\n                do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);\n              }" { (do_statement "do {\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                } while (regexp.bufs_len != regexp.valid_len);" do (compound_statement "{\n                  ((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];\n                  regexp.valid_len = regexp.valid_len + 1;\n                  IVar38 = regexp.bufs_len;\n                  regexp.valid_raw_len = regexp.bufs_len;\n                }" { (expression_statement "((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];" (assignment_expression "((uchar *)pattern)[regexp.valid_len] =\n                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]]" (subscript_expression "((uchar *)pattern)[regexp.valid_len]" (parenthesized_expression "((uchar *)pattern)" ( (cast_expression "(uchar *)pattern" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )) [ (field_expression "regexp.valid_len" identifier . field_identifier) ]) = (subscript_expression "regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]]" (field_expression "regexp.trans" identifier . field_identifier) [ (subscript_expression "regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]" (field_expression "regexp.raw_mbs" identifier . field_identifier) [ (binary_expression "regexp.raw_mbs_idx + regexp.valid_len" (field_expression "regexp.raw_mbs_idx" identifier . field_identifier) + (field_expression "regexp.valid_len" identifier . field_identifier)) ]) ])) ;) (expression_statement "regexp.valid_len = regexp.valid_len + 1;" (assignment_expression "regexp.valid_len = regexp.valid_len + 1" (field_expression "regexp.valid_len" identifier . field_identifier) = (binary_expression "regexp.valid_len + 1" (field_expression "regexp.valid_len" identifier . field_identifier) + number_literal)) ;) (expression_statement "IVar38 = regexp.bufs_len;" (assignment_expression "IVar38 = regexp.bufs_len" identifier = (field_expression "regexp.bufs_len" identifier . field_identifier)) ;) (expression_statement "regexp.valid_raw_len = regexp.bufs_len;" (assignment_expression "regexp.valid_raw_len = regexp.bufs_len" (field_expression "regexp.valid_raw_len" identifier . field_identifier) = (field_expression "regexp.bufs_len" identifier . field_identifier)) ;) }) while (parenthesized_expression "(regexp.bufs_len != regexp.valid_len)" ( (binary_expression "regexp.bufs_len != regexp.valid_len" (field_expression "regexp.bufs_len" identifier . field_identifier) != (field_expression "regexp.valid_len" identifier . field_identifier)) )) ;) })) })) }) (else_clause "else {\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }" else (compound_statement "{\n            build_wcs_buffer(&regexp);\n            IVar38 = regexp.valid_len;\n          }" { (expression_statement "build_wcs_buffer(&regexp);" (call_expression "build_wcs_buffer(&regexp)" identifier (argument_list "(&regexp)" ( (pointer_expression "&regexp" & identifier) ))) ;) (expression_statement "IVar38 = regexp.valid_len;" (assignment_expression "IVar38 = regexp.valid_len" identifier = (field_expression "regexp.valid_len" identifier . field_identifier)) ;) }))) }) (else_clause "else {\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }" else (compound_statement "{\n          if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }\n          build_upper_buffer(&regexp);\n          IVar38 = regexp.valid_len;\n        }" { (if_statement "if (1 < iVar24) {\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }" if (parenthesized_expression "(1 < iVar24)" ( (binary_expression "1 < iVar24" number_literal < identifier) )) (compound_statement "{\n            do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);\n            goto LAB_00023d90;\n          }" { (do_statement "do {\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            } while (rVar12 == _REG_NOERROR);" do (compound_statement "{\n              rVar12 = build_wcs_upper_buffer(&regexp);\n              if (rVar12 != _REG_NOERROR) break;\n              IVar38 = regexp.valid_len;\n              if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;\n              rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);\n            }" { (expression_statement "rVar12 = build_wcs_upper_buffer(&regexp);" (assignment_expression "rVar12 = build_wcs_upper_buffer(&regexp)" identifier = (call_expression "build_wcs_upper_buffer(&regexp)" identifier (argument_list "(&regexp)" ( (pointer_expression "&regexp" & identifier) )))) ;) (if_statement "if (rVar12 != _REG_NOERROR) break;" if (parenthesized_expression "(rVar12 != _REG_NOERROR)" ( (binary_expression "rVar12 != _REG_NOERROR" identifier != identifier) )) (break_statement "break;" break ;)) (expression_statement "IVar38 = regexp.valid_len;" (assignment_expression "IVar38 = regexp.valid_len" identifier = (field_expression "regexp.valid_len" identifier . field_identifier)) ;) (if_statement "if (((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;" if (parenthesized_expression "(((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len))" ( (binary_expression "((int)length <= regexp.valid_raw_len) ||\n                 (dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)" (parenthesized_expression "((int)length <= regexp.valid_raw_len)" ( (binary_expression "(int)length <= regexp.valid_raw_len" (cast_expression "(int)length" ( (type_descriptor "int" primitive_type) ) identifier) <= (field_expression "regexp.valid_raw_len" identifier . field_identifier)) )) || (parenthesized_expression "(dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len)" ( (binary_expression "dfa->mb_cur_max + regexp.valid_len < regexp.bufs_len" (binary_expression "dfa->mb_cur_max + regexp.valid_len" (field_expression "dfa->mb_cur_max" identifier -> field_identifier) + (field_expression "regexp.valid_len" identifier . field_identifier)) < (field_expression "regexp.bufs_len" identifier . field_identifier)) ))) )) (goto_statement "goto LAB_00023966;" goto statement_identifier ;)) (expression_statement "rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2);" (assignment_expression "rVar12 = re_string_realloc_buffers(&regexp,regexp.bufs_len * 2)" identifier = (call_expression "re_string_realloc_buffers(&regexp,regexp.bufs_len * 2)" identifier (argument_list "(&regexp,regexp.bufs_len * 2)" ( (pointer_expression "&regexp" & identifier) , (binary_expression "regexp.bufs_len * 2" (field_expression "regexp.bufs_len" identifier . field_identifier) * number_literal) )))) ;) }) while (parenthesized_expression "(rVar12 == _REG_NOERROR)" ( (binary_expression "rVar12 == _REG_NOERROR" identifier == identifier) )) ;) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "build_upper_buffer(&regexp);" (call_expression "build_upper_buffer(&regexp)" identifier (argument_list "(&regexp)" ( (pointer_expression "&regexp" & identifier) ))) ;) (expression_statement "IVar38 = regexp.valid_len;" (assignment_expression "IVar38 = regexp.valid_len" identifier = (field_expression "regexp.valid_len" identifier . field_identifier)) ;) }))) (labeled_statement "LAB_00023966:\n        regexp.valid_len = IVar38;" statement_identifier : (expression_statement "regexp.valid_len = IVar38;" (assignment_expression "regexp.valid_len = IVar38" (field_expression "regexp.valid_len" identifier . field_identifier) = identifier) ;)) (expression_statement "err = _REG_NOERROR;" (assignment_expression "err = _REG_NOERROR" identifier = identifier) ;) (expression_statement "prVar30 = preg->buffer;" (assignment_expression "prVar30 = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;) (expression_statement "preg->re_nsub = 0;" (assignment_expression "preg->re_nsub = 0" (field_expression "preg->re_nsub" identifier -> field_identifier) = number_literal) ;) (expression_statement "prVar30->syntax = syntax;" (assignment_expression "prVar30->syntax = syntax" (field_expression "prVar30->syntax" identifier -> field_identifier) = identifier) ;) (expression_statement "IVar38 = 0x2399b;" (assignment_expression "IVar38 = 0x2399b" identifier = number_literal) ;) (expression_statement "iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000);" (assignment_expression "iVar24 = peek_token(&current_token,&regexp,syntax | 0x800000)" identifier = (call_expression "peek_token(&current_token,&regexp,syntax | 0x800000)" identifier (argument_list "(&current_token,&regexp,syntax | 0x800000)" ( (pointer_expression "&current_token" & identifier) , (pointer_expression "&regexp" & identifier) , (binary_expression "syntax | 0x800000" identifier | number_literal) )))) ;) (expression_statement "regexp.cur_idx = regexp.cur_idx + iVar24;" (assignment_expression "regexp.cur_idx = regexp.cur_idx + iVar24" (field_expression "regexp.cur_idx" identifier . field_identifier) = (binary_expression "regexp.cur_idx + iVar24" (field_expression "regexp.cur_idx" identifier . field_identifier) + identifier)) ;) (expression_statement "right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44);" (assignment_expression "right = parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44)" identifier = (call_expression "parse_reg_exp(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44)" identifier (argument_list "(&regexp,(regex_t *)syntax,(re_token_t *)0x0,(reg_syntax_t)&err,IVar38,\n                              in_stack_ffffff44)" ( (pointer_expression "&regexp" & identifier) , (cast_expression "(regex_t *)syntax" ( (type_descriptor "regex_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(re_token_t *)0x0" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (binary_expression "(reg_syntax_t)&err" (parenthesized_expression "(reg_syntax_t)" ( identifier )) & identifier) , identifier , identifier )))) ;) (if_statement "if (err == _REG_NOERROR) {\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }\n        else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }" if (parenthesized_expression "(err == _REG_NOERROR)" ( (binary_expression "err == _REG_NOERROR" identifier == identifier) )) (compound_statement "{\n          t._4_1_ = 2;\n          token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);\n          pbVar13 = token;\n          if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }\n          local_ac = (re_dfa_t *)&t;\n          prVar30 = preg->buffer;\n          if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }\n        }" { (expression_statement "t._4_1_ = 2;" (assignment_expression "t._4_1_ = 2" (field_expression "t._4_1_" identifier . field_identifier) = number_literal) ;) (expression_statement "token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t);" (assignment_expression "token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t)" identifier = (call_expression "create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t)" identifier (argument_list "((re_dfa_t *)&prVar30->str_tree_storage,\n                                    (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0,\n                                    (re_token_t *)0x0,(re_dfa_t *)&t)" ( (cast_expression "(re_dfa_t *)&prVar30->str_tree_storage" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar30->str_tree_storage" & (field_expression "prVar30->str_tree_storage" identifier -> field_identifier))) , (cast_expression "(bin_tree_t *)&prVar30->str_tree_storage_idx" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar30->str_tree_storage_idx" & (field_expression "prVar30->str_tree_storage_idx" identifier -> field_identifier))) , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(re_token_t *)0x0" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(re_dfa_t *)&t" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&t" & identifier)) )))) ;) (expression_statement "pbVar13 = token;" (assignment_expression "pbVar13 = token" identifier = identifier) ;) (if_statement "if (right != (bin_tree_t *)0x0) {\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }" if (parenthesized_expression "(right != (bin_tree_t *)0x0)" ( (binary_expression "right != (bin_tree_t *)0x0" identifier != (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\nLAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;\n            local_ac = (re_dfa_t *)&t;\n            t._4_1_ = 0x10;\n            pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);\n          }" { (labeled_statement "LAB_000239ff:\n            local_a4 = &prVar30->str_tree_storage;" statement_identifier : (expression_statement "local_a4 = &prVar30->str_tree_storage;" (assignment_expression "local_a4 = &prVar30->str_tree_storage" identifier = (pointer_expression "&prVar30->str_tree_storage" & (field_expression "prVar30->str_tree_storage" identifier -> field_identifier))) ;)) (expression_statement "local_ac = (re_dfa_t *)&t;" (assignment_expression "local_ac = (re_dfa_t *)&t" identifier = (cast_expression "(re_dfa_t *)&t" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&t" & identifier))) ;) (expression_statement "t._4_1_ = 0x10;" (assignment_expression "t._4_1_ = 0x10" (field_expression "t._4_1_" identifier . field_identifier) = number_literal) ;) (expression_statement "pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac);" (assignment_expression "pbVar13 = create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac)" identifier = (call_expression "create_token_tree((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac)" identifier (argument_list "((re_dfa_t *)local_a4,\n                                        (bin_tree_t *)&prVar30->str_tree_storage_idx,right,\n                                        (re_token_t *)token,local_ac)" ( (cast_expression "(re_dfa_t *)local_a4" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(bin_tree_t *)&prVar30->str_tree_storage_idx" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar30->str_tree_storage_idx" & (field_expression "prVar30->str_tree_storage_idx" identifier -> field_identifier))) , identifier , (cast_expression "(re_token_t *)token" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) })) (expression_statement "local_ac = (re_dfa_t *)&t;" (assignment_expression "local_ac = (re_dfa_t *)&t" identifier = (cast_expression "(re_dfa_t *)&t" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&t" & identifier))) ;) (expression_statement "prVar30 = preg->buffer;" (assignment_expression "prVar30 = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;) (if_statement "if (token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0) {\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }\n          else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }" if (parenthesized_expression "(token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0)" ( (binary_expression "token == (bin_tree_t *)0x0 || pbVar13 == (bin_tree_t *)0x0" (binary_expression "token == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) || (binary_expression "pbVar13 == (bin_tree_t *)0x0" identifier == (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n            err = _REG_ESPACE;\n            dfa->str_tree = (bin_tree_t *)0x0;\n          }" { (expression_statement "err = _REG_ESPACE;" (assignment_expression "err = _REG_ESPACE" identifier = identifier) ;) (expression_statement "dfa->str_tree = (bin_tree_t *)0x0;" (assignment_expression "dfa->str_tree = (bin_tree_t *)0x0" (field_expression "dfa->str_tree" identifier -> field_identifier) = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }" else (compound_statement "{\n            dfa->str_tree = pbVar13;\n            sVar10 = prVar30->nodes_alloc * 4;\n            __size = prVar30->nodes_alloc * 0xc;\n            pIVar14 = (Idx *)malloc(sVar10);\n            prVar30->nexts = pIVar14;\n            pIVar15 = (Idx *)malloc(sVar10);\n            prVar30->org_indices = pIVar15;\n            prVar16 = (re_node_set *)malloc(__size);\n            prVar30->edests = prVar16;\n            prVar17 = (re_node_set *)malloc(__size);\n            prVar30->eclosures = prVar17;\n            if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            err = _REG_ESPACE;\n          }" { (expression_statement "dfa->str_tree = pbVar13;" (assignment_expression "dfa->str_tree = pbVar13" (field_expression "dfa->str_tree" identifier -> field_identifier) = identifier) ;) (expression_statement "sVar10 = prVar30->nodes_alloc * 4;" (assignment_expression "sVar10 = prVar30->nodes_alloc * 4" identifier = (binary_expression "prVar30->nodes_alloc * 4" (field_expression "prVar30->nodes_alloc" identifier -> field_identifier) * number_literal)) ;) (expression_statement "__size = prVar30->nodes_alloc * 0xc;" (assignment_expression "__size = prVar30->nodes_alloc * 0xc" identifier = (binary_expression "prVar30->nodes_alloc * 0xc" (field_expression "prVar30->nodes_alloc" identifier -> field_identifier) * number_literal)) ;) (expression_statement "pIVar14 = (Idx *)malloc(sVar10);" (assignment_expression "pIVar14 = (Idx *)malloc(sVar10)" identifier = (cast_expression "(Idx *)malloc(sVar10)" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar10)" identifier (argument_list "(sVar10)" ( identifier ))))) ;) (expression_statement "prVar30->nexts = pIVar14;" (assignment_expression "prVar30->nexts = pIVar14" (field_expression "prVar30->nexts" identifier -> field_identifier) = identifier) ;) (expression_statement "pIVar15 = (Idx *)malloc(sVar10);" (assignment_expression "pIVar15 = (Idx *)malloc(sVar10)" identifier = (cast_expression "(Idx *)malloc(sVar10)" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar10)" identifier (argument_list "(sVar10)" ( identifier ))))) ;) (expression_statement "prVar30->org_indices = pIVar15;" (assignment_expression "prVar30->org_indices = pIVar15" (field_expression "prVar30->org_indices" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar16 = (re_node_set *)malloc(__size);" (assignment_expression "prVar16 = (re_node_set *)malloc(__size)" identifier = (cast_expression "(re_node_set *)malloc(__size)" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier ))))) ;) (expression_statement "prVar30->edests = prVar16;" (assignment_expression "prVar30->edests = prVar16" (field_expression "prVar30->edests" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar17 = (re_node_set *)malloc(__size);" (assignment_expression "prVar17 = (re_node_set *)malloc(__size)" identifier = (cast_expression "(re_node_set *)malloc(__size)" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier ))))) ;) (expression_statement "prVar30->eclosures = prVar17;" (assignment_expression "prVar30->eclosures = prVar17" (field_expression "prVar30->eclosures" identifier -> field_identifier) = identifier) ;) (if_statement "if ((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)) {\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }" if (parenthesized_expression "((((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0))" ( (binary_expression "(((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)) && (prVar17 != (re_node_set *)0x0)" (parenthesized_expression "(((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0))" ( (binary_expression "((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)) &&\n                (prVar16 != (re_node_set *)0x0)" (parenthesized_expression "((pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0))" ( (binary_expression "(pIVar14 != (Idx *)0x0) && (pIVar15 != (Idx *)0x0)" (parenthesized_expression "(pIVar14 != (Idx *)0x0)" ( (binary_expression "pIVar14 != (Idx *)0x0" identifier != (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(pIVar15 != (Idx *)0x0)" ( (binary_expression "pIVar15 != (Idx *)0x0" identifier != (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) && (parenthesized_expression "(prVar16 != (re_node_set *)0x0)" ( (binary_expression "prVar16 != (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 "(prVar17 != (re_node_set *)0x0)" ( (binary_expression "prVar17 != (re_node_set *)0x0" identifier != (cast_expression "(re_node_set *)0x0" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n              sVar35 = preg->re_nsub;\n              pIVar14 = (Idx *)malloc(sVar35 * 4);\n              prVar30->subexp_map = pIVar14;\n              if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }\n              rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);\n              if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }" { (expression_statement "sVar35 = preg->re_nsub;" (assignment_expression "sVar35 = preg->re_nsub" identifier = (field_expression "preg->re_nsub" identifier -> field_identifier)) ;) (expression_statement "pIVar14 = (Idx *)malloc(sVar35 * 4);" (assignment_expression "pIVar14 = (Idx *)malloc(sVar35 * 4)" identifier = (cast_expression "(Idx *)malloc(sVar35 * 4)" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar35 * 4)" identifier (argument_list "(sVar35 * 4)" ( (binary_expression "sVar35 * 4" identifier * number_literal) ))))) ;) (expression_statement "prVar30->subexp_map = pIVar14;" (assignment_expression "prVar30->subexp_map = pIVar14" (field_expression "prVar30->subexp_map" identifier -> field_identifier) = identifier) ;) (if_statement "if (pIVar14 != (Idx *)0x0) {\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }" if (parenthesized_expression "(pIVar14 != (Idx *)0x0)" ( (binary_expression "pIVar14 != (Idx *)0x0" identifier != (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                sVar25 = 0;\n                if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }\n                preorder(prVar30->str_tree,optimize_subexps,prVar30);\n                if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }\n              }" { (expression_statement "sVar25 = 0;" (assignment_expression "sVar25 = 0" identifier = number_literal) ;) (if_statement "if (sVar35 != 0) {\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }" if (parenthesized_expression "(sVar35 != 0)" ( (binary_expression "sVar35 != 0" identifier != number_literal) )) (compound_statement "{\n                  do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);\n                }" { (do_statement "do {\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  } while (sVar25 != sVar35);" do (compound_statement "{\n                    pIVar14[sVar25] = sVar25;\n                    sVar25 = sVar25 + 1;\n                  }" { (expression_statement "pIVar14[sVar25] = sVar25;" (assignment_expression "pIVar14[sVar25] = sVar25" (subscript_expression "pIVar14[sVar25]" identifier [ identifier ]) = identifier) ;) (expression_statement "sVar25 = sVar25 + 1;" (assignment_expression "sVar25 = sVar25 + 1" identifier = (binary_expression "sVar25 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(sVar25 != sVar35)" ( (binary_expression "sVar25 != sVar35" identifier != identifier) )) ;) })) (expression_statement "preorder(prVar30->str_tree,optimize_subexps,prVar30);" (call_expression "preorder(prVar30->str_tree,optimize_subexps,prVar30)" identifier (argument_list "(prVar30->str_tree,optimize_subexps,prVar30)" ( (field_expression "prVar30->str_tree" identifier -> field_identifier) , identifier , identifier ))) ;) (if_statement "if (preg->re_nsub == 0) {\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }\n                else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }" if (parenthesized_expression "(preg->re_nsub == 0)" ( (binary_expression "preg->re_nsub == 0" (field_expression "preg->re_nsub" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n                  __ptr = (size_t *)prVar30->subexp_map;\nLAB_00023b4c:\n                  free(__ptr);\n                  prVar30->subexp_map = (Idx *)0x0;\n                }" { (expression_statement "__ptr = (size_t *)prVar30->subexp_map;" (assignment_expression "__ptr = (size_t *)prVar30->subexp_map" identifier = (cast_expression "(size_t *)prVar30->subexp_map" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "prVar30->subexp_map" identifier -> field_identifier))) ;) (labeled_statement "LAB_00023b4c:\n                  free(__ptr);" statement_identifier : (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;)) (expression_statement "prVar30->subexp_map = (Idx *)0x0;" (assignment_expression "prVar30->subexp_map = (Idx *)0x0" (field_expression "prVar30->subexp_map" identifier -> field_identifier) = (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }" else (compound_statement "{\n                  __ptr = (size_t *)prVar30->subexp_map;\n                  sVar35 = *__ptr;\n                  if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }\n                }" { (expression_statement "__ptr = (size_t *)prVar30->subexp_map;" (assignment_expression "__ptr = (size_t *)prVar30->subexp_map" identifier = (cast_expression "(size_t *)prVar30->subexp_map" ( (type_descriptor "size_t *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "prVar30->subexp_map" identifier -> field_identifier))) ;) (expression_statement "sVar35 = *__ptr;" (assignment_expression "sVar35 = *__ptr" identifier = (pointer_expression "*__ptr" * identifier)) ;) (if_statement "if (sVar35 == 0) {\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }" if (parenthesized_expression "(sVar35 == 0)" ( (binary_expression "sVar35 == 0" identifier == number_literal) )) (compound_statement "{\n                    do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);\n                  }" { (do_statement "do {\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    } while (__ptr[sVar35] == sVar35);" do (compound_statement "{\n                      sVar35 = sVar35 + 1;\n                      if (sVar35 == preg->re_nsub) goto LAB_00023b4c;\n                    }" { (expression_statement "sVar35 = sVar35 + 1;" (assignment_expression "sVar35 = sVar35 + 1" identifier = (binary_expression "sVar35 + 1" identifier + number_literal)) ;) (if_statement "if (sVar35 == preg->re_nsub) goto LAB_00023b4c;" if (parenthesized_expression "(sVar35 == preg->re_nsub)" ( (binary_expression "sVar35 == preg->re_nsub" identifier == (field_expression "preg->re_nsub" identifier -> field_identifier)) )) (goto_statement "goto LAB_00023b4c;" goto statement_identifier ;)) }) while (parenthesized_expression "(__ptr[sVar35] == sVar35)" ( (binary_expression "__ptr[sVar35] == sVar35" (subscript_expression "__ptr[sVar35]" identifier [ identifier ]) == identifier) )) ;) })) }))) })) (expression_statement "rVar12 = postorder(prVar30->str_tree,lower_subexps,preg);" (assignment_expression "rVar12 = postorder(prVar30->str_tree,lower_subexps,preg)" identifier = (call_expression "postorder(prVar30->str_tree,lower_subexps,preg)" identifier (argument_list "(prVar30->str_tree,lower_subexps,preg)" ( (field_expression "prVar30->str_tree" identifier -> field_identifier) , identifier , identifier )))) ;) (if_statement "if ((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))\n              {\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }" if (parenthesized_expression "((rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR))" ( (binary_expression "(rVar12 == _REG_NOERROR) &&\n                 (rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR)" (parenthesized_expression "(rVar12 == _REG_NOERROR)" ( (binary_expression "rVar12 == _REG_NOERROR" identifier == identifier) )) && (parenthesized_expression "(rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR)" ( (comma_expression "rVar12 = postorder(prVar30->str_tree,calc_first,prVar30), rVar12 == _REG_NOERROR" (assignment_expression "rVar12 = postorder(prVar30->str_tree,calc_first,prVar30)" identifier = (call_expression "postorder(prVar30->str_tree,calc_first,prVar30)" identifier (argument_list "(prVar30->str_tree,calc_first,prVar30)" ( (field_expression "prVar30->str_tree" identifier -> field_identifier) , identifier , identifier )))) , (binary_expression "rVar12 == _REG_NOERROR" identifier == identifier)) ))) )) (compound_statement "{\n                preorder(prVar30->str_tree,calc_next,prVar30);\n                rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);\n                if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }" { (expression_statement "preorder(prVar30->str_tree,calc_next,prVar30);" (call_expression "preorder(prVar30->str_tree,calc_next,prVar30)" identifier (argument_list "(prVar30->str_tree,calc_next,prVar30)" ( (field_expression "prVar30->str_tree" identifier -> field_identifier) , identifier , identifier ))) ;) (expression_statement "rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30);" (assignment_expression "rVar12 = preorder(prVar30->str_tree,link_nfa_nodes,prVar30)" identifier = (call_expression "preorder(prVar30->str_tree,link_nfa_nodes,prVar30)" identifier (argument_list "(prVar30->str_tree,link_nfa_nodes,prVar30)" ( (field_expression "prVar30->str_tree" identifier -> field_identifier) , identifier , identifier )))) ;) (if_statement "if (rVar12 == _REG_NOERROR) {\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }" if (parenthesized_expression "(rVar12 == _REG_NOERROR)" ( (binary_expression "rVar12 == _REG_NOERROR" identifier == identifier) )) (compound_statement "{\n                  bVar36 = false;\n                  sVar35 = 0;\n                  do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }" { (expression_statement "bVar36 = false;" (assignment_expression "bVar36 = false" identifier = false) ;) (expression_statement "sVar35 = 0;" (assignment_expression "sVar35 = 0" identifier = number_literal) ;) (do_statement "do {\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  } while( true );" do (compound_statement "{\n                    sVar25 = sVar35;\n                    if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }\n                  }" { (expression_statement "sVar25 = sVar35;" (assignment_expression "sVar25 = sVar35" identifier = identifier) ;) (if_statement "if (prVar30->nodes_len == sVar35) goto LAB_00023bfe;" if (parenthesized_expression "(prVar30->nodes_len == sVar35)" ( (binary_expression "prVar30->nodes_len == sVar35" (field_expression "prVar30->nodes_len" identifier -> field_identifier) == identifier) )) (goto_statement "goto LAB_00023bfe;" goto statement_identifier ;)) (labeled_statement "LAB_00023be5:\n                    while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }" statement_identifier : (while_statement "while( true ) {\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n                      if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;\n                      rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);\n                      if (rVar12 != _REG_NOERROR) goto LAB_00023d90;\n                      sVar35 = sVar25 + 1;\n                      if (prVar30->eclosures[sVar25].nelem != 0) break;\n                      free(local_78);\n                      bVar36 = true;\n                      sVar25 = sVar35;\n                      if (prVar30->nodes_len == sVar35) goto LAB_00023c09;\n                    }" { (if_statement "if (prVar30->eclosures[sVar25].nelem != 0) goto code_r0x00023bf6;" if (parenthesized_expression "(prVar30->eclosures[sVar25].nelem != 0)" ( (binary_expression "prVar30->eclosures[sVar25].nelem != 0" (field_expression "prVar30->eclosures[sVar25].nelem" (subscript_expression "prVar30->eclosures[sVar25]" (field_expression "prVar30->eclosures" identifier -> field_identifier) [ identifier ]) . field_identifier) != number_literal) )) (goto_statement "goto code_r0x00023bf6;" goto statement_identifier ;)) (expression_statement "rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true);" (assignment_expression "rVar12 = calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true)" identifier = (call_expression "calc_eclosure_iter((re_node_set *)local_ac,prVar30,sVar25,true)" identifier (argument_list "((re_node_set *)local_ac,prVar30,sVar25,true)" ( (cast_expression "(re_node_set *)local_ac" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , true )))) ;) (if_statement "if (rVar12 != _REG_NOERROR) goto LAB_00023d90;" if (parenthesized_expression "(rVar12 != _REG_NOERROR)" ( (binary_expression "rVar12 != _REG_NOERROR" identifier != identifier) )) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;)) (expression_statement "sVar35 = sVar25 + 1;" (assignment_expression "sVar35 = sVar25 + 1" identifier = (binary_expression "sVar25 + 1" identifier + number_literal)) ;) (if_statement "if (prVar30->eclosures[sVar25].nelem != 0) break;" if (parenthesized_expression "(prVar30->eclosures[sVar25].nelem != 0)" ( (binary_expression "prVar30->eclosures[sVar25].nelem != 0" (field_expression "prVar30->eclosures[sVar25].nelem" (subscript_expression "prVar30->eclosures[sVar25]" (field_expression "prVar30->eclosures" identifier -> field_identifier) [ identifier ]) . field_identifier) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "bVar36 = true;" (assignment_expression "bVar36 = true" identifier = true) ;) (expression_statement "sVar25 = sVar35;" (assignment_expression "sVar25 = sVar35" identifier = identifier) ;) (if_statement "if (prVar30->nodes_len == sVar35) goto LAB_00023c09;" if (parenthesized_expression "(prVar30->nodes_len == sVar35)" ( (binary_expression "prVar30->nodes_len == sVar35" (field_expression "prVar30->nodes_len" identifier -> field_identifier) == identifier) )) (goto_statement "goto LAB_00023c09;" goto statement_identifier ;)) }))) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "err = _REG_ESPACE;" (assignment_expression "err = _REG_ESPACE" identifier = identifier) ;) }))) }) (else_clause "else {\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }" else (compound_statement "{\n          if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }\n          dfa->str_tree = (bin_tree_t *)0x0;\n          prVar30 = preg->buffer;\n        }" { (if_statement "if (right != (bin_tree_t *)0x0) {\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }" if (parenthesized_expression "(right != (bin_tree_t *)0x0)" ( (binary_expression "right != (bin_tree_t *)0x0" identifier != (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            t._4_1_ = 2;\n            token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);\n            goto LAB_000239ff;\n          }" { (expression_statement "t._4_1_ = 2;" (assignment_expression "t._4_1_ = 2" (field_expression "t._4_1_" identifier . field_identifier) = number_literal) ;) (expression_statement "token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t);" (assignment_expression "token = create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t)" identifier = (call_expression "create_token_tree((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t)" identifier (argument_list "((re_dfa_t *)&prVar30->str_tree_storage,\n                                      (bin_tree_t *)&prVar30->str_tree_storage_idx,(bin_tree_t *)0x0\n                                      ,(re_token_t *)0x0,(re_dfa_t *)&t)" ( (cast_expression "(re_dfa_t *)&prVar30->str_tree_storage" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar30->str_tree_storage" & (field_expression "prVar30->str_tree_storage" identifier -> field_identifier))) , (cast_expression "(bin_tree_t *)&prVar30->str_tree_storage_idx" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&prVar30->str_tree_storage_idx" & (field_expression "prVar30->str_tree_storage_idx" identifier -> field_identifier))) , (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(re_token_t *)0x0" ( (type_descriptor "re_token_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(re_dfa_t *)&t" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&t" & identifier)) )))) ;) (goto_statement "goto LAB_000239ff;" goto statement_identifier ;) })) (expression_statement "dfa->str_tree = (bin_tree_t *)0x0;" (assignment_expression "dfa->str_tree = (bin_tree_t *)0x0" (field_expression "dfa->str_tree" identifier -> field_identifier) = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "prVar30 = preg->buffer;" (assignment_expression "prVar30 = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;) }))) }) (else_clause "else {\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }" else (compound_statement "{\n        rVar12 = re_string_realloc_buffers(&regexp,sVar35);\n        if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        prVar30 = preg->buffer;\n        err = rVar12;\n      }" { (expression_statement "rVar12 = re_string_realloc_buffers(&regexp,sVar35);" (assignment_expression "rVar12 = re_string_realloc_buffers(&regexp,sVar35)" identifier = (call_expression "re_string_realloc_buffers(&regexp,sVar35)" identifier (argument_list "(&regexp,sVar35)" ( (pointer_expression "&regexp" & identifier) , identifier )))) ;) (if_statement "if (rVar12 == _REG_NOERROR) {\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }" if (parenthesized_expression "(rVar12 == _REG_NOERROR)" ( (binary_expression "rVar12 == _REG_NOERROR" identifier == identifier) )) (compound_statement "{\n          iVar24 = dfa->mb_cur_max;\n          goto LAB_00023881;\n        }" { (expression_statement "iVar24 = dfa->mb_cur_max;" (assignment_expression "iVar24 = dfa->mb_cur_max" identifier = (field_expression "dfa->mb_cur_max" identifier -> field_identifier)) ;) (goto_statement "goto LAB_00023881;" goto statement_identifier ;) })) (labeled_statement "LAB_00023d90:\n        prVar30 = preg->buffer;" statement_identifier : (expression_statement "prVar30 = preg->buffer;" (assignment_expression "prVar30 = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;)) (expression_statement "err = rVar12;" (assignment_expression "err = rVar12" identifier = identifier) ;) }))) (labeled_statement "LAB_00023ff8:\n      pbVar5 = prVar30->str_tree_storage;" statement_identifier : (expression_statement "pbVar5 = prVar30->str_tree_storage;" (assignment_expression "pbVar5 = prVar30->str_tree_storage" identifier = (field_expression "prVar30->str_tree_storage" identifier -> field_identifier)) ;)) (while_statement "while (pbVar5 != (bin_tree_storage_t *)0x0) {\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }" while (parenthesized_expression "(pbVar5 != (bin_tree_storage_t *)0x0)" ( (binary_expression "pbVar5 != (bin_tree_storage_t *)0x0" identifier != (cast_expression "(bin_tree_storage_t *)0x0" ( (type_descriptor "bin_tree_storage_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        pbVar4 = pbVar5->next;\n        free(pbVar5);\n        pbVar5 = pbVar4;\n      }" { (expression_statement "pbVar4 = pbVar5->next;" (assignment_expression "pbVar4 = pbVar5->next" identifier = (field_expression "pbVar5->next" identifier -> field_identifier)) ;) (expression_statement "free(pbVar5);" (call_expression "free(pbVar5)" identifier (argument_list "(pbVar5)" ( identifier ))) ;) (expression_statement "pbVar5 = pbVar4;" (assignment_expression "pbVar5 = pbVar4" identifier = identifier) ;) })) (expression_statement "prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;" (assignment_expression "prVar30->str_tree_storage = (bin_tree_storage_t *)0x0" (field_expression "prVar30->str_tree_storage" identifier -> field_identifier) = (cast_expression "(bin_tree_storage_t *)0x0" ( (type_descriptor "bin_tree_storage_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "prVar30->str_tree_storage_idx = 0x1f;" (assignment_expression "prVar30->str_tree_storage_idx = 0x1f" (field_expression "prVar30->str_tree_storage_idx" identifier -> field_identifier) = number_literal) ;) (expression_statement "prVar30->str_tree = (bin_tree_t *)0x0;" (assignment_expression "prVar30->str_tree = (bin_tree_t *)0x0" (field_expression "prVar30->str_tree" identifier -> field_identifier) = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "free(prVar30->org_indices);" (call_expression "free(prVar30->org_indices)" identifier (argument_list "(prVar30->org_indices)" ( (field_expression "prVar30->org_indices" identifier -> field_identifier) ))) ;) (expression_statement "prVar30->org_indices = (Idx *)0x0;" (assignment_expression "prVar30->org_indices = (Idx *)0x0" (field_expression "prVar30->org_indices" identifier -> field_identifier) = (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "re_string_destruct(&regexp);" (call_expression "re_string_destruct(&regexp)" identifier (argument_list "(&regexp)" ( (pointer_expression "&regexp" & identifier) ))) ;) (expression_statement "free_dfa_content(dfa);" (call_expression "free_dfa_content(dfa)" identifier (argument_list "(dfa)" ( identifier ))) ;) (expression_statement "preg->buffer = (re_dfa_t *)0x0;" (assignment_expression "preg->buffer = (re_dfa_t *)0x0" (field_expression "preg->buffer" identifier -> field_identifier) = (cast_expression "(re_dfa_t *)0x0" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "preg->allocated = 0;" (assignment_expression "preg->allocated = 0" (field_expression "preg->allocated" identifier -> field_identifier) = number_literal) ;) (expression_statement "rVar12 = err;" (assignment_expression "rVar12 = err" identifier = identifier) ;) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;) })) })) (labeled_statement "LAB_00023fc0:\n  err = _REG_ESPACE;" statement_identifier : (expression_statement "err = _REG_ESPACE;" (assignment_expression "err = _REG_ESPACE" identifier = identifier) ;)) (goto_statement "goto LAB_00023fc8;" goto statement_identifier ;) (labeled_statement "code_r0x00023bf6:\n  sVar35 = sVar25 + 1;" statement_identifier : (expression_statement "sVar35 = sVar25 + 1;" (assignment_expression "sVar35 = sVar25 + 1" identifier = (binary_expression "sVar25 + 1" identifier + number_literal)) ;)) (expression_statement "sVar25 = sVar35;" (assignment_expression "sVar25 = sVar35" identifier = identifier) ;) (if_statement "if (prVar30->nodes_len == sVar35) {\nLAB_00023bfe:\n    if (!bVar36) {\n      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;\n      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);\n      prVar30->inveclosures = prVar16;\n      if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      err = _REG_ESPACE;\n      prVar30 = preg->buffer;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar36 = false;\n    sVar25 = 0;\n  }" if (parenthesized_expression "(prVar30->nodes_len == sVar35)" ( (binary_expression "prVar30->nodes_len == sVar35" (field_expression "prVar30->nodes_len" identifier -> field_identifier) == identifier) )) (compound_statement "{\nLAB_00023bfe:\n    if (!bVar36) {\n      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;\n      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);\n      prVar30->inveclosures = prVar16;\n      if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      err = _REG_ESPACE;\n      prVar30 = preg->buffer;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar36 = false;\n    sVar25 = 0;\n  }" { (labeled_statement "LAB_00023bfe:\n    if (!bVar36) {\n      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;\n      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);\n      prVar30->inveclosures = prVar16;\n      if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      err = _REG_ESPACE;\n      prVar30 = preg->buffer;\n      goto LAB_00023ff8;\n    }" statement_identifier : (if_statement "if (!bVar36) {\n      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;\n      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);\n      prVar30->inveclosures = prVar16;\n      if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      err = _REG_ESPACE;\n      prVar30 = preg->buffer;\n      goto LAB_00023ff8;\n    }" if (parenthesized_expression "(!bVar36)" ( (unary_expression "!bVar36" ! identifier) )) (compound_statement "{\n      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;\n      prVar16 = (re_node_set *)malloc(sVar35 * 0xc);\n      prVar30->inveclosures = prVar16;\n      if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      err = _REG_ESPACE;\n      prVar30 = preg->buffer;\n      goto LAB_00023ff8;\n    }" { (if_statement "if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;" if (parenthesized_expression "(((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0))" ( (binary_expression "((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)" (parenthesized_expression "((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0))" ( (binary_expression "(((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||\n          ((prVar30->field_0x58 & 1) == 0)" (parenthesized_expression "(((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0))" ( (binary_expression "((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)" (parenthesized_expression "((preg->field_0x1c & 0x10) != 0)" ( (binary_expression "(preg->field_0x1c & 0x10) != 0" (parenthesized_expression "(preg->field_0x1c & 0x10)" ( (binary_expression "preg->field_0x1c & 0x10" (field_expression "preg->field_0x1c" identifier -> field_identifier) & number_literal) )) != number_literal) )) || (parenthesized_expression "(preg->re_nsub == 0)" ( (binary_expression "preg->re_nsub == 0" (field_expression "preg->re_nsub" identifier -> field_identifier) == number_literal) ))) )) || (parenthesized_expression "((prVar30->field_0x58 & 1) == 0)" ( (binary_expression "(prVar30->field_0x58 & 1) == 0" (parenthesized_expression "(prVar30->field_0x58 & 1)" ( (binary_expression "prVar30->field_0x58 & 1" (field_expression "prVar30->field_0x58" identifier -> field_identifier) & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "(prVar30->nbackref == 0)" ( (binary_expression "prVar30->nbackref == 0" (field_expression "prVar30->nbackref" identifier -> field_identifier) == number_literal) ))) )) (goto_statement "goto LAB_00023dab;" goto statement_identifier ;)) (expression_statement "prVar16 = (re_node_set *)malloc(sVar35 * 0xc);" (assignment_expression "prVar16 = (re_node_set *)malloc(sVar35 * 0xc)" identifier = (cast_expression "(re_node_set *)malloc(sVar35 * 0xc)" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(sVar35 * 0xc)" identifier (argument_list "(sVar35 * 0xc)" ( (binary_expression "sVar35 * 0xc" identifier * number_literal) ))))) ;) (expression_statement "prVar30->inveclosures = prVar16;" (assignment_expression "prVar30->inveclosures = prVar16" (field_expression "prVar30->inveclosures" identifier -> field_identifier) = identifier) ;) (if_statement "if (prVar16 != (re_node_set *)0x0) {\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }" if (parenthesized_expression "(prVar16 != (re_node_set *)0x0)" ( (binary_expression "prVar16 != (re_node_set *)0x0" identifier != (cast_expression "(re_node_set *)0x0" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar28 = 0;\n        if (sVar35 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }" { (expression_statement "uVar28 = 0;" (assignment_expression "uVar28 = 0" identifier = number_literal) ;) (if_statement "if (sVar35 != 0) goto LAB_00023cf3;" if (parenthesized_expression "(sVar35 != 0)" ( (binary_expression "sVar35 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00023cf3;" goto statement_identifier ;)) (goto_statement "goto LAB_00023dab;" goto statement_identifier ;) })) (expression_statement "err = _REG_ESPACE;" (assignment_expression "err = _REG_ESPACE" identifier = identifier) ;) (expression_statement "prVar30 = preg->buffer;" (assignment_expression "prVar30 = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;) (goto_statement "goto LAB_00023ff8;" goto statement_identifier ;) }))) (labeled_statement "LAB_00023c09:\n    bVar36 = false;" statement_identifier : (expression_statement "bVar36 = false;" (assignment_expression "bVar36 = false" identifier = false) ;)) (expression_statement "sVar25 = 0;" (assignment_expression "sVar25 = 0" identifier = number_literal) ;) })) (goto_statement "goto LAB_00023be5;" goto statement_identifier ;) (labeled_statement "LAB_00023cf3:\n  while( true ) {\n    prVar16 = prVar16 + uVar28;\n    prVar16->alloc = 0;\n    prVar16->nelem = 0;\n    prVar16->elems = (Idx *)0x0;\n    if (prVar30->nodes_len <= uVar28 + 1) break;\n    prVar16 = prVar30->inveclosures;\n    uVar28 = uVar28 + 1;\n  }" statement_identifier : (while_statement "while( true ) {\n    prVar16 = prVar16 + uVar28;\n    prVar16->alloc = 0;\n    prVar16->nelem = 0;\n    prVar16->elems = (Idx *)0x0;\n    if (prVar30->nodes_len <= uVar28 + 1) break;\n    prVar16 = prVar30->inveclosures;\n    uVar28 = uVar28 + 1;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    prVar16 = prVar16 + uVar28;\n    prVar16->alloc = 0;\n    prVar16->nelem = 0;\n    prVar16->elems = (Idx *)0x0;\n    if (prVar30->nodes_len <= uVar28 + 1) break;\n    prVar16 = prVar30->inveclosures;\n    uVar28 = uVar28 + 1;\n  }" { (expression_statement "prVar16 = prVar16 + uVar28;" (assignment_expression "prVar16 = prVar16 + uVar28" identifier = (binary_expression "prVar16 + uVar28" identifier + identifier)) ;) (expression_statement "prVar16->alloc = 0;" (assignment_expression "prVar16->alloc = 0" (field_expression "prVar16->alloc" identifier -> field_identifier) = number_literal) ;) (expression_statement "prVar16->nelem = 0;" (assignment_expression "prVar16->nelem = 0" (field_expression "prVar16->nelem" identifier -> field_identifier) = number_literal) ;) (expression_statement "prVar16->elems = (Idx *)0x0;" (assignment_expression "prVar16->elems = (Idx *)0x0" (field_expression "prVar16->elems" identifier -> field_identifier) = (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (prVar30->nodes_len <= uVar28 + 1) break;" if (parenthesized_expression "(prVar30->nodes_len <= uVar28 + 1)" ( (binary_expression "prVar30->nodes_len <= uVar28 + 1" (field_expression "prVar30->nodes_len" identifier -> field_identifier) <= (binary_expression "uVar28 + 1" identifier + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "prVar16 = prVar30->inveclosures;" (assignment_expression "prVar16 = prVar30->inveclosures" identifier = (field_expression "prVar30->inveclosures" identifier -> field_identifier)) ;) (expression_statement "uVar28 = uVar28 + 1;" (assignment_expression "uVar28 = uVar28 + 1" identifier = (binary_expression "uVar28 + 1" identifier + number_literal)) ;) }))) (if_statement "if (prVar30->nodes_len != 0) {\n    prVar16 = prVar30->eclosures;\n    uVar28 = 0;\n    do {\n      iVar24 = 0;\n      pIVar14 = prVar16[uVar28].elems;\n      if (0 < prVar16[uVar28].nelem) {\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }\n      uVar28 = uVar28 + 1;\n    } while (uVar28 < prVar30->nodes_len);\n  }" if (parenthesized_expression "(prVar30->nodes_len != 0)" ( (binary_expression "prVar30->nodes_len != 0" (field_expression "prVar30->nodes_len" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n    prVar16 = prVar30->eclosures;\n    uVar28 = 0;\n    do {\n      iVar24 = 0;\n      pIVar14 = prVar16[uVar28].elems;\n      if (0 < prVar16[uVar28].nelem) {\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }\n      uVar28 = uVar28 + 1;\n    } while (uVar28 < prVar30->nodes_len);\n  }" { (expression_statement "prVar16 = prVar30->eclosures;" (assignment_expression "prVar16 = prVar30->eclosures" identifier = (field_expression "prVar30->eclosures" identifier -> field_identifier)) ;) (expression_statement "uVar28 = 0;" (assignment_expression "uVar28 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar24 = 0;\n      pIVar14 = prVar16[uVar28].elems;\n      if (0 < prVar16[uVar28].nelem) {\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }\n      uVar28 = uVar28 + 1;\n    } while (uVar28 < prVar30->nodes_len);" do (compound_statement "{\n      iVar24 = 0;\n      pIVar14 = prVar16[uVar28].elems;\n      if (0 < prVar16[uVar28].nelem) {\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }\n      uVar28 = uVar28 + 1;\n    }" { (expression_statement "iVar24 = 0;" (assignment_expression "iVar24 = 0" identifier = number_literal) ;) (expression_statement "pIVar14 = prVar16[uVar28].elems;" (assignment_expression "pIVar14 = prVar16[uVar28].elems" identifier = (field_expression "prVar16[uVar28].elems" (subscript_expression "prVar16[uVar28]" identifier [ identifier ]) . field_identifier)) ;) (if_statement "if (0 < prVar16[uVar28].nelem) {\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }" if (parenthesized_expression "(0 < prVar16[uVar28].nelem)" ( (binary_expression "0 < prVar16[uVar28].nelem" number_literal < (field_expression "prVar16[uVar28].nelem" (subscript_expression "prVar16[uVar28]" identifier [ identifier ]) . field_identifier)) )) (compound_statement "{\n        do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);\n      }" { (do_statement "do {\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        } while (iVar24 < prVar16[uVar28].nelem);" do (compound_statement "{\n          _Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);\n          if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }\n          prVar16 = prVar30->eclosures;\n          iVar24 = iVar24 + 1;\n        }" { (expression_statement "_Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28);" (assignment_expression "_Var7 = re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28)" identifier = (call_expression "re_node_set_insert_last(prVar30->inveclosures + pIVar14[iVar24],uVar28)" identifier (argument_list "(prVar30->inveclosures + pIVar14[iVar24],uVar28)" ( (binary_expression "prVar30->inveclosures + pIVar14[iVar24]" (field_expression "prVar30->inveclosures" identifier -> field_identifier) + (subscript_expression "pIVar14[iVar24]" identifier [ identifier ])) , identifier )))) ;) (if_statement "if (!_Var7) {\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }" if (parenthesized_expression "(!_Var7)" ( (unary_expression "!_Var7" ! identifier) )) (compound_statement "{\n            rVar12 = _REG_ESPACE;\n            goto LAB_00023d90;\n          }" { (expression_statement "rVar12 = _REG_ESPACE;" (assignment_expression "rVar12 = _REG_ESPACE" identifier = identifier) ;) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "prVar16 = prVar30->eclosures;" (assignment_expression "prVar16 = prVar30->eclosures" identifier = (field_expression "prVar30->eclosures" identifier -> field_identifier)) ;) (expression_statement "iVar24 = iVar24 + 1;" (assignment_expression "iVar24 = iVar24 + 1" identifier = (binary_expression "iVar24 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar24 < prVar16[uVar28].nelem)" ( (binary_expression "iVar24 < prVar16[uVar28].nelem" identifier < (field_expression "prVar16[uVar28].nelem" (subscript_expression "prVar16[uVar28]" identifier [ identifier ]) . field_identifier)) )) ;) })) (expression_statement "uVar28 = uVar28 + 1;" (assignment_expression "uVar28 = uVar28 + 1" identifier = (binary_expression "uVar28 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar28 < prVar30->nodes_len)" ( (binary_expression "uVar28 < prVar30->nodes_len" identifier < (field_expression "prVar30->nodes_len" identifier -> field_identifier)) )) ;) })) (labeled_statement "LAB_00023dab:\n  err = _REG_NOERROR;" statement_identifier : (expression_statement "err = _REG_NOERROR;" (assignment_expression "err = _REG_NOERROR" identifier = identifier) ;)) (expression_statement "bVar26 = (byte)dfa->field_0x58 >> 2 & uVar23 == 0;" (assignment_expression "bVar26 = (byte)dfa->field_0x58 >> 2 & uVar23 == 0" identifier = (binary_expression "(byte)dfa->field_0x58 >> 2 & uVar23 == 0" (binary_expression "(byte)dfa->field_0x58 >> 2" (cast_expression "(byte)dfa->field_0x58" ( (type_descriptor "byte" type_identifier) ) (field_expression "dfa->field_0x58" identifier -> field_identifier)) >> number_literal) & (binary_expression "uVar23 == 0" identifier == number_literal))) ;) (if_statement "if ((bVar26 != 0) && (preg->translate == (uchar *)0x0)) {\n    if (dfa->nodes_len == 0) {\nLAB_00024424:\n      bVar6 = 0;\n    }\n    else {\n      prVar8 = dfa->nodes;\n      bVar6 = 0;\n      sVar35 = 0;\n      bVar1 = 0;\n      prVar22 = prVar8;\n      do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);\n      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;\n      prVar22 = prVar8 + sVar35;\n      do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);\n    }\n    dfa->mb_cur_max = 1;\n    dfa->field_0x58 = (0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9;\n  }" if (parenthesized_expression "((bVar26 != 0) && (preg->translate == (uchar *)0x0))" ( (binary_expression "(bVar26 != 0) && (preg->translate == (uchar *)0x0)" (parenthesized_expression "(bVar26 != 0)" ( (binary_expression "bVar26 != 0" identifier != number_literal) )) && (parenthesized_expression "(preg->translate == (uchar *)0x0)" ( (binary_expression "preg->translate == (uchar *)0x0" (field_expression "preg->translate" identifier -> field_identifier) == (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (dfa->nodes_len == 0) {\nLAB_00024424:\n      bVar6 = 0;\n    }\n    else {\n      prVar8 = dfa->nodes;\n      bVar6 = 0;\n      sVar35 = 0;\n      bVar1 = 0;\n      prVar22 = prVar8;\n      do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);\n      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;\n      prVar22 = prVar8 + sVar35;\n      do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);\n    }\n    dfa->mb_cur_max = 1;\n    dfa->field_0x58 = (0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9;\n  }" { (if_statement "if (dfa->nodes_len == 0) {\nLAB_00024424:\n      bVar6 = 0;\n    }\n    else {\n      prVar8 = dfa->nodes;\n      bVar6 = 0;\n      sVar35 = 0;\n      bVar1 = 0;\n      prVar22 = prVar8;\n      do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);\n      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;\n      prVar22 = prVar8 + sVar35;\n      do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);\n    }" if (parenthesized_expression "(dfa->nodes_len == 0)" ( (binary_expression "dfa->nodes_len == 0" (field_expression "dfa->nodes_len" identifier -> field_identifier) == number_literal) )) (compound_statement "{\nLAB_00024424:\n      bVar6 = 0;\n    }" { (labeled_statement "LAB_00024424:\n      bVar6 = 0;" statement_identifier : (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;)) }) (else_clause "else {\n      prVar8 = dfa->nodes;\n      bVar6 = 0;\n      sVar35 = 0;\n      bVar1 = 0;\n      prVar22 = prVar8;\n      do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);\n      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;\n      prVar22 = prVar8 + sVar35;\n      do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);\n    }" else (compound_statement "{\n      prVar8 = dfa->nodes;\n      bVar6 = 0;\n      sVar35 = 0;\n      bVar1 = 0;\n      prVar22 = prVar8;\n      do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);\n      if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;\n      prVar22 = prVar8 + sVar35;\n      do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);\n    }" { (expression_statement "prVar8 = dfa->nodes;" (assignment_expression "prVar8 = dfa->nodes" identifier = (field_expression "dfa->nodes" identifier -> field_identifier)) ;) (expression_statement "bVar6 = 0;" (assignment_expression "bVar6 = 0" identifier = number_literal) ;) (expression_statement "sVar35 = 0;" (assignment_expression "sVar35 = 0" identifier = number_literal) ;) (expression_statement "bVar1 = 0;" (assignment_expression "bVar1 = 0" identifier = number_literal) ;) (expression_statement "prVar22 = prVar8;" (assignment_expression "prVar22 = prVar8" identifier = identifier) ;) (do_statement "do {\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      } while (sVar35 != dfa->nodes_len);" do (compound_statement "{\n        switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        sVar35 = sVar35 + 1;\n        prVar22 = prVar22 + 1;\n      }" { (switch_statement "switch(prVar22->field_0x4) {\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }" switch (parenthesized_expression "(prVar22->field_0x4)" ( (field_expression "prVar22->field_0x4" identifier -> field_identifier) )) (compound_statement "{\n        default:\n                    /* WARNING: Subroutine does not return */\n          abort();\n        case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;\n        case 2:\n        case 4:\n        case 8:\n        case 9:\n        case 10:\n        case 0xb:\n          break;\n        case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;\n        case 5:\n          bVar6 = bVar26;\n          break;\n        case 6:\n          goto _L3750;\n        case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }\n        }" { (case_statement "default:\n                    /* WARNING: Subroutine does not return */\n          abort();" default : comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) (case_statement "case 1:\n          if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }\n          break;" case number_literal : (if_statement "if ((char)(prVar22->opr).c < '\0') {\n            bVar1 = bVar26;\n          }" if (parenthesized_expression "((char)(prVar22->opr).c < '\0')" ( (binary_expression "(char)(prVar22->opr).c < '\0'" (cast_expression "(char)(prVar22->opr).c" ( (type_descriptor "char" primitive_type) ) (field_expression "(prVar22->opr).c" (parenthesized_expression "(prVar22->opr)" ( (field_expression "prVar22->opr" identifier -> field_identifier) )) . field_identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            bVar1 = bVar26;\n          }" { (expression_statement "bVar1 = bVar26;" (assignment_expression "bVar1 = bVar26" identifier = identifier) ;) })) (break_statement "break;" break ;)) (case_statement "case 2:" case number_literal :) (case_statement "case 4:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 9:" case number_literal :) (case_statement "case 10:" case number_literal :) (case_statement "case 0xb:\n          break;" case number_literal : (break_statement "break;" break ;)) (case_statement "case 3:\n          iVar24 = 4;\n          do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);\n          break;" case number_literal : (expression_statement "iVar24 = 4;" (assignment_expression "iVar24 = 4" identifier = number_literal) ;) (do_statement "do {\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          } while (iVar24 != 8);" do (compound_statement "{\n            if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;\n            iVar24 = iVar24 + 1;\n          }" { (if_statement "if ((prVar22->opr).sbcset[iVar24] != 0) goto LAB_00023dcb;" if (parenthesized_expression "((prVar22->opr).sbcset[iVar24] != 0)" ( (binary_expression "(prVar22->opr).sbcset[iVar24] != 0" (subscript_expression "(prVar22->opr).sbcset[iVar24]" (field_expression "(prVar22->opr).sbcset" (parenthesized_expression "(prVar22->opr)" ( (field_expression "prVar22->opr" identifier -> field_identifier) )) . field_identifier) [ identifier ]) != number_literal) )) (goto_statement "goto LAB_00023dcb;" goto statement_identifier ;)) (expression_statement "iVar24 = iVar24 + 1;" (assignment_expression "iVar24 = iVar24 + 1" identifier = (binary_expression "iVar24 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar24 != 8)" ( (binary_expression "iVar24 != 8" identifier != number_literal) )) ;) (break_statement "break;" break ;)) (case_statement "case 5:\n          bVar6 = bVar26;\n          break;" case number_literal : (expression_statement "bVar6 = bVar26;" (assignment_expression "bVar6 = bVar26" identifier = identifier) ;) (break_statement "break;" break ;)) (case_statement "case 6:\n          goto _L3750;" case number_literal : (goto_statement "goto _L3750;" goto statement_identifier ;)) (case_statement "case 0xc:\n          pbVar20 = (prVar22->opr).sbcset;\n          if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }" case number_literal : (expression_statement "pbVar20 = (prVar22->opr).sbcset;" (assignment_expression "pbVar20 = (prVar22->opr).sbcset" identifier = (field_expression "(prVar22->opr).sbcset" (parenthesized_expression "(prVar22->opr)" ( (field_expression "prVar22->opr" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (pbVar20 != (re_bitset_ptr_t)0x20) {\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }" if (parenthesized_expression "(pbVar20 != (re_bitset_ptr_t)0x20)" ( (binary_expression "pbVar20 != (re_bitset_ptr_t)0x20" identifier != (cast_expression "(re_bitset_ptr_t)0x20" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) number_literal)) )) (compound_statement "{\n            if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }\n          }" { (if_statement "if (pbVar20 < (re_bitset_ptr_t)0x21) {\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }\n            else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }" if (parenthesized_expression "(pbVar20 < (re_bitset_ptr_t)0x21)" ( (binary_expression "pbVar20 < (re_bitset_ptr_t)0x21" identifier < (cast_expression "(re_bitset_ptr_t)0x21" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) number_literal)) )) (compound_statement "{\n              if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;\n            }" { (if_statement "if (pbVar20 != (re_bitset_ptr_t)0x10) goto _L3750;" if (parenthesized_expression "(pbVar20 != (re_bitset_ptr_t)0x10)" ( (binary_expression "pbVar20 != (re_bitset_ptr_t)0x10" identifier != (cast_expression "(re_bitset_ptr_t)0x10" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) number_literal)) )) (goto_statement "goto _L3750;" goto statement_identifier ;)) }) (else_clause "else if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }" else (if_statement "if ((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)) {\n_L3750:\n              goto LAB_00023dcb;\n            }" if (parenthesized_expression "((pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80))" ( (binary_expression "(pbVar20 != (re_bitset_ptr_t)0x40) && (pbVar20 != (re_bitset_ptr_t)0x80)" (parenthesized_expression "(pbVar20 != (re_bitset_ptr_t)0x40)" ( (binary_expression "pbVar20 != (re_bitset_ptr_t)0x40" identifier != (cast_expression "(re_bitset_ptr_t)0x40" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) number_literal)) )) && (parenthesized_expression "(pbVar20 != (re_bitset_ptr_t)0x80)" ( (binary_expression "pbVar20 != (re_bitset_ptr_t)0x80" identifier != (cast_expression "(re_bitset_ptr_t)0x80" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) number_literal)) ))) )) (compound_statement "{\n_L3750:\n              goto LAB_00023dcb;\n            }" { (labeled_statement "_L3750:\n              goto LAB_00023dcb;" statement_identifier : (goto_statement "goto LAB_00023dcb;" goto statement_identifier ;)) })))) }))) })) (expression_statement "sVar35 = sVar35 + 1;" (assignment_expression "sVar35 = sVar35 + 1" identifier = (binary_expression "sVar35 + 1" identifier + number_literal)) ;) (expression_statement "prVar22 = prVar22 + 1;" (assignment_expression "prVar22 = prVar22 + 1" identifier = (binary_expression "prVar22 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(sVar35 != dfa->nodes_len)" ( (binary_expression "sVar35 != dfa->nodes_len" identifier != (field_expression "dfa->nodes_len" identifier -> field_identifier)) )) ;) (if_statement "if (bVar1 == 0 && bVar6 == 0) goto LAB_00024424;" if (parenthesized_expression "(bVar1 == 0 && bVar6 == 0)" ( (binary_expression "bVar1 == 0 && bVar6 == 0" (binary_expression "bVar1 == 0" identifier == number_literal) && (binary_expression "bVar6 == 0" identifier == number_literal)) )) (goto_statement "goto LAB_00024424;" goto statement_identifier ;)) (expression_statement "prVar22 = prVar8 + sVar35;" (assignment_expression "prVar22 = prVar8 + sVar35" identifier = (binary_expression "prVar8 + sVar35" identifier + identifier)) ;) (do_statement "do {\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      } while (prVar22 != prVar8);" do (compound_statement "{\n        if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }\n        prVar8 = prVar8 + 1;\n      }" { (if_statement "if (prVar8->field_0x4 == '\x01') {\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }\n        else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }" if (parenthesized_expression "(prVar8->field_0x4 == '\x01')" ( (binary_expression "prVar8->field_0x4 == '\x01'" (field_expression "prVar8->field_0x4" identifier -> field_identifier) == (char_literal "'\x01'" ' escape_sequence ')) )) (compound_statement "{\n          if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }\n        }" { (if_statement "if ((char)(prVar8->opr).c < '\0') {\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }" if (parenthesized_expression "((char)(prVar8->opr).c < '\0')" ( (binary_expression "(char)(prVar8->opr).c < '\0'" (cast_expression "(char)(prVar8->opr).c" ( (type_descriptor "char" primitive_type) ) (field_expression "(prVar8->opr).c" (parenthesized_expression "(prVar8->opr)" ( (field_expression "prVar8->opr" identifier -> field_identifier) )) . field_identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;\n          }" { (expression_statement "prVar8->field_0x6 = prVar8->field_0x6 & 0xdf;" (assignment_expression "prVar8->field_0x6 = prVar8->field_0x6 & 0xdf" (field_expression "prVar8->field_0x6" identifier -> field_identifier) = (binary_expression "prVar8->field_0x6 & 0xdf" (field_expression "prVar8->field_0x6" identifier -> field_identifier) & number_literal)) ;) })) }) (else_clause "else if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }" else (if_statement "if (prVar8->field_0x4 == '\x05') {\n          prVar8->field_0x4 = 7;\n        }" if (parenthesized_expression "(prVar8->field_0x4 == '\x05')" ( (binary_expression "prVar8->field_0x4 == '\x05'" (field_expression "prVar8->field_0x4" identifier -> field_identifier) == (char_literal "'\x05'" ' escape_sequence ')) )) (compound_statement "{\n          prVar8->field_0x4 = 7;\n        }" { (expression_statement "prVar8->field_0x4 = 7;" (assignment_expression "prVar8->field_0x4 = 7" (field_expression "prVar8->field_0x4" identifier -> field_identifier) = number_literal) ;) })))) (expression_statement "prVar8 = prVar8 + 1;" (assignment_expression "prVar8 = prVar8 + 1" identifier = (binary_expression "prVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(prVar22 != prVar8)" ( (binary_expression "prVar22 != prVar8" identifier != identifier) )) ;) }))) (expression_statement "dfa->mb_cur_max = 1;" (assignment_expression "dfa->mb_cur_max = 1" (field_expression "dfa->mb_cur_max" identifier -> field_identifier) = number_literal) ;) (expression_statement "dfa->field_0x58 = (0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9;" (assignment_expression "dfa->field_0x58 = (0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9" (field_expression "dfa->field_0x58" identifier -> field_identifier) = (binary_expression "(0 < dfa->nbackref | bVar6) * '\x02' | dfa->field_0x58 & 0xf9" (binary_expression "(0 < dfa->nbackref | bVar6) * '\x02'" (parenthesized_expression "(0 < dfa->nbackref | bVar6)" ( (binary_expression "0 < dfa->nbackref | bVar6" (binary_expression "0 < dfa->nbackref" number_literal < (field_expression "dfa->nbackref" identifier -> field_identifier)) | identifier) )) * (char_literal "'\x02'" ' escape_sequence ')) | (binary_expression "dfa->field_0x58 & 0xf9" (field_expression "dfa->field_0x58" identifier -> field_identifier) & number_literal))) ;) })) (labeled_statement "LAB_00023dcb:\n  iVar24 = dfa->str_tree->first->node_idx;" statement_identifier : (expression_statement "iVar24 = dfa->str_tree->first->node_idx;" (assignment_expression "iVar24 = dfa->str_tree->first->node_idx" identifier = (field_expression "dfa->str_tree->first->node_idx" (field_expression "dfa->str_tree->first" (field_expression "dfa->str_tree" identifier -> field_identifier) -> field_identifier) -> field_identifier)) ;)) (expression_statement "dfa->init_node = iVar24;" (assignment_expression "dfa->init_node = iVar24" (field_expression "dfa->init_node" identifier -> field_identifier) = identifier) ;) (expression_statement "aVar18.idx = re_node_set_init_copy((re_node_set *)local_ac,dfa->eclosures + iVar24);" (assignment_expression "aVar18.idx = re_node_set_init_copy((re_node_set *)local_ac,dfa->eclosures + iVar24)" (field_expression "aVar18.idx" identifier . field_identifier) = (call_expression "re_node_set_init_copy((re_node_set *)local_ac,dfa->eclosures + iVar24)" identifier (argument_list "((re_node_set *)local_ac,dfa->eclosures + iVar24)" ( (cast_expression "(re_node_set *)local_ac" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "dfa->eclosures + iVar24" (field_expression "dfa->eclosures" identifier -> field_identifier) + identifier) )))) ;) (expression_statement "local_94.idx = aVar18.idx;" (assignment_expression "local_94.idx = aVar18.idx" (field_expression "local_94.idx" identifier . field_identifier) = (field_expression "aVar18.idx" identifier . field_identifier)) ;) (expression_statement "current_token.opr.idx = aVar18.idx;" (assignment_expression "current_token.opr.idx = aVar18.idx" (field_expression "current_token.opr.idx" (field_expression "current_token.opr" identifier . field_identifier) . field_identifier) = (field_expression "aVar18.idx" identifier . field_identifier)) ;) (if_statement "if (aVar18.sbcset == (re_bitset_ptr_t)0x0) {\n    if ((0 < dfa->nbackref) && (0 < (int)t._4_4_)) {\n      iVar24 = 0;\n      prVar16 = (re_node_set *)t._4_4_;\nLAB_00023e3b:\n      do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);\n    }\nLAB_00023ee2:\n    prVar19 = re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0);\n    dfa->init_state = prVar19;\n    if (prVar19 == (re_dfastate_t *)0x0) {\nLAB_000241e0:\n      local_94 = current_token.opr;\n    }\n    else {\n      if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }\n      free(local_78);\n      local_94.idx = aVar18.idx;\n    }\n  }" if (parenthesized_expression "(aVar18.sbcset == (re_bitset_ptr_t)0x0)" ( (binary_expression "aVar18.sbcset == (re_bitset_ptr_t)0x0" (field_expression "aVar18.sbcset" identifier . field_identifier) == (cast_expression "(re_bitset_ptr_t)0x0" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) number_literal)) )) (compound_statement "{\n    if ((0 < dfa->nbackref) && (0 < (int)t._4_4_)) {\n      iVar24 = 0;\n      prVar16 = (re_node_set *)t._4_4_;\nLAB_00023e3b:\n      do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);\n    }\nLAB_00023ee2:\n    prVar19 = re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0);\n    dfa->init_state = prVar19;\n    if (prVar19 == (re_dfastate_t *)0x0) {\nLAB_000241e0:\n      local_94 = current_token.opr;\n    }\n    else {\n      if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }\n      free(local_78);\n      local_94.idx = aVar18.idx;\n    }\n  }" { (if_statement "if ((0 < dfa->nbackref) && (0 < (int)t._4_4_)) {\n      iVar24 = 0;\n      prVar16 = (re_node_set *)t._4_4_;\nLAB_00023e3b:\n      do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);\n    }" if (parenthesized_expression "((0 < dfa->nbackref) && (0 < (int)t._4_4_))" ( (binary_expression "(0 < dfa->nbackref) && (0 < (int)t._4_4_)" (parenthesized_expression "(0 < dfa->nbackref)" ( (binary_expression "0 < dfa->nbackref" number_literal < (field_expression "dfa->nbackref" identifier -> field_identifier)) )) && (parenthesized_expression "(0 < (int)t._4_4_)" ( (binary_expression "0 < (int)t._4_4_" number_literal < (cast_expression "(int)t._4_4_" ( (type_descriptor "int" primitive_type) ) (field_expression "t._4_4_" identifier . field_identifier))) ))) )) (compound_statement "{\n      iVar24 = 0;\n      prVar16 = (re_node_set *)t._4_4_;\nLAB_00023e3b:\n      do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);\n    }" { (expression_statement "iVar24 = 0;" (assignment_expression "iVar24 = 0" identifier = number_literal) ;) (expression_statement "prVar16 = (re_node_set *)t._4_4_;" (assignment_expression "prVar16 = (re_node_set *)t._4_4_" identifier = (cast_expression "(re_node_set *)t._4_4_" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "t._4_4_" identifier . field_identifier))) ;) (labeled_statement "LAB_00023e3b:\n      do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);" statement_identifier : (do_statement "do {\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      } while (iVar24 < (int)prVar16);" do (compound_statement "{\n        prVar8 = dfa->nodes + local_78[iVar24];\n        if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }\n        iVar24 = iVar24 + 1;\n      }" { (expression_statement "prVar8 = dfa->nodes + local_78[iVar24];" (assignment_expression "prVar8 = dfa->nodes + local_78[iVar24]" identifier = (binary_expression "dfa->nodes + local_78[iVar24]" (field_expression "dfa->nodes" identifier -> field_identifier) + (subscript_expression "local_78[iVar24]" identifier [ identifier ]))) ;) (if_statement "if (prVar8->field_0x4 == '\x04') {\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }" if (parenthesized_expression "(prVar8->field_0x4 == '\x04')" ( (binary_expression "prVar8->field_0x4 == '\x04'" (field_expression "prVar8->field_0x4" identifier -> field_identifier) == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n          prVar17 = (re_node_set *)0x0;\n          do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);\n        }" { (expression_statement "prVar17 = (re_node_set *)0x0;" (assignment_expression "prVar17 = (re_node_set *)0x0" identifier = (cast_expression "(re_node_set *)0x0" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          } while (prVar16 != prVar17);" do (compound_statement "{\n            prVar22 = dfa->nodes + local_78[(int)prVar17];\n            if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);\n          }" { (expression_statement "prVar22 = dfa->nodes + local_78[(int)prVar17];" (assignment_expression "prVar22 = dfa->nodes + local_78[(int)prVar17]" identifier = (binary_expression "dfa->nodes + local_78[(int)prVar17]" (field_expression "dfa->nodes" identifier -> field_identifier) + (subscript_expression "local_78[(int)prVar17]" identifier [ (cast_expression "(int)prVar17" ( (type_descriptor "int" primitive_type) ) identifier) ]))) ;) (if_statement "if ((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)) {\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }" if (parenthesized_expression "((prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset))" ( (binary_expression "(prVar22->field_0x4 == '\t') && ((prVar22->opr).sbcset == (prVar8->opr).sbcset)" (parenthesized_expression "(prVar22->field_0x4 == '\t')" ( (binary_expression "prVar22->field_0x4 == '\t'" (field_expression "prVar22->field_0x4" identifier -> field_identifier) == (char_literal "'\t'" ' escape_sequence ')) )) && (parenthesized_expression "((prVar22->opr).sbcset == (prVar8->opr).sbcset)" ( (binary_expression "(prVar22->opr).sbcset == (prVar8->opr).sbcset" (field_expression "(prVar22->opr).sbcset" (parenthesized_expression "(prVar22->opr)" ( (field_expression "prVar22->opr" identifier -> field_identifier) )) . field_identifier) == (field_expression "(prVar8->opr).sbcset" (parenthesized_expression "(prVar8->opr)" ( (field_expression "prVar8->opr" identifier -> field_identifier) )) . field_identifier)) ))) )) (compound_statement "{\n              prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;\n              IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);\n              if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }" { (expression_statement "prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems;" (assignment_expression "prVar17 = (re_node_set *)*dfa->edests[local_78[iVar24]].elems" identifier = (cast_expression "(re_node_set *)*dfa->edests[local_78[iVar24]].elems" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*dfa->edests[local_78[iVar24]].elems" * (field_expression "dfa->edests[local_78[iVar24]].elems" (subscript_expression "dfa->edests[local_78[iVar24]]" (field_expression "dfa->edests" identifier -> field_identifier) [ (subscript_expression "local_78[iVar24]" identifier [ identifier ]) ]) . field_identifier)))) ;) (expression_statement "IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17);" (assignment_expression "IVar38 = re_node_set_contains(prVar16,(Idx)&local_78,prVar17)" identifier = (call_expression "re_node_set_contains(prVar16,(Idx)&local_78,prVar17)" identifier (argument_list "(prVar16,(Idx)&local_78,prVar17)" ( identifier , (binary_expression "(Idx)&local_78" (parenthesized_expression "(Idx)" ( identifier )) & identifier) , identifier )))) ;) (if_statement "if (IVar38 == 0) {\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }" if (parenthesized_expression "(IVar38 == 0)" ( (binary_expression "IVar38 == 0" identifier == number_literal) )) (compound_statement "{\n                local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);\n                if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;\n                iVar24 = 1;\n                prVar16 = (re_node_set *)t._4_4_;\n                if (1 < (int)t._4_4_) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }" { (expression_statement "local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17);" (assignment_expression "local_94.idx = re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17)" (field_expression "local_94.idx" identifier . field_identifier) = (call_expression "re_node_set_merge((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17)" identifier (argument_list "((re_node_set *)local_ac,\n                                                 dfa->eclosures + (int)prVar17)" ( (cast_expression "(re_node_set *)local_ac" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "dfa->eclosures + (int)prVar17" (field_expression "dfa->eclosures" identifier -> field_identifier) + (cast_expression "(int)prVar17" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (if_statement "if (local_94.sbcset != (re_bitset_ptr_t)0x0) goto LAB_00023f26;" if (parenthesized_expression "(local_94.sbcset != (re_bitset_ptr_t)0x0)" ( (binary_expression "local_94.sbcset != (re_bitset_ptr_t)0x0" (field_expression "local_94.sbcset" identifier . field_identifier) != (cast_expression "(re_bitset_ptr_t)0x0" ( (type_descriptor "re_bitset_ptr_t" type_identifier) ) number_literal)) )) (goto_statement "goto LAB_00023f26;" goto statement_identifier ;)) (expression_statement "iVar24 = 1;" (assignment_expression "iVar24 = 1" identifier = number_literal) ;) (expression_statement "prVar16 = (re_node_set *)t._4_4_;" (assignment_expression "prVar16 = (re_node_set *)t._4_4_" identifier = (cast_expression "(re_node_set *)t._4_4_" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "t._4_4_" identifier . field_identifier))) ;) (if_statement "if (1 < (int)t._4_4_) goto LAB_00023e3b;" if (parenthesized_expression "(1 < (int)t._4_4_)" ( (binary_expression "1 < (int)t._4_4_" number_literal < (cast_expression "(int)t._4_4_" ( (type_descriptor "int" primitive_type) ) (field_expression "t._4_4_" identifier . field_identifier))) )) (goto_statement "goto LAB_00023e3b;" goto statement_identifier ;)) (goto_statement "goto LAB_00023ee2;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) (expression_statement "prVar17 = (re_node_set *)((int)&prVar17->alloc + 1);" (assignment_expression "prVar17 = (re_node_set *)((int)&prVar17->alloc + 1)" identifier = (cast_expression "(re_node_set *)((int)&prVar17->alloc + 1)" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&prVar17->alloc + 1)" ( (binary_expression "(int)&prVar17->alloc + 1" (cast_expression "(int)&prVar17->alloc" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&prVar17->alloc" & (field_expression "prVar17->alloc" identifier -> field_identifier))) + number_literal) )))) ;) }) while (parenthesized_expression "(prVar16 != prVar17)" ( (binary_expression "prVar16 != prVar17" identifier != identifier) )) ;) })) (expression_statement "iVar24 = iVar24 + 1;" (assignment_expression "iVar24 = iVar24 + 1" identifier = (binary_expression "iVar24 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar24 < (int)prVar16)" ( (binary_expression "iVar24 < (int)prVar16" identifier < (cast_expression "(int)prVar16" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;)) })) (labeled_statement "LAB_00023ee2:\n    prVar19 = re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0);" statement_identifier : (expression_statement "prVar19 = re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0);" (assignment_expression "prVar19 = re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0)" identifier = (call_expression "re_acquire_state_context\n                        ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0)" identifier (argument_list "((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,0)" ( (cast_expression "(reg_errcode_t *)&current_token" ( (type_descriptor "reg_errcode_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&current_token" & identifier)) , identifier , (cast_expression "(re_node_set *)local_ac" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal )))) ;)) (expression_statement "dfa->init_state = prVar19;" (assignment_expression "dfa->init_state = prVar19" (field_expression "dfa->init_state" identifier -> field_identifier) = identifier) ;) (if_statement "if (prVar19 == (re_dfastate_t *)0x0) {\nLAB_000241e0:\n      local_94 = current_token.opr;\n    }\n    else {\n      if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }\n      free(local_78);\n      local_94.idx = aVar18.idx;\n    }" if (parenthesized_expression "(prVar19 == (re_dfastate_t *)0x0)" ( (binary_expression "prVar19 == (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 "{\nLAB_000241e0:\n      local_94 = current_token.opr;\n    }" { (labeled_statement "LAB_000241e0:\n      local_94 = current_token.opr;" statement_identifier : (expression_statement "local_94 = current_token.opr;" (assignment_expression "local_94 = current_token.opr" identifier = (field_expression "current_token.opr" identifier . field_identifier)) ;)) }) (else_clause "else {\n      if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }\n      free(local_78);\n      local_94.idx = aVar18.idx;\n    }" else (compound_statement "{\n      if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }\n      free(local_78);\n      local_94.idx = aVar18.idx;\n    }" { (if_statement "if ((char)prVar19->field_0x34 < '\0') {\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }\n      else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }" if (parenthesized_expression "((char)prVar19->field_0x34 < '\0')" ( (binary_expression "(char)prVar19->field_0x34 < '\0'" (cast_expression "(char)prVar19->field_0x34" ( (type_descriptor "char" primitive_type) ) (field_expression "prVar19->field_0x34" identifier -> field_identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);\n        dfa->init_state_word = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);\n        dfa->init_state_nl = prVar19;\n        prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);\n        dfa->init_state_begbuf = prVar19;\n        if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;\n      }" { (expression_statement "prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1);" (assignment_expression "prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1)" identifier = (call_expression "re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1)" identifier (argument_list "((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,1)" ( (cast_expression "(reg_errcode_t *)&current_token" ( (type_descriptor "reg_errcode_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&current_token" & identifier)) , identifier , (cast_expression "(re_node_set *)local_ac" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal )))) ;) (expression_statement "dfa->init_state_word = prVar19;" (assignment_expression "dfa->init_state_word = prVar19" (field_expression "dfa->init_state_word" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2);" (assignment_expression "prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2)" identifier = (call_expression "re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2)" identifier (argument_list "((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,2)" ( (cast_expression "(reg_errcode_t *)&current_token" ( (type_descriptor "reg_errcode_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&current_token" & identifier)) , identifier , (cast_expression "(re_node_set *)local_ac" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal )))) ;) (expression_statement "dfa->init_state_nl = prVar19;" (assignment_expression "dfa->init_state_nl = prVar19" (field_expression "dfa->init_state_nl" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6);" (assignment_expression "prVar19 = re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6)" identifier = (call_expression "re_acquire_state_context\n                            ((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6)" identifier (argument_list "((reg_errcode_t *)&current_token,dfa,(re_node_set *)local_ac,6)" ( (cast_expression "(reg_errcode_t *)&current_token" ( (type_descriptor "reg_errcode_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&current_token" & identifier)) , identifier , (cast_expression "(re_node_set *)local_ac" ( (type_descriptor "re_node_set *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal )))) ;) (expression_statement "dfa->init_state_begbuf = prVar19;" (assignment_expression "dfa->init_state_begbuf = prVar19" (field_expression "dfa->init_state_begbuf" identifier -> field_identifier) = identifier) ;) (if_statement "if (((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))\n        goto LAB_000241e0;" if (parenthesized_expression "(((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0))" ( (binary_expression "((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)) || (prVar19 == (re_dfastate_t *)0x0)" (parenthesized_expression "((dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0))" ( (binary_expression "(dfa->init_state_word == (re_dfastate_t *)0x0) ||\n            (dfa->init_state_nl == (re_dfastate_t *)0x0)" (parenthesized_expression "(dfa->init_state_word == (re_dfastate_t *)0x0)" ( (binary_expression "dfa->init_state_word == (re_dfastate_t *)0x0" (field_expression "dfa->init_state_word" identifier -> field_identifier) == (cast_expression "(re_dfastate_t *)0x0" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(dfa->init_state_nl == (re_dfastate_t *)0x0)" ( (binary_expression "dfa->init_state_nl == (re_dfastate_t *)0x0" (field_expression "dfa->init_state_nl" identifier -> field_identifier) == (cast_expression "(re_dfastate_t *)0x0" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) || (parenthesized_expression "(prVar19 == (re_dfastate_t *)0x0)" ( (binary_expression "prVar19 == (re_dfastate_t *)0x0" identifier == (cast_expression "(re_dfastate_t *)0x0" ( (type_descriptor "re_dfastate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (goto_statement "goto LAB_000241e0;" goto statement_identifier ;)) }) (else_clause "else {\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }" else (compound_statement "{\n        dfa->init_state_begbuf = prVar19;\n        dfa->init_state_nl = prVar19;\n        dfa->init_state_word = prVar19;\n      }" { (expression_statement "dfa->init_state_begbuf = prVar19;" (assignment_expression "dfa->init_state_begbuf = prVar19" (field_expression "dfa->init_state_begbuf" identifier -> field_identifier) = identifier) ;) (expression_statement "dfa->init_state_nl = prVar19;" (assignment_expression "dfa->init_state_nl = prVar19" (field_expression "dfa->init_state_nl" identifier -> field_identifier) = identifier) ;) (expression_statement "dfa->init_state_word = prVar19;" (assignment_expression "dfa->init_state_word = prVar19" (field_expression "dfa->init_state_word" identifier -> field_identifier) = identifier) ;) }))) (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "local_94.idx = aVar18.idx;" (assignment_expression "local_94.idx = aVar18.idx" (field_expression "local_94.idx" identifier . field_identifier) = (field_expression "aVar18.idx" identifier . field_identifier)) ;) }))) })) (labeled_statement "LAB_00023f26:\n  prVar30 = preg->buffer;" statement_identifier : (expression_statement "prVar30 = preg->buffer;" (assignment_expression "prVar30 = preg->buffer" identifier = (field_expression "preg->buffer" identifier -> field_identifier)) ;)) (expression_statement "pbVar5 = prVar30->str_tree_storage;" (assignment_expression "pbVar5 = prVar30->str_tree_storage" identifier = (field_expression "prVar30->str_tree_storage" identifier -> field_identifier)) ;) (expression_statement "err = (reg_errcode_t)local_94;" (assignment_expression "err = (reg_errcode_t)local_94" identifier = (cast_expression "(reg_errcode_t)local_94" ( (type_descriptor "reg_errcode_t" type_identifier) ) identifier)) ;) (while_statement "while (pbVar5 != (bin_tree_storage_t *)0x0) {\n    pbVar4 = pbVar5->next;\n    free(pbVar5);\n    pbVar5 = pbVar4;\n  }" while (parenthesized_expression "(pbVar5 != (bin_tree_storage_t *)0x0)" ( (binary_expression "pbVar5 != (bin_tree_storage_t *)0x0" identifier != (cast_expression "(bin_tree_storage_t *)0x0" ( (type_descriptor "bin_tree_storage_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pbVar4 = pbVar5->next;\n    free(pbVar5);\n    pbVar5 = pbVar4;\n  }" { (expression_statement "pbVar4 = pbVar5->next;" (assignment_expression "pbVar4 = pbVar5->next" identifier = (field_expression "pbVar5->next" identifier -> field_identifier)) ;) (expression_statement "free(pbVar5);" (call_expression "free(pbVar5)" identifier (argument_list "(pbVar5)" ( identifier ))) ;) (expression_statement "pbVar5 = pbVar4;" (assignment_expression "pbVar5 = pbVar4" identifier = identifier) ;) })) (expression_statement "prVar30->str_tree_storage = (bin_tree_storage_t *)0x0;" (assignment_expression "prVar30->str_tree_storage = (bin_tree_storage_t *)0x0" (field_expression "prVar30->str_tree_storage" identifier -> field_identifier) = (cast_expression "(bin_tree_storage_t *)0x0" ( (type_descriptor "bin_tree_storage_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "prVar30->str_tree_storage_idx = 0x1f;" (assignment_expression "prVar30->str_tree_storage_idx = 0x1f" (field_expression "prVar30->str_tree_storage_idx" identifier -> field_identifier) = number_literal) ;) (expression_statement "prVar30->str_tree = (bin_tree_t *)0x0;" (assignment_expression "prVar30->str_tree = (bin_tree_t *)0x0" (field_expression "prVar30->str_tree" identifier -> field_identifier) = (cast_expression "(bin_tree_t *)0x0" ( (type_descriptor "bin_tree_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "free(prVar30->org_indices);" (call_expression "free(prVar30->org_indices)" identifier (argument_list "(prVar30->org_indices)" ( (field_expression "prVar30->org_indices" identifier -> field_identifier) ))) ;) (expression_statement "prVar30->org_indices = (Idx *)0x0;" (assignment_expression "prVar30->org_indices = (Idx *)0x0" (field_expression "prVar30->org_indices" identifier -> field_identifier) = (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "re_string_destruct(&regexp);" (call_expression "re_string_destruct(&regexp)" identifier (argument_list "(&regexp)" ( (pointer_expression "&regexp" & identifier) ))) ;) (expression_statement "rVar12 = err;" (assignment_expression "rVar12 = err" identifier = identifier) ;) (if_statement "if (err == _REG_NOERROR) goto LAB_00023f97;" if (parenthesized_expression "(err == _REG_NOERROR)" ( (binary_expression "err == _REG_NOERROR" identifier == identifier) )) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;)) (labeled_statement "LAB_00023fc8:\n  free_dfa_content(dfa);" statement_identifier : (expression_statement "free_dfa_content(dfa);" (call_expression "free_dfa_content(dfa)" identifier (argument_list "(dfa)" ( identifier ))) ;)) (expression_statement "preg->buffer = (re_dfa_t *)0x0;" (assignment_expression "preg->buffer = (re_dfa_t *)0x0" (field_expression "preg->buffer" identifier -> field_identifier) = (cast_expression "(re_dfa_t *)0x0" ( (type_descriptor "re_dfa_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "preg->allocated = 0;" (assignment_expression "preg->allocated = 0" (field_expression "preg->allocated" identifier -> field_identifier) = number_literal) ;) (expression_statement "rVar12 = err;" (assignment_expression "rVar12 = err" identifier = identifier) ;) (labeled_statement "LAB_00023f97:\n  if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" statement_identifier : (if_statement "if (iVar2 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" if (parenthesized_expression "(iVar2 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "iVar2 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail_local();\n  }" { comment (expression_statement "__stack_chk_fail_local();" (call_expression "__stack_chk_fail_local()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return rVar12;" return identifier ;) })))
(translation_unit "int __regparm3 FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  int *piVar1;\n  byte bVar2;\n  undefined4 *puVar3;\n  byte bVar4;\n  char cVar5;\n  void *pvVar6;\n  size_t sVar7;\n  byte *pbVar8;\n  int iVar9;\n  int iVar10;\n  void *pvVar11;\n  void *pvVar12;\n  void *pvVar13;\n  int iVar14;\n  wint_t wVar15;\n  uint *puVar16;\n  int *__ptr;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  int *piVar20;\n  byte bVar21;\n  uint uVar22;\n  undefined4 *puVar23;\n  byte *pbVar24;\n  size_t __size;\n  uint *puVar25;\n  int in_GS_OFFSET;\n  bool bVar26;\n  bool bVar27;\n  undefined1 *local_ac;\n  int local_94;\n  int local_8c;\n  int local_88 [2];\n  undefined1 local_80 [4];\n  int local_7c;\n  void *local_78;\n  int local_74;\n  int local_70 [5];\n  int local_5c;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  int local_4c;\n  uint local_48;\n  uint local_44;\n  uint local_40;\n  uint local_3c;\n  int local_34;\n  undefined1 local_2c;\n  byte local_2b;\n  byte local_2a;\n  char local_29;\n  int local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar21 = 0;\n  uStack_14 = 0x23639;\n  __ptr = (int *)*param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;\n  local_8c = 0;\n  param_1[3] = param_4;\n  param_1[2] = 0;\n  param_1[6] = 0;\n  if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }\n  param_1[2] = 0x88;\n  *__ptr = 0;\n  __ptr[0x21] = 0;\n  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);\n  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }\n  __ptr[0x10] = 0x1f;\n  if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  local_8c = 0xc;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  iVar18 = iVar18 + 1;\n  if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }\n  if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }\nLAB_00023dab:\n  local_8c = 0;\n  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;\n  if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }\nLAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);\n  __ptr[0x12] = iVar9;\n  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);\n  local_94 = iVar9;\n  local_88[0] = iVar9;\n  if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }\nLAB_00023f26:\n  iVar9 = *param_1;\n  puVar23 = *(undefined4 **)(iVar9 + 0x38);\n  local_8c = local_94;\n  while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }\n  *(undefined4 *)(iVar9 + 0x38) = 0;\n  *(undefined4 *)(iVar9 + 0x40) = 0x1f;\n  *(undefined4 *)(iVar9 + 0x34) = 0;\n  free(*(void **)(iVar9 + 0x10));\n  *(undefined4 *)(iVar9 + 0x10) = 0;\n  FUN_000188a0();\n  iVar9 = local_8c;\n  if (local_8c == 0) goto LAB_00023f97;\nLAB_00023fc8:\n  FUN_0001c4f0();\n  *param_1 = 0;\n  param_1[1] = 0;\n  iVar9 = local_8c;\nLAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }\n  return iVar9;\n}\n\n" (function_definition "int __regparm3 FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  int *piVar1;\n  byte bVar2;\n  undefined4 *puVar3;\n  byte bVar4;\n  char cVar5;\n  void *pvVar6;\n  size_t sVar7;\n  byte *pbVar8;\n  int iVar9;\n  int iVar10;\n  void *pvVar11;\n  void *pvVar12;\n  void *pvVar13;\n  int iVar14;\n  wint_t wVar15;\n  uint *puVar16;\n  int *__ptr;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  int *piVar20;\n  byte bVar21;\n  uint uVar22;\n  undefined4 *puVar23;\n  byte *pbVar24;\n  size_t __size;\n  uint *puVar25;\n  int in_GS_OFFSET;\n  bool bVar26;\n  bool bVar27;\n  undefined1 *local_ac;\n  int local_94;\n  int local_8c;\n  int local_88 [2];\n  undefined1 local_80 [4];\n  int local_7c;\n  void *local_78;\n  int local_74;\n  int local_70 [5];\n  int local_5c;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  int local_4c;\n  uint local_48;\n  uint local_44;\n  uint local_40;\n  uint local_3c;\n  int local_34;\n  undefined1 local_2c;\n  byte local_2b;\n  byte local_2a;\n  char local_29;\n  int local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar21 = 0;\n  uStack_14 = 0x23639;\n  __ptr = (int *)*param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;\n  local_8c = 0;\n  param_1[3] = param_4;\n  param_1[2] = 0;\n  param_1[6] = 0;\n  if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }\n  param_1[2] = 0x88;\n  *__ptr = 0;\n  __ptr[0x21] = 0;\n  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);\n  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }\n  __ptr[0x10] = 0x1f;\n  if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  local_8c = 0xc;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  iVar18 = iVar18 + 1;\n  if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }\n  if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }\nLAB_00023dab:\n  local_8c = 0;\n  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;\n  if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }\nLAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);\n  __ptr[0x12] = iVar9;\n  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);\n  local_94 = iVar9;\n  local_88[0] = iVar9;\n  if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }\nLAB_00023f26:\n  iVar9 = *param_1;\n  puVar23 = *(undefined4 **)(iVar9 + 0x38);\n  local_8c = local_94;\n  while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }\n  *(undefined4 *)(iVar9 + 0x38) = 0;\n  *(undefined4 *)(iVar9 + 0x40) = 0x1f;\n  *(undefined4 *)(iVar9 + 0x34) = 0;\n  free(*(void **)(iVar9 + 0x10));\n  *(undefined4 *)(iVar9 + 0x10) = 0;\n  FUN_000188a0();\n  iVar9 = local_8c;\n  if (local_8c == 0) goto LAB_00023f97;\nLAB_00023fc8:\n  FUN_0001c4f0();\n  *param_1 = 0;\n  param_1[1] = 0;\n  iVar9 = local_8c;\nLAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }\n  return iVar9;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)" identifier (parameter_list "(int *param_1,int param_2,uint param_3,uint param_4)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  int *piVar1;\n  byte bVar2;\n  undefined4 *puVar3;\n  byte bVar4;\n  char cVar5;\n  void *pvVar6;\n  size_t sVar7;\n  byte *pbVar8;\n  int iVar9;\n  int iVar10;\n  void *pvVar11;\n  void *pvVar12;\n  void *pvVar13;\n  int iVar14;\n  wint_t wVar15;\n  uint *puVar16;\n  int *__ptr;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  int *piVar20;\n  byte bVar21;\n  uint uVar22;\n  undefined4 *puVar23;\n  byte *pbVar24;\n  size_t __size;\n  uint *puVar25;\n  int in_GS_OFFSET;\n  bool bVar26;\n  bool bVar27;\n  undefined1 *local_ac;\n  int local_94;\n  int local_8c;\n  int local_88 [2];\n  undefined1 local_80 [4];\n  int local_7c;\n  void *local_78;\n  int local_74;\n  int local_70 [5];\n  int local_5c;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  int local_4c;\n  uint local_48;\n  uint local_44;\n  uint local_40;\n  uint local_3c;\n  int local_34;\n  undefined1 local_2c;\n  byte local_2b;\n  byte local_2a;\n  char local_29;\n  int local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar21 = 0;\n  uStack_14 = 0x23639;\n  __ptr = (int *)*param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;\n  local_8c = 0;\n  param_1[3] = param_4;\n  param_1[2] = 0;\n  param_1[6] = 0;\n  if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }\n  param_1[2] = 0x88;\n  *__ptr = 0;\n  __ptr[0x21] = 0;\n  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);\n  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }\n  __ptr[0x10] = 0x1f;\n  if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  local_8c = 0xc;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  iVar18 = iVar18 + 1;\n  if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }\n  if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }\nLAB_00023dab:\n  local_8c = 0;\n  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;\n  if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }\nLAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);\n  __ptr[0x12] = iVar9;\n  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);\n  local_94 = iVar9;\n  local_88[0] = iVar9;\n  if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }\nLAB_00023f26:\n  iVar9 = *param_1;\n  puVar23 = *(undefined4 **)(iVar9 + 0x38);\n  local_8c = local_94;\n  while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }\n  *(undefined4 *)(iVar9 + 0x38) = 0;\n  *(undefined4 *)(iVar9 + 0x40) = 0x1f;\n  *(undefined4 *)(iVar9 + 0x34) = 0;\n  free(*(void **)(iVar9 + 0x10));\n  *(undefined4 *)(iVar9 + 0x10) = 0;\n  FUN_000188a0();\n  iVar9 = local_8c;\n  if (local_8c == 0) goto LAB_00023f97;\nLAB_00023fc8:\n  FUN_0001c4f0();\n  *param_1 = 0;\n  param_1[1] = 0;\n  iVar9 = local_8c;\nLAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }\n  return iVar9;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "char cVar5;" primitive_type identifier ;) (declaration "void *pvVar6;" primitive_type (pointer_declarator "*pvVar6" * identifier) ;) (declaration "size_t sVar7;" primitive_type identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "void *pvVar11;" primitive_type (pointer_declarator "*pvVar11" * identifier) ;) (declaration "void *pvVar12;" primitive_type (pointer_declarator "*pvVar12" * identifier) ;) (declaration "void *pvVar13;" primitive_type (pointer_declarator "*pvVar13" * identifier) ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "wint_t wVar15;" type_identifier identifier ;) (declaration "uint *puVar16;" type_identifier (pointer_declarator "*puVar16" * identifier) ;) (declaration "int *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "int *piVar20;" primitive_type (pointer_declarator "*piVar20" * identifier) ;) (declaration "byte bVar21;" type_identifier identifier ;) (declaration "uint uVar22;" type_identifier identifier ;) (declaration "undefined4 *puVar23;" type_identifier (pointer_declarator "*puVar23" * identifier) ;) (declaration "byte *pbVar24;" type_identifier (pointer_declarator "*pbVar24" * identifier) ;) (declaration "size_t __size;" primitive_type identifier ;) (declaration "uint *puVar25;" type_identifier (pointer_declarator "*puVar25" * identifier) ;) (declaration "int in_GS_OFFSET;" primitive_type identifier ;) (declaration "bool bVar26;" primitive_type identifier ;) (declaration "bool bVar27;" primitive_type identifier ;) (declaration "undefined1 *local_ac;" type_identifier (pointer_declarator "*local_ac" * identifier) ;) (declaration "int local_94;" primitive_type identifier ;) (declaration "int local_8c;" primitive_type identifier ;) (declaration "int local_88 [2];" primitive_type (array_declarator "local_88 [2]" identifier [ number_literal ]) ;) (declaration "undefined1 local_80 [4];" type_identifier (array_declarator "local_80 [4]" identifier [ number_literal ]) ;) (declaration "int local_7c;" primitive_type identifier ;) (declaration "void *local_78;" primitive_type (pointer_declarator "*local_78" * identifier) ;) (declaration "int local_74;" primitive_type identifier ;) (declaration "int local_70 [5];" primitive_type (array_declarator "local_70 [5]" identifier [ number_literal ]) ;) (declaration "int local_5c;" primitive_type identifier ;) (declaration "uint local_58;" type_identifier identifier ;) (declaration "uint local_54;" type_identifier identifier ;) (declaration "uint local_50;" type_identifier identifier ;) (declaration "int local_4c;" primitive_type identifier ;) (declaration "uint local_48;" type_identifier identifier ;) (declaration "uint local_44;" type_identifier identifier ;) (declaration "uint local_40;" type_identifier identifier ;) (declaration "uint local_3c;" type_identifier identifier ;) (declaration "int local_34;" primitive_type identifier ;) (declaration "undefined1 local_2c;" type_identifier identifier ;) (declaration "byte local_2b;" type_identifier identifier ;) (declaration "byte local_2a;" type_identifier identifier ;) (declaration "char local_29;" primitive_type identifier ;) (declaration "int local_24;" primitive_type identifier ;) (declaration "int local_20;" primitive_type identifier ;) (declaration "undefined4 uStack_14;" type_identifier identifier ;) (expression_statement "bVar21 = 0;" (assignment_expression "bVar21 = 0" identifier = number_literal) ;) (expression_statement "uStack_14 = 0x23639;" (assignment_expression "uStack_14 = 0x23639" identifier = number_literal) ;) (expression_statement "__ptr = (int *)*param_1;" (assignment_expression "__ptr = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" identifier = (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;" (assignment_expression "*(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90" (pointer_expression "*(byte *)(param_1 + 7)" * (cast_expression "(byte *)(param_1 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 7)" ( (binary_expression "param_1 + 7" identifier + number_literal) )))) = (binary_expression "*(byte *)(param_1 + 7) & 0x90" (pointer_expression "*(byte *)(param_1 + 7)" * (cast_expression "(byte *)(param_1 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 7)" ( (binary_expression "param_1 + 7" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" identifier = number_literal) ;) (expression_statement "param_1[3] = param_4;" (assignment_expression "param_1[3] = param_4" (subscript_expression "param_1[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }" if (parenthesized_expression "((uint)param_1[1] < 0x88)" ( (binary_expression "(uint)param_1[1] < 0x88" (cast_expression "(uint)param_1[1]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) < number_literal) )) (compound_statement "{\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }" { (expression_statement "__ptr = (int *)realloc(__ptr,0x88);" (assignment_expression "__ptr = (int *)realloc(__ptr,0x88)" identifier = (cast_expression "(int *)realloc(__ptr,0x88)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "realloc(__ptr,0x88)" identifier (argument_list "(__ptr,0x88)" ( identifier , number_literal ))))) ;) (if_statement "if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }" if (parenthesized_expression "(__ptr == (int *)0x0)" ( (binary_expression "__ptr == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }" { (expression_statement "iVar9 = 0xc;" (assignment_expression "iVar9 = 0xc" identifier = number_literal) ;) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;) })) (expression_statement "param_1[1] = 0x88;" (assignment_expression "param_1[1] = 0x88" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*param_1 = (int)__ptr;" (assignment_expression "*param_1 = (int)__ptr" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)__ptr" ( (type_descriptor "int" primitive_type) ) identifier)) ;) })) (expression_statement "param_1[2] = 0x88;" (assignment_expression "param_1[2] = 0x88" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*__ptr = 0;" (assignment_expression "*__ptr = 0" (pointer_expression "*__ptr" * identifier) = number_literal) ;) (expression_statement "__ptr[0x21] = 0;" (assignment_expression "__ptr[0x21] = 0" (subscript_expression "__ptr[0x21]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);" (assignment_expression "puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc)" identifier = (cast_expression "(undefined4 *)((uint)(__ptr + 1) & 0xfffffffc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uint)(__ptr + 1) & 0xfffffffc)" ( (binary_expression "(uint)(__ptr + 1) & 0xfffffffc" (call_expression "(uint)(__ptr + 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(__ptr + 1)" ( (binary_expression "__ptr + 1" identifier + number_literal) ))) & number_literal) )))) ;) (for_statement "for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }" for ( (assignment_expression "uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2" identifier = (binary_expression "(uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2" (call_expression "(uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)))" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)))" ( (binary_expression "(int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))" (cast_expression "(int)__ptr" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))" ( (binary_expression "0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)" number_literal - (cast_expression "(int)((uint)(__ptr + 1) & 0xfffffffc)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((uint)(__ptr + 1) & 0xfffffffc)" ( (binary_expression "(uint)(__ptr + 1) & 0xfffffffc" (call_expression "(uint)(__ptr + 1)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(__ptr + 1)" ( (binary_expression "__ptr + 1" identifier + number_literal) ))) & number_literal) )))) ))) ))) >> number_literal)) ; (binary_expression "uVar17 != 0" identifier != number_literal) ; (assignment_expression "uVar17 = uVar17 - 1" identifier = (binary_expression "uVar17 - 1" identifier - number_literal)) ) (compound_statement "{\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }" { (expression_statement "*puVar23 = 0;" (assignment_expression "*puVar23 = 0" (pointer_expression "*puVar23" * identifier) = number_literal) ;) (expression_statement "puVar23 = puVar23 + (uint)bVar21 * -2 + 1;" (assignment_expression "puVar23 = puVar23 + (uint)bVar21 * -2 + 1" identifier = (binary_expression "puVar23 + (uint)bVar21 * -2 + 1" (binary_expression "puVar23 + (uint)bVar21 * -2" identifier + (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (expression_statement "__ptr[0x10] = 0x1f;" (assignment_expression "__ptr[0x10] = 0x1f" (subscript_expression "__ptr[0x10]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }" if (parenthesized_expression "(param_3 < 0xaaaaaaa)" ( (binary_expression "param_3 < 0xaaaaaaa" identifier < number_literal) )) (compound_statement "{\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }" { (expression_statement "iVar9 = param_3 + 1;" (assignment_expression "iVar9 = param_3 + 1" identifier = (binary_expression "param_3 + 1" identifier + number_literal)) ;) (expression_statement "__ptr[1] = iVar9;" (assignment_expression "__ptr[1] = iVar9" (subscript_expression "__ptr[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pvVar6 = malloc(iVar9 * 8);" (assignment_expression "pvVar6 = malloc(iVar9 * 8)" identifier = (call_expression "malloc(iVar9 * 8)" identifier (argument_list "(iVar9 * 8)" ( (binary_expression "iVar9 * 8" identifier * number_literal) )))) ;) (expression_statement "*__ptr = (int)pvVar6;" (assignment_expression "*__ptr = (int)pvVar6" (pointer_expression "*__ptr" * identifier) = (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n      iVar18 = 0;\n      uVar17 = 1;\n    }" { (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (expression_statement "uVar17 = 1;" (assignment_expression "uVar17 = 1" identifier = number_literal) ;) }) (else_clause "else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" else (compound_statement "{\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" { (expression_statement "uVar17 = 1;" (assignment_expression "uVar17 = 1" identifier = number_literal) ;) (do_statement "do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);" do (compound_statement "{\n        uVar17 = uVar17 * 2;\n      }" { (expression_statement "uVar17 = uVar17 * 2;" (assignment_expression "uVar17 = uVar17 * 2" identifier = (binary_expression "uVar17 * 2" identifier * number_literal)) ;) }) while (parenthesized_expression "(uVar17 <= param_3)" ( (binary_expression "uVar17 <= param_3" identifier <= identifier) )) ;) (expression_statement "iVar18 = uVar17 - 1;" (assignment_expression "iVar18 = uVar17 - 1" identifier = (binary_expression "uVar17 - 1" identifier - number_literal)) ;) }))) (expression_statement "pvVar6 = calloc(0xc,uVar17);" (assignment_expression "pvVar6 = calloc(0xc,uVar17)" identifier = (call_expression "calloc(0xc,uVar17)" identifier (argument_list "(0xc,uVar17)" ( number_literal , identifier )))) ;) (expression_statement "__ptr[0x11] = iVar18;" (assignment_expression "__ptr[0x11] = iVar18" (subscript_expression "__ptr[0x11]" identifier [ number_literal ]) = identifier) ;) (expression_statement "__ptr[8] = (int)pvVar6;" (assignment_expression "__ptr[8] = (int)pvVar6" (subscript_expression "__ptr[8]" identifier [ number_literal ]) = (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "sVar7 = __ctype_get_mb_cur_max();" (assignment_expression "sVar7 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;) (expression_statement "__ptr[0x17] = sVar7;" (assignment_expression "__ptr[0x17] = sVar7" (subscript_expression "__ptr[0x17]" identifier [ number_literal ]) = identifier) ;) (expression_statement "pbVar8 = (byte *)nl_langinfo(0xe);" (assignment_expression "pbVar8 = (byte *)nl_langinfo(0xe)" identifier = (cast_expression "(byte *)nl_langinfo(0xe)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "nl_langinfo(0xe)" identifier (argument_list "(0xe)" ( number_literal ))))) ;) (if_statement "if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }" if (parenthesized_expression "((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       )" ( (binary_expression "(((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)" (parenthesized_expression "(((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54))" ( (binary_expression "((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)" (parenthesized_expression "((*pbVar8 & 0xdf) == 0x55)" ( (binary_expression "(*pbVar8 & 0xdf) == 0x55" (parenthesized_expression "(*pbVar8 & 0xdf)" ( (binary_expression "*pbVar8 & 0xdf" (pointer_expression "*pbVar8" * identifier) & number_literal) )) == number_literal) )) && (parenthesized_expression "((pbVar8[1] & 0xdf) == 0x54)" ( (binary_expression "(pbVar8[1] & 0xdf) == 0x54" (parenthesized_expression "(pbVar8[1] & 0xdf)" ( (binary_expression "pbVar8[1] & 0xdf" (subscript_expression "pbVar8[1]" identifier [ number_literal ]) & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((pbVar8[2] & 0xdf) == 0x46)" ( (binary_expression "(pbVar8[2] & 0xdf) == 0x46" (parenthesized_expression "(pbVar8[2] & 0xdf)" ( (binary_expression "pbVar8[2] & 0xdf" (subscript_expression "pbVar8[2]" identifier [ number_literal ]) & number_literal) )) == number_literal) ))) )) (compound_statement "{\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }" { (expression_statement "bVar26 = pbVar8[3] < 0x2d;" (assignment_expression "bVar26 = pbVar8[3] < 0x2d" identifier = (binary_expression "pbVar8[3] < 0x2d" (subscript_expression "pbVar8[3]" identifier [ number_literal ]) < number_literal)) ;) (expression_statement "bVar27 = pbVar8[3] == 0x2d;" (assignment_expression "bVar27 = pbVar8[3] == 0x2d" identifier = (binary_expression "pbVar8[3] == 0x2d" (subscript_expression "pbVar8[3]" identifier [ number_literal ]) == number_literal)) ;) (expression_statement "iVar18 = 2;" (assignment_expression "iVar18 = 2" identifier = number_literal) ;) (expression_statement "pbVar8 = pbVar8 + bVar27 + 3;" (assignment_expression "pbVar8 = pbVar8 + bVar27 + 3" identifier = (binary_expression "pbVar8 + bVar27 + 3" (binary_expression "pbVar8 + bVar27" identifier + identifier) + number_literal)) ;) (expression_statement "pbVar24 = &DAT_00027a0a;" (assignment_expression "pbVar24 = &DAT_00027a0a" identifier = (pointer_expression "&DAT_00027a0a" & identifier)) ;) (do_statement "do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);" do (compound_statement "{\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      }" { (if_statement "if (iVar18 == 0) break;" if (parenthesized_expression "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ;) (expression_statement "bVar26 = *pbVar8 < *pbVar24;" (assignment_expression "bVar26 = *pbVar8 < *pbVar24" identifier = (binary_expression "*pbVar8 < *pbVar24" (pointer_expression "*pbVar8" * identifier) < (pointer_expression "*pbVar24" * identifier))) ;) (expression_statement "bVar27 = *pbVar8 == *pbVar24;" (assignment_expression "bVar27 = *pbVar8 == *pbVar24" identifier = (binary_expression "*pbVar8 == *pbVar24" (pointer_expression "*pbVar8" * identifier) == (pointer_expression "*pbVar24" * identifier))) ;) (expression_statement "pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1" identifier = (binary_expression "pbVar8 + (uint)bVar21 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar21 * -2" identifier + (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;" (assignment_expression "pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1" identifier = (binary_expression "pbVar24 + (uint)bVar21 * -2 + 1" (binary_expression "pbVar24 + (uint)bVar21 * -2" identifier + (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar27)" ( identifier )) ;) (if_statement "if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }" if (parenthesized_expression "((!bVar26 && !bVar27) == bVar26)" ( (binary_expression "(!bVar26 && !bVar27) == bVar26" (parenthesized_expression "(!bVar26 && !bVar27)" ( (binary_expression "!bVar26 && !bVar27" (unary_expression "!bVar26" ! identifier) && (unary_expression "!bVar27" ! identifier)) )) == identifier) )) (compound_statement "{\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }" { (expression_statement "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;" (assignment_expression "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) = (binary_expression "*(byte *)(__ptr + 0x16) | 4" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) | number_literal)) ;) })) })) (expression_statement "bVar2 = *(byte *)(__ptr + 0x16);" (assignment_expression "bVar2 = *(byte *)(__ptr + 0x16)" identifier = (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) ))))) ;) (expression_statement "*(byte *)(__ptr + 0x16) = bVar2 & 0xf7;" (assignment_expression "*(byte *)(__ptr + 0x16) = bVar2 & 0xf7" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) = (binary_expression "bVar2 & 0xf7" identifier & number_literal)) ;) (if_statement "if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }" if (parenthesized_expression "(1 < __ptr[0x17])" ( (binary_expression "1 < __ptr[0x17]" number_literal < (subscript_expression "__ptr[0x17]" identifier [ number_literal ])) )) (compound_statement "{\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }" { (if_statement "if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" if (parenthesized_expression "((bVar2 & 4) == 0)" ( (binary_expression "(bVar2 & 4) == 0" (parenthesized_expression "(bVar2 & 4)" ( (binary_expression "bVar2 & 4" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }" { (expression_statement "pvVar6 = calloc(0x20,1);" (assignment_expression "pvVar6 = calloc(0x20,1)" identifier = (call_expression "calloc(0x20,1)" identifier (argument_list "(0x20,1)" ( number_literal , number_literal )))) ;) (expression_statement "__ptr[0xf] = (int)pvVar6;" (assignment_expression "__ptr[0xf] = (int)pvVar6" (subscript_expression "__ptr[0xf]" identifier [ number_literal ]) = (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (pvVar6 == (void *)0x0) goto LAB_00023fc0;" if (parenthesized_expression "(pvVar6 == (void *)0x0)" ( (binary_expression "pvVar6 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00023fc0;" goto statement_identifier ;)) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (do_statement "do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);" do (compound_statement "{\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        }" { (expression_statement "uVar17 = iVar18 * 8;" (assignment_expression "uVar17 = iVar18 * 8" identifier = (binary_expression "iVar18 * 8" identifier * number_literal)) ;) (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" identifier = number_literal) ;) (do_statement "do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);" do (compound_statement "{\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          }" { (while_statement "while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }" { (expression_statement "wVar15 = btowc(uVar17);" (assignment_expression "wVar15 = btowc(uVar17)" identifier = (call_expression "btowc(uVar17)" identifier (argument_list "(uVar17)" ( identifier )))) ;) (if_statement "if (wVar15 != 0xffffffff) break;" if (parenthesized_expression "(wVar15 != 0xffffffff)" ( (binary_expression "wVar15 != 0xffffffff" identifier != number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }" if (parenthesized_expression "((uVar17 & 0xffffff80) == 0)" ( (binary_expression "(uVar17 & 0xffffff80) == 0" (parenthesized_expression "(uVar17 & 0xffffff80)" ( (binary_expression "uVar17 & 0xffffff80" identifier & number_literal) )) == number_literal) )) (compound_statement "{\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }" { (labeled_statement "LAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;" statement_identifier : (expression_statement "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;" (assignment_expression "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) = (binary_expression "*(byte *)(__ptr + 0x16) | 8" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) | number_literal)) ;)) })) (labeled_statement "LAB_000240b4:\n              iVar19 = iVar19 + 1;" statement_identifier : (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;)) (expression_statement "uVar17 = uVar17 + 1;" (assignment_expression "uVar17 = uVar17 + 1" identifier = (binary_expression "uVar17 + 1" identifier + number_literal)) ;) (if_statement "if (iVar19 == 0x20) goto LAB_00024110;" if (parenthesized_expression "(iVar19 == 0x20)" ( (binary_expression "iVar19 == 0x20" identifier == number_literal) )) (goto_statement "goto LAB_00024110;" goto statement_identifier ;)) })) (expression_statement "*(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);" (assignment_expression "*(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f)" (pointer_expression "*(uint *)(__ptr[0xf] + iVar18)" * (cast_expression "(uint *)(__ptr[0xf] + iVar18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr[0xf] + iVar18)" ( (binary_expression "__ptr[0xf] + iVar18" (subscript_expression "__ptr[0xf]" identifier [ number_literal ]) + identifier) )))) = (binary_expression "*(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f)" (pointer_expression "*(uint *)(__ptr[0xf] + iVar18)" * (cast_expression "(uint *)(__ptr[0xf] + iVar18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr[0xf] + iVar18)" ( (binary_expression "__ptr[0xf] + iVar18" (subscript_expression "__ptr[0xf]" identifier [ number_literal ]) + identifier) )))) | (binary_expression "1 << ((byte)iVar19 & 0x1f)" number_literal << (parenthesized_expression "((byte)iVar19 & 0x1f)" ( (binary_expression "(byte)iVar19 & 0x1f" (cast_expression "(byte)iVar19" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))))) ;) (if_statement "if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;" if (parenthesized_expression "((uVar17 & 0xffffff80) != 0)" ( (binary_expression "(uVar17 & 0xffffff80) != 0" (parenthesized_expression "(uVar17 & 0xffffff80)" ( (binary_expression "uVar17 & 0xffffff80" identifier & number_literal) )) != number_literal) )) (goto_statement "goto LAB_000240b4;" goto statement_identifier ;)) (if_statement "if (wVar15 != uVar17) goto LAB_000240ac;" if (parenthesized_expression "(wVar15 != uVar17)" ( (binary_expression "wVar15 != uVar17" identifier != identifier) )) (goto_statement "goto LAB_000240ac;" goto statement_identifier ;)) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) (expression_statement "uVar17 = uVar17 + 1;" (assignment_expression "uVar17 = uVar17 + 1" identifier = (binary_expression "uVar17 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 != 0x20)" ( (binary_expression "iVar19 != 0x20" identifier != number_literal) )) ;) (labeled_statement "LAB_00024110:\n          iVar18 = iVar18 + 4;" statement_identifier : (expression_statement "iVar18 = iVar18 + 4;" (assignment_expression "iVar18 = iVar18 + 4" identifier = (binary_expression "iVar18 + 4" identifier + number_literal)) ;)) }) while (parenthesized_expression "(iVar18 != 0x20)" ( (binary_expression "iVar18 != 0x20" identifier != number_literal) )) ;) }) (else_clause "else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" else (compound_statement "{\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" { (expression_statement "__ptr[0xf] = (int)&DAT_00027f60;" (assignment_expression "__ptr[0xf] = (int)&DAT_00027f60" (subscript_expression "__ptr[0xf]" identifier [ number_literal ]) = (cast_expression "(int)&DAT_00027f60" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&DAT_00027f60" & identifier))) ;) }))) })) (if_statement "if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }" if (parenthesized_expression "((*__ptr != 0) && (__ptr[8] != 0))" ( (binary_expression "(*__ptr != 0) && (__ptr[8] != 0)" (parenthesized_expression "(*__ptr != 0)" ( (binary_expression "*__ptr != 0" (pointer_expression "*__ptr" * identifier) != number_literal) )) && (parenthesized_expression "(__ptr[8] != 0)" ( (binary_expression "__ptr[8] != 0" (subscript_expression "__ptr[8]" identifier [ number_literal ]) != number_literal) ))) )) (compound_statement "{\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }" { (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" identifier = number_literal) ;) (expression_statement "iVar18 = param_1[5];" (assignment_expression "iVar18 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (expression_statement "piVar20 = local_70;" (assignment_expression "piVar20 = local_70" identifier = identifier) ;) (for_statement "for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }" for ( (assignment_expression "iVar19 = 0x13" identifier = number_literal) ; (binary_expression "iVar19 != 0" identifier != number_literal) ; (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ) (compound_statement "{\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }" { (expression_statement "*piVar20 = 0;" (assignment_expression "*piVar20 = 0" (pointer_expression "*piVar20" * identifier) = number_literal) ;) (expression_statement "piVar20 = piVar20 + (uint)bVar21 * -2 + 1;" (assignment_expression "piVar20 = piVar20 + (uint)bVar21 * -2 + 1" identifier = (binary_expression "piVar20 + (uint)bVar21 * -2 + 1" (binary_expression "piVar20 + (uint)bVar21 * -2" identifier + (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" ( (type_descriptor "uint" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) })) (expression_statement "uVar17 = param_4 & 0x400000;" (assignment_expression "uVar17 = param_4 & 0x400000" identifier = (binary_expression "param_4 & 0x400000" identifier & number_literal)) ;) (expression_statement "local_2c = uVar17 != 0;" (assignment_expression "local_2c = uVar17 != 0" identifier = (binary_expression "uVar17 != 0" identifier != number_literal)) ;) (expression_statement "iVar19 = __ptr[0x17];" (assignment_expression "iVar19 = __ptr[0x17]" identifier = (subscript_expression "__ptr[0x17]" identifier [ number_literal ])) ;) (expression_statement "local_29 = iVar18 != 0 || uVar17 != 0;" (assignment_expression "local_29 = iVar18 != 0 || uVar17 != 0" identifier = (binary_expression "iVar18 != 0 || uVar17 != 0" (binary_expression "iVar18 != 0" identifier != number_literal) || (binary_expression "uVar17 != 0" identifier != number_literal))) ;) (expression_statement "local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;" (assignment_expression "local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1" identifier = (binary_expression "*(byte *)(__ptr + 0x16) >> 3 & 1" (binary_expression "*(byte *)(__ptr + 0x16) >> 3" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;" (assignment_expression "local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1" identifier = (binary_expression "*(byte *)(__ptr + 0x16) >> 2 & 1" (binary_expression "*(byte *)(__ptr + 0x16) >> 2" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) >> number_literal) & number_literal)) ;) (expression_statement "local_74 = param_2;" (assignment_expression "local_74 = param_2" identifier = identifier) ;) (expression_statement "local_48 = param_3;" (assignment_expression "local_48 = param_3" identifier = identifier) ;) (expression_statement "local_44 = param_3;" (assignment_expression "local_44 = param_3" identifier = identifier) ;) (expression_statement "local_40 = param_3;" (assignment_expression "local_40 = param_3" identifier = identifier) ;) (expression_statement "local_3c = param_3;" (assignment_expression "local_3c = param_3" identifier = identifier) ;) (expression_statement "local_34 = iVar18;" (assignment_expression "local_34 = iVar18" identifier = identifier) ;) (expression_statement "local_24 = iVar19;" (assignment_expression "local_24 = iVar19" identifier = identifier) ;) (if_statement "if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }" { (labeled_statement "LAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }" statement_identifier : (if_statement "if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }" if (parenthesized_expression "(local_29 != '\0')" ( (binary_expression "local_29 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n          param_2 = local_70[0];\n        }" { (expression_statement "param_2 = local_70[0];" (assignment_expression "param_2 = local_70[0]" identifier = (subscript_expression "local_70[0]" identifier [ number_literal ])) ;) }))) (expression_statement "local_70[0] = param_2;" (assignment_expression "local_70[0] = param_2" (subscript_expression "local_70[0]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" if (parenthesized_expression "(uVar17 == 0)" ( (binary_expression "uVar17 == 0" identifier == number_literal) )) (compound_statement "{\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }" { (if_statement "if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }" if (parenthesized_expression "(iVar19 < 2)" ( (binary_expression "iVar19 < 2" identifier < number_literal) )) (compound_statement "{\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }" { (expression_statement "uVar22 = local_50;" (assignment_expression "uVar22 = local_50" identifier = identifier) ;) (expression_statement "local_54 = local_50;" (assignment_expression "local_54 = local_50" identifier = identifier) ;) (if_statement "if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }" if (parenthesized_expression "(iVar18 != 0)" ( (binary_expression "iVar18 != 0" identifier != number_literal) )) (compound_statement "{\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }" { (if_statement "if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }" if (parenthesized_expression "((int)local_44 <= (int)local_50)" ( (binary_expression "(int)local_44 <= (int)local_50" (cast_expression "(int)local_44" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                local_50 = local_44;\n              }" { (expression_statement "local_50 = local_44;" (assignment_expression "local_50 = local_44" identifier = identifier) ;) })) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" identifier = identifier) ;) (expression_statement "local_54 = local_58;" (assignment_expression "local_54 = local_58" identifier = identifier) ;) (if_statement "if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }" if (parenthesized_expression "((int)local_58 < (int)local_50)" ( (binary_expression "(int)local_58 < (int)local_50" (cast_expression "(int)local_58" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }" { (do_statement "do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);" do (compound_statement "{\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                }" { (expression_statement "*(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));" (assignment_expression "*(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" (pointer_expression "*(undefined1 *)(param_2 + local_58)" * (cast_expression "(undefined1 *)(param_2 + local_58)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + local_58)" ( (binary_expression "param_2 + local_58" identifier + identifier) )))) = (pointer_expression "*(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" * (cast_expression "(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" ( (binary_expression "local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c)" identifier + (binary_expression "(uint)*(byte *)(local_74 + local_58 + local_5c)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(local_74 + local_58 + local_5c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_74 + local_58 + local_5c)" ( (binary_expression "local_74 + local_58 + local_5c" (binary_expression "local_74 + local_58" identifier + identifier) + identifier) ))))) ))))) ;) (expression_statement "local_58 = local_58 + 1;" (assignment_expression "local_58 = local_58 + 1" identifier = (binary_expression "local_58 + 1" identifier + number_literal)) ;) (expression_statement "uVar22 = local_50;" (assignment_expression "uVar22 = local_50" identifier = identifier) ;) (expression_statement "local_54 = local_50;" (assignment_expression "local_54 = local_50" identifier = identifier) ;) }) while (parenthesized_expression "(local_50 != local_58)" ( (binary_expression "local_50 != local_58" identifier != identifier) )) ;) })) })) }) (else_clause "else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }" else (compound_statement "{\n            FUN_00017860();\n            uVar22 = local_58;\n          }" { (expression_statement "FUN_00017860();" (call_expression "FUN_00017860()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" identifier = identifier) ;) }))) }) (else_clause "else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" else (compound_statement "{\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" { (if_statement "if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }" if (parenthesized_expression "(1 < iVar19)" ( (binary_expression "1 < iVar19" number_literal < identifier) )) (compound_statement "{\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }" { (do_statement "do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);" do (compound_statement "{\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            }" { (expression_statement "iVar9 = FUN_00017a40(&local_74);" (assignment_expression "iVar9 = FUN_00017a40(&local_74)" identifier = (call_expression "FUN_00017a40(&local_74)" identifier (argument_list "(&local_74)" ( (pointer_expression "&local_74" & identifier) )))) ;) (if_statement "if (iVar9 != 0) break;" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" identifier = identifier) ;) (if_statement "if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;" if (parenthesized_expression "(((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 )" ( (binary_expression "((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)" (parenthesized_expression "((int)param_3 <= (int)local_54)" ( (binary_expression "(int)param_3 <= (int)local_54" (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)local_54" ( (type_descriptor "int" primitive_type) ) identifier)) )) || (parenthesized_expression "((int)(__ptr[0x17] + local_58) < (int)local_50)" ( (binary_expression "(int)(__ptr[0x17] + local_58) < (int)local_50" (cast_expression "(int)(__ptr[0x17] + local_58)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(__ptr[0x17] + local_58)" ( (binary_expression "__ptr[0x17] + local_58" (subscript_expression "__ptr[0x17]" identifier [ number_literal ]) + identifier) ))) < (cast_expression "(int)local_50" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (goto_statement "goto LAB_00023966;" goto statement_identifier ;)) (expression_statement "iVar9 = FUN_000174a0(&local_74,local_50 * 2);" (assignment_expression "iVar9 = FUN_000174a0(&local_74,local_50 * 2)" identifier = (call_expression "FUN_000174a0(&local_74,local_50 * 2)" identifier (argument_list "(&local_74,local_50 * 2)" ( (pointer_expression "&local_74" & identifier) , (binary_expression "local_50 * 2" identifier * number_literal) )))) ;) }) while (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) ;) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "FUN_000177e0();" (call_expression "FUN_000177e0()" identifier (argument_list "()" ( ))) ;) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" identifier = identifier) ;) }))) (labeled_statement "LAB_00023966:\n        local_58 = uVar22;" statement_identifier : (expression_statement "local_58 = uVar22;" (assignment_expression "local_58 = uVar22" identifier = identifier) ;)) (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" identifier = number_literal) ;) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(uint *)(*param_1 + 0x80) = param_4;" (assignment_expression "*(uint *)(*param_1 + 0x80) = param_4" (pointer_expression "*(uint *)(*param_1 + 0x80)" * (cast_expression "(uint *)(*param_1 + 0x80)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x80)" ( (binary_expression "*param_1 + 0x80" (pointer_expression "*param_1" * identifier) + number_literal) )))) = identifier) ;) (expression_statement "iVar9 = FUN_00021720();" (assignment_expression "iVar9 = FUN_00021720()" identifier = (call_expression "FUN_00021720()" identifier (argument_list "()" ( )))) ;) (expression_statement "local_4c = local_4c + iVar9;" (assignment_expression "local_4c = local_4c + iVar9" identifier = (binary_expression "local_4c + iVar9" identifier + identifier)) ;) (expression_statement "iVar9 = FUN_000234b0(param_4,0,&local_8c);" (assignment_expression "iVar9 = FUN_000234b0(param_4,0,&local_8c)" identifier = (call_expression "FUN_000234b0(param_4,0,&local_8c)" identifier (argument_list "(param_4,0,&local_8c)" ( identifier , number_literal , (pointer_expression "&local_8c" & identifier) )))) ;) (if_statement "if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" if (parenthesized_expression "(local_8c == 0)" ( (binary_expression "local_8c == 0" identifier == number_literal) )) (compound_statement "{\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }" { (expression_statement "local_7c = CONCAT31(local_7c._1_3_,2);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,2)" identifier = (call_expression "CONCAT31(local_7c._1_3_,2)" identifier (argument_list "(local_7c._1_3_,2)" ( (field_expression "local_7c._1_3_" identifier . field_identifier) , number_literal )))) ;) (expression_statement "iVar18 = FUN_00019970(0,local_80);" (assignment_expression "iVar18 = FUN_00019970(0,local_80)" identifier = (call_expression "FUN_00019970(0,local_80)" identifier (argument_list "(0,local_80)" ( number_literal , identifier )))) ;) (expression_statement "iVar10 = iVar18;" (assignment_expression "iVar10 = iVar18" identifier = identifier) ;) (if_statement "if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }" { (labeled_statement "LAB_000239ff:\n            local_ac = local_80;" statement_identifier : (expression_statement "local_ac = local_80;" (assignment_expression "local_ac = local_80" identifier = identifier) ;)) (expression_statement "local_7c = CONCAT31(local_7c._1_3_,0x10);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,0x10)" identifier = (call_expression "CONCAT31(local_7c._1_3_,0x10)" identifier (argument_list "(local_7c._1_3_,0x10)" ( (field_expression "local_7c._1_3_" identifier . field_identifier) , number_literal )))) ;) (expression_statement "iVar10 = FUN_00019970(iVar18,local_ac);" (assignment_expression "iVar10 = FUN_00019970(iVar18,local_ac)" identifier = (call_expression "FUN_00019970(iVar18,local_ac)" identifier (argument_list "(iVar18,local_ac)" ( identifier , identifier )))) ;) })) (expression_statement "local_ac = local_80;" (assignment_expression "local_ac = local_80" identifier = identifier) ;) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" if (parenthesized_expression "(iVar18 == 0 || iVar10 == 0)" ( (binary_expression "iVar18 == 0 || iVar10 == 0" (binary_expression "iVar18 == 0" identifier == number_literal) || (binary_expression "iVar10 == 0" identifier == number_literal)) )) (compound_statement "{\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }" { (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" identifier = number_literal) ;) (expression_statement "__ptr[0xd] = 0;" (assignment_expression "__ptr[0xd] = 0" (subscript_expression "__ptr[0xd]" identifier [ number_literal ]) = number_literal) ;) }) (else_clause "else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" else (compound_statement "{\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" { (expression_statement "__ptr[0xd] = iVar10;" (assignment_expression "__ptr[0xd] = iVar10" (subscript_expression "__ptr[0xd]" identifier [ number_literal ]) = identifier) ;) (expression_statement "sVar7 = *(int *)(iVar19 + 4) * 4;" (assignment_expression "sVar7 = *(int *)(iVar19 + 4) * 4" identifier = (binary_expression "*(int *)(iVar19 + 4) * 4" (pointer_expression "*(int *)(iVar19 + 4)" * (cast_expression "(int *)(iVar19 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 4)" ( (binary_expression "iVar19 + 4" identifier + number_literal) )))) * number_literal)) ;) (expression_statement "__size = *(int *)(iVar19 + 4) * 0xc;" (assignment_expression "__size = *(int *)(iVar19 + 4) * 0xc" identifier = (binary_expression "*(int *)(iVar19 + 4) * 0xc" (pointer_expression "*(int *)(iVar19 + 4)" * (cast_expression "(int *)(iVar19 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 4)" ( (binary_expression "iVar19 + 4" identifier + number_literal) )))) * number_literal)) ;) (expression_statement "pvVar6 = malloc(sVar7);" (assignment_expression "pvVar6 = malloc(sVar7)" identifier = (call_expression "malloc(sVar7)" identifier (argument_list "(sVar7)" ( identifier )))) ;) (expression_statement "*(void **)(iVar19 + 0xc) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0xc) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0xc)" * (cast_expression "(void **)(iVar19 + 0xc)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0xc)" ( (binary_expression "iVar19 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "pvVar11 = malloc(sVar7);" (assignment_expression "pvVar11 = malloc(sVar7)" identifier = (call_expression "malloc(sVar7)" identifier (argument_list "(sVar7)" ( identifier )))) ;) (expression_statement "*(void **)(iVar19 + 0x10) = pvVar11;" (assignment_expression "*(void **)(iVar19 + 0x10) = pvVar11" (pointer_expression "*(void **)(iVar19 + 0x10)" * (cast_expression "(void **)(iVar19 + 0x10)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x10)" ( (binary_expression "iVar19 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "pvVar12 = malloc(__size);" (assignment_expression "pvVar12 = malloc(__size)" identifier = (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier )))) ;) (expression_statement "*(void **)(iVar19 + 0x14) = pvVar12;" (assignment_expression "*(void **)(iVar19 + 0x14) = pvVar12" (pointer_expression "*(void **)(iVar19 + 0x14)" * (cast_expression "(void **)(iVar19 + 0x14)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x14)" ( (binary_expression "iVar19 + 0x14" identifier + number_literal) )))) = identifier) ;) (expression_statement "pvVar13 = malloc(__size);" (assignment_expression "pvVar13 = malloc(__size)" identifier = (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier )))) ;) (expression_statement "*(void **)(iVar19 + 0x18) = pvVar13;" (assignment_expression "*(void **)(iVar19 + 0x18) = pvVar13" (pointer_expression "*(void **)(iVar19 + 0x18)" * (cast_expression "(void **)(iVar19 + 0x18)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }" if (parenthesized_expression "((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0))" ( (binary_expression "(((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)" (parenthesized_expression "(((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))" ( (binary_expression "((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0)" (parenthesized_expression "((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0))" ( (binary_expression "(pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)" (parenthesized_expression "(pvVar6 != (void *)0x0)" ( (binary_expression "pvVar6 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(pvVar11 != (void *)0x0)" ( (binary_expression "pvVar11 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) && (parenthesized_expression "(pvVar12 != (void *)0x0)" ( (binary_expression "pvVar12 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) && (parenthesized_expression "(pvVar13 != (void *)0x0)" ( (binary_expression "pvVar13 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }" { (expression_statement "iVar9 = param_1[6];" (assignment_expression "iVar9 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (expression_statement "pvVar6 = malloc(iVar9 * 4);" (assignment_expression "pvVar6 = malloc(iVar9 * 4)" identifier = (call_expression "malloc(iVar9 * 4)" identifier (argument_list "(iVar9 * 4)" ( (binary_expression "iVar9 * 4" identifier * number_literal) )))) ;) (expression_statement "*(void **)(iVar19 + 0x84) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0x84) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0x84)" * (cast_expression "(void **)(iVar19 + 0x84)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x84)" ( (binary_expression "iVar19 + 0x84" identifier + number_literal) )))) = identifier) ;) (if_statement "if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }" if (parenthesized_expression "(pvVar6 != (void *)0x0)" ( (binary_expression "pvVar6 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }" { (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (if_statement "if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }" { (do_statement "do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);" do (compound_statement "{\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  }" { (expression_statement "*(int *)((int)pvVar6 + iVar18 * 4) = iVar18;" (assignment_expression "*(int *)((int)pvVar6 + iVar18 * 4) = iVar18" (pointer_expression "*(int *)((int)pvVar6 + iVar18 * 4)" * (cast_expression "(int *)((int)pvVar6 + iVar18 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar6 + iVar18 * 4)" ( (binary_expression "(int)pvVar6 + iVar18 * 4" (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar18 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 != iVar9)" ( (binary_expression "iVar18 != iVar9" identifier != identifier) )) ;) })) (expression_statement "FUN_000190d0();" (call_expression "FUN_000190d0()" identifier (argument_list "()" ( ))) ;) (if_statement "if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" if (parenthesized_expression "(param_1[6] == 0)" ( (binary_expression "param_1[6] == 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }" { (expression_statement "piVar20 = *(int **)(iVar19 + 0x84);" (assignment_expression "piVar20 = *(int **)(iVar19 + 0x84)" identifier = (pointer_expression "*(int **)(iVar19 + 0x84)" * (cast_expression "(int **)(iVar19 + 0x84)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x84)" ( (binary_expression "iVar19 + 0x84" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00023b4c:\n                  free(piVar20);" statement_identifier : (expression_statement "free(piVar20);" (call_expression "free(piVar20)" identifier (argument_list "(piVar20)" ( identifier ))) ;)) (expression_statement "*(undefined4 *)(iVar19 + 0x84) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x84) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x84)" * (cast_expression "(undefined4 *)(iVar19 + 0x84)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x84)" ( (binary_expression "iVar19 + 0x84" identifier + number_literal) )))) = number_literal) ;) }) (else_clause "else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" else (compound_statement "{\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" { (expression_statement "piVar20 = *(int **)(iVar19 + 0x84);" (assignment_expression "piVar20 = *(int **)(iVar19 + 0x84)" identifier = (pointer_expression "*(int **)(iVar19 + 0x84)" * (cast_expression "(int **)(iVar19 + 0x84)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x84)" ( (binary_expression "iVar19 + 0x84" identifier + number_literal) ))))) ;) (expression_statement "iVar9 = *piVar20;" (assignment_expression "iVar9 = *piVar20" identifier = (pointer_expression "*piVar20" * identifier)) ;) (if_statement "if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }" { (do_statement "do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);" do (compound_statement "{\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    }" { (expression_statement "iVar9 = iVar9 + 1;" (assignment_expression "iVar9 = iVar9 + 1" identifier = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (if_statement "if (iVar9 == param_1[6]) goto LAB_00023b4c;" if (parenthesized_expression "(iVar9 == param_1[6])" ( (binary_expression "iVar9 == param_1[6]" identifier == (subscript_expression "param_1[6]" identifier [ number_literal ])) )) (goto_statement "goto LAB_00023b4c;" goto statement_identifier ;)) }) while (parenthesized_expression "(piVar20[iVar9] == iVar9)" ( (binary_expression "piVar20[iVar9] == iVar9" (subscript_expression "piVar20[iVar9]" identifier [ identifier ]) == identifier) )) ;) })) }))) })) (expression_statement "iVar9 = FUN_00017080();" (assignment_expression "iVar9 = FUN_00017080()" identifier = (call_expression "FUN_00017080()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }" if (parenthesized_expression "((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0))" ( (binary_expression "(iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)" (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) && (parenthesized_expression "(iVar9 = FUN_00017080(), iVar9 == 0)" ( (comma_expression "iVar9 = FUN_00017080(), iVar9 == 0" (assignment_expression "iVar9 = FUN_00017080()" identifier = (call_expression "FUN_00017080()" identifier (argument_list "()" ( )))) , (binary_expression "iVar9 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }" { (expression_statement "FUN_000190d0();" (call_expression "FUN_000190d0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar9 = FUN_000190d0();" (assignment_expression "iVar9 = FUN_000190d0()" identifier = (call_expression "FUN_000190d0()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }" { (expression_statement "bVar26 = false;" (assignment_expression "bVar26 = false" identifier = false) ;) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) (do_statement "do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );" do (compound_statement "{\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  }" { (if_statement "if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;" if (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" ( (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" * (cast_expression "(int *)(iVar19 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_00023bfe;" goto statement_identifier ;)) (labeled_statement "LAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" statement_identifier : (while_statement "while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" { (expression_statement "iVar10 = iVar18 * 0xc;" (assignment_expression "iVar10 = iVar18 * 0xc" identifier = (binary_expression "iVar18 * 0xc" identifier * number_literal)) ;) (if_statement "if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;" if (parenthesized_expression "(*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)" ( (binary_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0" (pointer_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" * (cast_expression "(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar19 + 0x18) + 4 + iVar10)" ( (binary_expression "*(int *)(iVar19 + 0x18) + 4 + iVar10" (binary_expression "*(int *)(iVar19 + 0x18) + 4" (pointer_expression "*(int *)(iVar19 + 0x18)" * (cast_expression "(int *)(iVar19 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) )))) + number_literal) + identifier) )))) != number_literal) )) (goto_statement "goto code_r0x00023bf6;" goto statement_identifier ;)) (expression_statement "iVar9 = FUN_00019310(1);" (assignment_expression "iVar9 = FUN_00019310(1)" identifier = (call_expression "FUN_00019310(1)" identifier (argument_list "(1)" ( number_literal )))) ;) (if_statement "if (iVar9 != 0) goto LAB_00023d90;" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;)) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) (if_statement "if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;" if (parenthesized_expression "(*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)" ( (binary_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0" (pointer_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" * (cast_expression "(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(iVar19 + 0x18) + 4 + iVar10)" ( (binary_expression "*(int *)(iVar19 + 0x18) + 4 + iVar10" (binary_expression "*(int *)(iVar19 + 0x18) + 4" (pointer_expression "*(int *)(iVar19 + 0x18)" * (cast_expression "(int *)(iVar19 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) )))) + number_literal) + identifier) )))) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "bVar26 = true;" (assignment_expression "bVar26 = true" identifier = true) ;) (if_statement "if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;" if (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" ( (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" * (cast_expression "(int *)(iVar19 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) == identifier) )) (goto_statement "goto LAB_00023c09;" goto statement_identifier ;)) }))) }) while (parenthesized_expression "( true )" ( true )) ;) })) })) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" identifier = number_literal) ;) }))) }) (else_clause "else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" else (compound_statement "{\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" { (if_statement "if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }" { (expression_statement "local_7c = CONCAT31(local_7c._1_3_,2);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,2)" identifier = (call_expression "CONCAT31(local_7c._1_3_,2)" identifier (argument_list "(local_7c._1_3_,2)" ( (field_expression "local_7c._1_3_" identifier . field_identifier) , number_literal )))) ;) (expression_statement "iVar18 = FUN_00019970(0,local_80);" (assignment_expression "iVar18 = FUN_00019970(0,local_80)" identifier = (call_expression "FUN_00019970(0,local_80)" identifier (argument_list "(0,local_80)" ( number_literal , identifier )))) ;) (goto_statement "goto LAB_000239ff;" goto statement_identifier ;) })) (expression_statement "__ptr[0xd] = 0;" (assignment_expression "__ptr[0xd] = 0" (subscript_expression "__ptr[0xd]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) }))) }) (else_clause "else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" else (compound_statement "{\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" { (expression_statement "iVar9 = FUN_000174a0(&local_74,iVar9);" (assignment_expression "iVar9 = FUN_000174a0(&local_74,iVar9)" identifier = (call_expression "FUN_000174a0(&local_74,iVar9)" identifier (argument_list "(&local_74,iVar9)" ( (pointer_expression "&local_74" & identifier) , identifier )))) ;) (if_statement "if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }" { (expression_statement "iVar19 = __ptr[0x17];" (assignment_expression "iVar19 = __ptr[0x17]" identifier = (subscript_expression "__ptr[0x17]" identifier [ number_literal ])) ;) (goto_statement "goto LAB_00023881;" goto statement_identifier ;) })) (labeled_statement "LAB_00023d90:\n        iVar19 = *param_1;" statement_identifier : (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "local_8c = iVar9;" (assignment_expression "local_8c = iVar9" identifier = identifier) ;) }))) (labeled_statement "LAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);" statement_identifier : (expression_statement "puVar23 = *(undefined4 **)(iVar19 + 0x38);" (assignment_expression "puVar23 = *(undefined4 **)(iVar19 + 0x38)" identifier = (pointer_expression "*(undefined4 **)(iVar19 + 0x38)" * (cast_expression "(undefined4 **)(iVar19 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x38)" ( (binary_expression "iVar19 + 0x38" identifier + number_literal) ))))) ;)) (while_statement "while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }" while (parenthesized_expression "(puVar23 != (undefined4 *)0x0)" ( (binary_expression "puVar23 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }" { (expression_statement "puVar3 = (undefined4 *)*puVar23;" (assignment_expression "puVar3 = (undefined4 *)*puVar23" identifier = (cast_expression "(undefined4 *)*puVar23" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar23" * identifier))) ;) (expression_statement "free(puVar23);" (call_expression "free(puVar23)" identifier (argument_list "(puVar23)" ( identifier ))) ;) (expression_statement "puVar23 = puVar3;" (assignment_expression "puVar23 = puVar3" identifier = identifier) ;) })) (expression_statement "*(undefined4 *)(iVar19 + 0x38) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x38) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x38)" * (cast_expression "(undefined4 *)(iVar19 + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x38)" ( (binary_expression "iVar19 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar19 + 0x40) = 0x1f;" (assignment_expression "*(undefined4 *)(iVar19 + 0x40) = 0x1f" (pointer_expression "*(undefined4 *)(iVar19 + 0x40)" * (cast_expression "(undefined4 *)(iVar19 + 0x40)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x40)" ( (binary_expression "iVar19 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar19 + 0x34) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x34) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x34)" * (cast_expression "(undefined4 *)(iVar19 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x34)" ( (binary_expression "iVar19 + 0x34" identifier + number_literal) )))) = number_literal) ;) (expression_statement "free(*(void **)(iVar19 + 0x10));" (call_expression "free(*(void **)(iVar19 + 0x10))" identifier (argument_list "(*(void **)(iVar19 + 0x10))" ( (pointer_expression "*(void **)(iVar19 + 0x10)" * (cast_expression "(void **)(iVar19 + 0x10)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x10)" ( (binary_expression "iVar19 + 0x10" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined4 *)(iVar19 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x10)" * (cast_expression "(undefined4 *)(iVar19 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x10)" ( (binary_expression "iVar19 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_000188a0();" (call_expression "FUN_000188a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "FUN_0001c4f0();" (call_expression "FUN_0001c4f0()" identifier (argument_list "()" ( ))) ;) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" identifier = identifier) ;) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;) })) })) (labeled_statement "LAB_00023fc0:\n  local_8c = 0xc;" statement_identifier : (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" identifier = number_literal) ;)) (goto_statement "goto LAB_00023fc8;" goto statement_identifier ;) (labeled_statement "code_r0x00023bf6:\n  iVar18 = iVar18 + 1;" statement_identifier : (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;)) (if_statement "if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }" if (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" ( (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" * (cast_expression "(int *)(iVar19 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) == identifier) )) (compound_statement "{\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }" { (labeled_statement "LAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" statement_identifier : (if_statement "if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" if (parenthesized_expression "(!bVar26)" ( (unary_expression "!bVar26" ! identifier) )) (compound_statement "{\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" { (if_statement "if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;" if (parenthesized_expression "(((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))" ( (binary_expression "((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0)" (parenthesized_expression "((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0))" ( (binary_expression "(((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)" (parenthesized_expression "(((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0))" ( (binary_expression "((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)" (parenthesized_expression "((*(byte *)(param_1 + 7) & 0x10) != 0)" ( (binary_expression "(*(byte *)(param_1 + 7) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 7) & 0x10)" ( (binary_expression "*(byte *)(param_1 + 7) & 0x10" (pointer_expression "*(byte *)(param_1 + 7)" * (cast_expression "(byte *)(param_1 + 7)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 7)" ( (binary_expression "param_1 + 7" identifier + number_literal) )))) & number_literal) )) != number_literal) )) || (parenthesized_expression "(param_1[6] == 0)" ( (binary_expression "param_1[6] == 0" (subscript_expression "param_1[6]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "((*(byte *)(iVar19 + 0x58) & 1) == 0)" ( (binary_expression "(*(byte *)(iVar19 + 0x58) & 1) == 0" (parenthesized_expression "(*(byte *)(iVar19 + 0x58) & 1)" ( (binary_expression "*(byte *)(iVar19 + 0x58) & 1" (pointer_expression "*(byte *)(iVar19 + 0x58)" * (cast_expression "(byte *)(iVar19 + 0x58)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x58)" ( (binary_expression "iVar19 + 0x58" identifier + number_literal) )))) & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "(*(int *)(iVar19 + 0x4c) == 0)" ( (binary_expression "*(int *)(iVar19 + 0x4c) == 0" (pointer_expression "*(int *)(iVar19 + 0x4c)" * (cast_expression "(int *)(iVar19 + 0x4c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x4c)" ( (binary_expression "iVar19 + 0x4c" identifier + number_literal) )))) == number_literal) ))) )) (goto_statement "goto LAB_00023dab;" goto statement_identifier ;)) (expression_statement "pvVar6 = malloc(iVar18 * 0xc);" (assignment_expression "pvVar6 = malloc(iVar18 * 0xc)" identifier = (call_expression "malloc(iVar18 * 0xc)" identifier (argument_list "(iVar18 * 0xc)" ( (binary_expression "iVar18 * 0xc" identifier * number_literal) )))) ;) (expression_statement "*(void **)(iVar19 + 0x1c) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0x1c) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0x1c)" * (cast_expression "(void **)(iVar19 + 0x1c)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x1c)" ( (binary_expression "iVar19 + 0x1c" identifier + number_literal) )))) = identifier) ;) (if_statement "if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }" if (parenthesized_expression "(pvVar6 != (void *)0x0)" ( (binary_expression "pvVar6 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }" { (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" identifier = number_literal) ;) (if_statement "if (iVar18 != 0) goto LAB_00023cf3;" if (parenthesized_expression "(iVar18 != 0)" ( (binary_expression "iVar18 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00023cf3;" goto statement_identifier ;)) (goto_statement "goto LAB_00023dab;" goto statement_identifier ;) })) (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" identifier = number_literal) ;) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (goto_statement "goto LAB_00023ff8;" goto statement_identifier ;) }))) (labeled_statement "LAB_00023c09:\n    bVar26 = false;" statement_identifier : (expression_statement "bVar26 = false;" (assignment_expression "bVar26 = false" identifier = false) ;)) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" identifier = number_literal) ;) })) (goto_statement "goto LAB_00023be5;" goto statement_identifier ;) (labeled_statement "LAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" statement_identifier : (while_statement "while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" { (expression_statement "puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);" (assignment_expression "puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc)" identifier = (cast_expression "(undefined4 *)((int)pvVar6 + uVar22 * 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar6 + uVar22 * 0xc)" ( (binary_expression "(int)pvVar6 + uVar22 * 0xc" (cast_expression "(int)pvVar6" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "uVar22 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "*puVar23 = 0;" (assignment_expression "*puVar23 = 0" (pointer_expression "*puVar23" * identifier) = number_literal) ;) (expression_statement "puVar23[1] = 0;" (assignment_expression "puVar23[1] = 0" (subscript_expression "puVar23[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar23[2] = 0;" (assignment_expression "puVar23[2] = 0" (subscript_expression "puVar23[2]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;" if (parenthesized_expression "(*(uint *)(iVar19 + 8) <= uVar22 + 1)" ( (binary_expression "*(uint *)(iVar19 + 8) <= uVar22 + 1" (pointer_expression "*(uint *)(iVar19 + 8)" * (cast_expression "(uint *)(iVar19 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) <= (binary_expression "uVar22 + 1" identifier + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "pvVar6 = *(void **)(iVar19 + 0x1c);" (assignment_expression "pvVar6 = *(void **)(iVar19 + 0x1c)" identifier = (pointer_expression "*(void **)(iVar19 + 0x1c)" * (cast_expression "(void **)(iVar19 + 0x1c)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar19 + 0x1c)" ( (binary_expression "iVar19 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "uVar22 = uVar22 + 1;" (assignment_expression "uVar22 = uVar22 + 1" identifier = (binary_expression "uVar22 + 1" identifier + number_literal)) ;) }))) (if_statement "if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }" if (parenthesized_expression "(*(uint *)(iVar19 + 8) != 0)" ( (binary_expression "*(uint *)(iVar19 + 8) != 0" (pointer_expression "*(uint *)(iVar19 + 8)" * (cast_expression "(uint *)(iVar19 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }" { (expression_statement "iVar9 = *(int *)(iVar19 + 0x18);" (assignment_expression "iVar9 = *(int *)(iVar19 + 0x18)" identifier = (pointer_expression "*(int *)(iVar19 + 0x18)" * (cast_expression "(int *)(iVar19 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));" do (compound_statement "{\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    }" { (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) (expression_statement "iVar10 = uVar22 * 0xc + iVar9;" (assignment_expression "iVar10 = uVar22 * 0xc + iVar9" identifier = (binary_expression "uVar22 * 0xc + iVar9" (binary_expression "uVar22 * 0xc" identifier * number_literal) + identifier)) ;) (expression_statement "iVar18 = *(int *)(iVar10 + 8);" (assignment_expression "iVar18 = *(int *)(iVar10 + 8)" identifier = (pointer_expression "*(int *)(iVar10 + 8)" * (cast_expression "(int *)(iVar10 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar10 + 8)" ( (binary_expression "iVar10 + 8" identifier + number_literal) ))))) ;) (if_statement "if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }" if (parenthesized_expression "(0 < *(int *)(iVar10 + 4))" ( (binary_expression "0 < *(int *)(iVar10 + 4)" number_literal < (pointer_expression "*(int *)(iVar10 + 4)" * (cast_expression "(int *)(iVar10 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar10 + 4)" ( (binary_expression "iVar10 + 4" identifier + number_literal) ))))) )) (compound_statement "{\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }" { (do_statement "do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));" do (compound_statement "{\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        }" { (expression_statement "cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;" (assignment_expression "cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" identifier = (call_expression "FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" identifier (argument_list "(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" ( (binary_expression "*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc" (pointer_expression "*(int *)(iVar19 + 0x1c)" * (cast_expression "(int *)(iVar19 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x1c)" ( (binary_expression "iVar19 + 0x1c" identifier + number_literal) )))) + (binary_expression "*(int *)(iVar18 + iVar14 * 4) * 0xc" (pointer_expression "*(int *)(iVar18 + iVar14 * 4)" * (cast_expression "(int *)(iVar18 + iVar14 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + iVar14 * 4)" ( (binary_expression "iVar18 + iVar14 * 4" identifier + (binary_expression "iVar14 * 4" identifier * number_literal)) )))) * number_literal)) , identifier )))) ;) (if_statement "if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }" if (parenthesized_expression "(cVar5 == '\0')" ( (binary_expression "cVar5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }" { (expression_statement "iVar9 = 0xc;" (assignment_expression "iVar9 = 0xc" identifier = number_literal) ;) (goto_statement "goto LAB_00023d90;" goto statement_identifier ;) })) (expression_statement "iVar9 = *(int *)(iVar19 + 0x18);" (assignment_expression "iVar9 = *(int *)(iVar19 + 0x18)" identifier = (pointer_expression "*(int *)(iVar19 + 0x18)" * (cast_expression "(int *)(iVar19 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 0x18)" ( (binary_expression "iVar19 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" identifier = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc))" ( (binary_expression "iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc)" identifier < (pointer_expression "*(int *)(iVar9 + 4 + uVar22 * 0xc)" * (cast_expression "(int *)(iVar9 + 4 + uVar22 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 4 + uVar22 * 0xc)" ( (binary_expression "iVar9 + 4 + uVar22 * 0xc" (binary_expression "iVar9 + 4" identifier + number_literal) + (binary_expression "uVar22 * 0xc" identifier * number_literal)) ))))) )) ;) })) (expression_statement "uVar22 = uVar22 + 1;" (assignment_expression "uVar22 = uVar22 + 1" identifier = (binary_expression "uVar22 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar22 < *(uint *)(iVar19 + 8))" ( (binary_expression "uVar22 < *(uint *)(iVar19 + 8)" identifier < (pointer_expression "*(uint *)(iVar19 + 8)" * (cast_expression "(uint *)(iVar19 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar19 + 8)" ( (binary_expression "iVar19 + 8" identifier + number_literal) ))))) )) ;) })) (labeled_statement "LAB_00023dab:\n  local_8c = 0;" statement_identifier : (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" identifier = number_literal) ;)) (expression_statement "bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;" (assignment_expression "bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0" identifier = (binary_expression "*(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0" (binary_expression "*(byte *)(__ptr + 0x16) >> 2" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) >> number_literal) & (binary_expression "uVar17 == 0" identifier == number_literal))) ;) (if_statement "if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }" if (parenthesized_expression "((bVar21 != 0) && (param_1[5] == 0))" ( (binary_expression "(bVar21 != 0) && (param_1[5] == 0)" (parenthesized_expression "(bVar21 != 0)" ( (binary_expression "bVar21 != 0" identifier != number_literal) )) && (parenthesized_expression "(param_1[5] == 0)" ( (binary_expression "param_1[5] == 0" (subscript_expression "param_1[5]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }" { (if_statement "if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" if (parenthesized_expression "(__ptr[2] == 0)" ( (binary_expression "__ptr[2] == 0" (subscript_expression "__ptr[2]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\nLAB_00024424:\n      bVar4 = 0;\n    }" { (labeled_statement "LAB_00024424:\n      bVar4 = 0;" statement_identifier : (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;)) }) (else_clause "else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" else (compound_statement "{\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" { (expression_statement "puVar25 = (uint *)*__ptr;" (assignment_expression "puVar25 = (uint *)*__ptr" identifier = (cast_expression "(uint *)*__ptr" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*__ptr" * identifier))) ;) (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" identifier = number_literal) ;) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (expression_statement "bVar2 = 0;" (assignment_expression "bVar2 = 0" identifier = number_literal) ;) (expression_statement "puVar16 = puVar25;" (assignment_expression "puVar16 = puVar25" identifier = identifier) ;) (do_statement "do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);" do (compound_statement "{\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      }" { (switch_statement "switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }" switch (parenthesized_expression "((char)puVar16[1])" ( (cast_expression "(char)puVar16[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "puVar16[1]" identifier [ number_literal ])) )) (compound_statement "{\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }" { (case_statement "default:\n                    \n          abort();" default : (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) (case_statement "case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;" case (char_literal "'\x01'" ' escape_sequence ') : (if_statement "if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }" if (parenthesized_expression "((char)*puVar16 < '\0')" ( (binary_expression "(char)*puVar16 < '\0'" (cast_expression "(char)*puVar16" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*puVar16" * identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            bVar2 = bVar21;\n          }" { (expression_statement "bVar2 = bVar21;" (assignment_expression "bVar2 = bVar21" identifier = identifier) ;) })) (break_statement "break;" break ;)) (case_statement "case '\x02':" case (char_literal "'\x02'" ' escape_sequence ') :) (case_statement "case '\x04':" case (char_literal "'\x04'" ' escape_sequence ') :) (case_statement "case '\b':" case (char_literal "'\b'" ' escape_sequence ') :) (case_statement "case '\t':" case (char_literal "'\t'" ' escape_sequence ') :) (case_statement "case '\n':" case (char_literal "'\n'" ' escape_sequence ') :) (case_statement "case '\v':\n          break;" case (char_literal "'\v'" ' escape_sequence ') : (break_statement "break;" break ;)) (case_statement "case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;" case (char_literal "'\x03'" ' escape_sequence ') : (expression_statement "iVar18 = 4;" (assignment_expression "iVar18 = 4" identifier = number_literal) ;) (do_statement "do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);" do (compound_statement "{\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          }" { (if_statement "if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;" if (parenthesized_expression "(*(int *)(*puVar16 + iVar18 * 4) != 0)" ( (binary_expression "*(int *)(*puVar16 + iVar18 * 4) != 0" (pointer_expression "*(int *)(*puVar16 + iVar18 * 4)" * (cast_expression "(int *)(*puVar16 + iVar18 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*puVar16 + iVar18 * 4)" ( (binary_expression "*puVar16 + iVar18 * 4" (pointer_expression "*puVar16" * identifier) + (binary_expression "iVar18 * 4" identifier * number_literal)) )))) != number_literal) )) (goto_statement "goto LAB_00023dcb;" goto statement_identifier ;)) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" identifier = (binary_expression "iVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 != 8)" ( (binary_expression "iVar18 != 8" identifier != number_literal) )) ;) (break_statement "break;" break ;)) (case_statement "case '\x05':\n          bVar4 = bVar21;\n          break;" case (char_literal "'\x05'" ' escape_sequence ') : (expression_statement "bVar4 = bVar21;" (assignment_expression "bVar4 = bVar21" identifier = identifier) ;) (break_statement "break;" break ;)) (case_statement "case '\x06':\n          goto code_r0x00024350;" case (char_literal "'\x06'" ' escape_sequence ') : (goto_statement "goto code_r0x00024350;" goto statement_identifier ;)) (case_statement "case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" case (char_literal "'\f'" ' escape_sequence ') : (expression_statement "uVar17 = *puVar16;" (assignment_expression "uVar17 = *puVar16" identifier = (pointer_expression "*puVar16" * identifier)) ;) (if_statement "if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" if (parenthesized_expression "(uVar17 != 0x20)" ( (binary_expression "uVar17 != 0x20" identifier != number_literal) )) (compound_statement "{\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" { (if_statement "if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" if (parenthesized_expression "(uVar17 < 0x21)" ( (binary_expression "uVar17 < 0x21" identifier < number_literal) )) (compound_statement "{\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }" { (if_statement "if (uVar17 != 0x10) goto code_r0x00024350;" if (parenthesized_expression "(uVar17 != 0x10)" ( (binary_expression "uVar17 != 0x10" identifier != number_literal) )) (goto_statement "goto code_r0x00024350;" goto statement_identifier ;)) }) (else_clause "else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" else (if_statement "if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" if (parenthesized_expression "((uVar17 != 0x40) && (uVar17 != 0x80))" ( (binary_expression "(uVar17 != 0x40) && (uVar17 != 0x80)" (parenthesized_expression "(uVar17 != 0x40)" ( (binary_expression "uVar17 != 0x40" identifier != number_literal) )) && (parenthesized_expression "(uVar17 != 0x80)" ( (binary_expression "uVar17 != 0x80" identifier != number_literal) ))) )) (compound_statement "{\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" { (labeled_statement "code_r0x00024350:\n              goto LAB_00023dcb;" statement_identifier : (goto_statement "goto LAB_00023dcb;" goto statement_identifier ;)) })))) }))) })) (expression_statement "iVar9 = iVar9 + 1;" (assignment_expression "iVar9 = iVar9 + 1" identifier = (binary_expression "iVar9 + 1" identifier + number_literal)) ;) (expression_statement "puVar16 = puVar16 + 2;" (assignment_expression "puVar16 = puVar16 + 2" identifier = (binary_expression "puVar16 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar9 != __ptr[2])" ( (binary_expression "iVar9 != __ptr[2]" identifier != (subscript_expression "__ptr[2]" identifier [ number_literal ])) )) ;) (if_statement "if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;" if (parenthesized_expression "(bVar2 == 0 && bVar4 == 0)" ( (binary_expression "bVar2 == 0 && bVar4 == 0" (binary_expression "bVar2 == 0" identifier == number_literal) && (binary_expression "bVar4 == 0" identifier == number_literal)) )) (goto_statement "goto LAB_00024424;" goto statement_identifier ;)) (expression_statement "puVar16 = puVar25 + iVar9 * 2;" (assignment_expression "puVar16 = puVar25 + iVar9 * 2" identifier = (binary_expression "puVar25 + iVar9 * 2" identifier + (binary_expression "iVar9 * 2" identifier * number_literal))) ;) (do_statement "do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);" do (compound_statement "{\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      }" { (if_statement "if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" if (parenthesized_expression "((char)puVar25[1] == '\x01')" ( (binary_expression "(char)puVar25[1] == '\x01'" (cast_expression "(char)puVar25[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "puVar25[1]" identifier [ number_literal ])) == (char_literal "'\x01'" ' escape_sequence ')) )) (compound_statement "{\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }" { (if_statement "if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }" if (parenthesized_expression "((char)*puVar25 < '\0')" ( (binary_expression "(char)*puVar25 < '\0'" (cast_expression "(char)*puVar25" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*puVar25" * identifier)) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }" { (expression_statement "*(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;" (assignment_expression "*(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf" (pointer_expression "*(byte *)((int)puVar25 + 6)" * (cast_expression "(byte *)((int)puVar25 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar25 + 6)" ( (binary_expression "(int)puVar25 + 6" (cast_expression "(int)puVar25" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (binary_expression "*(byte *)((int)puVar25 + 6) & 0xdf" (pointer_expression "*(byte *)((int)puVar25 + 6)" * (cast_expression "(byte *)((int)puVar25 + 6)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)puVar25 + 6)" ( (binary_expression "(int)puVar25 + 6" (cast_expression "(int)puVar25" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) & number_literal)) ;) })) }) (else_clause "else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" else (if_statement "if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" if (parenthesized_expression "((char)puVar25[1] == '\x05')" ( (binary_expression "(char)puVar25[1] == '\x05'" (cast_expression "(char)puVar25[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "puVar25[1]" identifier [ number_literal ])) == (char_literal "'\x05'" ' escape_sequence ')) )) (compound_statement "{\n          *(char *)(puVar25 + 1) = '\a';\n        }" { (expression_statement "*(char *)(puVar25 + 1) = '\a';" (assignment_expression "*(char *)(puVar25 + 1) = '\a'" (pointer_expression "*(char *)(puVar25 + 1)" * (cast_expression "(char *)(puVar25 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar25 + 1)" ( (binary_expression "puVar25 + 1" identifier + number_literal) )))) = (char_literal "'\a'" ' escape_sequence ')) ;) })))) (expression_statement "puVar25 = puVar25 + 2;" (assignment_expression "puVar25 = puVar25 + 2" identifier = (binary_expression "puVar25 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar16 != puVar25)" ( (binary_expression "puVar16 != puVar25" identifier != identifier) )) ;) }))) (expression_statement "__ptr[0x17] = 1;" (assignment_expression "__ptr[0x17] = 1" (subscript_expression "__ptr[0x17]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;" (assignment_expression "*(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) = (binary_expression "(0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9" (binary_expression "(0 < __ptr[0x13] | bVar4) * '\x02'" (parenthesized_expression "(0 < __ptr[0x13] | bVar4)" ( (binary_expression "0 < __ptr[0x13] | bVar4" (binary_expression "0 < __ptr[0x13]" number_literal < (subscript_expression "__ptr[0x13]" identifier [ number_literal ])) | identifier) )) * (char_literal "'\x02'" ' escape_sequence ')) | (binary_expression "*(byte *)(__ptr + 0x16) & 0xf9" (pointer_expression "*(byte *)(__ptr + 0x16)" * (cast_expression "(byte *)(__ptr + 0x16)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr + 0x16)" ( (binary_expression "__ptr + 0x16" identifier + number_literal) )))) & number_literal))) ;) })) (labeled_statement "LAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);" statement_identifier : (expression_statement "iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);" (assignment_expression "iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" identifier = (pointer_expression "*(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" * (cast_expression "(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" ( (binary_expression "*(int *)(__ptr[0xd] + 0xc) + 0x1c" (pointer_expression "*(int *)(__ptr[0xd] + 0xc)" * (cast_expression "(int *)(__ptr[0xd] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(__ptr[0xd] + 0xc)" ( (binary_expression "__ptr[0xd] + 0xc" (subscript_expression "__ptr[0xd]" identifier [ number_literal ]) + number_literal) )))) + number_literal) ))))) ;)) (expression_statement "__ptr[0x12] = iVar9;" (assignment_expression "__ptr[0x12] = iVar9" (subscript_expression "__ptr[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);" (assignment_expression "iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc)" identifier = (call_expression "FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc)" identifier (argument_list "(local_ac,__ptr[6] + iVar9 * 0xc)" ( identifier , (binary_expression "__ptr[6] + iVar9 * 0xc" (subscript_expression "__ptr[6]" identifier [ number_literal ]) + (binary_expression "iVar9 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "local_94 = iVar9;" (assignment_expression "local_94 = iVar9" identifier = identifier) ;) (expression_statement "local_88[0] = iVar9;" (assignment_expression "local_88[0] = iVar9" (subscript_expression "local_88[0]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }" if (parenthesized_expression "(iVar9 == 0)" ( (binary_expression "iVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }" { (if_statement "if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }" if (parenthesized_expression "((0 < __ptr[0x13]) && (0 < local_7c))" ( (binary_expression "(0 < __ptr[0x13]) && (0 < local_7c)" (parenthesized_expression "(0 < __ptr[0x13])" ( (binary_expression "0 < __ptr[0x13]" number_literal < (subscript_expression "__ptr[0x13]" identifier [ number_literal ])) )) && (parenthesized_expression "(0 < local_7c)" ( (binary_expression "0 < local_7c" number_literal < identifier) ))) )) (compound_statement "{\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }" { (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" identifier = number_literal) ;) (expression_statement "iVar18 = local_7c;" (assignment_expression "iVar18 = local_7c" identifier = identifier) ;) (labeled_statement "LAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);" statement_identifier : (do_statement "do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);" do (compound_statement "{\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      }" { (expression_statement "iVar10 = *(int *)((int)local_78 + iVar19 * 4);" (assignment_expression "iVar10 = *(int *)((int)local_78 + iVar19 * 4)" identifier = (pointer_expression "*(int *)((int)local_78 + iVar19 * 4)" * (cast_expression "(int *)((int)local_78 + iVar19 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_78 + iVar19 * 4)" ( (binary_expression "(int)local_78 + iVar19 * 4" (cast_expression "(int)local_78" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar19 * 4" identifier * number_literal)) ))))) ;) (expression_statement "piVar20 = (int *)(*__ptr + iVar10 * 8);" (assignment_expression "piVar20 = (int *)(*__ptr + iVar10 * 8)" identifier = (cast_expression "(int *)(*__ptr + iVar10 * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*__ptr + iVar10 * 8)" ( (binary_expression "*__ptr + iVar10 * 8" (pointer_expression "*__ptr" * identifier) + (binary_expression "iVar10 * 8" identifier * number_literal)) )))) ;) (if_statement "if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }" if (parenthesized_expression "((char)piVar20[1] == '\x04')" ( (binary_expression "(char)piVar20[1] == '\x04'" (cast_expression "(char)piVar20[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "piVar20[1]" identifier [ number_literal ])) == (char_literal "'\x04'" ' escape_sequence ')) )) (compound_statement "{\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }" { (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) (do_statement "do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);" do (compound_statement "{\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          }" { (expression_statement "piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);" (assignment_expression "piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" identifier = (cast_expression "(int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" ( (binary_expression "*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8" (pointer_expression "*__ptr" * identifier) + (binary_expression "*(int *)((int)local_78 + iVar14 * 4) * 8" (pointer_expression "*(int *)((int)local_78 + iVar14 * 4)" * (cast_expression "(int *)((int)local_78 + iVar14 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_78 + iVar14 * 4)" ( (binary_expression "(int)local_78 + iVar14 * 4" (cast_expression "(int)local_78" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar14 * 4" identifier * number_literal)) )))) * number_literal)) )))) ;) (if_statement "if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }" if (parenthesized_expression "(((char)piVar1[1] == '\t') && (*piVar1 == *piVar20))" ( (binary_expression "((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)" (parenthesized_expression "((char)piVar1[1] == '\t')" ( (binary_expression "(char)piVar1[1] == '\t'" (cast_expression "(char)piVar1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "piVar1[1]" identifier [ number_literal ])) == (char_literal "'\t'" ' escape_sequence ')) )) && (parenthesized_expression "(*piVar1 == *piVar20)" ( (binary_expression "*piVar1 == *piVar20" (pointer_expression "*piVar1" * identifier) == (pointer_expression "*piVar20" * identifier)) ))) )) (compound_statement "{\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }" { (expression_statement "iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);" (assignment_expression "iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8)" identifier = (pointer_expression "**(int **)(__ptr[5] + iVar10 * 0xc + 8)" * (pointer_expression "*(int **)(__ptr[5] + iVar10 * 0xc + 8)" * (cast_expression "(int **)(__ptr[5] + iVar10 * 0xc + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(__ptr[5] + iVar10 * 0xc + 8)" ( (binary_expression "__ptr[5] + iVar10 * 0xc + 8" (binary_expression "__ptr[5] + iVar10 * 0xc" (subscript_expression "__ptr[5]" identifier [ number_literal ]) + (binary_expression "iVar10 * 0xc" identifier * number_literal)) + number_literal) )))))) ;) (expression_statement "iVar14 = FUN_00018c70();" (assignment_expression "iVar14 = FUN_00018c70()" identifier = (call_expression "FUN_00018c70()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }" if (parenthesized_expression "(iVar14 == 0)" ( (binary_expression "iVar14 == 0" identifier == number_literal) )) (compound_statement "{\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }" { (expression_statement "local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);" (assignment_expression "local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc)" identifier = (call_expression "FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc)" identifier (argument_list "(local_ac,__ptr[6] + iVar10 * 0xc)" ( identifier , (binary_expression "__ptr[6] + iVar10 * 0xc" (subscript_expression "__ptr[6]" identifier [ number_literal ]) + (binary_expression "iVar10 * 0xc" identifier * number_literal)) )))) ;) (if_statement "if (local_94 != 0) goto LAB_00023f26;" if (parenthesized_expression "(local_94 != 0)" ( (binary_expression "local_94 != 0" identifier != number_literal) )) (goto_statement "goto LAB_00023f26;" goto statement_identifier ;)) (expression_statement "iVar19 = 1;" (assignment_expression "iVar19 = 1" identifier = number_literal) ;) (expression_statement "iVar18 = local_7c;" (assignment_expression "iVar18 = local_7c" identifier = identifier) ;) (if_statement "if (1 < local_7c) goto LAB_00023e3b;" if (parenthesized_expression "(1 < local_7c)" ( (binary_expression "1 < local_7c" number_literal < identifier) )) (goto_statement "goto LAB_00023e3b;" goto statement_identifier ;)) (goto_statement "goto LAB_00023ee2;" goto statement_identifier ;) })) (break_statement "break;" break ;) })) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" identifier = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar18 != iVar14)" ( (binary_expression "iVar18 != iVar14" identifier != identifier) )) ;) })) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 < iVar18)" ( (binary_expression "iVar19 < iVar18" identifier < identifier) )) ;)) })) (labeled_statement "LAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);" statement_identifier : (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0)" identifier = (call_expression "FUN_0001a040(local_88,__ptr,local_ac,0)" identifier (argument_list "(local_88,__ptr,local_ac,0)" ( identifier , identifier , identifier , number_literal )))) ;)) (expression_statement "__ptr[9] = iVar18;" (assignment_expression "__ptr[9] = iVar18" (subscript_expression "__ptr[9]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" if (parenthesized_expression "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_000241e0:\n      local_94 = local_88[0];\n    }" { (labeled_statement "LAB_000241e0:\n      local_94 = local_88[0];" statement_identifier : (expression_statement "local_94 = local_88[0];" (assignment_expression "local_94 = local_88[0]" identifier = (subscript_expression "local_88[0]" identifier [ number_literal ])) ;)) }) (else_clause "else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" else (compound_statement "{\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" { (if_statement "if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" if (parenthesized_expression "(*(char *)(iVar18 + 0x34) < '\0')" ( (binary_expression "*(char *)(iVar18 + 0x34) < '\0'" (pointer_expression "*(char *)(iVar18 + 0x34)" * (cast_expression "(char *)(iVar18 + 0x34)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar18 + 0x34)" ( (binary_expression "iVar18 + 0x34" identifier + number_literal) )))) < (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }" { (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1)" identifier = (call_expression "FUN_0001a040(local_88,__ptr,local_ac,1)" identifier (argument_list "(local_88,__ptr,local_ac,1)" ( identifier , identifier , identifier , number_literal )))) ;) (expression_statement "__ptr[10] = iVar18;" (assignment_expression "__ptr[10] = iVar18" (subscript_expression "__ptr[10]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2)" identifier = (call_expression "FUN_0001a040(local_88,__ptr,local_ac,2)" identifier (argument_list "(local_88,__ptr,local_ac,2)" ( identifier , identifier , identifier , number_literal )))) ;) (expression_statement "__ptr[0xb] = iVar18;" (assignment_expression "__ptr[0xb] = iVar18" (subscript_expression "__ptr[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6)" identifier = (call_expression "FUN_0001a040(local_88,__ptr,local_ac,6)" identifier (argument_list "(local_88,__ptr,local_ac,6)" ( identifier , identifier , identifier , number_literal )))) ;) (expression_statement "__ptr[0xc] = iVar18;" (assignment_expression "__ptr[0xc] = iVar18" (subscript_expression "__ptr[0xc]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;" if (parenthesized_expression "(((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0))" ( (binary_expression "((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)" (parenthesized_expression "((__ptr[10] == 0) || (__ptr[0xb] == 0))" ( (binary_expression "(__ptr[10] == 0) || (__ptr[0xb] == 0)" (parenthesized_expression "(__ptr[10] == 0)" ( (binary_expression "__ptr[10] == 0" (subscript_expression "__ptr[10]" identifier [ number_literal ]) == number_literal) )) || (parenthesized_expression "(__ptr[0xb] == 0)" ( (binary_expression "__ptr[0xb] == 0" (subscript_expression "__ptr[0xb]" identifier [ number_literal ]) == number_literal) ))) )) || (parenthesized_expression "(iVar18 == 0)" ( (binary_expression "iVar18 == 0" identifier == number_literal) ))) )) (goto_statement "goto LAB_000241e0;" goto statement_identifier ;)) }) (else_clause "else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" else (compound_statement "{\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" { (expression_statement "__ptr[0xc] = iVar18;" (assignment_expression "__ptr[0xc] = iVar18" (subscript_expression "__ptr[0xc]" identifier [ number_literal ]) = identifier) ;) (expression_statement "__ptr[0xb] = iVar18;" (assignment_expression "__ptr[0xb] = iVar18" (subscript_expression "__ptr[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "__ptr[10] = iVar18;" (assignment_expression "__ptr[10] = iVar18" (subscript_expression "__ptr[10]" identifier [ number_literal ]) = identifier) ;) }))) (expression_statement "free(local_78);" (call_expression "free(local_78)" identifier (argument_list "(local_78)" ( identifier ))) ;) (expression_statement "local_94 = iVar9;" (assignment_expression "local_94 = iVar9" identifier = identifier) ;) }))) })) (labeled_statement "LAB_00023f26:\n  iVar9 = *param_1;" statement_identifier : (expression_statement "iVar9 = *param_1;" (assignment_expression "iVar9 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;)) (expression_statement "puVar23 = *(undefined4 **)(iVar9 + 0x38);" (assignment_expression "puVar23 = *(undefined4 **)(iVar9 + 0x38)" identifier = (pointer_expression "*(undefined4 **)(iVar9 + 0x38)" * (cast_expression "(undefined4 **)(iVar9 + 0x38)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar9 + 0x38)" ( (binary_expression "iVar9 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "local_8c = local_94;" (assignment_expression "local_8c = local_94" identifier = identifier) ;) (while_statement "while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }" while (parenthesized_expression "(puVar23 != (undefined4 *)0x0)" ( (binary_expression "puVar23 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }" { (expression_statement "puVar3 = (undefined4 *)*puVar23;" (assignment_expression "puVar3 = (undefined4 *)*puVar23" identifier = (cast_expression "(undefined4 *)*puVar23" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar23" * identifier))) ;) (expression_statement "free(puVar23);" (call_expression "free(puVar23)" identifier (argument_list "(puVar23)" ( identifier ))) ;) (expression_statement "puVar23 = puVar3;" (assignment_expression "puVar23 = puVar3" identifier = identifier) ;) })) (expression_statement "*(undefined4 *)(iVar9 + 0x38) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x38) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x38)" * (cast_expression "(undefined4 *)(iVar9 + 0x38)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x38)" ( (binary_expression "iVar9 + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar9 + 0x40) = 0x1f;" (assignment_expression "*(undefined4 *)(iVar9 + 0x40) = 0x1f" (pointer_expression "*(undefined4 *)(iVar9 + 0x40)" * (cast_expression "(undefined4 *)(iVar9 + 0x40)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x40)" ( (binary_expression "iVar9 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar9 + 0x34) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x34) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x34)" * (cast_expression "(undefined4 *)(iVar9 + 0x34)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x34)" ( (binary_expression "iVar9 + 0x34" identifier + number_literal) )))) = number_literal) ;) (expression_statement "free(*(void **)(iVar9 + 0x10));" (call_expression "free(*(void **)(iVar9 + 0x10))" identifier (argument_list "(*(void **)(iVar9 + 0x10))" ( (pointer_expression "*(void **)(iVar9 + 0x10)" * (cast_expression "(void **)(iVar9 + 0x10)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar9 + 0x10)" ( (binary_expression "iVar9 + 0x10" identifier + number_literal) )))) ))) ;) (expression_statement "*(undefined4 *)(iVar9 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x10)" * (cast_expression "(undefined4 *)(iVar9 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar9 + 0x10)" ( (binary_expression "iVar9 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_000188a0();" (call_expression "FUN_000188a0()" identifier (argument_list "()" ( ))) ;) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" identifier = identifier) ;) (if_statement "if (local_8c == 0) goto LAB_00023f97;" if (parenthesized_expression "(local_8c == 0)" ( (binary_expression "local_8c == 0" identifier == number_literal) )) (goto_statement "goto LAB_00023f97;" goto statement_identifier ;)) (labeled_statement "LAB_00023fc8:\n  FUN_0001c4f0();" statement_identifier : (expression_statement "FUN_0001c4f0();" (call_expression "FUN_0001c4f0()" identifier (argument_list "()" ( ))) ;)) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" * identifier) = number_literal) ;) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" identifier = identifier) ;) (labeled_statement "LAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }" statement_identifier : (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }" if (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" ( (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" identifier != (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" * (cast_expression "(int *)(in_GS_OFFSET + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_GS_OFFSET + 0x14)" ( (binary_expression "in_GS_OFFSET + 0x14" identifier + number_literal) ))))) )) (compound_statement "{\n                    \n    FUN_000253d0();\n  }" { (expression_statement "FUN_000253d0();" (call_expression "FUN_000253d0()" identifier (argument_list "()" ( ))) ;) }))) (return_statement "return iVar9;" return identifier ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * 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 (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 (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) )))) ;) (for_statement for ( (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) ))) & LIT) )))) ))) ))) >> LIT)) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT - LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & LIT) )) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) < LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) == LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) < (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (unary_expression ! IDENT) && (unary_expression ! IDENT)) )) == IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;) })) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (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 = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) | LIT)) ;)) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (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 (subscript_expression IDENT [ LIT ]) + IDENT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) | (binary_expression LIT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression & IDENT))) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (for_statement for ( (assignment_expression IDENT = LIT) ; (binary_expression IDENT != LIT) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT != LIT) || (binary_expression IDENT != LIT))) ;) (expression_statement (assignment_expression IDENT = (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 = (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 = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + IDENT) ))))) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) })) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) ))) < (cast_expression ( (type_descriptor TYPE) ) IDENT)) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression IDENT * LIT) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT == LIT) )) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (field_expression IDENT . field_identifier) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (field_expression IDENT . field_identifier) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT == LIT) || (binary_expression IDENT == LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) && (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) && (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (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) ))))) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (subscript_expression IDENT [ LIT ])) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) == IDENT) )) ;) })) }))) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + IDENT) )))) != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + IDENT) )))) != LIT) )) (break_statement break ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == IDENT) )) (goto_statement goto statement_identifier ;)) }))) }) while (parenthesized_expression ( BOOL )) ;) })) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (field_expression IDENT . field_identifier) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) (while_statement while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == IDENT) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) ))) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (goto_statement goto statement_identifier ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = BOOL) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) })) (goto_statement goto statement_identifier ;) (labeled_statement statement_identifier : (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= (binary_expression IDENT + LIT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (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 = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) * LIT)) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (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 = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) ))))) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT) & (binary_expression IDENT == LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (switch_statement switch (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) )) (compound_statement { (case_statement default : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (case_statement case (char_literal ' escape_sequence ') : (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (break_statement break ;)) (case_statement case (char_literal ' escape_sequence ') :) (case_statement case (char_literal ' escape_sequence ') :) (case_statement case (char_literal ' escape_sequence ') :) (case_statement case (char_literal ' escape_sequence ') :) (case_statement case (char_literal ' escape_sequence ') :) (case_statement case (char_literal ' escape_sequence ') : (break_statement break ;)) (case_statement case (char_literal ' escape_sequence ') : (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) )))) != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (break_statement break ;)) (case_statement case (char_literal ' escape_sequence ') : (expression_statement (assignment_expression IDENT = IDENT) ;) (break_statement break ;)) (case_statement case (char_literal ' escape_sequence ') : (goto_statement goto statement_identifier ;)) (case_statement case (char_literal ' escape_sequence ') : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (compound_statement { (labeled_statement statement_identifier : (goto_statement goto statement_identifier ;)) })))) }))) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (subscript_expression IDENT [ LIT ])) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT == LIT) && (binary_expression IDENT == LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_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 (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) & LIT)) ;) })) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (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) )))) = (char_literal ' escape_sequence ')) ;) })))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) }))) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT < (subscript_expression IDENT [ LIT ])) | IDENT) )) * (char_literal ' escape_sequence ')) | (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT))) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (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 (subscript_expression IDENT [ LIT ]) + LIT) )))) + LIT) ))))) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ LIT ])) )) && (parenthesized_expression ( (binary_expression LIT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (pointer_expression * IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) (break_statement break ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (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 , LIT )))) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (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 = IDENT) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (return_statement return IDENT ;) })))
(function_definition "int __regparm3 FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)\n\n{\n  int *piVar1;\n  byte bVar2;\n  undefined4 *puVar3;\n  byte bVar4;\n  char cVar5;\n  void *pvVar6;\n  size_t sVar7;\n  byte *pbVar8;\n  int iVar9;\n  int iVar10;\n  void *pvVar11;\n  void *pvVar12;\n  void *pvVar13;\n  int iVar14;\n  wint_t wVar15;\n  uint *puVar16;\n  int *__ptr;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  int *piVar20;\n  byte bVar21;\n  uint uVar22;\n  undefined4 *puVar23;\n  byte *pbVar24;\n  size_t __size;\n  uint *puVar25;\n  int in_GS_OFFSET;\n  bool bVar26;\n  bool bVar27;\n  undefined1 *local_ac;\n  int local_94;\n  int local_8c;\n  int local_88 [2];\n  undefined1 local_80 [4];\n  int local_7c;\n  void *local_78;\n  int local_74;\n  int local_70 [5];\n  int local_5c;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  int local_4c;\n  uint local_48;\n  uint local_44;\n  uint local_40;\n  uint local_3c;\n  int local_34;\n  undefined1 local_2c;\n  byte local_2b;\n  byte local_2a;\n  char local_29;\n  int local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar21 = 0;\n  uStack_14 = 0x23639;\n  __ptr = (int *)*param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;\n  local_8c = 0;\n  param_1[3] = param_4;\n  param_1[2] = 0;\n  param_1[6] = 0;\n  if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }\n  param_1[2] = 0x88;\n  *__ptr = 0;\n  __ptr[0x21] = 0;\n  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);\n  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }\n  __ptr[0x10] = 0x1f;\n  if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  local_8c = 0xc;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  iVar18 = iVar18 + 1;\n  if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }\n  if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }\nLAB_00023dab:\n  local_8c = 0;\n  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;\n  if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }\nLAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);\n  __ptr[0x12] = iVar9;\n  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);\n  local_94 = iVar9;\n  local_88[0] = iVar9;\n  if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }\nLAB_00023f26:\n  iVar9 = *param_1;\n  puVar23 = *(undefined4 **)(iVar9 + 0x38);\n  local_8c = local_94;\n  while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }\n  *(undefined4 *)(iVar9 + 0x38) = 0;\n  *(undefined4 *)(iVar9 + 0x40) = 0x1f;\n  *(undefined4 *)(iVar9 + 0x34) = 0;\n  free(*(void **)(iVar9 + 0x10));\n  *(undefined4 *)(iVar9 + 0x10) = 0;\n  FUN_000188a0();\n  iVar9 = local_8c;\n  if (local_8c == 0) goto LAB_00023f97;\nLAB_00023fc8:\n  FUN_0001c4f0();\n  *param_1 = 0;\n  param_1[1] = 0;\n  iVar9 = local_8c;\nLAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }\n  return iVar9;\n}" (primitive_type "int") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00023630(int *param_1,int param_2,uint param_3,uint param_4)" (identifier "FUN_00023630") (parameter_list "(int *param_1,int param_2,uint param_3,uint param_4)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")"))) (compound_statement "{\n  int *piVar1;\n  byte bVar2;\n  undefined4 *puVar3;\n  byte bVar4;\n  char cVar5;\n  void *pvVar6;\n  size_t sVar7;\n  byte *pbVar8;\n  int iVar9;\n  int iVar10;\n  void *pvVar11;\n  void *pvVar12;\n  void *pvVar13;\n  int iVar14;\n  wint_t wVar15;\n  uint *puVar16;\n  int *__ptr;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  int *piVar20;\n  byte bVar21;\n  uint uVar22;\n  undefined4 *puVar23;\n  byte *pbVar24;\n  size_t __size;\n  uint *puVar25;\n  int in_GS_OFFSET;\n  bool bVar26;\n  bool bVar27;\n  undefined1 *local_ac;\n  int local_94;\n  int local_8c;\n  int local_88 [2];\n  undefined1 local_80 [4];\n  int local_7c;\n  void *local_78;\n  int local_74;\n  int local_70 [5];\n  int local_5c;\n  uint local_58;\n  uint local_54;\n  uint local_50;\n  int local_4c;\n  uint local_48;\n  uint local_44;\n  uint local_40;\n  uint local_3c;\n  int local_34;\n  undefined1 local_2c;\n  byte local_2b;\n  byte local_2a;\n  char local_29;\n  int local_24;\n  int local_20;\n  undefined4 uStack_14;\n  \n  bVar21 = 0;\n  uStack_14 = 0x23639;\n  __ptr = (int *)*param_1;\n  local_20 = *(int *)(in_GS_OFFSET + 0x14);\n  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;\n  local_8c = 0;\n  param_1[3] = param_4;\n  param_1[2] = 0;\n  param_1[6] = 0;\n  if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }\n  param_1[2] = 0x88;\n  *__ptr = 0;\n  __ptr[0x21] = 0;\n  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);\n  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }\n  __ptr[0x10] = 0x1f;\n  if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }\nLAB_00023fc0:\n  local_8c = 0xc;\n  goto LAB_00023fc8;\ncode_r0x00023bf6:\n  iVar18 = iVar18 + 1;\n  if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }\n  goto LAB_00023be5;\nLAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }\n  if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }\nLAB_00023dab:\n  local_8c = 0;\n  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;\n  if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }\nLAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);\n  __ptr[0x12] = iVar9;\n  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);\n  local_94 = iVar9;\n  local_88[0] = iVar9;\n  if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }\nLAB_00023f26:\n  iVar9 = *param_1;\n  puVar23 = *(undefined4 **)(iVar9 + 0x38);\n  local_8c = local_94;\n  while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }\n  *(undefined4 *)(iVar9 + 0x38) = 0;\n  *(undefined4 *)(iVar9 + 0x40) = 0x1f;\n  *(undefined4 *)(iVar9 + 0x34) = 0;\n  free(*(void **)(iVar9 + 0x10));\n  *(undefined4 *)(iVar9 + 0x10) = 0;\n  FUN_000188a0();\n  iVar9 = local_8c;\n  if (local_8c == 0) goto LAB_00023f97;\nLAB_00023fc8:\n  FUN_0001c4f0();\n  *param_1 = 0;\n  param_1[1] = 0;\n  iVar9 = local_8c;\nLAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }\n  return iVar9;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "byte bVar2;" (type_identifier "byte") (identifier "bVar2") (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (declaration "char cVar5;" (primitive_type "char") (identifier "cVar5") (; ";")) (declaration "void *pvVar6;" (primitive_type "void") (pointer_declarator "*pvVar6" (* "*") (identifier "pvVar6")) (; ";")) (declaration "size_t sVar7;" (primitive_type "size_t") (identifier "sVar7") (; ";")) (declaration "byte *pbVar8;" (type_identifier "byte") (pointer_declarator "*pbVar8" (* "*") (identifier "pbVar8")) (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "void *pvVar11;" (primitive_type "void") (pointer_declarator "*pvVar11" (* "*") (identifier "pvVar11")) (; ";")) (declaration "void *pvVar12;" (primitive_type "void") (pointer_declarator "*pvVar12" (* "*") (identifier "pvVar12")) (; ";")) (declaration "void *pvVar13;" (primitive_type "void") (pointer_declarator "*pvVar13" (* "*") (identifier "pvVar13")) (; ";")) (declaration "int iVar14;" (primitive_type "int") (identifier "iVar14") (; ";")) (declaration "wint_t wVar15;" (type_identifier "wint_t") (identifier "wVar15") (; ";")) (declaration "uint *puVar16;" (type_identifier "uint") (pointer_declarator "*puVar16" (* "*") (identifier "puVar16")) (; ";")) (declaration "int *__ptr;" (primitive_type "int") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (declaration "uint uVar17;" (type_identifier "uint") (identifier "uVar17") (; ";")) (declaration "int iVar18;" (primitive_type "int") (identifier "iVar18") (; ";")) (declaration "int iVar19;" (primitive_type "int") (identifier "iVar19") (; ";")) (declaration "int *piVar20;" (primitive_type "int") (pointer_declarator "*piVar20" (* "*") (identifier "piVar20")) (; ";")) (declaration "byte bVar21;" (type_identifier "byte") (identifier "bVar21") (; ";")) (declaration "uint uVar22;" (type_identifier "uint") (identifier "uVar22") (; ";")) (declaration "undefined4 *puVar23;" (type_identifier "undefined4") (pointer_declarator "*puVar23" (* "*") (identifier "puVar23")) (; ";")) (declaration "byte *pbVar24;" (type_identifier "byte") (pointer_declarator "*pbVar24" (* "*") (identifier "pbVar24")) (; ";")) (declaration "size_t __size;" (primitive_type "size_t") (identifier "__size") (; ";")) (declaration "uint *puVar25;" (type_identifier "uint") (pointer_declarator "*puVar25" (* "*") (identifier "puVar25")) (; ";")) (declaration "int in_GS_OFFSET;" (primitive_type "int") (identifier "in_GS_OFFSET") (; ";")) (declaration "bool bVar26;" (primitive_type "bool") (identifier "bVar26") (; ";")) (declaration "bool bVar27;" (primitive_type "bool") (identifier "bVar27") (; ";")) (declaration "undefined1 *local_ac;" (type_identifier "undefined1") (pointer_declarator "*local_ac" (* "*") (identifier "local_ac")) (; ";")) (declaration "int local_94;" (primitive_type "int") (identifier "local_94") (; ";")) (declaration "int local_8c;" (primitive_type "int") (identifier "local_8c") (; ";")) (declaration "int local_88 [2];" (primitive_type "int") (array_declarator "local_88 [2]" (identifier "local_88") ([ "[") (number_literal "2") (] "]")) (; ";")) (declaration "undefined1 local_80 [4];" (type_identifier "undefined1") (array_declarator "local_80 [4]" (identifier "local_80") ([ "[") (number_literal "4") (] "]")) (; ";")) (declaration "int local_7c;" (primitive_type "int") (identifier "local_7c") (; ";")) (declaration "void *local_78;" (primitive_type "void") (pointer_declarator "*local_78" (* "*") (identifier "local_78")) (; ";")) (declaration "int local_74;" (primitive_type "int") (identifier "local_74") (; ";")) (declaration "int local_70 [5];" (primitive_type "int") (array_declarator "local_70 [5]" (identifier "local_70") ([ "[") (number_literal "5") (] "]")) (; ";")) (declaration "int local_5c;" (primitive_type "int") (identifier "local_5c") (; ";")) (declaration "uint local_58;" (type_identifier "uint") (identifier "local_58") (; ";")) (declaration "uint local_54;" (type_identifier "uint") (identifier "local_54") (; ";")) (declaration "uint local_50;" (type_identifier "uint") (identifier "local_50") (; ";")) (declaration "int local_4c;" (primitive_type "int") (identifier "local_4c") (; ";")) (declaration "uint local_48;" (type_identifier "uint") (identifier "local_48") (; ";")) (declaration "uint local_44;" (type_identifier "uint") (identifier "local_44") (; ";")) (declaration "uint local_40;" (type_identifier "uint") (identifier "local_40") (; ";")) (declaration "uint local_3c;" (type_identifier "uint") (identifier "local_3c") (; ";")) (declaration "int local_34;" (primitive_type "int") (identifier "local_34") (; ";")) (declaration "undefined1 local_2c;" (type_identifier "undefined1") (identifier "local_2c") (; ";")) (declaration "byte local_2b;" (type_identifier "byte") (identifier "local_2b") (; ";")) (declaration "byte local_2a;" (type_identifier "byte") (identifier "local_2a") (; ";")) (declaration "char local_29;" (primitive_type "char") (identifier "local_29") (; ";")) (declaration "int local_24;" (primitive_type "int") (identifier "local_24") (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (declaration "undefined4 uStack_14;" (type_identifier "undefined4") (identifier "uStack_14") (; ";")) (expression_statement "bVar21 = 0;" (assignment_expression "bVar21 = 0" (identifier "bVar21") (= "=") (number_literal "0")) (; ";")) (expression_statement "uStack_14 = 0x23639;" (assignment_expression "uStack_14 = 0x23639" (identifier "uStack_14") (= "=") (number_literal "0x23639")) (; ";")) (expression_statement "__ptr = (int *)*param_1;" (assignment_expression "__ptr = (int *)*param_1" (identifier "__ptr") (= "=") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "local_20 = *(int *)(in_GS_OFFSET + 0x14);" (assignment_expression "local_20 = *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (= "=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;" (assignment_expression "*(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90" (pointer_expression "*(byte *)(param_1 + 7)" (* "*") (cast_expression "(byte *)(param_1 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 7)" (( "(") (binary_expression "param_1 + 7" (identifier "param_1") (+ "+") (number_literal "7")) () ")")))) (= "=") (binary_expression "*(byte *)(param_1 + 7) & 0x90" (pointer_expression "*(byte *)(param_1 + 7)" (* "*") (cast_expression "(byte *)(param_1 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 7)" (( "(") (binary_expression "param_1 + 7" (identifier "param_1") (+ "+") (number_literal "7")) () ")")))) (& "&") (number_literal "0x90"))) (; ";")) (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" (identifier "local_8c") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[3] = param_4;" (assignment_expression "param_1[3] = param_4" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "param_4")) (; ";")) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if ((uint)param_1[1] < 0x88) {\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }" (if "if") (parenthesized_expression "((uint)param_1[1] < 0x88)" (( "(") (binary_expression "(uint)param_1[1] < 0x88" (cast_expression "(uint)param_1[1]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (< "<") (number_literal "0x88")) () ")")) (compound_statement "{\n    __ptr = (int *)realloc(__ptr,0x88);\n    if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }\n    param_1[1] = 0x88;\n    *param_1 = (int)__ptr;\n  }" ({ "{") (expression_statement "__ptr = (int *)realloc(__ptr,0x88);" (assignment_expression "__ptr = (int *)realloc(__ptr,0x88)" (identifier "__ptr") (= "=") (cast_expression "(int *)realloc(__ptr,0x88)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "realloc(__ptr,0x88)" (identifier "realloc") (argument_list "(__ptr,0x88)" (( "(") (identifier "__ptr") (, ",") (number_literal "0x88") () ")"))))) (; ";")) (if_statement "if (__ptr == (int *)0x0) {\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }" (if "if") (parenthesized_expression "(__ptr == (int *)0x0)" (( "(") (binary_expression "__ptr == (int *)0x0" (identifier "__ptr") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar9 = 0xc;\n      goto LAB_00023f97;\n    }" ({ "{") (expression_statement "iVar9 = 0xc;" (assignment_expression "iVar9 = 0xc" (identifier "iVar9") (= "=") (number_literal "0xc")) (; ";")) (goto_statement "goto LAB_00023f97;" (goto "goto") (statement_identifier "LAB_00023f97") (; ";")) (} "}"))) (expression_statement "param_1[1] = 0x88;" (assignment_expression "param_1[1] = 0x88" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0x88")) (; ";")) (expression_statement "*param_1 = (int)__ptr;" (assignment_expression "*param_1 = (int)__ptr" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (cast_expression "(int)__ptr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__ptr"))) (; ";")) (} "}"))) (expression_statement "param_1[2] = 0x88;" (assignment_expression "param_1[2] = 0x88" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0x88")) (; ";")) (expression_statement "*__ptr = 0;" (assignment_expression "*__ptr = 0" (pointer_expression "*__ptr" (* "*") (identifier "__ptr")) (= "=") (number_literal "0")) (; ";")) (expression_statement "__ptr[0x21] = 0;" (assignment_expression "__ptr[0x21] = 0" (subscript_expression "__ptr[0x21]" (identifier "__ptr") ([ "[") (number_literal "0x21") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);" (assignment_expression "puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc)" (identifier "puVar23") (= "=") (cast_expression "(undefined4 *)((uint)(__ptr + 1) & 0xfffffffc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((uint)(__ptr + 1) & 0xfffffffc)" (( "(") (binary_expression "(uint)(__ptr + 1) & 0xfffffffc" (call_expression "(uint)(__ptr + 1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(__ptr + 1)" (( "(") (binary_expression "__ptr + 1" (identifier "__ptr") (+ "+") (number_literal "1")) () ")"))) (& "&") (number_literal "0xfffffffc")) () ")")))) (; ";")) (for_statement "for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;\n      uVar17 != 0; uVar17 = uVar17 - 1) {\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }" (for "for") (( "(") (assignment_expression "uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2" (identifier "uVar17") (= "=") (binary_expression "(uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2" (call_expression "(uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)))" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)))" (( "(") (binary_expression "(int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))" (cast_expression "(int)__ptr" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__ptr")) (+ "+") (parenthesized_expression "(0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))" (( "(") (binary_expression "0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc)" (number_literal "0x88") (- "-") (cast_expression "(int)((uint)(__ptr + 1) & 0xfffffffc)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((uint)(__ptr + 1) & 0xfffffffc)" (( "(") (binary_expression "(uint)(__ptr + 1) & 0xfffffffc" (call_expression "(uint)(__ptr + 1)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(__ptr + 1)" (( "(") (binary_expression "__ptr + 1" (identifier "__ptr") (+ "+") (number_literal "1")) () ")"))) (& "&") (number_literal "0xfffffffc")) () ")")))) () ")"))) () ")"))) (>> ">>") (number_literal "2"))) (; ";") (binary_expression "uVar17 != 0" (identifier "uVar17") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "uVar17 = uVar17 - 1" (identifier "uVar17") (= "=") (binary_expression "uVar17 - 1" (identifier "uVar17") (- "-") (number_literal "1"))) () ")") (compound_statement "{\n    *puVar23 = 0;\n    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;\n  }" ({ "{") (expression_statement "*puVar23 = 0;" (assignment_expression "*puVar23 = 0" (pointer_expression "*puVar23" (* "*") (identifier "puVar23")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar23 = puVar23 + (uint)bVar21 * -2 + 1;" (assignment_expression "puVar23 = puVar23 + (uint)bVar21 * -2 + 1" (identifier "puVar23") (= "=") (binary_expression "puVar23 + (uint)bVar21 * -2 + 1" (binary_expression "puVar23 + (uint)bVar21 * -2" (identifier "puVar23") (+ "+") (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar21")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "__ptr[0x10] = 0x1f;" (assignment_expression "__ptr[0x10] = 0x1f" (subscript_expression "__ptr[0x10]" (identifier "__ptr") ([ "[") (number_literal "0x10") (] "]")) (= "=") (number_literal "0x1f")) (; ";")) (if_statement "if (param_3 < 0xaaaaaaa) {\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }" (if "if") (parenthesized_expression "(param_3 < 0xaaaaaaa)" (( "(") (binary_expression "param_3 < 0xaaaaaaa" (identifier "param_3") (< "<") (number_literal "0xaaaaaaa")) () ")")) (compound_statement "{\n    iVar9 = param_3 + 1;\n    __ptr[1] = iVar9;\n    pvVar6 = malloc(iVar9 * 8);\n    *__ptr = (int)pvVar6;\n    if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }\n    pvVar6 = calloc(0xc,uVar17);\n    __ptr[0x11] = iVar18;\n    __ptr[8] = (int)pvVar6;\n    sVar7 = __ctype_get_mb_cur_max();\n    __ptr[0x17] = sVar7;\n    pbVar8 = (byte *)nl_langinfo(0xe);\n    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }\n    bVar2 = *(byte *)(__ptr + 0x16);\n    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;\n    if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }\n    if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }\n  }" ({ "{") (expression_statement "iVar9 = param_3 + 1;" (assignment_expression "iVar9 = param_3 + 1" (identifier "iVar9") (= "=") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "__ptr[1] = iVar9;" (assignment_expression "__ptr[1] = iVar9" (subscript_expression "__ptr[1]" (identifier "__ptr") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar9")) (; ";")) (expression_statement "pvVar6 = malloc(iVar9 * 8);" (assignment_expression "pvVar6 = malloc(iVar9 * 8)" (identifier "pvVar6") (= "=") (call_expression "malloc(iVar9 * 8)" (identifier "malloc") (argument_list "(iVar9 * 8)" (( "(") (binary_expression "iVar9 * 8" (identifier "iVar9") (* "*") (number_literal "8")) () ")")))) (; ";")) (expression_statement "*__ptr = (int)pvVar6;" (assignment_expression "*__ptr = (int)pvVar6" (pointer_expression "*__ptr" (* "*") (identifier "__ptr")) (= "=") (cast_expression "(int)pvVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar6"))) (; ";")) (if_statement "if (param_3 == 0) {\n      iVar18 = 0;\n      uVar17 = 1;\n    }\n    else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      iVar18 = 0;\n      uVar17 = 1;\n    }" ({ "{") (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" (identifier "iVar18") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar17 = 1;" (assignment_expression "uVar17 = 1" (identifier "uVar17") (= "=") (number_literal "1")) (; ";")) (} "}")) (else_clause "else {\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" (else "else") (compound_statement "{\n      uVar17 = 1;\n      do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);\n      iVar18 = uVar17 - 1;\n    }" ({ "{") (expression_statement "uVar17 = 1;" (assignment_expression "uVar17 = 1" (identifier "uVar17") (= "=") (number_literal "1")) (; ";")) (do_statement "do {\n        uVar17 = uVar17 * 2;\n      } while (uVar17 <= param_3);" (do "do") (compound_statement "{\n        uVar17 = uVar17 * 2;\n      }" ({ "{") (expression_statement "uVar17 = uVar17 * 2;" (assignment_expression "uVar17 = uVar17 * 2" (identifier "uVar17") (= "=") (binary_expression "uVar17 * 2" (identifier "uVar17") (* "*") (number_literal "2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar17 <= param_3)" (( "(") (binary_expression "uVar17 <= param_3" (identifier "uVar17") (<= "<=") (identifier "param_3")) () ")")) (; ";")) (expression_statement "iVar18 = uVar17 - 1;" (assignment_expression "iVar18 = uVar17 - 1" (identifier "iVar18") (= "=") (binary_expression "uVar17 - 1" (identifier "uVar17") (- "-") (number_literal "1"))) (; ";")) (} "}")))) (expression_statement "pvVar6 = calloc(0xc,uVar17);" (assignment_expression "pvVar6 = calloc(0xc,uVar17)" (identifier "pvVar6") (= "=") (call_expression "calloc(0xc,uVar17)" (identifier "calloc") (argument_list "(0xc,uVar17)" (( "(") (number_literal "0xc") (, ",") (identifier "uVar17") () ")")))) (; ";")) (expression_statement "__ptr[0x11] = iVar18;" (assignment_expression "__ptr[0x11] = iVar18" (subscript_expression "__ptr[0x11]" (identifier "__ptr") ([ "[") (number_literal "0x11") (] "]")) (= "=") (identifier "iVar18")) (; ";")) (expression_statement "__ptr[8] = (int)pvVar6;" (assignment_expression "__ptr[8] = (int)pvVar6" (subscript_expression "__ptr[8]" (identifier "__ptr") ([ "[") (number_literal "8") (] "]")) (= "=") (cast_expression "(int)pvVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar6"))) (; ";")) (expression_statement "sVar7 = __ctype_get_mb_cur_max();" (assignment_expression "sVar7 = __ctype_get_mb_cur_max()" (identifier "sVar7") (= "=") (call_expression "__ctype_get_mb_cur_max()" (identifier "__ctype_get_mb_cur_max") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "__ptr[0x17] = sVar7;" (assignment_expression "__ptr[0x17] = sVar7" (subscript_expression "__ptr[0x17]" (identifier "__ptr") ([ "[") (number_literal "0x17") (] "]")) (= "=") (identifier "sVar7")) (; ";")) (expression_statement "pbVar8 = (byte *)nl_langinfo(0xe);" (assignment_expression "pbVar8 = (byte *)nl_langinfo(0xe)" (identifier "pbVar8") (= "=") (cast_expression "(byte *)nl_langinfo(0xe)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "nl_langinfo(0xe)" (identifier "nl_langinfo") (argument_list "(0xe)" (( "(") (number_literal "0xe") () ")"))))) (; ";")) (if_statement "if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       ) {\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }" (if "if") (parenthesized_expression "((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)\n       )" (( "(") (binary_expression "(((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)" (parenthesized_expression "(((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54))" (( "(") (binary_expression "((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)" (parenthesized_expression "((*pbVar8 & 0xdf) == 0x55)" (( "(") (binary_expression "(*pbVar8 & 0xdf) == 0x55" (parenthesized_expression "(*pbVar8 & 0xdf)" (( "(") (binary_expression "*pbVar8 & 0xdf" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (& "&") (number_literal "0xdf")) () ")")) (== "==") (number_literal "0x55")) () ")")) (&& "&&") (parenthesized_expression "((pbVar8[1] & 0xdf) == 0x54)" (( "(") (binary_expression "(pbVar8[1] & 0xdf) == 0x54" (parenthesized_expression "(pbVar8[1] & 0xdf)" (( "(") (binary_expression "pbVar8[1] & 0xdf" (subscript_expression "pbVar8[1]" (identifier "pbVar8") ([ "[") (number_literal "1") (] "]")) (& "&") (number_literal "0xdf")) () ")")) (== "==") (number_literal "0x54")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((pbVar8[2] & 0xdf) == 0x46)" (( "(") (binary_expression "(pbVar8[2] & 0xdf) == 0x46" (parenthesized_expression "(pbVar8[2] & 0xdf)" (( "(") (binary_expression "pbVar8[2] & 0xdf" (subscript_expression "pbVar8[2]" (identifier "pbVar8") ([ "[") (number_literal "2") (] "]")) (& "&") (number_literal "0xdf")) () ")")) (== "==") (number_literal "0x46")) () ")"))) () ")")) (compound_statement "{\n      bVar26 = pbVar8[3] < 0x2d;\n      bVar27 = pbVar8[3] == 0x2d;\n      iVar18 = 2;\n      pbVar8 = pbVar8 + bVar27 + 3;\n      pbVar24 = &DAT_00027a0a;\n      do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);\n      if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }\n    }" ({ "{") (expression_statement "bVar26 = pbVar8[3] < 0x2d;" (assignment_expression "bVar26 = pbVar8[3] < 0x2d" (identifier "bVar26") (= "=") (binary_expression "pbVar8[3] < 0x2d" (subscript_expression "pbVar8[3]" (identifier "pbVar8") ([ "[") (number_literal "3") (] "]")) (< "<") (number_literal "0x2d"))) (; ";")) (expression_statement "bVar27 = pbVar8[3] == 0x2d;" (assignment_expression "bVar27 = pbVar8[3] == 0x2d" (identifier "bVar27") (= "=") (binary_expression "pbVar8[3] == 0x2d" (subscript_expression "pbVar8[3]" (identifier "pbVar8") ([ "[") (number_literal "3") (] "]")) (== "==") (number_literal "0x2d"))) (; ";")) (expression_statement "iVar18 = 2;" (assignment_expression "iVar18 = 2" (identifier "iVar18") (= "=") (number_literal "2")) (; ";")) (expression_statement "pbVar8 = pbVar8 + bVar27 + 3;" (assignment_expression "pbVar8 = pbVar8 + bVar27 + 3" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + bVar27 + 3" (binary_expression "pbVar8 + bVar27" (identifier "pbVar8") (+ "+") (identifier "bVar27")) (+ "+") (number_literal "3"))) (; ";")) (expression_statement "pbVar24 = &DAT_00027a0a;" (assignment_expression "pbVar24 = &DAT_00027a0a" (identifier "pbVar24") (= "=") (pointer_expression "&DAT_00027a0a" (& "&") (identifier "DAT_00027a0a"))) (; ";")) (do_statement "do {\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      } while (bVar27);" (do "do") (compound_statement "{\n        if (iVar18 == 0) break;\n        iVar18 = iVar18 + -1;\n        bVar26 = *pbVar8 < *pbVar24;\n        bVar27 = *pbVar8 == *pbVar24;\n        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;\n        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;\n      }" ({ "{") (if_statement "if (iVar18 == 0) break;" (if "if") (parenthesized_expression "(iVar18 == 0)" (( "(") (binary_expression "iVar18 == 0" (identifier "iVar18") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar18 = iVar18 + -1;" (assignment_expression "iVar18 = iVar18 + -1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + -1" (identifier "iVar18") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "bVar26 = *pbVar8 < *pbVar24;" (assignment_expression "bVar26 = *pbVar8 < *pbVar24" (identifier "bVar26") (= "=") (binary_expression "*pbVar8 < *pbVar24" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (< "<") (pointer_expression "*pbVar24" (* "*") (identifier "pbVar24")))) (; ";")) (expression_statement "bVar27 = *pbVar8 == *pbVar24;" (assignment_expression "bVar27 = *pbVar8 == *pbVar24" (identifier "bVar27") (= "=") (binary_expression "*pbVar8 == *pbVar24" (pointer_expression "*pbVar8" (* "*") (identifier "pbVar8")) (== "==") (pointer_expression "*pbVar24" (* "*") (identifier "pbVar24")))) (; ";")) (expression_statement "pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;" (assignment_expression "pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + (uint)bVar21 * -2 + 1" (binary_expression "pbVar8 + (uint)bVar21 * -2" (identifier "pbVar8") (+ "+") (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar21")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;" (assignment_expression "pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1" (identifier "pbVar24") (= "=") (binary_expression "pbVar24 + (uint)bVar21 * -2 + 1" (binary_expression "pbVar24 + (uint)bVar21 * -2" (identifier "pbVar24") (+ "+") (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar21")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar27)" (( "(") (identifier "bVar27") () ")")) (; ";")) (if_statement "if ((!bVar26 && !bVar27) == bVar26) {\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }" (if "if") (parenthesized_expression "((!bVar26 && !bVar27) == bVar26)" (( "(") (binary_expression "(!bVar26 && !bVar27) == bVar26" (parenthesized_expression "(!bVar26 && !bVar27)" (( "(") (binary_expression "!bVar26 && !bVar27" (unary_expression "!bVar26" (! "!") (identifier "bVar26")) (&& "&&") (unary_expression "!bVar27" (! "!") (identifier "bVar27"))) () ")")) (== "==") (identifier "bVar26")) () ")")) (compound_statement "{\n        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;\n      }" ({ "{") (expression_statement "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;" (assignment_expression "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (= "=") (binary_expression "*(byte *)(__ptr + 0x16) | 4" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (| "|") (number_literal "4"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "bVar2 = *(byte *)(__ptr + 0x16);" (assignment_expression "bVar2 = *(byte *)(__ptr + 0x16)" (identifier "bVar2") (= "=") (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")"))))) (; ";")) (expression_statement "*(byte *)(__ptr + 0x16) = bVar2 & 0xf7;" (assignment_expression "*(byte *)(__ptr + 0x16) = bVar2 & 0xf7" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (= "=") (binary_expression "bVar2 & 0xf7" (identifier "bVar2") (& "&") (number_literal "0xf7"))) (; ";")) (if_statement "if (1 < __ptr[0x17]) {\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }" (if "if") (parenthesized_expression "(1 < __ptr[0x17])" (( "(") (binary_expression "1 < __ptr[0x17]" (number_literal "1") (< "<") (subscript_expression "__ptr[0x17]" (identifier "__ptr") ([ "[") (number_literal "0x17") (] "]"))) () ")")) (compound_statement "{\n      if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }\n    }" ({ "{") (if_statement "if ((bVar2 & 4) == 0) {\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }\n      else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" (if "if") (parenthesized_expression "((bVar2 & 4) == 0)" (( "(") (binary_expression "(bVar2 & 4) == 0" (parenthesized_expression "(bVar2 & 4)" (( "(") (binary_expression "bVar2 & 4" (identifier "bVar2") (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        pvVar6 = calloc(0x20,1);\n        __ptr[0xf] = (int)pvVar6;\n        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;\n        iVar18 = 0;\n        do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);\n      }" ({ "{") (expression_statement "pvVar6 = calloc(0x20,1);" (assignment_expression "pvVar6 = calloc(0x20,1)" (identifier "pvVar6") (= "=") (call_expression "calloc(0x20,1)" (identifier "calloc") (argument_list "(0x20,1)" (( "(") (number_literal "0x20") (, ",") (number_literal "1") () ")")))) (; ";")) (expression_statement "__ptr[0xf] = (int)pvVar6;" (assignment_expression "__ptr[0xf] = (int)pvVar6" (subscript_expression "__ptr[0xf]" (identifier "__ptr") ([ "[") (number_literal "0xf") (] "]")) (= "=") (cast_expression "(int)pvVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar6"))) (; ";")) (if_statement "if (pvVar6 == (void *)0x0) goto LAB_00023fc0;" (if "if") (parenthesized_expression "(pvVar6 == (void *)0x0)" (( "(") (binary_expression "pvVar6 == (void *)0x0" (identifier "pvVar6") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00023fc0;" (goto "goto") (statement_identifier "LAB_00023fc0") (; ";"))) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" (identifier "iVar18") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        } while (iVar18 != 0x20);" (do "do") (compound_statement "{\n          uVar17 = iVar18 * 8;\n          iVar19 = 0;\n          do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);\nLAB_00024110:\n          iVar18 = iVar18 + 4;\n        }" ({ "{") (expression_statement "uVar17 = iVar18 * 8;" (assignment_expression "uVar17 = iVar18 * 8" (identifier "uVar17") (= "=") (binary_expression "iVar18 * 8" (identifier "iVar18") (* "*") (number_literal "8"))) (; ";")) (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" (identifier "iVar19") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          } while (iVar19 != 0x20);" (do "do") (compound_statement "{\n            while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }\n            *(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);\n            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;\n            if (wVar15 != uVar17) goto LAB_000240ac;\n            iVar19 = iVar19 + 1;\n            uVar17 = uVar17 + 1;\n          }" ({ "{") (while_statement "while( true ) {\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n              wVar15 = btowc(uVar17);\n              if (wVar15 != 0xffffffff) break;\n              if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }\nLAB_000240b4:\n              iVar19 = iVar19 + 1;\n              uVar17 = uVar17 + 1;\n              if (iVar19 == 0x20) goto LAB_00024110;\n            }" ({ "{") (expression_statement "wVar15 = btowc(uVar17);" (assignment_expression "wVar15 = btowc(uVar17)" (identifier "wVar15") (= "=") (call_expression "btowc(uVar17)" (identifier "btowc") (argument_list "(uVar17)" (( "(") (identifier "uVar17") () ")")))) (; ";")) (if_statement "if (wVar15 != 0xffffffff) break;" (if "if") (parenthesized_expression "(wVar15 != 0xffffffff)" (( "(") (binary_expression "wVar15 != 0xffffffff" (identifier "wVar15") (!= "!=") (number_literal "0xffffffff")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if ((uVar17 & 0xffffff80) == 0) {\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }" (if "if") (parenthesized_expression "((uVar17 & 0xffffff80) == 0)" (( "(") (binary_expression "(uVar17 & 0xffffff80) == 0" (parenthesized_expression "(uVar17 & 0xffffff80)" (( "(") (binary_expression "uVar17 & 0xffffff80" (identifier "uVar17") (& "&") (number_literal "0xffffff80")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;\n              }" ({ "{") (labeled_statement "LAB_000240ac:\n                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;" (statement_identifier "LAB_000240ac") (: ":") (expression_statement "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;" (assignment_expression "*(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (= "=") (binary_expression "*(byte *)(__ptr + 0x16) | 8" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (| "|") (number_literal "8"))) (; ";"))) (} "}"))) (labeled_statement "LAB_000240b4:\n              iVar19 = iVar19 + 1;" (statement_identifier "LAB_000240b4") (: ":") (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" (identifier "iVar19") (= "=") (binary_expression "iVar19 + 1" (identifier "iVar19") (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "uVar17 = uVar17 + 1;" (assignment_expression "uVar17 = uVar17 + 1" (identifier "uVar17") (= "=") (binary_expression "uVar17 + 1" (identifier "uVar17") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar19 == 0x20) goto LAB_00024110;" (if "if") (parenthesized_expression "(iVar19 == 0x20)" (( "(") (binary_expression "iVar19 == 0x20" (identifier "iVar19") (== "==") (number_literal "0x20")) () ")")) (goto_statement "goto LAB_00024110;" (goto "goto") (statement_identifier "LAB_00024110") (; ";"))) (} "}"))) (expression_statement "*(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);" (assignment_expression "*(uint *)(__ptr[0xf] + iVar18) =\n                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f)" (pointer_expression "*(uint *)(__ptr[0xf] + iVar18)" (* "*") (cast_expression "(uint *)(__ptr[0xf] + iVar18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr[0xf] + iVar18)" (( "(") (binary_expression "__ptr[0xf] + iVar18" (subscript_expression "__ptr[0xf]" (identifier "__ptr") ([ "[") (number_literal "0xf") (] "]")) (+ "+") (identifier "iVar18")) () ")")))) (= "=") (binary_expression "*(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f)" (pointer_expression "*(uint *)(__ptr[0xf] + iVar18)" (* "*") (cast_expression "(uint *)(__ptr[0xf] + iVar18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr[0xf] + iVar18)" (( "(") (binary_expression "__ptr[0xf] + iVar18" (subscript_expression "__ptr[0xf]" (identifier "__ptr") ([ "[") (number_literal "0xf") (] "]")) (+ "+") (identifier "iVar18")) () ")")))) (| "|") (binary_expression "1 << ((byte)iVar19 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "((byte)iVar19 & 0x1f)" (( "(") (binary_expression "(byte)iVar19 & 0x1f" (cast_expression "(byte)iVar19" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar19")) (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (if_statement "if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;" (if "if") (parenthesized_expression "((uVar17 & 0xffffff80) != 0)" (( "(") (binary_expression "(uVar17 & 0xffffff80) != 0" (parenthesized_expression "(uVar17 & 0xffffff80)" (( "(") (binary_expression "uVar17 & 0xffffff80" (identifier "uVar17") (& "&") (number_literal "0xffffff80")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000240b4;" (goto "goto") (statement_identifier "LAB_000240b4") (; ";"))) (if_statement "if (wVar15 != uVar17) goto LAB_000240ac;" (if "if") (parenthesized_expression "(wVar15 != uVar17)" (( "(") (binary_expression "wVar15 != uVar17" (identifier "wVar15") (!= "!=") (identifier "uVar17")) () ")")) (goto_statement "goto LAB_000240ac;" (goto "goto") (statement_identifier "LAB_000240ac") (; ";"))) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" (identifier "iVar19") (= "=") (binary_expression "iVar19 + 1" (identifier "iVar19") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar17 = uVar17 + 1;" (assignment_expression "uVar17 = uVar17 + 1" (identifier "uVar17") (= "=") (binary_expression "uVar17 + 1" (identifier "uVar17") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar19 != 0x20)" (( "(") (binary_expression "iVar19 != 0x20" (identifier "iVar19") (!= "!=") (number_literal "0x20")) () ")")) (; ";")) (labeled_statement "LAB_00024110:\n          iVar18 = iVar18 + 4;" (statement_identifier "LAB_00024110") (: ":") (expression_statement "iVar18 = iVar18 + 4;" (assignment_expression "iVar18 = iVar18 + 4" (identifier "iVar18") (= "=") (binary_expression "iVar18 + 4" (identifier "iVar18") (+ "+") (number_literal "4"))) (; ";"))) (} "}")) (while "while") (parenthesized_expression "(iVar18 != 0x20)" (( "(") (binary_expression "iVar18 != 0x20" (identifier "iVar18") (!= "!=") (number_literal "0x20")) () ")")) (; ";")) (} "}")) (else_clause "else {\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" (else "else") (compound_statement "{\n        __ptr[0xf] = (int)&DAT_00027f60;\n      }" ({ "{") (expression_statement "__ptr[0xf] = (int)&DAT_00027f60;" (assignment_expression "__ptr[0xf] = (int)&DAT_00027f60" (subscript_expression "__ptr[0xf]" (identifier "__ptr") ([ "[") (number_literal "0xf") (] "]")) (= "=") (cast_expression "(int)&DAT_00027f60" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "&DAT_00027f60" (& "&") (identifier "DAT_00027f60")))) (; ";")) (} "}")))) (} "}"))) (if_statement "if ((*__ptr != 0) && (__ptr[8] != 0)) {\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }" (if "if") (parenthesized_expression "((*__ptr != 0) && (__ptr[8] != 0))" (( "(") (binary_expression "(*__ptr != 0) && (__ptr[8] != 0)" (parenthesized_expression "(*__ptr != 0)" (( "(") (binary_expression "*__ptr != 0" (pointer_expression "*__ptr" (* "*") (identifier "__ptr")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(__ptr[8] != 0)" (( "(") (binary_expression "__ptr[8] != 0" (subscript_expression "__ptr[8]" (identifier "__ptr") ([ "[") (number_literal "8") (] "]")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n      local_8c = 0;\n      iVar18 = param_1[5];\n      piVar20 = local_70;\n      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }\n      uVar17 = param_4 & 0x400000;\n      local_2c = uVar17 != 0;\n      iVar19 = __ptr[0x17];\n      local_29 = iVar18 != 0 || uVar17 != 0;\n      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;\n      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;\n      local_74 = param_2;\n      local_48 = param_3;\n      local_44 = param_3;\n      local_40 = param_3;\n      local_3c = param_3;\n      local_34 = iVar18;\n      local_24 = iVar19;\n      if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }\nLAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);\n      while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }\n      *(undefined4 *)(iVar19 + 0x38) = 0;\n      *(undefined4 *)(iVar19 + 0x40) = 0x1f;\n      *(undefined4 *)(iVar19 + 0x34) = 0;\n      free(*(void **)(iVar19 + 0x10));\n      *(undefined4 *)(iVar19 + 0x10) = 0;\n      FUN_000188a0();\n      FUN_0001c4f0();\n      *param_1 = 0;\n      param_1[1] = 0;\n      iVar9 = local_8c;\n      goto LAB_00023f97;\n    }" ({ "{") (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" (identifier "local_8c") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar18 = param_1[5];" (assignment_expression "iVar18 = param_1[5]" (identifier "iVar18") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "piVar20 = local_70;" (assignment_expression "piVar20 = local_70" (identifier "piVar20") (= "=") (identifier "local_70")) (; ";")) (for_statement "for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }" (for "for") (( "(") (assignment_expression "iVar19 = 0x13" (identifier "iVar19") (= "=") (number_literal "0x13")) (; ";") (binary_expression "iVar19 != 0" (identifier "iVar19") (!= "!=") (number_literal "0")) (; ";") (assignment_expression "iVar19 = iVar19 + -1" (identifier "iVar19") (= "=") (binary_expression "iVar19 + -1" (identifier "iVar19") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n        *piVar20 = 0;\n        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;\n      }" ({ "{") (expression_statement "*piVar20 = 0;" (assignment_expression "*piVar20 = 0" (pointer_expression "*piVar20" (* "*") (identifier "piVar20")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar20 = piVar20 + (uint)bVar21 * -2 + 1;" (assignment_expression "piVar20 = piVar20 + (uint)bVar21 * -2 + 1" (identifier "piVar20") (= "=") (binary_expression "piVar20 + (uint)bVar21 * -2 + 1" (binary_expression "piVar20 + (uint)bVar21 * -2" (identifier "piVar20") (+ "+") (binary_expression "(uint)bVar21 * -2" (cast_expression "(uint)bVar21" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "bVar21")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "uVar17 = param_4 & 0x400000;" (assignment_expression "uVar17 = param_4 & 0x400000" (identifier "uVar17") (= "=") (binary_expression "param_4 & 0x400000" (identifier "param_4") (& "&") (number_literal "0x400000"))) (; ";")) (expression_statement "local_2c = uVar17 != 0;" (assignment_expression "local_2c = uVar17 != 0" (identifier "local_2c") (= "=") (binary_expression "uVar17 != 0" (identifier "uVar17") (!= "!=") (number_literal "0"))) (; ";")) (expression_statement "iVar19 = __ptr[0x17];" (assignment_expression "iVar19 = __ptr[0x17]" (identifier "iVar19") (= "=") (subscript_expression "__ptr[0x17]" (identifier "__ptr") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "local_29 = iVar18 != 0 || uVar17 != 0;" (assignment_expression "local_29 = iVar18 != 0 || uVar17 != 0" (identifier "local_29") (= "=") (binary_expression "iVar18 != 0 || uVar17 != 0" (binary_expression "iVar18 != 0" (identifier "iVar18") (!= "!=") (number_literal "0")) (|| "||") (binary_expression "uVar17 != 0" (identifier "uVar17") (!= "!=") (number_literal "0")))) (; ";")) (expression_statement "local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;" (assignment_expression "local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1" (identifier "local_2a") (= "=") (binary_expression "*(byte *)(__ptr + 0x16) >> 3 & 1" (binary_expression "*(byte *)(__ptr + 0x16) >> 3" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (>> ">>") (number_literal "3")) (& "&") (number_literal "1"))) (; ";")) (expression_statement "local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;" (assignment_expression "local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1" (identifier "local_2b") (= "=") (binary_expression "*(byte *)(__ptr + 0x16) >> 2 & 1" (binary_expression "*(byte *)(__ptr + 0x16) >> 2" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (>> ">>") (number_literal "2")) (& "&") (number_literal "1"))) (; ";")) (expression_statement "local_74 = param_2;" (assignment_expression "local_74 = param_2" (identifier "local_74") (= "=") (identifier "param_2")) (; ";")) (expression_statement "local_48 = param_3;" (assignment_expression "local_48 = param_3" (identifier "local_48") (= "=") (identifier "param_3")) (; ";")) (expression_statement "local_44 = param_3;" (assignment_expression "local_44 = param_3" (identifier "local_44") (= "=") (identifier "param_3")) (; ";")) (expression_statement "local_40 = param_3;" (assignment_expression "local_40 = param_3" (identifier "local_40") (= "=") (identifier "param_3")) (; ";")) (expression_statement "local_3c = param_3;" (assignment_expression "local_3c = param_3" (identifier "local_3c") (= "=") (identifier "param_3")) (; ";")) (expression_statement "local_34 = iVar18;" (assignment_expression "local_34 = iVar18" (identifier "local_34") (= "=") (identifier "iVar18")) (; ";")) (expression_statement "local_24 = iVar19;" (assignment_expression "local_24 = iVar19" (identifier "local_24") (= "=") (identifier "iVar19")) (; ";")) (if_statement "if (param_3 == 0) {\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }\n      else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }\n        local_70[0] = param_2;\n        if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }\nLAB_00023966:\n        local_58 = uVar22;\n        local_8c = 0;\n        param_1[6] = 0;\n        *(uint *)(*param_1 + 0x80) = param_4;\n        iVar9 = FUN_00021720();\n        local_4c = local_4c + iVar9;\n        iVar9 = FUN_000234b0(param_4,0,&local_8c);\n        if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }\n      }" ({ "{") (labeled_statement "LAB_00023881:\n        if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }" (statement_identifier "LAB_00023881") (: ":") (if_statement "if (local_29 != '\0') {\n          param_2 = local_70[0];\n        }" (if "if") (parenthesized_expression "(local_29 != '\0')" (( "(") (binary_expression "local_29 != '\0'" (identifier "local_29") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n          param_2 = local_70[0];\n        }" ({ "{") (expression_statement "param_2 = local_70[0];" (assignment_expression "param_2 = local_70[0]" (identifier "param_2") (= "=") (subscript_expression "local_70[0]" (identifier "local_70") ([ "[") (number_literal "0") (] "]"))) (; ";")) (} "}")))) (expression_statement "local_70[0] = param_2;" (assignment_expression "local_70[0] = param_2" (subscript_expression "local_70[0]" (identifier "local_70") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "param_2")) (; ";")) (if_statement "if (uVar17 == 0) {\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }\n        else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" (if "if") (parenthesized_expression "(uVar17 == 0)" (( "(") (binary_expression "uVar17 == 0" (identifier "uVar17") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }\n        }" ({ "{") (if_statement "if (iVar19 < 2) {\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }\n          else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }" (if "if") (parenthesized_expression "(iVar19 < 2)" (( "(") (binary_expression "iVar19 < 2" (identifier "iVar19") (< "<") (number_literal "2")) () ")")) (compound_statement "{\n            uVar22 = local_50;\n            local_54 = local_50;\n            if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }\n          }" ({ "{") (expression_statement "uVar22 = local_50;" (assignment_expression "uVar22 = local_50" (identifier "uVar22") (= "=") (identifier "local_50")) (; ";")) (expression_statement "local_54 = local_50;" (assignment_expression "local_54 = local_50" (identifier "local_54") (= "=") (identifier "local_50")) (; ";")) (if_statement "if (iVar18 != 0) {\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }" (if "if") (parenthesized_expression "(iVar18 != 0)" (( "(") (binary_expression "iVar18 != 0" (identifier "iVar18") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n              if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }\n              uVar22 = local_58;\n              local_54 = local_58;\n              if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }\n            }" ({ "{") (if_statement "if ((int)local_44 <= (int)local_50) {\n                local_50 = local_44;\n              }" (if "if") (parenthesized_expression "((int)local_44 <= (int)local_50)" (( "(") (binary_expression "(int)local_44 <= (int)local_50" (cast_expression "(int)local_44" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_44")) (<= "<=") (cast_expression "(int)local_50" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_50"))) () ")")) (compound_statement "{\n                local_50 = local_44;\n              }" ({ "{") (expression_statement "local_50 = local_44;" (assignment_expression "local_50 = local_44" (identifier "local_50") (= "=") (identifier "local_44")) (; ";")) (} "}"))) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" (identifier "uVar22") (= "=") (identifier "local_58")) (; ";")) (expression_statement "local_54 = local_58;" (assignment_expression "local_54 = local_58" (identifier "local_54") (= "=") (identifier "local_58")) (; ";")) (if_statement "if ((int)local_58 < (int)local_50) {\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }" (if "if") (parenthesized_expression "((int)local_58 < (int)local_50)" (( "(") (binary_expression "(int)local_58 < (int)local_50" (cast_expression "(int)local_58" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_58")) (< "<") (cast_expression "(int)local_50" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_50"))) () ")")) (compound_statement "{\n                do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);\n              }" ({ "{") (do_statement "do {\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                } while (local_50 != local_58);" (do "do") (compound_statement "{\n                  *(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));\n                  local_58 = local_58 + 1;\n                  uVar22 = local_50;\n                  local_54 = local_50;\n                }" ({ "{") (expression_statement "*(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));" (assignment_expression "*(undefined1 *)(param_2 + local_58) =\n                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" (pointer_expression "*(undefined1 *)(param_2 + local_58)" (* "*") (cast_expression "(undefined1 *)(param_2 + local_58)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + local_58)" (( "(") (binary_expression "param_2 + local_58" (identifier "param_2") (+ "+") (identifier "local_58")) () ")")))) (= "=") (pointer_expression "*(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" (* "*") (cast_expression "(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c))" (( "(") (binary_expression "local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c)" (identifier "local_34") (+ "+") (binary_expression "(uint)*(byte *)(local_74 + local_58 + local_5c)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)(local_74 + local_58 + local_5c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_74 + local_58 + local_5c)" (( "(") (binary_expression "local_74 + local_58 + local_5c" (binary_expression "local_74 + local_58" (identifier "local_74") (+ "+") (identifier "local_58")) (+ "+") (identifier "local_5c")) () ")"))))) () ")"))))) (; ";")) (expression_statement "local_58 = local_58 + 1;" (assignment_expression "local_58 = local_58 + 1" (identifier "local_58") (= "=") (binary_expression "local_58 + 1" (identifier "local_58") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar22 = local_50;" (assignment_expression "uVar22 = local_50" (identifier "uVar22") (= "=") (identifier "local_50")) (; ";")) (expression_statement "local_54 = local_50;" (assignment_expression "local_54 = local_50" (identifier "local_54") (= "=") (identifier "local_50")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_50 != local_58)" (( "(") (binary_expression "local_50 != local_58" (identifier "local_50") (!= "!=") (identifier "local_58")) () ")")) (; ";")) (} "}"))) (} "}"))) (} "}")) (else_clause "else {\n            FUN_00017860();\n            uVar22 = local_58;\n          }" (else "else") (compound_statement "{\n            FUN_00017860();\n            uVar22 = local_58;\n          }" ({ "{") (expression_statement "FUN_00017860();" (call_expression "FUN_00017860()" (identifier "FUN_00017860") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" (identifier "uVar22") (= "=") (identifier "local_58")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" (else "else") (compound_statement "{\n          if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }\n          FUN_000177e0();\n          uVar22 = local_58;\n        }" ({ "{") (if_statement "if (1 < iVar19) {\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }" (if "if") (parenthesized_expression "(1 < iVar19)" (( "(") (binary_expression "1 < iVar19" (number_literal "1") (< "<") (identifier "iVar19")) () ")")) (compound_statement "{\n            do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);\n            goto LAB_00023d90;\n          }" ({ "{") (do_statement "do {\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            } while (iVar9 == 0);" (do "do") (compound_statement "{\n              iVar9 = FUN_00017a40(&local_74);\n              if (iVar9 != 0) break;\n              uVar22 = local_58;\n              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;\n              iVar9 = FUN_000174a0(&local_74,local_50 * 2);\n            }" ({ "{") (expression_statement "iVar9 = FUN_00017a40(&local_74);" (assignment_expression "iVar9 = FUN_00017a40(&local_74)" (identifier "iVar9") (= "=") (call_expression "FUN_00017a40(&local_74)" (identifier "FUN_00017a40") (argument_list "(&local_74)" (( "(") (pointer_expression "&local_74" (& "&") (identifier "local_74")) () ")")))) (; ";")) (if_statement "if (iVar9 != 0) break;" (if "if") (parenthesized_expression "(iVar9 != 0)" (( "(") (binary_expression "iVar9 != 0" (identifier "iVar9") (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" (identifier "uVar22") (= "=") (identifier "local_58")) (; ";")) (if_statement "if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 ) goto LAB_00023966;" (if "if") (parenthesized_expression "(((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)\n                 )" (( "(") (binary_expression "((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)" (parenthesized_expression "((int)param_3 <= (int)local_54)" (( "(") (binary_expression "(int)param_3 <= (int)local_54" (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3")) (<= "<=") (cast_expression "(int)local_54" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_54"))) () ")")) (|| "||") (parenthesized_expression "((int)(__ptr[0x17] + local_58) < (int)local_50)" (( "(") (binary_expression "(int)(__ptr[0x17] + local_58) < (int)local_50" (cast_expression "(int)(__ptr[0x17] + local_58)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(__ptr[0x17] + local_58)" (( "(") (binary_expression "__ptr[0x17] + local_58" (subscript_expression "__ptr[0x17]" (identifier "__ptr") ([ "[") (number_literal "0x17") (] "]")) (+ "+") (identifier "local_58")) () ")"))) (< "<") (cast_expression "(int)local_50" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_50"))) () ")"))) () ")")) (goto_statement "goto LAB_00023966;" (goto "goto") (statement_identifier "LAB_00023966") (; ";"))) (expression_statement "iVar9 = FUN_000174a0(&local_74,local_50 * 2);" (assignment_expression "iVar9 = FUN_000174a0(&local_74,local_50 * 2)" (identifier "iVar9") (= "=") (call_expression "FUN_000174a0(&local_74,local_50 * 2)" (identifier "FUN_000174a0") (argument_list "(&local_74,local_50 * 2)" (( "(") (pointer_expression "&local_74" (& "&") (identifier "local_74")) (, ",") (binary_expression "local_50 * 2" (identifier "local_50") (* "*") (number_literal "2")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar9 == 0)" (( "(") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0")) () ")")) (; ";")) (goto_statement "goto LAB_00023d90;" (goto "goto") (statement_identifier "LAB_00023d90") (; ";")) (} "}"))) (expression_statement "FUN_000177e0();" (call_expression "FUN_000177e0()" (identifier "FUN_000177e0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "uVar22 = local_58;" (assignment_expression "uVar22 = local_58" (identifier "uVar22") (= "=") (identifier "local_58")) (; ";")) (} "}")))) (labeled_statement "LAB_00023966:\n        local_58 = uVar22;" (statement_identifier "LAB_00023966") (: ":") (expression_statement "local_58 = uVar22;" (assignment_expression "local_58 = uVar22" (identifier "local_58") (= "=") (identifier "uVar22")) (; ";"))) (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" (identifier "local_8c") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[6] = 0;" (assignment_expression "param_1[6] = 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(uint *)(*param_1 + 0x80) = param_4;" (assignment_expression "*(uint *)(*param_1 + 0x80) = param_4" (pointer_expression "*(uint *)(*param_1 + 0x80)" (* "*") (cast_expression "(uint *)(*param_1 + 0x80)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x80)" (( "(") (binary_expression "*param_1 + 0x80" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x80")) () ")")))) (= "=") (identifier "param_4")) (; ";")) (expression_statement "iVar9 = FUN_00021720();" (assignment_expression "iVar9 = FUN_00021720()" (identifier "iVar9") (= "=") (call_expression "FUN_00021720()" (identifier "FUN_00021720") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "local_4c = local_4c + iVar9;" (assignment_expression "local_4c = local_4c + iVar9" (identifier "local_4c") (= "=") (binary_expression "local_4c + iVar9" (identifier "local_4c") (+ "+") (identifier "iVar9"))) (; ";")) (expression_statement "iVar9 = FUN_000234b0(param_4,0,&local_8c);" (assignment_expression "iVar9 = FUN_000234b0(param_4,0,&local_8c)" (identifier "iVar9") (= "=") (call_expression "FUN_000234b0(param_4,0,&local_8c)" (identifier "FUN_000234b0") (argument_list "(param_4,0,&local_8c)" (( "(") (identifier "param_4") (, ",") (number_literal "0") (, ",") (pointer_expression "&local_8c" (& "&") (identifier "local_8c")) () ")")))) (; ";")) (if_statement "if (local_8c == 0) {\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }\n        else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" (if "if") (parenthesized_expression "(local_8c == 0)" (( "(") (binary_expression "local_8c == 0" (identifier "local_8c") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          local_7c = CONCAT31(local_7c._1_3_,2);\n          iVar18 = FUN_00019970(0,local_80);\n          iVar10 = iVar18;\n          if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }\n          local_ac = local_80;\n          iVar19 = *param_1;\n          if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }\n        }" ({ "{") (expression_statement "local_7c = CONCAT31(local_7c._1_3_,2);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,2)" (identifier "local_7c") (= "=") (call_expression "CONCAT31(local_7c._1_3_,2)" (identifier "CONCAT31") (argument_list "(local_7c._1_3_,2)" (( "(") (field_expression "local_7c._1_3_" (identifier "local_7c") (. ".") (field_identifier "_1_3_")) (, ",") (number_literal "2") () ")")))) (; ";")) (expression_statement "iVar18 = FUN_00019970(0,local_80);" (assignment_expression "iVar18 = FUN_00019970(0,local_80)" (identifier "iVar18") (= "=") (call_expression "FUN_00019970(0,local_80)" (identifier "FUN_00019970") (argument_list "(0,local_80)" (( "(") (number_literal "0") (, ",") (identifier "local_80") () ")")))) (; ";")) (expression_statement "iVar10 = iVar18;" (assignment_expression "iVar10 = iVar18" (identifier "iVar10") (= "=") (identifier "iVar18")) (; ";")) (if_statement "if (iVar9 != 0) {\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }" (if "if") (parenthesized_expression "(iVar9 != 0)" (( "(") (binary_expression "iVar9 != 0" (identifier "iVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_000239ff:\n            local_ac = local_80;\n            local_7c = CONCAT31(local_7c._1_3_,0x10);\n            iVar10 = FUN_00019970(iVar18,local_ac);\n          }" ({ "{") (labeled_statement "LAB_000239ff:\n            local_ac = local_80;" (statement_identifier "LAB_000239ff") (: ":") (expression_statement "local_ac = local_80;" (assignment_expression "local_ac = local_80" (identifier "local_ac") (= "=") (identifier "local_80")) (; ";"))) (expression_statement "local_7c = CONCAT31(local_7c._1_3_,0x10);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,0x10)" (identifier "local_7c") (= "=") (call_expression "CONCAT31(local_7c._1_3_,0x10)" (identifier "CONCAT31") (argument_list "(local_7c._1_3_,0x10)" (( "(") (field_expression "local_7c._1_3_" (identifier "local_7c") (. ".") (field_identifier "_1_3_")) (, ",") (number_literal "0x10") () ")")))) (; ";")) (expression_statement "iVar10 = FUN_00019970(iVar18,local_ac);" (assignment_expression "iVar10 = FUN_00019970(iVar18,local_ac)" (identifier "iVar10") (= "=") (call_expression "FUN_00019970(iVar18,local_ac)" (identifier "FUN_00019970") (argument_list "(iVar18,local_ac)" (( "(") (identifier "iVar18") (, ",") (identifier "local_ac") () ")")))) (; ";")) (} "}"))) (expression_statement "local_ac = local_80;" (assignment_expression "local_ac = local_80" (identifier "local_ac") (= "=") (identifier "local_80")) (; ";")) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" (identifier "iVar19") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (iVar18 == 0 || iVar10 == 0) {\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }\n          else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" (if "if") (parenthesized_expression "(iVar18 == 0 || iVar10 == 0)" (( "(") (binary_expression "iVar18 == 0 || iVar10 == 0" (binary_expression "iVar18 == 0" (identifier "iVar18") (== "==") (number_literal "0")) (|| "||") (binary_expression "iVar10 == 0" (identifier "iVar10") (== "==") (number_literal "0"))) () ")")) (compound_statement "{\n            local_8c = 0xc;\n            __ptr[0xd] = 0;\n          }" ({ "{") (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" (identifier "local_8c") (= "=") (number_literal "0xc")) (; ";")) (expression_statement "__ptr[0xd] = 0;" (assignment_expression "__ptr[0xd] = 0" (subscript_expression "__ptr[0xd]" (identifier "__ptr") ([ "[") (number_literal "0xd") (] "]")) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" (else "else") (compound_statement "{\n            __ptr[0xd] = iVar10;\n            sVar7 = *(int *)(iVar19 + 4) * 4;\n            __size = *(int *)(iVar19 + 4) * 0xc;\n            pvVar6 = malloc(sVar7);\n            *(void **)(iVar19 + 0xc) = pvVar6;\n            pvVar11 = malloc(sVar7);\n            *(void **)(iVar19 + 0x10) = pvVar11;\n            pvVar12 = malloc(__size);\n            *(void **)(iVar19 + 0x14) = pvVar12;\n            pvVar13 = malloc(__size);\n            *(void **)(iVar19 + 0x18) = pvVar13;\n            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }\n            local_8c = 0xc;\n          }" ({ "{") (expression_statement "__ptr[0xd] = iVar10;" (assignment_expression "__ptr[0xd] = iVar10" (subscript_expression "__ptr[0xd]" (identifier "__ptr") ([ "[") (number_literal "0xd") (] "]")) (= "=") (identifier "iVar10")) (; ";")) (expression_statement "sVar7 = *(int *)(iVar19 + 4) * 4;" (assignment_expression "sVar7 = *(int *)(iVar19 + 4) * 4" (identifier "sVar7") (= "=") (binary_expression "*(int *)(iVar19 + 4) * 4" (pointer_expression "*(int *)(iVar19 + 4)" (* "*") (cast_expression "(int *)(iVar19 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 4)" (( "(") (binary_expression "iVar19 + 4" (identifier "iVar19") (+ "+") (number_literal "4")) () ")")))) (* "*") (number_literal "4"))) (; ";")) (expression_statement "__size = *(int *)(iVar19 + 4) * 0xc;" (assignment_expression "__size = *(int *)(iVar19 + 4) * 0xc" (identifier "__size") (= "=") (binary_expression "*(int *)(iVar19 + 4) * 0xc" (pointer_expression "*(int *)(iVar19 + 4)" (* "*") (cast_expression "(int *)(iVar19 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 4)" (( "(") (binary_expression "iVar19 + 4" (identifier "iVar19") (+ "+") (number_literal "4")) () ")")))) (* "*") (number_literal "0xc"))) (; ";")) (expression_statement "pvVar6 = malloc(sVar7);" (assignment_expression "pvVar6 = malloc(sVar7)" (identifier "pvVar6") (= "=") (call_expression "malloc(sVar7)" (identifier "malloc") (argument_list "(sVar7)" (( "(") (identifier "sVar7") () ")")))) (; ";")) (expression_statement "*(void **)(iVar19 + 0xc) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0xc) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0xc)" (* "*") (cast_expression "(void **)(iVar19 + 0xc)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0xc)" (( "(") (binary_expression "iVar19 + 0xc" (identifier "iVar19") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (identifier "pvVar6")) (; ";")) (expression_statement "pvVar11 = malloc(sVar7);" (assignment_expression "pvVar11 = malloc(sVar7)" (identifier "pvVar11") (= "=") (call_expression "malloc(sVar7)" (identifier "malloc") (argument_list "(sVar7)" (( "(") (identifier "sVar7") () ")")))) (; ";")) (expression_statement "*(void **)(iVar19 + 0x10) = pvVar11;" (assignment_expression "*(void **)(iVar19 + 0x10) = pvVar11" (pointer_expression "*(void **)(iVar19 + 0x10)" (* "*") (cast_expression "(void **)(iVar19 + 0x10)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x10)" (( "(") (binary_expression "iVar19 + 0x10" (identifier "iVar19") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "pvVar11")) (; ";")) (expression_statement "pvVar12 = malloc(__size);" (assignment_expression "pvVar12 = malloc(__size)" (identifier "pvVar12") (= "=") (call_expression "malloc(__size)" (identifier "malloc") (argument_list "(__size)" (( "(") (identifier "__size") () ")")))) (; ";")) (expression_statement "*(void **)(iVar19 + 0x14) = pvVar12;" (assignment_expression "*(void **)(iVar19 + 0x14) = pvVar12" (pointer_expression "*(void **)(iVar19 + 0x14)" (* "*") (cast_expression "(void **)(iVar19 + 0x14)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x14)" (( "(") (binary_expression "iVar19 + 0x14" (identifier "iVar19") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "pvVar12")) (; ";")) (expression_statement "pvVar13 = malloc(__size);" (assignment_expression "pvVar13 = malloc(__size)" (identifier "pvVar13") (= "=") (call_expression "malloc(__size)" (identifier "malloc") (argument_list "(__size)" (( "(") (identifier "__size") () ")")))) (; ";")) (expression_statement "*(void **)(iVar19 + 0x18) = pvVar13;" (assignment_expression "*(void **)(iVar19 + 0x18) = pvVar13" (pointer_expression "*(void **)(iVar19 + 0x18)" (* "*") (cast_expression "(void **)(iVar19 + 0x18)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x18)" (( "(") (binary_expression "iVar19 + 0x18" (identifier "iVar19") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "pvVar13")) (; ";")) (if_statement "if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)) {\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }" (if "if") (parenthesized_expression "((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0))" (( "(") (binary_expression "(((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))\n               && (pvVar13 != (void *)0x0)" (parenthesized_expression "(((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))" (( "(") (binary_expression "((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0)" (parenthesized_expression "((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0))" (( "(") (binary_expression "(pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)" (parenthesized_expression "(pvVar6 != (void *)0x0)" (( "(") (binary_expression "pvVar6 != (void *)0x0" (identifier "pvVar6") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(pvVar11 != (void *)0x0)" (( "(") (binary_expression "pvVar11 != (void *)0x0" (identifier "pvVar11") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(pvVar12 != (void *)0x0)" (( "(") (binary_expression "pvVar12 != (void *)0x0" (identifier "pvVar12") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(pvVar13 != (void *)0x0)" (( "(") (binary_expression "pvVar13 != (void *)0x0" (identifier "pvVar13") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n              iVar9 = param_1[6];\n              pvVar6 = malloc(iVar9 * 4);\n              *(void **)(iVar19 + 0x84) = pvVar6;\n              if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }\n              iVar9 = FUN_00017080();\n              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }\n              goto LAB_00023d90;\n            }" ({ "{") (expression_statement "iVar9 = param_1[6];" (assignment_expression "iVar9 = param_1[6]" (identifier "iVar9") (= "=") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "pvVar6 = malloc(iVar9 * 4);" (assignment_expression "pvVar6 = malloc(iVar9 * 4)" (identifier "pvVar6") (= "=") (call_expression "malloc(iVar9 * 4)" (identifier "malloc") (argument_list "(iVar9 * 4)" (( "(") (binary_expression "iVar9 * 4" (identifier "iVar9") (* "*") (number_literal "4")) () ")")))) (; ";")) (expression_statement "*(void **)(iVar19 + 0x84) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0x84) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0x84)" (* "*") (cast_expression "(void **)(iVar19 + 0x84)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x84)" (( "(") (binary_expression "iVar19 + 0x84" (identifier "iVar19") (+ "+") (number_literal "0x84")) () ")")))) (= "=") (identifier "pvVar6")) (; ";")) (if_statement "if (pvVar6 != (void *)0x0) {\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }" (if "if") (parenthesized_expression "(pvVar6 != (void *)0x0)" (( "(") (binary_expression "pvVar6 != (void *)0x0" (identifier "pvVar6") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                iVar18 = 0;\n                if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }\n                FUN_000190d0();\n                if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }\n              }" ({ "{") (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" (identifier "iVar18") (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar9 != 0) {\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }" (if "if") (parenthesized_expression "(iVar9 != 0)" (( "(") (binary_expression "iVar9 != 0" (identifier "iVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                  do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);\n                }" ({ "{") (do_statement "do {\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  } while (iVar18 != iVar9);" (do "do") (compound_statement "{\n                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;\n                    iVar18 = iVar18 + 1;\n                  }" ({ "{") (expression_statement "*(int *)((int)pvVar6 + iVar18 * 4) = iVar18;" (assignment_expression "*(int *)((int)pvVar6 + iVar18 * 4) = iVar18" (pointer_expression "*(int *)((int)pvVar6 + iVar18 * 4)" (* "*") (cast_expression "(int *)((int)pvVar6 + iVar18 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar6 + iVar18 * 4)" (( "(") (binary_expression "(int)pvVar6 + iVar18 * 4" (cast_expression "(int)pvVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar6")) (+ "+") (binary_expression "iVar18 * 4" (identifier "iVar18") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "iVar18")) (; ";")) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + 1" (identifier "iVar18") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar18 != iVar9)" (( "(") (binary_expression "iVar18 != iVar9" (identifier "iVar18") (!= "!=") (identifier "iVar9")) () ")")) (; ";")) (} "}"))) (expression_statement "FUN_000190d0();" (call_expression "FUN_000190d0()" (identifier "FUN_000190d0") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (param_1[6] == 0) {\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }\n                else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" (if "if") (parenthesized_expression "(param_1[6] == 0)" (( "(") (binary_expression "param_1[6] == 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                  piVar20 = *(int **)(iVar19 + 0x84);\nLAB_00023b4c:\n                  free(piVar20);\n                  *(undefined4 *)(iVar19 + 0x84) = 0;\n                }" ({ "{") (expression_statement "piVar20 = *(int **)(iVar19 + 0x84);" (assignment_expression "piVar20 = *(int **)(iVar19 + 0x84)" (identifier "piVar20") (= "=") (pointer_expression "*(int **)(iVar19 + 0x84)" (* "*") (cast_expression "(int **)(iVar19 + 0x84)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x84)" (( "(") (binary_expression "iVar19 + 0x84" (identifier "iVar19") (+ "+") (number_literal "0x84")) () ")"))))) (; ";")) (labeled_statement "LAB_00023b4c:\n                  free(piVar20);" (statement_identifier "LAB_00023b4c") (: ":") (expression_statement "free(piVar20);" (call_expression "free(piVar20)" (identifier "free") (argument_list "(piVar20)" (( "(") (identifier "piVar20") () ")"))) (; ";"))) (expression_statement "*(undefined4 *)(iVar19 + 0x84) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x84) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x84)" (* "*") (cast_expression "(undefined4 *)(iVar19 + 0x84)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x84)" (( "(") (binary_expression "iVar19 + 0x84" (identifier "iVar19") (+ "+") (number_literal "0x84")) () ")")))) (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" (else "else") (compound_statement "{\n                  piVar20 = *(int **)(iVar19 + 0x84);\n                  iVar9 = *piVar20;\n                  if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }\n                }" ({ "{") (expression_statement "piVar20 = *(int **)(iVar19 + 0x84);" (assignment_expression "piVar20 = *(int **)(iVar19 + 0x84)" (identifier "piVar20") (= "=") (pointer_expression "*(int **)(iVar19 + 0x84)" (* "*") (cast_expression "(int **)(iVar19 + 0x84)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x84)" (( "(") (binary_expression "iVar19 + 0x84" (identifier "iVar19") (+ "+") (number_literal "0x84")) () ")"))))) (; ";")) (expression_statement "iVar9 = *piVar20;" (assignment_expression "iVar9 = *piVar20" (identifier "iVar9") (= "=") (pointer_expression "*piVar20" (* "*") (identifier "piVar20"))) (; ";")) (if_statement "if (iVar9 == 0) {\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }" (if "if") (parenthesized_expression "(iVar9 == 0)" (( "(") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);\n                  }" ({ "{") (do_statement "do {\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    } while (piVar20[iVar9] == iVar9);" (do "do") (compound_statement "{\n                      iVar9 = iVar9 + 1;\n                      if (iVar9 == param_1[6]) goto LAB_00023b4c;\n                    }" ({ "{") (expression_statement "iVar9 = iVar9 + 1;" (assignment_expression "iVar9 = iVar9 + 1" (identifier "iVar9") (= "=") (binary_expression "iVar9 + 1" (identifier "iVar9") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar9 == param_1[6]) goto LAB_00023b4c;" (if "if") (parenthesized_expression "(iVar9 == param_1[6])" (( "(") (binary_expression "iVar9 == param_1[6]" (identifier "iVar9") (== "==") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) () ")")) (goto_statement "goto LAB_00023b4c;" (goto "goto") (statement_identifier "LAB_00023b4c") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(piVar20[iVar9] == iVar9)" (( "(") (binary_expression "piVar20[iVar9] == iVar9" (subscript_expression "piVar20[iVar9]" (identifier "piVar20") ([ "[") (identifier "iVar9") (] "]")) (== "==") (identifier "iVar9")) () ")")) (; ";")) (} "}"))) (} "}")))) (} "}"))) (expression_statement "iVar9 = FUN_00017080();" (assignment_expression "iVar9 = FUN_00017080()" (identifier "iVar9") (= "=") (call_expression "FUN_00017080()" (identifier "FUN_00017080") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }" (if "if") (parenthesized_expression "((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0))" (( "(") (binary_expression "(iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)" (parenthesized_expression "(iVar9 == 0)" (( "(") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(iVar9 = FUN_00017080(), iVar9 == 0)" (( "(") (comma_expression "iVar9 = FUN_00017080(), iVar9 == 0" (assignment_expression "iVar9 = FUN_00017080()" (identifier "iVar9") (= "=") (call_expression "FUN_00017080()" (identifier "FUN_00017080") (argument_list "()" (( "(") () ")")))) (, ",") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n                FUN_000190d0();\n                iVar9 = FUN_000190d0();\n                if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }\n              }" ({ "{") (expression_statement "FUN_000190d0();" (call_expression "FUN_000190d0()" (identifier "FUN_000190d0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar9 = FUN_000190d0();" (assignment_expression "iVar9 = FUN_000190d0()" (identifier "iVar9") (= "=") (call_expression "FUN_000190d0()" (identifier "FUN_000190d0") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar9 == 0) {\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }" (if "if") (parenthesized_expression "(iVar9 == 0)" (( "(") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                  bVar26 = false;\n                  iVar18 = 0;\n                  do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );\n                }" ({ "{") (expression_statement "bVar26 = false;" (assignment_expression "bVar26 = false" (identifier "bVar26") (= "=") (false "false")) (; ";")) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" (identifier "iVar18") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  } while( true );" (do "do") (compound_statement "{\n                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;\nLAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }\n                  }" ({ "{") (if_statement "if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;" (if "if") (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" (( "(") (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" (* "*") (cast_expression "(int *)(iVar19 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 8)" (( "(") (binary_expression "iVar19 + 8" (identifier "iVar19") (+ "+") (number_literal "8")) () ")")))) (== "==") (identifier "iVar18")) () ")")) (goto_statement "goto LAB_00023bfe;" (goto "goto") (statement_identifier "LAB_00023bfe") (; ";"))) (labeled_statement "LAB_00023be5:\n                    while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" (statement_identifier "LAB_00023be5") (: ":") (while_statement "while( true ) {\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n                      iVar10 = iVar18 * 0xc;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;\n                      iVar9 = FUN_00019310(1);\n                      if (iVar9 != 0) goto LAB_00023d90;\n                      iVar18 = iVar18 + 1;\n                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;\n                      free(local_78);\n                      bVar26 = true;\n                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;\n                    }" ({ "{") (expression_statement "iVar10 = iVar18 * 0xc;" (assignment_expression "iVar10 = iVar18 * 0xc" (identifier "iVar10") (= "=") (binary_expression "iVar18 * 0xc" (identifier "iVar18") (* "*") (number_literal "0xc"))) (; ";")) (if_statement "if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)\n                      goto code_r0x00023bf6;" (if "if") (parenthesized_expression "(*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)" (( "(") (binary_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0" (pointer_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" (* "*") (cast_expression "(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar19 + 0x18) + 4 + iVar10)" (( "(") (binary_expression "*(int *)(iVar19 + 0x18) + 4 + iVar10" (binary_expression "*(int *)(iVar19 + 0x18) + 4" (pointer_expression "*(int *)(iVar19 + 0x18)" (* "*") (cast_expression "(int *)(iVar19 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x18)" (( "(") (binary_expression "iVar19 + 0x18" (identifier "iVar19") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "4")) (+ "+") (identifier "iVar10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto code_r0x00023bf6;" (goto "goto") (statement_identifier "code_r0x00023bf6") (; ";"))) (expression_statement "iVar9 = FUN_00019310(1);" (assignment_expression "iVar9 = FUN_00019310(1)" (identifier "iVar9") (= "=") (call_expression "FUN_00019310(1)" (identifier "FUN_00019310") (argument_list "(1)" (( "(") (number_literal "1") () ")")))) (; ";")) (if_statement "if (iVar9 != 0) goto LAB_00023d90;" (if "if") (parenthesized_expression "(iVar9 != 0)" (( "(") (binary_expression "iVar9 != 0" (identifier "iVar9") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00023d90;" (goto "goto") (statement_identifier "LAB_00023d90") (; ";"))) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + 1" (identifier "iVar18") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;" (if "if") (parenthesized_expression "(*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)" (( "(") (binary_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0" (pointer_expression "*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" (* "*") (cast_expression "(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(iVar19 + 0x18) + 4 + iVar10)" (( "(") (binary_expression "*(int *)(iVar19 + 0x18) + 4 + iVar10" (binary_expression "*(int *)(iVar19 + 0x18) + 4" (pointer_expression "*(int *)(iVar19 + 0x18)" (* "*") (cast_expression "(int *)(iVar19 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x18)" (( "(") (binary_expression "iVar19 + 0x18" (identifier "iVar19") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "4")) (+ "+") (identifier "iVar10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "free(local_78);" (call_expression "free(local_78)" (identifier "free") (argument_list "(local_78)" (( "(") (identifier "local_78") () ")"))) (; ";")) (expression_statement "bVar26 = true;" (assignment_expression "bVar26 = true" (identifier "bVar26") (= "=") (true "true")) (; ";")) (if_statement "if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;" (if "if") (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" (( "(") (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" (* "*") (cast_expression "(int *)(iVar19 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 8)" (( "(") (binary_expression "iVar19 + 8" (identifier "iVar19") (+ "+") (number_literal "8")) () ")")))) (== "==") (identifier "iVar18")) () ")")) (goto_statement "goto LAB_00023c09;" (goto "goto") (statement_identifier "LAB_00023c09") (; ";"))) (} "}")))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (} "}"))) (goto_statement "goto LAB_00023d90;" (goto "goto") (statement_identifier "LAB_00023d90") (; ";")) (} "}"))) (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" (identifier "local_8c") (= "=") (number_literal "0xc")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" (else "else") (compound_statement "{\n          if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }\n          __ptr[0xd] = 0;\n          iVar19 = *param_1;\n        }" ({ "{") (if_statement "if (iVar9 != 0) {\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }" (if "if") (parenthesized_expression "(iVar9 != 0)" (( "(") (binary_expression "iVar9 != 0" (identifier "iVar9") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            local_7c = CONCAT31(local_7c._1_3_,2);\n            iVar18 = FUN_00019970(0,local_80);\n            goto LAB_000239ff;\n          }" ({ "{") (expression_statement "local_7c = CONCAT31(local_7c._1_3_,2);" (assignment_expression "local_7c = CONCAT31(local_7c._1_3_,2)" (identifier "local_7c") (= "=") (call_expression "CONCAT31(local_7c._1_3_,2)" (identifier "CONCAT31") (argument_list "(local_7c._1_3_,2)" (( "(") (field_expression "local_7c._1_3_" (identifier "local_7c") (. ".") (field_identifier "_1_3_")) (, ",") (number_literal "2") () ")")))) (; ";")) (expression_statement "iVar18 = FUN_00019970(0,local_80);" (assignment_expression "iVar18 = FUN_00019970(0,local_80)" (identifier "iVar18") (= "=") (call_expression "FUN_00019970(0,local_80)" (identifier "FUN_00019970") (argument_list "(0,local_80)" (( "(") (number_literal "0") (, ",") (identifier "local_80") () ")")))) (; ";")) (goto_statement "goto LAB_000239ff;" (goto "goto") (statement_identifier "LAB_000239ff") (; ";")) (} "}"))) (expression_statement "__ptr[0xd] = 0;" (assignment_expression "__ptr[0xd] = 0" (subscript_expression "__ptr[0xd]" (identifier "__ptr") ([ "[") (number_literal "0xd") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" (identifier "iVar19") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" (else "else") (compound_statement "{\n        iVar9 = FUN_000174a0(&local_74,iVar9);\n        if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }\nLAB_00023d90:\n        iVar19 = *param_1;\n        local_8c = iVar9;\n      }" ({ "{") (expression_statement "iVar9 = FUN_000174a0(&local_74,iVar9);" (assignment_expression "iVar9 = FUN_000174a0(&local_74,iVar9)" (identifier "iVar9") (= "=") (call_expression "FUN_000174a0(&local_74,iVar9)" (identifier "FUN_000174a0") (argument_list "(&local_74,iVar9)" (( "(") (pointer_expression "&local_74" (& "&") (identifier "local_74")) (, ",") (identifier "iVar9") () ")")))) (; ";")) (if_statement "if (iVar9 == 0) {\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }" (if "if") (parenthesized_expression "(iVar9 == 0)" (( "(") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          iVar19 = __ptr[0x17];\n          goto LAB_00023881;\n        }" ({ "{") (expression_statement "iVar19 = __ptr[0x17];" (assignment_expression "iVar19 = __ptr[0x17]" (identifier "iVar19") (= "=") (subscript_expression "__ptr[0x17]" (identifier "__ptr") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (goto_statement "goto LAB_00023881;" (goto "goto") (statement_identifier "LAB_00023881") (; ";")) (} "}"))) (labeled_statement "LAB_00023d90:\n        iVar19 = *param_1;" (statement_identifier "LAB_00023d90") (: ":") (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" (identifier "iVar19") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";"))) (expression_statement "local_8c = iVar9;" (assignment_expression "local_8c = iVar9" (identifier "local_8c") (= "=") (identifier "iVar9")) (; ";")) (} "}")))) (labeled_statement "LAB_00023ff8:\n      puVar23 = *(undefined4 **)(iVar19 + 0x38);" (statement_identifier "LAB_00023ff8") (: ":") (expression_statement "puVar23 = *(undefined4 **)(iVar19 + 0x38);" (assignment_expression "puVar23 = *(undefined4 **)(iVar19 + 0x38)" (identifier "puVar23") (= "=") (pointer_expression "*(undefined4 **)(iVar19 + 0x38)" (* "*") (cast_expression "(undefined4 **)(iVar19 + 0x38)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x38)" (( "(") (binary_expression "iVar19 + 0x38" (identifier "iVar19") (+ "+") (number_literal "0x38")) () ")"))))) (; ";"))) (while_statement "while (puVar23 != (undefined4 *)0x0) {\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }" (while "while") (parenthesized_expression "(puVar23 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar23 != (undefined4 *)0x0" (identifier "puVar23") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        puVar3 = (undefined4 *)*puVar23;\n        free(puVar23);\n        puVar23 = puVar3;\n      }" ({ "{") (expression_statement "puVar3 = (undefined4 *)*puVar23;" (assignment_expression "puVar3 = (undefined4 *)*puVar23" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)*puVar23" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar23" (* "*") (identifier "puVar23")))) (; ";")) (expression_statement "free(puVar23);" (call_expression "free(puVar23)" (identifier "free") (argument_list "(puVar23)" (( "(") (identifier "puVar23") () ")"))) (; ";")) (expression_statement "puVar23 = puVar3;" (assignment_expression "puVar23 = puVar3" (identifier "puVar23") (= "=") (identifier "puVar3")) (; ";")) (} "}"))) (expression_statement "*(undefined4 *)(iVar19 + 0x38) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x38) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x38)" (* "*") (cast_expression "(undefined4 *)(iVar19 + 0x38)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x38)" (( "(") (binary_expression "iVar19 + 0x38" (identifier "iVar19") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(iVar19 + 0x40) = 0x1f;" (assignment_expression "*(undefined4 *)(iVar19 + 0x40) = 0x1f" (pointer_expression "*(undefined4 *)(iVar19 + 0x40)" (* "*") (cast_expression "(undefined4 *)(iVar19 + 0x40)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x40)" (( "(") (binary_expression "iVar19 + 0x40" (identifier "iVar19") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (number_literal "0x1f")) (; ";")) (expression_statement "*(undefined4 *)(iVar19 + 0x34) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x34) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x34)" (* "*") (cast_expression "(undefined4 *)(iVar19 + 0x34)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x34)" (( "(") (binary_expression "iVar19 + 0x34" (identifier "iVar19") (+ "+") (number_literal "0x34")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "free(*(void **)(iVar19 + 0x10));" (call_expression "free(*(void **)(iVar19 + 0x10))" (identifier "free") (argument_list "(*(void **)(iVar19 + 0x10))" (( "(") (pointer_expression "*(void **)(iVar19 + 0x10)" (* "*") (cast_expression "(void **)(iVar19 + 0x10)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x10)" (( "(") (binary_expression "iVar19 + 0x10" (identifier "iVar19") (+ "+") (number_literal "0x10")) () ")")))) () ")"))) (; ";")) (expression_statement "*(undefined4 *)(iVar19 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar19 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar19 + 0x10)" (* "*") (cast_expression "(undefined4 *)(iVar19 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x10)" (( "(") (binary_expression "iVar19 + 0x10" (identifier "iVar19") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_000188a0();" (call_expression "FUN_000188a0()" (identifier "FUN_000188a0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "FUN_0001c4f0();" (call_expression "FUN_0001c4f0()" (identifier "FUN_0001c4f0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" (identifier "iVar9") (= "=") (identifier "local_8c")) (; ";")) (goto_statement "goto LAB_00023f97;" (goto "goto") (statement_identifier "LAB_00023f97") (; ";")) (} "}"))) (} "}"))) (labeled_statement "LAB_00023fc0:\n  local_8c = 0xc;" (statement_identifier "LAB_00023fc0") (: ":") (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" (identifier "local_8c") (= "=") (number_literal "0xc")) (; ";"))) (goto_statement "goto LAB_00023fc8;" (goto "goto") (statement_identifier "LAB_00023fc8") (; ";")) (labeled_statement "code_r0x00023bf6:\n  iVar18 = iVar18 + 1;" (statement_identifier "code_r0x00023bf6") (: ":") (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + 1" (identifier "iVar18") (+ "+") (number_literal "1"))) (; ";"))) (if_statement "if (*(int *)(iVar19 + 8) == iVar18) {\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }" (if "if") (parenthesized_expression "(*(int *)(iVar19 + 8) == iVar18)" (( "(") (binary_expression "*(int *)(iVar19 + 8) == iVar18" (pointer_expression "*(int *)(iVar19 + 8)" (* "*") (cast_expression "(int *)(iVar19 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 8)" (( "(") (binary_expression "iVar19 + 8" (identifier "iVar19") (+ "+") (number_literal "8")) () ")")))) (== "==") (identifier "iVar18")) () ")")) (compound_statement "{\nLAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }\nLAB_00023c09:\n    bVar26 = false;\n    iVar18 = 0;\n  }" ({ "{") (labeled_statement "LAB_00023bfe:\n    if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" (statement_identifier "LAB_00023bfe") (: ":") (if_statement "if (!bVar26) {\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" (if "if") (parenthesized_expression "(!bVar26)" (( "(") (unary_expression "!bVar26" (! "!") (identifier "bVar26")) () ")")) (compound_statement "{\n      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;\n      pvVar6 = malloc(iVar18 * 0xc);\n      *(void **)(iVar19 + 0x1c) = pvVar6;\n      if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }\n      local_8c = 0xc;\n      iVar19 = *param_1;\n      goto LAB_00023ff8;\n    }" ({ "{") (if_statement "if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))\n      goto LAB_00023dab;" (if "if") (parenthesized_expression "(((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))" (( "(") (binary_expression "((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0)" (parenthesized_expression "((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0))" (( "(") (binary_expression "(((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||\n          ((*(byte *)(iVar19 + 0x58) & 1) == 0)" (parenthesized_expression "(((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0))" (( "(") (binary_expression "((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)" (parenthesized_expression "((*(byte *)(param_1 + 7) & 0x10) != 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 7) & 0x10) != 0" (parenthesized_expression "(*(byte *)(param_1 + 7) & 0x10)" (( "(") (binary_expression "*(byte *)(param_1 + 7) & 0x10" (pointer_expression "*(byte *)(param_1 + 7)" (* "*") (cast_expression "(byte *)(param_1 + 7)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 7)" (( "(") (binary_expression "param_1 + 7" (identifier "param_1") (+ "+") (number_literal "7")) () ")")))) (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(param_1[6] == 0)" (( "(") (binary_expression "param_1[6] == 0" (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "((*(byte *)(iVar19 + 0x58) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(iVar19 + 0x58) & 1) == 0" (parenthesized_expression "(*(byte *)(iVar19 + 0x58) & 1)" (( "(") (binary_expression "*(byte *)(iVar19 + 0x58) & 1" (pointer_expression "*(byte *)(iVar19 + 0x58)" (* "*") (cast_expression "(byte *)(iVar19 + 0x58)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x58)" (( "(") (binary_expression "iVar19 + 0x58" (identifier "iVar19") (+ "+") (number_literal "0x58")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(*(int *)(iVar19 + 0x4c) == 0)" (( "(") (binary_expression "*(int *)(iVar19 + 0x4c) == 0" (pointer_expression "*(int *)(iVar19 + 0x4c)" (* "*") (cast_expression "(int *)(iVar19 + 0x4c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x4c)" (( "(") (binary_expression "iVar19 + 0x4c" (identifier "iVar19") (+ "+") (number_literal "0x4c")) () ")")))) (== "==") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_00023dab;" (goto "goto") (statement_identifier "LAB_00023dab") (; ";"))) (expression_statement "pvVar6 = malloc(iVar18 * 0xc);" (assignment_expression "pvVar6 = malloc(iVar18 * 0xc)" (identifier "pvVar6") (= "=") (call_expression "malloc(iVar18 * 0xc)" (identifier "malloc") (argument_list "(iVar18 * 0xc)" (( "(") (binary_expression "iVar18 * 0xc" (identifier "iVar18") (* "*") (number_literal "0xc")) () ")")))) (; ";")) (expression_statement "*(void **)(iVar19 + 0x1c) = pvVar6;" (assignment_expression "*(void **)(iVar19 + 0x1c) = pvVar6" (pointer_expression "*(void **)(iVar19 + 0x1c)" (* "*") (cast_expression "(void **)(iVar19 + 0x1c)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x1c)" (( "(") (binary_expression "iVar19 + 0x1c" (identifier "iVar19") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (identifier "pvVar6")) (; ";")) (if_statement "if (pvVar6 != (void *)0x0) {\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }" (if "if") (parenthesized_expression "(pvVar6 != (void *)0x0)" (( "(") (binary_expression "pvVar6 != (void *)0x0" (identifier "pvVar6") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        uVar22 = 0;\n        if (iVar18 != 0) goto LAB_00023cf3;\n        goto LAB_00023dab;\n      }" ({ "{") (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" (identifier "uVar22") (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar18 != 0) goto LAB_00023cf3;" (if "if") (parenthesized_expression "(iVar18 != 0)" (( "(") (binary_expression "iVar18 != 0" (identifier "iVar18") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00023cf3;" (goto "goto") (statement_identifier "LAB_00023cf3") (; ";"))) (goto_statement "goto LAB_00023dab;" (goto "goto") (statement_identifier "LAB_00023dab") (; ";")) (} "}"))) (expression_statement "local_8c = 0xc;" (assignment_expression "local_8c = 0xc" (identifier "local_8c") (= "=") (number_literal "0xc")) (; ";")) (expression_statement "iVar19 = *param_1;" (assignment_expression "iVar19 = *param_1" (identifier "iVar19") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (goto_statement "goto LAB_00023ff8;" (goto "goto") (statement_identifier "LAB_00023ff8") (; ";")) (} "}")))) (labeled_statement "LAB_00023c09:\n    bVar26 = false;" (statement_identifier "LAB_00023c09") (: ":") (expression_statement "bVar26 = false;" (assignment_expression "bVar26 = false" (identifier "bVar26") (= "=") (false "false")) (; ";"))) (expression_statement "iVar18 = 0;" (assignment_expression "iVar18 = 0" (identifier "iVar18") (= "=") (number_literal "0")) (; ";")) (} "}"))) (goto_statement "goto LAB_00023be5;" (goto "goto") (statement_identifier "LAB_00023be5") (; ";")) (labeled_statement "LAB_00023cf3:\n  while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" (statement_identifier "LAB_00023cf3") (: ":") (while_statement "while( true ) {\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);\n    *puVar23 = 0;\n    puVar23[1] = 0;\n    puVar23[2] = 0;\n    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;\n    pvVar6 = *(void **)(iVar19 + 0x1c);\n    uVar22 = uVar22 + 1;\n  }" ({ "{") (expression_statement "puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);" (assignment_expression "puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc)" (identifier "puVar23") (= "=") (cast_expression "(undefined4 *)((int)pvVar6 + uVar22 * 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar6 + uVar22 * 0xc)" (( "(") (binary_expression "(int)pvVar6 + uVar22 * 0xc" (cast_expression "(int)pvVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar6")) (+ "+") (binary_expression "uVar22 * 0xc" (identifier "uVar22") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "*puVar23 = 0;" (assignment_expression "*puVar23 = 0" (pointer_expression "*puVar23" (* "*") (identifier "puVar23")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar23[1] = 0;" (assignment_expression "puVar23[1] = 0" (subscript_expression "puVar23[1]" (identifier "puVar23") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar23[2] = 0;" (assignment_expression "puVar23[2] = 0" (subscript_expression "puVar23[2]" (identifier "puVar23") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;" (if "if") (parenthesized_expression "(*(uint *)(iVar19 + 8) <= uVar22 + 1)" (( "(") (binary_expression "*(uint *)(iVar19 + 8) <= uVar22 + 1" (pointer_expression "*(uint *)(iVar19 + 8)" (* "*") (cast_expression "(uint *)(iVar19 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 8)" (( "(") (binary_expression "iVar19 + 8" (identifier "iVar19") (+ "+") (number_literal "8")) () ")")))) (<= "<=") (binary_expression "uVar22 + 1" (identifier "uVar22") (+ "+") (number_literal "1"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "pvVar6 = *(void **)(iVar19 + 0x1c);" (assignment_expression "pvVar6 = *(void **)(iVar19 + 0x1c)" (identifier "pvVar6") (= "=") (pointer_expression "*(void **)(iVar19 + 0x1c)" (* "*") (cast_expression "(void **)(iVar19 + 0x1c)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar19 + 0x1c)" (( "(") (binary_expression "iVar19 + 0x1c" (identifier "iVar19") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "uVar22 = uVar22 + 1;" (assignment_expression "uVar22 = uVar22 + 1" (identifier "uVar22") (= "=") (binary_expression "uVar22 + 1" (identifier "uVar22") (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (if_statement "if (*(uint *)(iVar19 + 8) != 0) {\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }" (if "if") (parenthesized_expression "(*(uint *)(iVar19 + 8) != 0)" (( "(") (binary_expression "*(uint *)(iVar19 + 8) != 0" (pointer_expression "*(uint *)(iVar19 + 8)" (* "*") (cast_expression "(uint *)(iVar19 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 8)" (( "(") (binary_expression "iVar19 + 8" (identifier "iVar19") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    iVar9 = *(int *)(iVar19 + 0x18);\n    uVar22 = 0;\n    do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));\n  }" ({ "{") (expression_statement "iVar9 = *(int *)(iVar19 + 0x18);" (assignment_expression "iVar9 = *(int *)(iVar19 + 0x18)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(iVar19 + 0x18)" (* "*") (cast_expression "(int *)(iVar19 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x18)" (( "(") (binary_expression "iVar19 + 0x18" (identifier "iVar19") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "uVar22 = 0;" (assignment_expression "uVar22 = 0" (identifier "uVar22") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    } while (uVar22 < *(uint *)(iVar19 + 8));" (do "do") (compound_statement "{\n      iVar14 = 0;\n      iVar10 = uVar22 * 0xc + iVar9;\n      iVar18 = *(int *)(iVar10 + 8);\n      if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }\n      uVar22 = uVar22 + 1;\n    }" ({ "{") (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" (identifier "iVar14") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar10 = uVar22 * 0xc + iVar9;" (assignment_expression "iVar10 = uVar22 * 0xc + iVar9" (identifier "iVar10") (= "=") (binary_expression "uVar22 * 0xc + iVar9" (binary_expression "uVar22 * 0xc" (identifier "uVar22") (* "*") (number_literal "0xc")) (+ "+") (identifier "iVar9"))) (; ";")) (expression_statement "iVar18 = *(int *)(iVar10 + 8);" (assignment_expression "iVar18 = *(int *)(iVar10 + 8)" (identifier "iVar18") (= "=") (pointer_expression "*(int *)(iVar10 + 8)" (* "*") (cast_expression "(int *)(iVar10 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar10 + 8)" (( "(") (binary_expression "iVar10 + 8" (identifier "iVar10") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (if_statement "if (0 < *(int *)(iVar10 + 4)) {\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }" (if "if") (parenthesized_expression "(0 < *(int *)(iVar10 + 4))" (( "(") (binary_expression "0 < *(int *)(iVar10 + 4)" (number_literal "0") (< "<") (pointer_expression "*(int *)(iVar10 + 4)" (* "*") (cast_expression "(int *)(iVar10 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar10 + 4)" (( "(") (binary_expression "iVar10 + 4" (identifier "iVar10") (+ "+") (number_literal "4")) () ")"))))) () ")")) (compound_statement "{\n        do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));\n      }" ({ "{") (do_statement "do {\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));" (do "do") (compound_statement "{\n          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;\n          if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }\n          iVar9 = *(int *)(iVar19 + 0x18);\n          iVar14 = iVar14 + 1;\n        }" ({ "{") (expression_statement "cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)\n          ;" (assignment_expression "cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" (identifier "cVar5") (= "=") (call_expression "FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" (identifier "FUN_00017540") (argument_list "(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)" (( "(") (binary_expression "*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc" (pointer_expression "*(int *)(iVar19 + 0x1c)" (* "*") (cast_expression "(int *)(iVar19 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x1c)" (( "(") (binary_expression "iVar19 + 0x1c" (identifier "iVar19") (+ "+") (number_literal "0x1c")) () ")")))) (+ "+") (binary_expression "*(int *)(iVar18 + iVar14 * 4) * 0xc" (pointer_expression "*(int *)(iVar18 + iVar14 * 4)" (* "*") (cast_expression "(int *)(iVar18 + iVar14 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar18 + iVar14 * 4)" (( "(") (binary_expression "iVar18 + iVar14 * 4" (identifier "iVar18") (+ "+") (binary_expression "iVar14 * 4" (identifier "iVar14") (* "*") (number_literal "4"))) () ")")))) (* "*") (number_literal "0xc"))) (, ",") (identifier "uVar22") () ")")))) (; ";")) (if_statement "if (cVar5 == '\0') {\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }" (if "if") (parenthesized_expression "(cVar5 == '\0')" (( "(") (binary_expression "cVar5 == '\0'" (identifier "cVar5") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n            iVar9 = 0xc;\n            goto LAB_00023d90;\n          }" ({ "{") (expression_statement "iVar9 = 0xc;" (assignment_expression "iVar9 = 0xc" (identifier "iVar9") (= "=") (number_literal "0xc")) (; ";")) (goto_statement "goto LAB_00023d90;" (goto "goto") (statement_identifier "LAB_00023d90") (; ";")) (} "}"))) (expression_statement "iVar9 = *(int *)(iVar19 + 0x18);" (assignment_expression "iVar9 = *(int *)(iVar19 + 0x18)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(iVar19 + 0x18)" (* "*") (cast_expression "(int *)(iVar19 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 0x18)" (( "(") (binary_expression "iVar19 + 0x18" (identifier "iVar19") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" (identifier "iVar14") (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc))" (( "(") (binary_expression "iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc)" (identifier "iVar14") (< "<") (pointer_expression "*(int *)(iVar9 + 4 + uVar22 * 0xc)" (* "*") (cast_expression "(int *)(iVar9 + 4 + uVar22 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 4 + uVar22 * 0xc)" (( "(") (binary_expression "iVar9 + 4 + uVar22 * 0xc" (binary_expression "iVar9 + 4" (identifier "iVar9") (+ "+") (number_literal "4")) (+ "+") (binary_expression "uVar22 * 0xc" (identifier "uVar22") (* "*") (number_literal "0xc"))) () ")"))))) () ")")) (; ";")) (} "}"))) (expression_statement "uVar22 = uVar22 + 1;" (assignment_expression "uVar22 = uVar22 + 1" (identifier "uVar22") (= "=") (binary_expression "uVar22 + 1" (identifier "uVar22") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar22 < *(uint *)(iVar19 + 8))" (( "(") (binary_expression "uVar22 < *(uint *)(iVar19 + 8)" (identifier "uVar22") (< "<") (pointer_expression "*(uint *)(iVar19 + 8)" (* "*") (cast_expression "(uint *)(iVar19 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar19 + 8)" (( "(") (binary_expression "iVar19 + 8" (identifier "iVar19") (+ "+") (number_literal "8")) () ")"))))) () ")")) (; ";")) (} "}"))) (labeled_statement "LAB_00023dab:\n  local_8c = 0;" (statement_identifier "LAB_00023dab") (: ":") (expression_statement "local_8c = 0;" (assignment_expression "local_8c = 0" (identifier "local_8c") (= "=") (number_literal "0")) (; ";"))) (expression_statement "bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;" (assignment_expression "bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0" (identifier "bVar21") (= "=") (binary_expression "*(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0" (binary_expression "*(byte *)(__ptr + 0x16) >> 2" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (>> ">>") (number_literal "2")) (& "&") (binary_expression "uVar17 == 0" (identifier "uVar17") (== "==") (number_literal "0")))) (; ";")) (if_statement "if ((bVar21 != 0) && (param_1[5] == 0)) {\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }" (if "if") (parenthesized_expression "((bVar21 != 0) && (param_1[5] == 0))" (( "(") (binary_expression "(bVar21 != 0) && (param_1[5] == 0)" (parenthesized_expression "(bVar21 != 0)" (( "(") (binary_expression "bVar21 != 0" (identifier "bVar21") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(param_1[5] == 0)" (( "(") (binary_expression "param_1[5] == 0" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }\n    __ptr[0x17] = 1;\n    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;\n  }" ({ "{") (if_statement "if (__ptr[2] == 0) {\nLAB_00024424:\n      bVar4 = 0;\n    }\n    else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" (if "if") (parenthesized_expression "(__ptr[2] == 0)" (( "(") (binary_expression "__ptr[2] == 0" (subscript_expression "__ptr[2]" (identifier "__ptr") ([ "[") (number_literal "2") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_00024424:\n      bVar4 = 0;\n    }" ({ "{") (labeled_statement "LAB_00024424:\n      bVar4 = 0;" (statement_identifier "LAB_00024424") (: ":") (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" (identifier "bVar4") (= "=") (number_literal "0")) (; ";"))) (} "}")) (else_clause "else {\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" (else "else") (compound_statement "{\n      puVar25 = (uint *)*__ptr;\n      bVar4 = 0;\n      iVar9 = 0;\n      bVar2 = 0;\n      puVar16 = puVar25;\n      do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);\n      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;\n      puVar16 = puVar25 + iVar9 * 2;\n      do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);\n    }" ({ "{") (expression_statement "puVar25 = (uint *)*__ptr;" (assignment_expression "puVar25 = (uint *)*__ptr" (identifier "puVar25") (= "=") (cast_expression "(uint *)*__ptr" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*__ptr" (* "*") (identifier "__ptr")))) (; ";")) (expression_statement "bVar4 = 0;" (assignment_expression "bVar4 = 0" (identifier "bVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" (identifier "iVar9") (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar2 = 0;" (assignment_expression "bVar2 = 0" (identifier "bVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar16 = puVar25;" (assignment_expression "puVar16 = puVar25" (identifier "puVar16") (= "=") (identifier "puVar25")) (; ";")) (do_statement "do {\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      } while (iVar9 != __ptr[2]);" (do "do") (compound_statement "{\n        switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }\n        iVar9 = iVar9 + 1;\n        puVar16 = puVar16 + 2;\n      }" ({ "{") (switch_statement "switch((char)puVar16[1]) {\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }" (switch "switch") (parenthesized_expression "((char)puVar16[1])" (( "(") (cast_expression "(char)puVar16[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "puVar16[1]" (identifier "puVar16") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n        default:\n                    \n          abort();\n        case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;\n        case '\x02':\n        case '\x04':\n        case '\b':\n        case '\t':\n        case '\n':\n        case '\v':\n          break;\n        case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;\n        case '\x05':\n          bVar4 = bVar21;\n          break;\n        case '\x06':\n          goto code_r0x00024350;\n        case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }\n        }" ({ "{") (case_statement "default:\n                    \n          abort();" (default "default") (: ":") (expression_statement "abort();" (call_expression "abort()" (identifier "abort") (argument_list "()" (( "(") () ")"))) (; ";"))) (case_statement "case '\x01':\n          if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }\n          break;" (case "case") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'")) (: ":") (if_statement "if ((char)*puVar16 < '\0') {\n            bVar2 = bVar21;\n          }" (if "if") (parenthesized_expression "((char)*puVar16 < '\0')" (( "(") (binary_expression "(char)*puVar16 < '\0'" (cast_expression "(char)*puVar16" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*puVar16" (* "*") (identifier "puVar16"))) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n            bVar2 = bVar21;\n          }" ({ "{") (expression_statement "bVar2 = bVar21;" (assignment_expression "bVar2 = bVar21" (identifier "bVar2") (= "=") (identifier "bVar21")) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case '\x02':" (case "case") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'")) (: ":")) (case_statement "case '\x04':" (case "case") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'")) (: ":")) (case_statement "case '\b':" (case "case") (char_literal "'\b'" (' "'") (escape_sequence "\b") (' "'")) (: ":")) (case_statement "case '\t':" (case "case") (char_literal "'\t'" (' "'") (escape_sequence "\t") (' "'")) (: ":")) (case_statement "case '\n':" (case "case") (char_literal "'\n'" (' "'") (escape_sequence "\n") (' "'")) (: ":")) (case_statement "case '\v':\n          break;" (case "case") (char_literal "'\v'" (' "'") (escape_sequence "\v") (' "'")) (: ":") (break_statement "break;" (break "break") (; ";"))) (case_statement "case '\x03':\n          iVar18 = 4;\n          do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);\n          break;" (case "case") (char_literal "'\x03'" (' "'") (escape_sequence "\x03") (' "'")) (: ":") (expression_statement "iVar18 = 4;" (assignment_expression "iVar18 = 4" (identifier "iVar18") (= "=") (number_literal "4")) (; ";")) (do_statement "do {\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          } while (iVar18 != 8);" (do "do") (compound_statement "{\n            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;\n            iVar18 = iVar18 + 1;\n          }" ({ "{") (if_statement "if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;" (if "if") (parenthesized_expression "(*(int *)(*puVar16 + iVar18 * 4) != 0)" (( "(") (binary_expression "*(int *)(*puVar16 + iVar18 * 4) != 0" (pointer_expression "*(int *)(*puVar16 + iVar18 * 4)" (* "*") (cast_expression "(int *)(*puVar16 + iVar18 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*puVar16 + iVar18 * 4)" (( "(") (binary_expression "*puVar16 + iVar18 * 4" (pointer_expression "*puVar16" (* "*") (identifier "puVar16")) (+ "+") (binary_expression "iVar18 * 4" (identifier "iVar18") (* "*") (number_literal "4"))) () ")")))) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00023dcb;" (goto "goto") (statement_identifier "LAB_00023dcb") (; ";"))) (expression_statement "iVar18 = iVar18 + 1;" (assignment_expression "iVar18 = iVar18 + 1" (identifier "iVar18") (= "=") (binary_expression "iVar18 + 1" (identifier "iVar18") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar18 != 8)" (( "(") (binary_expression "iVar18 != 8" (identifier "iVar18") (!= "!=") (number_literal "8")) () ")")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case '\x05':\n          bVar4 = bVar21;\n          break;" (case "case") (char_literal "'\x05'" (' "'") (escape_sequence "\x05") (' "'")) (: ":") (expression_statement "bVar4 = bVar21;" (assignment_expression "bVar4 = bVar21" (identifier "bVar4") (= "=") (identifier "bVar21")) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case '\x06':\n          goto code_r0x00024350;" (case "case") (char_literal "'\x06'" (' "'") (escape_sequence "\x06") (' "'")) (: ":") (goto_statement "goto code_r0x00024350;" (goto "goto") (statement_identifier "code_r0x00024350") (; ";"))) (case_statement "case '\f':\n          uVar17 = *puVar16;\n          if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" (case "case") (char_literal "'\f'" (' "'") (escape_sequence "\f") (' "'")) (: ":") (expression_statement "uVar17 = *puVar16;" (assignment_expression "uVar17 = *puVar16" (identifier "uVar17") (= "=") (pointer_expression "*puVar16" (* "*") (identifier "puVar16"))) (; ";")) (if_statement "if (uVar17 != 0x20) {\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" (if "if") (parenthesized_expression "(uVar17 != 0x20)" (( "(") (binary_expression "uVar17 != 0x20" (identifier "uVar17") (!= "!=") (number_literal "0x20")) () ")")) (compound_statement "{\n            if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }\n          }" ({ "{") (if_statement "if (uVar17 < 0x21) {\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }\n            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" (if "if") (parenthesized_expression "(uVar17 < 0x21)" (( "(") (binary_expression "uVar17 < 0x21" (identifier "uVar17") (< "<") (number_literal "0x21")) () ")")) (compound_statement "{\n              if (uVar17 != 0x10) goto code_r0x00024350;\n            }" ({ "{") (if_statement "if (uVar17 != 0x10) goto code_r0x00024350;" (if "if") (parenthesized_expression "(uVar17 != 0x10)" (( "(") (binary_expression "uVar17 != 0x10" (identifier "uVar17") (!= "!=") (number_literal "0x10")) () ")")) (goto_statement "goto code_r0x00024350;" (goto "goto") (statement_identifier "code_r0x00024350") (; ";"))) (} "}")) (else_clause "else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" (else "else") (if_statement "if ((uVar17 != 0x40) && (uVar17 != 0x80)) {\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" (if "if") (parenthesized_expression "((uVar17 != 0x40) && (uVar17 != 0x80))" (( "(") (binary_expression "(uVar17 != 0x40) && (uVar17 != 0x80)" (parenthesized_expression "(uVar17 != 0x40)" (( "(") (binary_expression "uVar17 != 0x40" (identifier "uVar17") (!= "!=") (number_literal "0x40")) () ")")) (&& "&&") (parenthesized_expression "(uVar17 != 0x80)" (( "(") (binary_expression "uVar17 != 0x80" (identifier "uVar17") (!= "!=") (number_literal "0x80")) () ")"))) () ")")) (compound_statement "{\ncode_r0x00024350:\n              goto LAB_00023dcb;\n            }" ({ "{") (labeled_statement "code_r0x00024350:\n              goto LAB_00023dcb;" (statement_identifier "code_r0x00024350") (: ":") (goto_statement "goto LAB_00023dcb;" (goto "goto") (statement_identifier "LAB_00023dcb") (; ";"))) (} "}"))))) (} "}")))) (} "}"))) (expression_statement "iVar9 = iVar9 + 1;" (assignment_expression "iVar9 = iVar9 + 1" (identifier "iVar9") (= "=") (binary_expression "iVar9 + 1" (identifier "iVar9") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar16 = puVar16 + 2;" (assignment_expression "puVar16 = puVar16 + 2" (identifier "puVar16") (= "=") (binary_expression "puVar16 + 2" (identifier "puVar16") (+ "+") (number_literal "2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar9 != __ptr[2])" (( "(") (binary_expression "iVar9 != __ptr[2]" (identifier "iVar9") (!= "!=") (subscript_expression "__ptr[2]" (identifier "__ptr") ([ "[") (number_literal "2") (] "]"))) () ")")) (; ";")) (if_statement "if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;" (if "if") (parenthesized_expression "(bVar2 == 0 && bVar4 == 0)" (( "(") (binary_expression "bVar2 == 0 && bVar4 == 0" (binary_expression "bVar2 == 0" (identifier "bVar2") (== "==") (number_literal "0")) (&& "&&") (binary_expression "bVar4 == 0" (identifier "bVar4") (== "==") (number_literal "0"))) () ")")) (goto_statement "goto LAB_00024424;" (goto "goto") (statement_identifier "LAB_00024424") (; ";"))) (expression_statement "puVar16 = puVar25 + iVar9 * 2;" (assignment_expression "puVar16 = puVar25 + iVar9 * 2" (identifier "puVar16") (= "=") (binary_expression "puVar25 + iVar9 * 2" (identifier "puVar25") (+ "+") (binary_expression "iVar9 * 2" (identifier "iVar9") (* "*") (number_literal "2")))) (; ";")) (do_statement "do {\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      } while (puVar16 != puVar25);" (do "do") (compound_statement "{\n        if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }\n        puVar25 = puVar25 + 2;\n      }" ({ "{") (if_statement "if ((char)puVar25[1] == '\x01') {\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }\n        else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" (if "if") (parenthesized_expression "((char)puVar25[1] == '\x01')" (( "(") (binary_expression "(char)puVar25[1] == '\x01'" (cast_expression "(char)puVar25[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "puVar25[1]" (identifier "puVar25") ([ "[") (number_literal "1") (] "]"))) (== "==") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) () ")")) (compound_statement "{\n          if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }\n        }" ({ "{") (if_statement "if ((char)*puVar25 < '\0') {\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }" (if "if") (parenthesized_expression "((char)*puVar25 < '\0')" (( "(") (binary_expression "(char)*puVar25 < '\0'" (cast_expression "(char)*puVar25" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*puVar25" (* "*") (identifier "puVar25"))) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;\n          }" ({ "{") (expression_statement "*(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;" (assignment_expression "*(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf" (pointer_expression "*(byte *)((int)puVar25 + 6)" (* "*") (cast_expression "(byte *)((int)puVar25 + 6)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar25 + 6)" (( "(") (binary_expression "(int)puVar25 + 6" (cast_expression "(int)puVar25" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar25")) (+ "+") (number_literal "6")) () ")")))) (= "=") (binary_expression "*(byte *)((int)puVar25 + 6) & 0xdf" (pointer_expression "*(byte *)((int)puVar25 + 6)" (* "*") (cast_expression "(byte *)((int)puVar25 + 6)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)puVar25 + 6)" (( "(") (binary_expression "(int)puVar25 + 6" (cast_expression "(int)puVar25" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar25")) (+ "+") (number_literal "6")) () ")")))) (& "&") (number_literal "0xdf"))) (; ";")) (} "}"))) (} "}")) (else_clause "else if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" (else "else") (if_statement "if ((char)puVar25[1] == '\x05') {\n          *(char *)(puVar25 + 1) = '\a';\n        }" (if "if") (parenthesized_expression "((char)puVar25[1] == '\x05')" (( "(") (binary_expression "(char)puVar25[1] == '\x05'" (cast_expression "(char)puVar25[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "puVar25[1]" (identifier "puVar25") ([ "[") (number_literal "1") (] "]"))) (== "==") (char_literal "'\x05'" (' "'") (escape_sequence "\x05") (' "'"))) () ")")) (compound_statement "{\n          *(char *)(puVar25 + 1) = '\a';\n        }" ({ "{") (expression_statement "*(char *)(puVar25 + 1) = '\a';" (assignment_expression "*(char *)(puVar25 + 1) = '\a'" (pointer_expression "*(char *)(puVar25 + 1)" (* "*") (cast_expression "(char *)(puVar25 + 1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar25 + 1)" (( "(") (binary_expression "puVar25 + 1" (identifier "puVar25") (+ "+") (number_literal "1")) () ")")))) (= "=") (char_literal "'\a'" (' "'") (escape_sequence "\a") (' "'"))) (; ";")) (} "}"))))) (expression_statement "puVar25 = puVar25 + 2;" (assignment_expression "puVar25 = puVar25 + 2" (identifier "puVar25") (= "=") (binary_expression "puVar25 + 2" (identifier "puVar25") (+ "+") (number_literal "2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar16 != puVar25)" (( "(") (binary_expression "puVar16 != puVar25" (identifier "puVar16") (!= "!=") (identifier "puVar25")) () ")")) (; ";")) (} "}")))) (expression_statement "__ptr[0x17] = 1;" (assignment_expression "__ptr[0x17] = 1" (subscript_expression "__ptr[0x17]" (identifier "__ptr") ([ "[") (number_literal "0x17") (] "]")) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;" (assignment_expression "*(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (= "=") (binary_expression "(0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9" (binary_expression "(0 < __ptr[0x13] | bVar4) * '\x02'" (parenthesized_expression "(0 < __ptr[0x13] | bVar4)" (( "(") (binary_expression "0 < __ptr[0x13] | bVar4" (binary_expression "0 < __ptr[0x13]" (number_literal "0") (< "<") (subscript_expression "__ptr[0x13]" (identifier "__ptr") ([ "[") (number_literal "0x13") (] "]"))) (| "|") (identifier "bVar4")) () ")")) (* "*") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'"))) (| "|") (binary_expression "*(byte *)(__ptr + 0x16) & 0xf9" (pointer_expression "*(byte *)(__ptr + 0x16)" (* "*") (cast_expression "(byte *)(__ptr + 0x16)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr + 0x16)" (( "(") (binary_expression "__ptr + 0x16" (identifier "__ptr") (+ "+") (number_literal "0x16")) () ")")))) (& "&") (number_literal "0xf9")))) (; ";")) (} "}"))) (labeled_statement "LAB_00023dcb:\n  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);" (statement_identifier "LAB_00023dcb") (: ":") (expression_statement "iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);" (assignment_expression "iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" (identifier "iVar9") (= "=") (pointer_expression "*(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" (* "*") (cast_expression "(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(__ptr[0xd] + 0xc) + 0x1c)" (( "(") (binary_expression "*(int *)(__ptr[0xd] + 0xc) + 0x1c" (pointer_expression "*(int *)(__ptr[0xd] + 0xc)" (* "*") (cast_expression "(int *)(__ptr[0xd] + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(__ptr[0xd] + 0xc)" (( "(") (binary_expression "__ptr[0xd] + 0xc" (subscript_expression "__ptr[0xd]" (identifier "__ptr") ([ "[") (number_literal "0xd") (] "]")) (+ "+") (number_literal "0xc")) () ")")))) (+ "+") (number_literal "0x1c")) () ")"))))) (; ";"))) (expression_statement "__ptr[0x12] = iVar9;" (assignment_expression "__ptr[0x12] = iVar9" (subscript_expression "__ptr[0x12]" (identifier "__ptr") ([ "[") (number_literal "0x12") (] "]")) (= "=") (identifier "iVar9")) (; ";")) (expression_statement "iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);" (assignment_expression "iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc)" (identifier "iVar9") (= "=") (call_expression "FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc)" (identifier "FUN_00019db0") (argument_list "(local_ac,__ptr[6] + iVar9 * 0xc)" (( "(") (identifier "local_ac") (, ",") (binary_expression "__ptr[6] + iVar9 * 0xc" (subscript_expression "__ptr[6]" (identifier "__ptr") ([ "[") (number_literal "6") (] "]")) (+ "+") (binary_expression "iVar9 * 0xc" (identifier "iVar9") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "local_94 = iVar9;" (assignment_expression "local_94 = iVar9" (identifier "local_94") (= "=") (identifier "iVar9")) (; ";")) (expression_statement "local_88[0] = iVar9;" (assignment_expression "local_88[0] = iVar9" (subscript_expression "local_88[0]" (identifier "local_88") ([ "[") (number_literal "0") (] "]")) (= "=") (identifier "iVar9")) (; ";")) (if_statement "if (iVar9 == 0) {\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }" (if "if") (parenthesized_expression "(iVar9 == 0)" (( "(") (binary_expression "iVar9 == 0" (identifier "iVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }\nLAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);\n    __ptr[9] = iVar18;\n    if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }\n  }" ({ "{") (if_statement "if ((0 < __ptr[0x13]) && (0 < local_7c)) {\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }" (if "if") (parenthesized_expression "((0 < __ptr[0x13]) && (0 < local_7c))" (( "(") (binary_expression "(0 < __ptr[0x13]) && (0 < local_7c)" (parenthesized_expression "(0 < __ptr[0x13])" (( "(") (binary_expression "0 < __ptr[0x13]" (number_literal "0") (< "<") (subscript_expression "__ptr[0x13]" (identifier "__ptr") ([ "[") (number_literal "0x13") (] "]"))) () ")")) (&& "&&") (parenthesized_expression "(0 < local_7c)" (( "(") (binary_expression "0 < local_7c" (number_literal "0") (< "<") (identifier "local_7c")) () ")"))) () ")")) (compound_statement "{\n      iVar19 = 0;\n      iVar18 = local_7c;\nLAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);\n    }" ({ "{") (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" (identifier "iVar19") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar18 = local_7c;" (assignment_expression "iVar18 = local_7c" (identifier "iVar18") (= "=") (identifier "local_7c")) (; ";")) (labeled_statement "LAB_00023e3b:\n      do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);" (statement_identifier "LAB_00023e3b") (: ":") (do_statement "do {\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      } while (iVar19 < iVar18);" (do "do") (compound_statement "{\n        iVar10 = *(int *)((int)local_78 + iVar19 * 4);\n        piVar20 = (int *)(*__ptr + iVar10 * 8);\n        if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }\n        iVar19 = iVar19 + 1;\n      }" ({ "{") (expression_statement "iVar10 = *(int *)((int)local_78 + iVar19 * 4);" (assignment_expression "iVar10 = *(int *)((int)local_78 + iVar19 * 4)" (identifier "iVar10") (= "=") (pointer_expression "*(int *)((int)local_78 + iVar19 * 4)" (* "*") (cast_expression "(int *)((int)local_78 + iVar19 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_78 + iVar19 * 4)" (( "(") (binary_expression "(int)local_78 + iVar19 * 4" (cast_expression "(int)local_78" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_78")) (+ "+") (binary_expression "iVar19 * 4" (identifier "iVar19") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "piVar20 = (int *)(*__ptr + iVar10 * 8);" (assignment_expression "piVar20 = (int *)(*__ptr + iVar10 * 8)" (identifier "piVar20") (= "=") (cast_expression "(int *)(*__ptr + iVar10 * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*__ptr + iVar10 * 8)" (( "(") (binary_expression "*__ptr + iVar10 * 8" (pointer_expression "*__ptr" (* "*") (identifier "__ptr")) (+ "+") (binary_expression "iVar10 * 8" (identifier "iVar10") (* "*") (number_literal "8"))) () ")")))) (; ";")) (if_statement "if ((char)piVar20[1] == '\x04') {\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }" (if "if") (parenthesized_expression "((char)piVar20[1] == '\x04')" (( "(") (binary_expression "(char)piVar20[1] == '\x04'" (cast_expression "(char)piVar20[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "piVar20[1]" (identifier "piVar20") ([ "[") (number_literal "1") (] "]"))) (== "==") (char_literal "'\x04'" (' "'") (escape_sequence "\x04") (' "'"))) () ")")) (compound_statement "{\n          iVar14 = 0;\n          do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);\n        }" ({ "{") (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" (identifier "iVar14") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          } while (iVar18 != iVar14);" (do "do") (compound_statement "{\n            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);\n            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }\n            iVar14 = iVar14 + 1;\n          }" ({ "{") (expression_statement "piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);" (assignment_expression "piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8)" (( "(") (binary_expression "*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8" (pointer_expression "*__ptr" (* "*") (identifier "__ptr")) (+ "+") (binary_expression "*(int *)((int)local_78 + iVar14 * 4) * 8" (pointer_expression "*(int *)((int)local_78 + iVar14 * 4)" (* "*") (cast_expression "(int *)((int)local_78 + iVar14 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_78 + iVar14 * 4)" (( "(") (binary_expression "(int)local_78 + iVar14 * 4" (cast_expression "(int)local_78" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_78")) (+ "+") (binary_expression "iVar14 * 4" (identifier "iVar14") (* "*") (number_literal "4"))) () ")")))) (* "*") (number_literal "8"))) () ")")))) (; ";")) (if_statement "if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }" (if "if") (parenthesized_expression "(((char)piVar1[1] == '\t') && (*piVar1 == *piVar20))" (( "(") (binary_expression "((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)" (parenthesized_expression "((char)piVar1[1] == '\t')" (( "(") (binary_expression "(char)piVar1[1] == '\t'" (cast_expression "(char)piVar1[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "piVar1[1]" (identifier "piVar1") ([ "[") (number_literal "1") (] "]"))) (== "==") (char_literal "'\t'" (' "'") (escape_sequence "\t") (' "'"))) () ")")) (&& "&&") (parenthesized_expression "(*piVar1 == *piVar20)" (( "(") (binary_expression "*piVar1 == *piVar20" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (== "==") (pointer_expression "*piVar20" (* "*") (identifier "piVar20"))) () ")"))) () ")")) (compound_statement "{\n              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);\n              iVar14 = FUN_00018c70();\n              if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }\n              break;\n            }" ({ "{") (expression_statement "iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);" (assignment_expression "iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8)" (identifier "iVar10") (= "=") (pointer_expression "**(int **)(__ptr[5] + iVar10 * 0xc + 8)" (* "*") (pointer_expression "*(int **)(__ptr[5] + iVar10 * 0xc + 8)" (* "*") (cast_expression "(int **)(__ptr[5] + iVar10 * 0xc + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(__ptr[5] + iVar10 * 0xc + 8)" (( "(") (binary_expression "__ptr[5] + iVar10 * 0xc + 8" (binary_expression "__ptr[5] + iVar10 * 0xc" (subscript_expression "__ptr[5]" (identifier "__ptr") ([ "[") (number_literal "5") (] "]")) (+ "+") (binary_expression "iVar10 * 0xc" (identifier "iVar10") (* "*") (number_literal "0xc"))) (+ "+") (number_literal "8")) () ")")))))) (; ";")) (expression_statement "iVar14 = FUN_00018c70();" (assignment_expression "iVar14 = FUN_00018c70()" (identifier "iVar14") (= "=") (call_expression "FUN_00018c70()" (identifier "FUN_00018c70") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar14 == 0) {\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }" (if "if") (parenthesized_expression "(iVar14 == 0)" (( "(") (binary_expression "iVar14 == 0" (identifier "iVar14") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);\n                if (local_94 != 0) goto LAB_00023f26;\n                iVar19 = 1;\n                iVar18 = local_7c;\n                if (1 < local_7c) goto LAB_00023e3b;\n                goto LAB_00023ee2;\n              }" ({ "{") (expression_statement "local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);" (assignment_expression "local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc)" (identifier "local_94") (= "=") (call_expression "FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc)" (identifier "FUN_00019140") (argument_list "(local_ac,__ptr[6] + iVar10 * 0xc)" (( "(") (identifier "local_ac") (, ",") (binary_expression "__ptr[6] + iVar10 * 0xc" (subscript_expression "__ptr[6]" (identifier "__ptr") ([ "[") (number_literal "6") (] "]")) (+ "+") (binary_expression "iVar10 * 0xc" (identifier "iVar10") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (if_statement "if (local_94 != 0) goto LAB_00023f26;" (if "if") (parenthesized_expression "(local_94 != 0)" (( "(") (binary_expression "local_94 != 0" (identifier "local_94") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00023f26;" (goto "goto") (statement_identifier "LAB_00023f26") (; ";"))) (expression_statement "iVar19 = 1;" (assignment_expression "iVar19 = 1" (identifier "iVar19") (= "=") (number_literal "1")) (; ";")) (expression_statement "iVar18 = local_7c;" (assignment_expression "iVar18 = local_7c" (identifier "iVar18") (= "=") (identifier "local_7c")) (; ";")) (if_statement "if (1 < local_7c) goto LAB_00023e3b;" (if "if") (parenthesized_expression "(1 < local_7c)" (( "(") (binary_expression "1 < local_7c" (number_literal "1") (< "<") (identifier "local_7c")) () ")")) (goto_statement "goto LAB_00023e3b;" (goto "goto") (statement_identifier "LAB_00023e3b") (; ";"))) (goto_statement "goto LAB_00023ee2;" (goto "goto") (statement_identifier "LAB_00023ee2") (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";")) (} "}"))) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" (identifier "iVar14") (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar18 != iVar14)" (( "(") (binary_expression "iVar18 != iVar14" (identifier "iVar18") (!= "!=") (identifier "iVar14")) () ")")) (; ";")) (} "}"))) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" (identifier "iVar19") (= "=") (binary_expression "iVar19 + 1" (identifier "iVar19") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar19 < iVar18)" (( "(") (binary_expression "iVar19 < iVar18" (identifier "iVar19") (< "<") (identifier "iVar18")) () ")")) (; ";"))) (} "}"))) (labeled_statement "LAB_00023ee2:\n    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);" (statement_identifier "LAB_00023ee2") (: ":") (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0)" (identifier "iVar18") (= "=") (call_expression "FUN_0001a040(local_88,__ptr,local_ac,0)" (identifier "FUN_0001a040") (argument_list "(local_88,__ptr,local_ac,0)" (( "(") (identifier "local_88") (, ",") (identifier "__ptr") (, ",") (identifier "local_ac") (, ",") (number_literal "0") () ")")))) (; ";"))) (expression_statement "__ptr[9] = iVar18;" (assignment_expression "__ptr[9] = iVar18" (subscript_expression "__ptr[9]" (identifier "__ptr") ([ "[") (number_literal "9") (] "]")) (= "=") (identifier "iVar18")) (; ";")) (if_statement "if (iVar18 == 0) {\nLAB_000241e0:\n      local_94 = local_88[0];\n    }\n    else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" (if "if") (parenthesized_expression "(iVar18 == 0)" (( "(") (binary_expression "iVar18 == 0" (identifier "iVar18") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_000241e0:\n      local_94 = local_88[0];\n    }" ({ "{") (labeled_statement "LAB_000241e0:\n      local_94 = local_88[0];" (statement_identifier "LAB_000241e0") (: ":") (expression_statement "local_94 = local_88[0];" (assignment_expression "local_94 = local_88[0]" (identifier "local_94") (= "=") (subscript_expression "local_88[0]" (identifier "local_88") ([ "[") (number_literal "0") (] "]"))) (; ";"))) (} "}")) (else_clause "else {\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" (else "else") (compound_statement "{\n      if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }\n      free(local_78);\n      local_94 = iVar9;\n    }" ({ "{") (if_statement "if (*(char *)(iVar18 + 0x34) < '\0') {\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }\n      else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" (if "if") (parenthesized_expression "(*(char *)(iVar18 + 0x34) < '\0')" (( "(") (binary_expression "*(char *)(iVar18 + 0x34) < '\0'" (pointer_expression "*(char *)(iVar18 + 0x34)" (* "*") (cast_expression "(char *)(iVar18 + 0x34)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar18 + 0x34)" (( "(") (binary_expression "iVar18 + 0x34" (identifier "iVar18") (+ "+") (number_literal "0x34")) () ")")))) (< "<") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);\n        __ptr[10] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);\n        __ptr[0xb] = iVar18;\n        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);\n        __ptr[0xc] = iVar18;\n        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;\n      }" ({ "{") (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1)" (identifier "iVar18") (= "=") (call_expression "FUN_0001a040(local_88,__ptr,local_ac,1)" (identifier "FUN_0001a040") (argument_list "(local_88,__ptr,local_ac,1)" (( "(") (identifier "local_88") (, ",") (identifier "__ptr") (, ",") (identifier "local_ac") (, ",") (number_literal "1") () ")")))) (; ";")) (expression_statement "__ptr[10] = iVar18;" (assignment_expression "__ptr[10] = iVar18" (subscript_expression "__ptr[10]" (identifier "__ptr") ([ "[") (number_literal "10") (] "]")) (= "=") (identifier "iVar18")) (; ";")) (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2)" (identifier "iVar18") (= "=") (call_expression "FUN_0001a040(local_88,__ptr,local_ac,2)" (identifier "FUN_0001a040") (argument_list "(local_88,__ptr,local_ac,2)" (( "(") (identifier "local_88") (, ",") (identifier "__ptr") (, ",") (identifier "local_ac") (, ",") (number_literal "2") () ")")))) (; ";")) (expression_statement "__ptr[0xb] = iVar18;" (assignment_expression "__ptr[0xb] = iVar18" (subscript_expression "__ptr[0xb]" (identifier "__ptr") ([ "[") (number_literal "0xb") (] "]")) (= "=") (identifier "iVar18")) (; ";")) (expression_statement "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);" (assignment_expression "iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6)" (identifier "iVar18") (= "=") (call_expression "FUN_0001a040(local_88,__ptr,local_ac,6)" (identifier "FUN_0001a040") (argument_list "(local_88,__ptr,local_ac,6)" (( "(") (identifier "local_88") (, ",") (identifier "__ptr") (, ",") (identifier "local_ac") (, ",") (number_literal "6") () ")")))) (; ";")) (expression_statement "__ptr[0xc] = iVar18;" (assignment_expression "__ptr[0xc] = iVar18" (subscript_expression "__ptr[0xc]" (identifier "__ptr") ([ "[") (number_literal "0xc") (] "]")) (= "=") (identifier "iVar18")) (; ";")) (if_statement "if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;" (if "if") (parenthesized_expression "(((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0))" (( "(") (binary_expression "((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)" (parenthesized_expression "((__ptr[10] == 0) || (__ptr[0xb] == 0))" (( "(") (binary_expression "(__ptr[10] == 0) || (__ptr[0xb] == 0)" (parenthesized_expression "(__ptr[10] == 0)" (( "(") (binary_expression "__ptr[10] == 0" (subscript_expression "__ptr[10]" (identifier "__ptr") ([ "[") (number_literal "10") (] "]")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(__ptr[0xb] == 0)" (( "(") (binary_expression "__ptr[0xb] == 0" (subscript_expression "__ptr[0xb]" (identifier "__ptr") ([ "[") (number_literal "0xb") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(iVar18 == 0)" (( "(") (binary_expression "iVar18 == 0" (identifier "iVar18") (== "==") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_000241e0;" (goto "goto") (statement_identifier "LAB_000241e0") (; ";"))) (} "}")) (else_clause "else {\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" (else "else") (compound_statement "{\n        __ptr[0xc] = iVar18;\n        __ptr[0xb] = iVar18;\n        __ptr[10] = iVar18;\n      }" ({ "{") (expression_statement "__ptr[0xc] = iVar18;" (assignment_expression "__ptr[0xc] = iVar18" (subscript_expression "__ptr[0xc]" (identifier "__ptr") ([ "[") (number_literal "0xc") (] "]")) (= "=") (identifier "iVar18")) (; ";")) (expression_statement "__ptr[0xb] = iVar18;" (assignment_expression "__ptr[0xb] = iVar18" (subscript_expression "__ptr[0xb]" (identifier "__ptr") ([ "[") (number_literal "0xb") (] "]")) (= "=") (identifier "iVar18")) (; ";")) (expression_statement "__ptr[10] = iVar18;" (assignment_expression "__ptr[10] = iVar18" (subscript_expression "__ptr[10]" (identifier "__ptr") ([ "[") (number_literal "10") (] "]")) (= "=") (identifier "iVar18")) (; ";")) (} "}")))) (expression_statement "free(local_78);" (call_expression "free(local_78)" (identifier "free") (argument_list "(local_78)" (( "(") (identifier "local_78") () ")"))) (; ";")) (expression_statement "local_94 = iVar9;" (assignment_expression "local_94 = iVar9" (identifier "local_94") (= "=") (identifier "iVar9")) (; ";")) (} "}")))) (} "}"))) (labeled_statement "LAB_00023f26:\n  iVar9 = *param_1;" (statement_identifier "LAB_00023f26") (: ":") (expression_statement "iVar9 = *param_1;" (assignment_expression "iVar9 = *param_1" (identifier "iVar9") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";"))) (expression_statement "puVar23 = *(undefined4 **)(iVar9 + 0x38);" (assignment_expression "puVar23 = *(undefined4 **)(iVar9 + 0x38)" (identifier "puVar23") (= "=") (pointer_expression "*(undefined4 **)(iVar9 + 0x38)" (* "*") (cast_expression "(undefined4 **)(iVar9 + 0x38)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar9 + 0x38)" (( "(") (binary_expression "iVar9 + 0x38" (identifier "iVar9") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (expression_statement "local_8c = local_94;" (assignment_expression "local_8c = local_94" (identifier "local_8c") (= "=") (identifier "local_94")) (; ";")) (while_statement "while (puVar23 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }" (while "while") (parenthesized_expression "(puVar23 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar23 != (undefined4 *)0x0" (identifier "puVar23") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    puVar3 = (undefined4 *)*puVar23;\n    free(puVar23);\n    puVar23 = puVar3;\n  }" ({ "{") (expression_statement "puVar3 = (undefined4 *)*puVar23;" (assignment_expression "puVar3 = (undefined4 *)*puVar23" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)*puVar23" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar23" (* "*") (identifier "puVar23")))) (; ";")) (expression_statement "free(puVar23);" (call_expression "free(puVar23)" (identifier "free") (argument_list "(puVar23)" (( "(") (identifier "puVar23") () ")"))) (; ";")) (expression_statement "puVar23 = puVar3;" (assignment_expression "puVar23 = puVar3" (identifier "puVar23") (= "=") (identifier "puVar3")) (; ";")) (} "}"))) (expression_statement "*(undefined4 *)(iVar9 + 0x38) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x38) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x38)" (* "*") (cast_expression "(undefined4 *)(iVar9 + 0x38)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 0x38)" (( "(") (binary_expression "iVar9 + 0x38" (identifier "iVar9") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(iVar9 + 0x40) = 0x1f;" (assignment_expression "*(undefined4 *)(iVar9 + 0x40) = 0x1f" (pointer_expression "*(undefined4 *)(iVar9 + 0x40)" (* "*") (cast_expression "(undefined4 *)(iVar9 + 0x40)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 0x40)" (( "(") (binary_expression "iVar9 + 0x40" (identifier "iVar9") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (number_literal "0x1f")) (; ";")) (expression_statement "*(undefined4 *)(iVar9 + 0x34) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x34) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x34)" (* "*") (cast_expression "(undefined4 *)(iVar9 + 0x34)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 0x34)" (( "(") (binary_expression "iVar9 + 0x34" (identifier "iVar9") (+ "+") (number_literal "0x34")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "free(*(void **)(iVar9 + 0x10));" (call_expression "free(*(void **)(iVar9 + 0x10))" (identifier "free") (argument_list "(*(void **)(iVar9 + 0x10))" (( "(") (pointer_expression "*(void **)(iVar9 + 0x10)" (* "*") (cast_expression "(void **)(iVar9 + 0x10)" (( "(") (type_descriptor "void **" (primitive_type "void") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar9 + 0x10)" (( "(") (binary_expression "iVar9 + 0x10" (identifier "iVar9") (+ "+") (number_literal "0x10")) () ")")))) () ")"))) (; ";")) (expression_statement "*(undefined4 *)(iVar9 + 0x10) = 0;" (assignment_expression "*(undefined4 *)(iVar9 + 0x10) = 0" (pointer_expression "*(undefined4 *)(iVar9 + 0x10)" (* "*") (cast_expression "(undefined4 *)(iVar9 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar9 + 0x10)" (( "(") (binary_expression "iVar9 + 0x10" (identifier "iVar9") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_000188a0();" (call_expression "FUN_000188a0()" (identifier "FUN_000188a0") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" (identifier "iVar9") (= "=") (identifier "local_8c")) (; ";")) (if_statement "if (local_8c == 0) goto LAB_00023f97;" (if "if") (parenthesized_expression "(local_8c == 0)" (( "(") (binary_expression "local_8c == 0" (identifier "local_8c") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00023f97;" (goto "goto") (statement_identifier "LAB_00023f97") (; ";"))) (labeled_statement "LAB_00023fc8:\n  FUN_0001c4f0();" (statement_identifier "LAB_00023fc8") (: ":") (expression_statement "FUN_0001c4f0();" (call_expression "FUN_0001c4f0()" (identifier "FUN_0001c4f0") (argument_list "()" (( "(") () ")"))) (; ";"))) (expression_statement "*param_1 = 0;" (assignment_expression "*param_1 = 0" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[1] = 0;" (assignment_expression "param_1[1] = 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar9 = local_8c;" (assignment_expression "iVar9 = local_8c" (identifier "iVar9") (= "=") (identifier "local_8c")) (; ";")) (labeled_statement "LAB_00023f97:\n  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }" (statement_identifier "LAB_00023f97") (: ":") (if_statement "if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {\n                    \n    FUN_000253d0();\n  }" (if "if") (parenthesized_expression "(local_20 != *(int *)(in_GS_OFFSET + 0x14))" (( "(") (binary_expression "local_20 != *(int *)(in_GS_OFFSET + 0x14)" (identifier "local_20") (!= "!=") (pointer_expression "*(int *)(in_GS_OFFSET + 0x14)" (* "*") (cast_expression "(int *)(in_GS_OFFSET + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_GS_OFFSET + 0x14)" (( "(") (binary_expression "in_GS_OFFSET + 0x14" (identifier "in_GS_OFFSET") (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (compound_statement "{\n                    \n    FUN_000253d0();\n  }" ({ "{") (expression_statement "FUN_000253d0();" (call_expression "FUN_000253d0()" (identifier "FUN_000253d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (return_statement "return iVar9;" (return "return") (identifier "iVar9") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

type_1 __regparm3
function_1(type_2 *preg,char *pattern,size_t var_6,type_3 var_23)

{
  type_4 var_17;
  int var_64;
  type_5 *var_24;
  type_6 *pbVar4;
  type_6 *var_47;
  type_4 var_55;
  type_7 _Var7;
  type_8 *var_56;
  type_9 *prVar9;
  size_t sVar10;
  type_4 *var_12;
  type_1 var_27;
  type_10 *var_35;
  type_10 *var_36;
  type_10 *var_37;
  type_11 *var_38;
  type_11 *var_39;
  type_12 *var_40;
  type_12 *var_41;
  type_13 aVar18;
  type_14 *var_63;
  type_15 var_18;
  type_16 var_20;
  type_8 *var_54;
  type_17 *var_3;
  type_18 var_4;
  int var_14;
  size_t var_42;
  size_t *__ptr;
  type_4 var_52;
  type_18 *puVar27;
  type_18 var_50;
  int var_21;
  type_17 *prVar30;
  type_19 rVar31;
  type_20 *var_5;
  type_4 *var_15;
  type_5 **var_22;
  size_t __size;
  size_t var_8;
  int var_1;
  bool var_16;
  bool var_13;
  type_11 var_60;
  type_1 *in_stack_ffffff44;
  type_17 *local_ac;
  type_6 **local_a4;
  type_13 local_94;
  type_1 var_33;
  type_8 current_token;
  type_8 t;
  type_11 *var_59;
  type_21 regexp;
  
  var_52 = 0;
  var_3 = preg->buffer;
  var_64 = *(int *)(var_1 + 0x14);
  preg->field_0x1c = preg->field_0x1c & 0x90;
  var_33 = var_28;
  preg->var_23 = var_23;
  preg->used = 0;
  preg->re_nsub = 0;
  if (preg->allocated < 0x88) {
    var_3 = (type_17 *)var_2(var_3,0x88);
    if (var_3 == (type_17 *)0x0) {
      var_27 = _REG_ESPACE;
      goto LAB_00023f97;
    }
    preg->allocated = 0x88;
    preg->buffer = var_3;
  }
  var_5 = (type_20 *)((type_18)&var_3->nodes_alloc & 0xfffffffc);
  preg->used = 0x88;
  var_3->nodes = (type_8 *)0x0;
  var_3->subexp_map = (type_11 *)0x0;
  var_4 = (type_18)((int)var_3 + (0x88 - (int)var_5)) >> 2;
  for (; var_4 != 0; var_4 = var_4 - 1) {
    *var_5 = 0;
    var_5 = var_5 + (type_18)var_52 * -2 + 1;
  }
  var_3->str_tree_storage_idx = 0x1f;
  if (var_6 < 0xaaaaaaa) {
    var_8 = var_6 + 1;
    var_3->nodes_alloc = var_8;
    var_56 = (type_8 *)var_7(var_8 * 8);
    var_3->nodes = var_56;
    if (var_6 == 0) {
      rVar31 = 0;
      var_4 = 1;
    }
    else {
      var_4 = 1;
      do {
        var_4 = var_4 * 2;
      } while (var_4 <= var_6);
      rVar31 = var_4 - 1;
    }
    prVar9 = (type_9 *)var_9(0xc,var_4);
    var_3->state_hash_mask = rVar31;
    var_3->state_table = prVar9;
    sVar10 = var_10();
    var_3->mb_cur_max = sVar10;
    var_12 = (type_4 *)var_11(0xe);
    if ((((*var_12 & 0xdf) == 0x55) && ((var_12[1] & 0xdf) == 0x54)) &&
       ((var_12[2] & 0xdf) == 0x46)) {
      var_16 = var_12[3] < 0x2d;
      var_13 = var_12[3] == 0x2d;
      var_14 = 2;
      var_12 = var_12 + var_13 + 3;
      var_15 = &DAT_00027a0a;
      do {
        if (var_14 == 0) break;
        var_14 = var_14 + -1;
        var_16 = *var_12 < *var_15;
        var_13 = *var_12 == *var_15;
        var_12 = var_12 + (type_18)var_52 * -2 + 1;
        var_15 = var_15 + (type_18)var_52 * -2 + 1;
      } while (var_13);
      if ((!var_16 && !var_13) == var_16) {
        var_3->field_0x58 = var_3->field_0x58 | 4;
      }
    }
    var_17 = var_3->field_0x58;
    var_3->field_0x58 = var_17 & 0xf7;
    if (1 < var_3->mb_cur_max) {
      if ((var_17 & 4) == 0) {
        var_18 = (type_15)var_9(0x20,1);
        var_3->sb_char = var_18;
        if (var_18 == (type_15)0x0) goto LAB_00023fc0;
        var_14 = 0;
        do {
          var_4 = var_14 * 8;
          var_21 = 0;
          do {
            while( true ) {
              var_20 = var_19(var_4);
              if (var_20 != 0xffffffff) break;
              if ((var_4 & 0xffffff80) == 0) {
LAB_000240ac:
                var_3->field_0x58 = var_3->field_0x58 | 8;
              }
LAB_000240b4:
              var_21 = var_21 + 1;
              var_4 = var_4 + 1;
              if (var_21 == 0x20) goto LAB_00024110;
            }
            puVar27 = (type_18 *)((int)var_3->sb_char + var_14);
            *puVar27 = *puVar27 | 1 << ((type_4)var_21 & 0x1f);
            if ((var_4 & 0xffffff80) != 0) goto LAB_000240b4;
            if (var_20 != var_4) goto LAB_000240ac;
            var_21 = var_21 + 1;
            var_4 = var_4 + 1;
          } while (var_21 != 0x20);
LAB_00024110:
          var_14 = var_14 + 4;
        } while (var_14 != 0x20);
      }
      else {
        var_3->sb_char = utf8_sb_map;
      }
    }
    if ((var_3->nodes != (type_8 *)0x0) && (var_3->state_table != (type_9 *)0x0)) {
      var_33 = var_28;
      var_24 = preg->translate;
      var_22 = &regexp.mbs;
      for (var_14 = 0x13; var_14 != 0; var_14 = var_14 + -1) {
        *var_22 = (type_5 *)0x0;
        var_22 = var_22 + (type_18)var_52 * -2 + 1;
      }
      var_4 = var_23 & 0x400000;
      regexp.icase = var_4 != 0;
      var_14 = var_3->mb_cur_max;
      regexp.mbs_allocated = var_24 != (type_5 *)0x0 || var_4 != 0;
      regexp.map_notascii = (type_4)var_3->field_0x58 >> 3 & 1;
      regexp.is_utf8 = (type_4)var_3->field_0x58 >> 2 & 1;
      regexp.raw_mbs = (type_5 *)pattern;
      regexp.raw_len = var_6;
      regexp.len = var_6;
      regexp.raw_stop = var_6;
      regexp.stop = var_6;
      regexp.trans = var_24;
      regexp.mb_cur_max = var_14;
      if (var_6 == 0) {
LAB_00023881:
        if (regexp.mbs_allocated != '\0') {
          pattern = (char *)regexp.mbs;
        }
        regexp.mbs = (type_5 *)pattern;
        if (var_4 == 0) {
          if (var_14 < 2) {
            var_60 = regexp.bufs_len;
            regexp.valid_raw_len = regexp.bufs_len;
            if (var_24 != (type_5 *)0x0) {
              if (regexp.len <= regexp.bufs_len) {
                regexp.bufs_len = regexp.len;
              }
              var_60 = regexp.valid_len;
              regexp.valid_raw_len = regexp.valid_len;
              if (regexp.valid_len < regexp.bufs_len) {
                do {
                  ((type_5 *)pattern)[regexp.valid_len] =
                       regexp.trans[regexp.raw_mbs[regexp.raw_mbs_idx + regexp.valid_len]];
                  regexp.valid_len = regexp.valid_len + 1;
                  var_60 = regexp.bufs_len;
                  regexp.valid_raw_len = regexp.bufs_len;
                } while (regexp.bufs_len != regexp.valid_len);
              }
            }
          }
          else {
            var_25(&regexp);
            var_60 = regexp.valid_len;
          }
        }
        else {
          if (1 < var_14) {
            do {
              var_27 = var_26(&regexp);
              if (var_27 != var_28) break;
              var_60 = regexp.valid_len;
              if (((int)var_6 <= regexp.valid_raw_len) ||
                 (var_3->mb_cur_max + regexp.valid_len < regexp.bufs_len)) goto LAB_00023966;
              var_27 = var_29(&regexp,regexp.bufs_len * 2);
            } while (var_27 == var_28);
            goto LAB_00023d90;
          }
          var_30(&regexp);
          var_60 = regexp.valid_len;
        }
LAB_00023966:
        regexp.valid_len = var_60;
        var_33 = var_28;
        prVar30 = preg->buffer;
        preg->re_nsub = 0;
        prVar30->var_23 = var_23;
        var_60 = 0x2399b;
        var_14 = var_31(&current_token,&regexp,var_23 | 0x800000);
        regexp.cur_idx = regexp.cur_idx + var_14;
        var_35 = var_32(&regexp,(type_2 *)var_23,(type_8 *)0x0,(type_3)&var_33,var_60,
                              in_stack_ffffff44);
        if (var_33 == var_28) {
          t._4_1_ = 2;
          var_36 = var_34((type_17 *)&prVar30->str_tree_storage,
                                    (type_10 *)&prVar30->str_tree_storage_idx,(type_10 *)0x0,
                                    (type_8 *)0x0,(type_17 *)&t);
          var_37 = var_36;
          if (var_35 != (type_10 *)0x0) {
LAB_000239ff:
            local_a4 = &prVar30->str_tree_storage;
            local_ac = (type_17 *)&t;
            t._4_1_ = 0x10;
            var_37 = var_34((type_17 *)local_a4,
                                        (type_10 *)&prVar30->str_tree_storage_idx,var_35,
                                        (type_8 *)var_36,local_ac);
          }
          local_ac = (type_17 *)&t;
          prVar30 = preg->buffer;
          if (var_36 == (type_10 *)0x0 || var_37 == (type_10 *)0x0) {
            var_33 = _REG_ESPACE;
            var_3->str_tree = (type_10 *)0x0;
          }
          else {
            var_3->str_tree = var_37;
            sVar10 = prVar30->nodes_alloc * 4;
            __size = prVar30->nodes_alloc * 0xc;
            var_38 = (type_11 *)var_7(sVar10);
            prVar30->nexts = var_38;
            var_39 = (type_11 *)var_7(sVar10);
            prVar30->org_indices = var_39;
            var_40 = (type_12 *)var_7(__size);
            prVar30->edests = var_40;
            var_41 = (type_12 *)var_7(__size);
            prVar30->eclosures = var_41;
            if ((((var_38 != (type_11 *)0x0) && (var_39 != (type_11 *)0x0)) &&
                (var_40 != (type_12 *)0x0)) && (var_41 != (type_12 *)0x0)) {
              var_8 = preg->re_nsub;
              var_38 = (type_11 *)var_7(var_8 * 4);
              prVar30->subexp_map = var_38;
              if (var_38 != (type_11 *)0x0) {
                var_42 = 0;
                if (var_8 != 0) {
                  do {
                    var_38[var_42] = var_42;
                    var_42 = var_42 + 1;
                  } while (var_42 != var_8);
                }
                var_43(prVar30->str_tree,optimize_subexps,prVar30);
                if (preg->re_nsub == 0) {
                  __ptr = (size_t *)prVar30->subexp_map;
LAB_00023b4c:
                  var_44(__ptr);
                  prVar30->subexp_map = (type_11 *)0x0;
                }
                else {
                  __ptr = (size_t *)prVar30->subexp_map;
                  var_8 = *__ptr;
                  if (var_8 == 0) {
                    do {
                      var_8 = var_8 + 1;
                      if (var_8 == preg->re_nsub) goto LAB_00023b4c;
                    } while (__ptr[var_8] == var_8);
                  }
                }
              }
              var_27 = var_45(prVar30->str_tree,lower_subexps,preg);
              if ((var_27 == var_28) &&
                 (var_27 = var_45(prVar30->str_tree,calc_first,prVar30), var_27 == var_28))
              {
                var_43(prVar30->str_tree,calc_next,prVar30);
                var_27 = var_43(prVar30->str_tree,link_nfa_nodes,prVar30);
                if (var_27 == var_28) {
                  var_16 = false;
                  var_8 = 0;
                  do {
                    var_42 = var_8;
                    if (prVar30->nodes_len == var_8) goto LAB_00023bfe;
LAB_00023be5:
                    while( true ) {
                      if (prVar30->eclosures[var_42].nelem != 0) goto code_r0x00023bf6;
                      var_27 = var_46((type_12 *)local_ac,prVar30,var_42,true);
                      if (var_27 != var_28) goto LAB_00023d90;
                      var_8 = var_42 + 1;
                      if (prVar30->eclosures[var_42].nelem != 0) break;
                      var_44(var_59);
                      var_16 = true;
                      var_42 = var_8;
                      if (prVar30->nodes_len == var_8) goto LAB_00023c09;
                    }
                  } while( true );
                }
              }
              goto LAB_00023d90;
            }
            var_33 = _REG_ESPACE;
          }
        }
        else {
          if (var_35 != (type_10 *)0x0) {
            t._4_1_ = 2;
            var_36 = var_34((type_17 *)&prVar30->str_tree_storage,
                                      (type_10 *)&prVar30->str_tree_storage_idx,(type_10 *)0x0
                                      ,(type_8 *)0x0,(type_17 *)&t);
            goto LAB_000239ff;
          }
          var_3->str_tree = (type_10 *)0x0;
          prVar30 = preg->buffer;
        }
      }
      else {
        var_27 = var_29(&regexp,var_8);
        if (var_27 == var_28) {
          var_14 = var_3->mb_cur_max;
          goto LAB_00023881;
        }
LAB_00023d90:
        prVar30 = preg->buffer;
        var_33 = var_27;
      }
LAB_00023ff8:
      var_47 = prVar30->str_tree_storage;
      while (var_47 != (type_6 *)0x0) {
        pbVar4 = var_47->next;
        var_44(var_47);
        var_47 = pbVar4;
      }
      prVar30->str_tree_storage = (type_6 *)0x0;
      prVar30->str_tree_storage_idx = 0x1f;
      prVar30->str_tree = (type_10 *)0x0;
      var_44(prVar30->org_indices);
      prVar30->org_indices = (type_11 *)0x0;
      var_48(&regexp);
      var_49(var_3);
      preg->buffer = (type_17 *)0x0;
      preg->allocated = 0;
      var_27 = var_33;
      goto LAB_00023f97;
    }
  }
LAB_00023fc0:
  var_33 = _REG_ESPACE;
  goto LAB_00023fc8;
code_r0x00023bf6:
  var_8 = var_42 + 1;
  var_42 = var_8;
  if (prVar30->nodes_len == var_8) {
LAB_00023bfe:
    if (!var_16) {
      if (((((preg->field_0x1c & 0x10) != 0) || (preg->re_nsub == 0)) ||
          ((prVar30->field_0x58 & 1) == 0)) && (prVar30->nbackref == 0)) goto LAB_00023dab;
      var_40 = (type_12 *)var_7(var_8 * 0xc);
      prVar30->inveclosures = var_40;
      if (var_40 != (type_12 *)0x0) {
        var_50 = 0;
        if (var_8 != 0) goto LAB_00023cf3;
        goto LAB_00023dab;
      }
      var_33 = _REG_ESPACE;
      prVar30 = preg->buffer;
      goto LAB_00023ff8;
    }
LAB_00023c09:
    var_16 = false;
    var_42 = 0;
  }
  goto LAB_00023be5;
LAB_00023cf3:
  while( true ) {
    var_40 = var_40 + var_50;
    var_40->alloc = 0;
    var_40->nelem = 0;
    var_40->elems = (type_11 *)0x0;
    if (prVar30->nodes_len <= var_50 + 1) break;
    var_40 = prVar30->inveclosures;
    var_50 = var_50 + 1;
  }
  if (prVar30->nodes_len != 0) {
    var_40 = prVar30->eclosures;
    var_50 = 0;
    do {
      var_14 = 0;
      var_38 = var_40[var_50].elems;
      if (0 < var_40[var_50].nelem) {
        do {
          _Var7 = var_51(prVar30->inveclosures + var_38[var_14],var_50);
          if (!_Var7) {
            var_27 = _REG_ESPACE;
            goto LAB_00023d90;
          }
          var_40 = prVar30->eclosures;
          var_14 = var_14 + 1;
        } while (var_14 < var_40[var_50].nelem);
      }
      var_50 = var_50 + 1;
    } while (var_50 < prVar30->nodes_len);
  }
LAB_00023dab:
  var_33 = var_28;
  var_52 = (type_4)var_3->field_0x58 >> 2 & var_4 == 0;
  if ((var_52 != 0) && (preg->translate == (type_5 *)0x0)) {
    if (var_3->nodes_len == 0) {
LAB_00024424:
      var_55 = 0;
    }
    else {
      var_56 = var_3->nodes;
      var_55 = 0;
      var_8 = 0;
      var_17 = 0;
      var_54 = var_56;
      do {
        switch(var_54->field_0x4) {
        default:
                    /* WARNING: Subroutine does not return */
          var_53();
        case 1:
          if ((char)(var_54->opr).c < '\0') {
            var_17 = var_52;
          }
          break;
        case 2:
        case 4:
        case 8:
        case 9:
        case 10:
        case 0xb:
          break;
        case 3:
          var_14 = 4;
          do {
            if ((var_54->opr).sbcset[var_14] != 0) goto LAB_00023dcb;
            var_14 = var_14 + 1;
          } while (var_14 != 8);
          break;
        case 5:
          var_55 = var_52;
          break;
        case 6:
          goto _L3750;
        case 0xc:
          var_18 = (var_54->opr).sbcset;
          if (var_18 != (type_15)0x20) {
            if (var_18 < (type_15)0x21) {
              if (var_18 != (type_15)0x10) goto _L3750;
            }
            else if ((var_18 != (type_15)0x40) && (var_18 != (type_15)0x80)) {
_L3750:
              goto LAB_00023dcb;
            }
          }
        }
        var_8 = var_8 + 1;
        var_54 = var_54 + 1;
      } while (var_8 != var_3->nodes_len);
      if (var_17 == 0 && var_55 == 0) goto LAB_00024424;
      var_54 = var_56 + var_8;
      do {
        if (var_56->field_0x4 == '\x01') {
          if ((char)(var_56->opr).c < '\0') {
            var_56->field_0x6 = var_56->field_0x6 & 0xdf;
          }
        }
        else if (var_56->field_0x4 == '\x05') {
          var_56->field_0x4 = 7;
        }
        var_56 = var_56 + 1;
      } while (var_54 != var_56);
    }
    var_3->mb_cur_max = 1;
    var_3->field_0x58 = (0 < var_3->nbackref | var_55) * '\x02' | var_3->field_0x58 & 0xf9;
  }
LAB_00023dcb:
  var_14 = var_3->str_tree->first->node_idx;
  var_3->init_node = var_14;
  aVar18.idx = var_57((type_12 *)local_ac,var_3->eclosures + var_14);
  local_94.idx = aVar18.idx;
  current_token.opr.idx = aVar18.idx;
  if (aVar18.sbcset == (type_15)0x0) {
    if ((0 < var_3->nbackref) && (0 < (int)t._4_4_)) {
      var_14 = 0;
      var_40 = (type_12 *)t._4_4_;
LAB_00023e3b:
      do {
        var_56 = var_3->nodes + var_59[var_14];
        if (var_56->field_0x4 == '\x04') {
          var_41 = (type_12 *)0x0;
          do {
            var_54 = var_3->nodes + var_59[(int)var_41];
            if ((var_54->field_0x4 == '\t') && ((var_54->opr).sbcset == (var_56->opr).sbcset)) {
              var_41 = (type_12 *)*var_3->edests[var_59[var_14]].elems;
              var_60 = var_58(var_40,(type_11)&var_59,var_41);
              if (var_60 == 0) {
                local_94.idx = var_61((type_12 *)local_ac,
                                                 var_3->eclosures + (int)var_41);
                if (local_94.sbcset != (type_15)0x0) goto LAB_00023f26;
                var_14 = 1;
                var_40 = (type_12 *)t._4_4_;
                if (1 < (int)t._4_4_) goto LAB_00023e3b;
                goto LAB_00023ee2;
              }
              break;
            }
            var_41 = (type_12 *)((int)&var_41->alloc + 1);
          } while (var_40 != var_41);
        }
        var_14 = var_14 + 1;
      } while (var_14 < (int)var_40);
    }
LAB_00023ee2:
    var_63 = var_62
                        ((type_1 *)&current_token,var_3,(type_12 *)local_ac,0);
    var_3->init_state = var_63;
    if (var_63 == (type_14 *)0x0) {
LAB_000241e0:
      local_94 = current_token.opr;
    }
    else {
      if ((char)var_63->field_0x34 < '\0') {
        var_63 = var_62
                            ((type_1 *)&current_token,var_3,(type_12 *)local_ac,1);
        var_3->init_state_word = var_63;
        var_63 = var_62
                            ((type_1 *)&current_token,var_3,(type_12 *)local_ac,2);
        var_3->init_state_nl = var_63;
        var_63 = var_62
                            ((type_1 *)&current_token,var_3,(type_12 *)local_ac,6);
        var_3->init_state_begbuf = var_63;
        if (((var_3->init_state_word == (type_14 *)0x0) ||
            (var_3->init_state_nl == (type_14 *)0x0)) || (var_63 == (type_14 *)0x0))
        goto LAB_000241e0;
      }
      else {
        var_3->init_state_begbuf = var_63;
        var_3->init_state_nl = var_63;
        var_3->init_state_word = var_63;
      }
      var_44(var_59);
      local_94.idx = aVar18.idx;
    }
  }
LAB_00023f26:
  prVar30 = preg->buffer;
  var_47 = prVar30->str_tree_storage;
  var_33 = (type_1)local_94;
  while (var_47 != (type_6 *)0x0) {
    pbVar4 = var_47->next;
    var_44(var_47);
    var_47 = pbVar4;
  }
  prVar30->str_tree_storage = (type_6 *)0x0;
  prVar30->str_tree_storage_idx = 0x1f;
  prVar30->str_tree = (type_10 *)0x0;
  var_44(prVar30->org_indices);
  prVar30->org_indices = (type_11 *)0x0;
  var_48(&regexp);
  var_27 = var_33;
  if (var_33 == var_28) goto LAB_00023f97;
LAB_00023fc8:
  var_49(var_3);
  preg->buffer = (type_17 *)0x0;
  preg->allocated = 0;
  var_27 = var_33;
LAB_00023f97:
  if (var_64 != *(int *)(var_1 + 0x14)) {
                    /* WARNING: Subroutine does not return */
    var_65();
  }
  return var_27;
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (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: (type_identifier) 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: (primitive_type) 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: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) 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: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) 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: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal)))))) (for_statement initializer: (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (number_literal))))))))) right: (number_literal))) condition: (binary_expression left: (identifier) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (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: (number_literal))) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (unary_expression argument: (identifier)))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (subscript_expression argument: (identifier) index: (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: (call_expression function: (identifier) arguments: (argument_list (number_literal) (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (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: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (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) (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: (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))))))) (labeled_statement label: (statement_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: (number_literal)))) (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: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))))) right: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (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: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_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: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (for_statement initializer: (assignment_expression left: (identifier) right: (number_literal)) condition: (binary_expression left: (identifier) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (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: (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: (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: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (do_statement body: (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: (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: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (identifier))))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (number_literal))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (goto_statement label: (statement_identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (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: (pointer_expression argument: (identifier)) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (field_expression argument: (identifier) field: (field_identifier)) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (field_expression argument: (identifier) field: (field_identifier)) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (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))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (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))))) right: (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: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier))) (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 (call_expression function: (identifier) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (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))))))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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: (number_literal)))) alternative: (else_clause (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: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) 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: (subscript_expression argument: (identifier) index: (number_literal)))) consequence: (goto_statement label: (statement_identifier)))) condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (identifier))))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (while_statement condition: (parenthesized_expression (true)) 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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (identifier))))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal))))) (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: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (identifier))))) right: (number_literal))) consequence: (break_statement)) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (true))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))))) condition: (parenthesized_expression (true))))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (field_expression argument: (identifier) field: (field_identifier)) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (goto_statement label: (statement_identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (labeled_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 declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) 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))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (goto_statement label: (statement_identifier)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (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))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (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))))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (goto_statement label: (statement_identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (false)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (goto_statement label: (statement_identifier)) (labeled_statement label: (statement_identifier) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (if_statement condition: (parenthesized_expression (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: (binary_expression left: (identifier) right: (number_literal)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (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: (number_literal))))))) (if_statement condition: (parenthesized_expression (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))) 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: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) 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: (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)))))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) 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: (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: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (switch_statement condition: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))) body: (compound_statement (case_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))) (case_statement value: (char_literal (escape_sequence)) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (break_statement)) (case_statement value: (char_literal (escape_sequence))) (case_statement value: (char_literal (escape_sequence))) (case_statement value: (char_literal (escape_sequence))) (case_statement value: (char_literal (escape_sequence))) (case_statement value: (char_literal (escape_sequence))) (case_statement value: (char_literal (escape_sequence)) (break_statement)) (case_statement value: (char_literal (escape_sequence)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (break_statement)) (case_statement value: (char_literal (escape_sequence)) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (break_statement)) (case_statement value: (char_literal (escape_sequence)) (goto_statement label: (statement_identifier))) (case_statement value: (char_literal (escape_sequence)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (goto_statement label: (statement_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: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (number_literal))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (char_literal (escape_sequence)))))))) (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: (subscript_expression argument: (identifier) index: (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: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) right: (char_literal (escape_sequence))) right: (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))))))) (labeled_statement label: (statement_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: (pointer_expression argument: (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: (number_literal))))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (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: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (subscript_expression argument: (identifier) index: (number_literal)))) right: (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: (identifier))) (labeled_statement label: (statement_identifier) (do_statement body: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))))) (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: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (char_literal (escape_sequence)))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (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: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))) (break_statement))) (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: (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) (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: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) 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))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (return_statement (identifier)))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

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

{
  int *piVar1;
  byte bVar2;
  undefined4 *puVar3;
  byte bVar4;
  char cVar5;
  void *pvVar6;
  size_t sVar7;
  byte *pbVar8;
  int iVar9;
  int iVar10;
  void *pvVar11;
  void *pvVar12;
  void *pvVar13;
  int iVar14;
  wint_t wVar15;
  uint *puVar16;
  int *__ptr;
  uint uVar17;
  int iVar18;
  int iVar19;
  int *piVar20;
  byte bVar21;
  uint uVar22;
  undefined4 *puVar23;
  byte *pbVar24;
  size_t __size;
  uint *puVar25;
  int in_GS_OFFSET;
  bool bVar26;
  bool bVar27;
  undefined1 *local_ac;
  int local_94;
  int local_8c;
  int local_88 [2];
  undefined1 local_80 [4];
  int local_7c;
  void *local_78;
  int local_74;
  int local_70 [5];
  int local_5c;
  uint local_58;
  uint local_54;
  uint local_50;
  int local_4c;
  uint local_48;
  uint local_44;
  uint local_40;
  uint local_3c;
  int local_34;
  undefined1 local_2c;
  byte local_2b;
  byte local_2a;
  char local_29;
  int local_24;
  int local_20;
  undefined4 uStack_14;
  
  bVar21 = 0;
  uStack_14 = 0x23639;
  __ptr = (int *)*param_1;
  local_20 = *(int *)(in_GS_OFFSET + 0x14);
  *(byte *)(param_1 + 7) = *(byte *)(param_1 + 7) & 0x90;
  local_8c = 0;
  param_1[3] = param_4;
  param_1[2] = 0;
  param_1[6] = 0;
  if ((uint)param_1[1] < 0x88) {
    __ptr = (int *)realloc(__ptr,0x88);
    if (__ptr == (int *)0x0) {
      iVar9 = 0xc;
      goto LAB_00023f97;
    }
    param_1[1] = 0x88;
    *param_1 = (int)__ptr;
  }
  param_1[2] = 0x88;
  *__ptr = 0;
  __ptr[0x21] = 0;
  puVar23 = (undefined4 *)((uint)(__ptr + 1) & 0xfffffffc);
  for (uVar17 = (uint)((int)__ptr + (0x88 - (int)((uint)(__ptr + 1) & 0xfffffffc))) >> 2;
      uVar17 != 0; uVar17 = uVar17 - 1) {
    *puVar23 = 0;
    puVar23 = puVar23 + (uint)bVar21 * -2 + 1;
  }
  __ptr[0x10] = 0x1f;
  if (param_3 < 0xaaaaaaa) {
    iVar9 = param_3 + 1;
    __ptr[1] = iVar9;
    pvVar6 = malloc(iVar9 * 8);
    *__ptr = (int)pvVar6;
    if (param_3 == 0) {
      iVar18 = 0;
      uVar17 = 1;
    }
    else {
      uVar17 = 1;
      do {
        uVar17 = uVar17 * 2;
      } while (uVar17 <= param_3);
      iVar18 = uVar17 - 1;
    }
    pvVar6 = calloc(0xc,uVar17);
    __ptr[0x11] = iVar18;
    __ptr[8] = (int)pvVar6;
    sVar7 = __ctype_get_mb_cur_max();
    __ptr[0x17] = sVar7;
    pbVar8 = (byte *)nl_langinfo(0xe);
    if ((((*pbVar8 & 0xdf) == 0x55) && ((pbVar8[1] & 0xdf) == 0x54)) && ((pbVar8[2] & 0xdf) == 0x46)
       ) {
      bVar26 = pbVar8[3] < 0x2d;
      bVar27 = pbVar8[3] == 0x2d;
      iVar18 = 2;
      pbVar8 = pbVar8 + bVar27 + 3;
      pbVar24 = &DAT_00027a0a;
      do {
        if (iVar18 == 0) break;
        iVar18 = iVar18 + -1;
        bVar26 = *pbVar8 < *pbVar24;
        bVar27 = *pbVar8 == *pbVar24;
        pbVar8 = pbVar8 + (uint)bVar21 * -2 + 1;
        pbVar24 = pbVar24 + (uint)bVar21 * -2 + 1;
      } while (bVar27);
      if ((!bVar26 && !bVar27) == bVar26) {
        *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 4;
      }
    }
    bVar2 = *(byte *)(__ptr + 0x16);
    *(byte *)(__ptr + 0x16) = bVar2 & 0xf7;
    if (1 < __ptr[0x17]) {
      if ((bVar2 & 4) == 0) {
        pvVar6 = calloc(0x20,1);
        __ptr[0xf] = (int)pvVar6;
        if (pvVar6 == (void *)0x0) goto LAB_00023fc0;
        iVar18 = 0;
        do {
          uVar17 = iVar18 * 8;
          iVar19 = 0;
          do {
            while( true ) {
              wVar15 = btowc(uVar17);
              if (wVar15 != 0xffffffff) break;
              if ((uVar17 & 0xffffff80) == 0) {
LAB_000240ac:
                *(byte *)(__ptr + 0x16) = *(byte *)(__ptr + 0x16) | 8;
              }
LAB_000240b4:
              iVar19 = iVar19 + 1;
              uVar17 = uVar17 + 1;
              if (iVar19 == 0x20) goto LAB_00024110;
            }
            *(uint *)(__ptr[0xf] + iVar18) =
                 *(uint *)(__ptr[0xf] + iVar18) | 1 << ((byte)iVar19 & 0x1f);
            if ((uVar17 & 0xffffff80) != 0) goto LAB_000240b4;
            if (wVar15 != uVar17) goto LAB_000240ac;
            iVar19 = iVar19 + 1;
            uVar17 = uVar17 + 1;
          } while (iVar19 != 0x20);
LAB_00024110:
          iVar18 = iVar18 + 4;
        } while (iVar18 != 0x20);
      }
      else {
        __ptr[0xf] = (int)&DAT_00027f60;
      }
    }
    if ((*__ptr != 0) && (__ptr[8] != 0)) {
      local_8c = 0;
      iVar18 = param_1[5];
      piVar20 = local_70;
      for (iVar19 = 0x13; iVar19 != 0; iVar19 = iVar19 + -1) {
        *piVar20 = 0;
        piVar20 = piVar20 + (uint)bVar21 * -2 + 1;
      }
      uVar17 = param_4 & 0x400000;
      local_2c = uVar17 != 0;
      iVar19 = __ptr[0x17];
      local_29 = iVar18 != 0 || uVar17 != 0;
      local_2a = *(byte *)(__ptr + 0x16) >> 3 & 1;
      local_2b = *(byte *)(__ptr + 0x16) >> 2 & 1;
      local_74 = param_2;
      local_48 = param_3;
      local_44 = param_3;
      local_40 = param_3;
      local_3c = param_3;
      local_34 = iVar18;
      local_24 = iVar19;
      if (param_3 == 0) {
LAB_00023881:
        if (local_29 != '\0') {
          param_2 = local_70[0];
        }
        local_70[0] = param_2;
        if (uVar17 == 0) {
          if (iVar19 < 2) {
            uVar22 = local_50;
            local_54 = local_50;
            if (iVar18 != 0) {
              if ((int)local_44 <= (int)local_50) {
                local_50 = local_44;
              }
              uVar22 = local_58;
              local_54 = local_58;
              if ((int)local_58 < (int)local_50) {
                do {
                  *(undefined1 *)(param_2 + local_58) =
                       *(undefined1 *)(local_34 + (uint)*(byte *)(local_74 + local_58 + local_5c));
                  local_58 = local_58 + 1;
                  uVar22 = local_50;
                  local_54 = local_50;
                } while (local_50 != local_58);
              }
            }
          }
          else {
            FUN_00017860();
            uVar22 = local_58;
          }
        }
        else {
          if (1 < iVar19) {
            do {
              iVar9 = FUN_00017a40(&local_74);
              if (iVar9 != 0) break;
              uVar22 = local_58;
              if (((int)param_3 <= (int)local_54) || ((int)(__ptr[0x17] + local_58) < (int)local_50)
                 ) goto LAB_00023966;
              iVar9 = FUN_000174a0(&local_74,local_50 * 2);
            } while (iVar9 == 0);
            goto LAB_00023d90;
          }
          FUN_000177e0();
          uVar22 = local_58;
        }
LAB_00023966:
        local_58 = uVar22;
        local_8c = 0;
        param_1[6] = 0;
        *(uint *)(*param_1 + 0x80) = param_4;
        iVar9 = FUN_00021720();
        local_4c = local_4c + iVar9;
        iVar9 = FUN_000234b0(param_4,0,&local_8c);
        if (local_8c == 0) {
          local_7c = CONCAT31(local_7c._1_3_,2);
          iVar18 = FUN_00019970(0,local_80);
          iVar10 = iVar18;
          if (iVar9 != 0) {
LAB_000239ff:
            local_ac = local_80;
            local_7c = CONCAT31(local_7c._1_3_,0x10);
            iVar10 = FUN_00019970(iVar18,local_ac);
          }
          local_ac = local_80;
          iVar19 = *param_1;
          if (iVar18 == 0 || iVar10 == 0) {
            local_8c = 0xc;
            __ptr[0xd] = 0;
          }
          else {
            __ptr[0xd] = iVar10;
            sVar7 = *(int *)(iVar19 + 4) * 4;
            __size = *(int *)(iVar19 + 4) * 0xc;
            pvVar6 = malloc(sVar7);
            *(void **)(iVar19 + 0xc) = pvVar6;
            pvVar11 = malloc(sVar7);
            *(void **)(iVar19 + 0x10) = pvVar11;
            pvVar12 = malloc(__size);
            *(void **)(iVar19 + 0x14) = pvVar12;
            pvVar13 = malloc(__size);
            *(void **)(iVar19 + 0x18) = pvVar13;
            if ((((pvVar6 != (void *)0x0) && (pvVar11 != (void *)0x0)) && (pvVar12 != (void *)0x0))
               && (pvVar13 != (void *)0x0)) {
              iVar9 = param_1[6];
              pvVar6 = malloc(iVar9 * 4);
              *(void **)(iVar19 + 0x84) = pvVar6;
              if (pvVar6 != (void *)0x0) {
                iVar18 = 0;
                if (iVar9 != 0) {
                  do {
                    *(int *)((int)pvVar6 + iVar18 * 4) = iVar18;
                    iVar18 = iVar18 + 1;
                  } while (iVar18 != iVar9);
                }
                FUN_000190d0();
                if (param_1[6] == 0) {
                  piVar20 = *(int **)(iVar19 + 0x84);
LAB_00023b4c:
                  free(piVar20);
                  *(undefined4 *)(iVar19 + 0x84) = 0;
                }
                else {
                  piVar20 = *(int **)(iVar19 + 0x84);
                  iVar9 = *piVar20;
                  if (iVar9 == 0) {
                    do {
                      iVar9 = iVar9 + 1;
                      if (iVar9 == param_1[6]) goto LAB_00023b4c;
                    } while (piVar20[iVar9] == iVar9);
                  }
                }
              }
              iVar9 = FUN_00017080();
              if ((iVar9 == 0) && (iVar9 = FUN_00017080(), iVar9 == 0)) {
                FUN_000190d0();
                iVar9 = FUN_000190d0();
                if (iVar9 == 0) {
                  bVar26 = false;
                  iVar18 = 0;
                  do {
                    if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023bfe;
LAB_00023be5:
                    while( true ) {
                      iVar10 = iVar18 * 0xc;
                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0)
                      goto code_r0x00023bf6;
                      iVar9 = FUN_00019310(1);
                      if (iVar9 != 0) goto LAB_00023d90;
                      iVar18 = iVar18 + 1;
                      if (*(int *)(*(int *)(iVar19 + 0x18) + 4 + iVar10) != 0) break;
                      free(local_78);
                      bVar26 = true;
                      if (*(int *)(iVar19 + 8) == iVar18) goto LAB_00023c09;
                    }
                  } while( true );
                }
              }
              goto LAB_00023d90;
            }
            local_8c = 0xc;
          }
        }
        else {
          if (iVar9 != 0) {
            local_7c = CONCAT31(local_7c._1_3_,2);
            iVar18 = FUN_00019970(0,local_80);
            goto LAB_000239ff;
          }
          __ptr[0xd] = 0;
          iVar19 = *param_1;
        }
      }
      else {
        iVar9 = FUN_000174a0(&local_74,iVar9);
        if (iVar9 == 0) {
          iVar19 = __ptr[0x17];
          goto LAB_00023881;
        }
LAB_00023d90:
        iVar19 = *param_1;
        local_8c = iVar9;
      }
LAB_00023ff8:
      puVar23 = *(undefined4 **)(iVar19 + 0x38);
      while (puVar23 != (undefined4 *)0x0) {
        puVar3 = (undefined4 *)*puVar23;
        free(puVar23);
        puVar23 = puVar3;
      }
      *(undefined4 *)(iVar19 + 0x38) = 0;
      *(undefined4 *)(iVar19 + 0x40) = 0x1f;
      *(undefined4 *)(iVar19 + 0x34) = 0;
      free(*(void **)(iVar19 + 0x10));
      *(undefined4 *)(iVar19 + 0x10) = 0;
      FUN_000188a0();
      FUN_0001c4f0();
      *param_1 = 0;
      param_1[1] = 0;
      iVar9 = local_8c;
      goto LAB_00023f97;
    }
  }
LAB_00023fc0:
  local_8c = 0xc;
  goto LAB_00023fc8;
code_r0x00023bf6:
  iVar18 = iVar18 + 1;
  if (*(int *)(iVar19 + 8) == iVar18) {
LAB_00023bfe:
    if (!bVar26) {
      if (((((*(byte *)(param_1 + 7) & 0x10) != 0) || (param_1[6] == 0)) ||
          ((*(byte *)(iVar19 + 0x58) & 1) == 0)) && (*(int *)(iVar19 + 0x4c) == 0))
      goto LAB_00023dab;
      pvVar6 = malloc(iVar18 * 0xc);
      *(void **)(iVar19 + 0x1c) = pvVar6;
      if (pvVar6 != (void *)0x0) {
        uVar22 = 0;
        if (iVar18 != 0) goto LAB_00023cf3;
        goto LAB_00023dab;
      }
      local_8c = 0xc;
      iVar19 = *param_1;
      goto LAB_00023ff8;
    }
LAB_00023c09:
    bVar26 = false;
    iVar18 = 0;
  }
  goto LAB_00023be5;
LAB_00023cf3:
  while( true ) {
    puVar23 = (undefined4 *)((int)pvVar6 + uVar22 * 0xc);
    *puVar23 = 0;
    puVar23[1] = 0;
    puVar23[2] = 0;
    if (*(uint *)(iVar19 + 8) <= uVar22 + 1) break;
    pvVar6 = *(void **)(iVar19 + 0x1c);
    uVar22 = uVar22 + 1;
  }
  if (*(uint *)(iVar19 + 8) != 0) {
    iVar9 = *(int *)(iVar19 + 0x18);
    uVar22 = 0;
    do {
      iVar14 = 0;
      iVar10 = uVar22 * 0xc + iVar9;
      iVar18 = *(int *)(iVar10 + 8);
      if (0 < *(int *)(iVar10 + 4)) {
        do {
          cVar5 = FUN_00017540(*(int *)(iVar19 + 0x1c) + *(int *)(iVar18 + iVar14 * 4) * 0xc,uVar22)
          ;
          if (cVar5 == '\0') {
            iVar9 = 0xc;
            goto LAB_00023d90;
          }
          iVar9 = *(int *)(iVar19 + 0x18);
          iVar14 = iVar14 + 1;
        } while (iVar14 < *(int *)(iVar9 + 4 + uVar22 * 0xc));
      }
      uVar22 = uVar22 + 1;
    } while (uVar22 < *(uint *)(iVar19 + 8));
  }
LAB_00023dab:
  local_8c = 0;
  bVar21 = *(byte *)(__ptr + 0x16) >> 2 & uVar17 == 0;
  if ((bVar21 != 0) && (param_1[5] == 0)) {
    if (__ptr[2] == 0) {
LAB_00024424:
      bVar4 = 0;
    }
    else {
      puVar25 = (uint *)*__ptr;
      bVar4 = 0;
      iVar9 = 0;
      bVar2 = 0;
      puVar16 = puVar25;
      do {
        switch((char)puVar16[1]) {
        default:
                    /* WARNING: Subroutine does not return */
          abort();
        case '\x01':
          if ((char)*puVar16 < '\0') {
            bVar2 = bVar21;
          }
          break;
        case '\x02':
        case '\x04':
        case '\b':
        case '\t':
        case '\n':
        case '\v':
          break;
        case '\x03':
          iVar18 = 4;
          do {
            if (*(int *)(*puVar16 + iVar18 * 4) != 0) goto LAB_00023dcb;
            iVar18 = iVar18 + 1;
          } while (iVar18 != 8);
          break;
        case '\x05':
          bVar4 = bVar21;
          break;
        case '\x06':
          goto code_r0x00024350;
        case '\f':
          uVar17 = *puVar16;
          if (uVar17 != 0x20) {
            if (uVar17 < 0x21) {
              if (uVar17 != 0x10) goto code_r0x00024350;
            }
            else if ((uVar17 != 0x40) && (uVar17 != 0x80)) {
code_r0x00024350:
              goto LAB_00023dcb;
            }
          }
        }
        iVar9 = iVar9 + 1;
        puVar16 = puVar16 + 2;
      } while (iVar9 != __ptr[2]);
      if (bVar2 == 0 && bVar4 == 0) goto LAB_00024424;
      puVar16 = puVar25 + iVar9 * 2;
      do {
        if ((char)puVar25[1] == '\x01') {
          if ((char)*puVar25 < '\0') {
            *(byte *)((int)puVar25 + 6) = *(byte *)((int)puVar25 + 6) & 0xdf;
          }
        }
        else if ((char)puVar25[1] == '\x05') {
          *(char *)(puVar25 + 1) = '\a';
        }
        puVar25 = puVar25 + 2;
      } while (puVar16 != puVar25);
    }
    __ptr[0x17] = 1;
    *(byte *)(__ptr + 0x16) = (0 < __ptr[0x13] | bVar4) * '\x02' | *(byte *)(__ptr + 0x16) & 0xf9;
  }
LAB_00023dcb:
  iVar9 = *(int *)(*(int *)(__ptr[0xd] + 0xc) + 0x1c);
  __ptr[0x12] = iVar9;
  iVar9 = FUN_00019db0(local_ac,__ptr[6] + iVar9 * 0xc);
  local_94 = iVar9;
  local_88[0] = iVar9;
  if (iVar9 == 0) {
    if ((0 < __ptr[0x13]) && (0 < local_7c)) {
      iVar19 = 0;
      iVar18 = local_7c;
LAB_00023e3b:
      do {
        iVar10 = *(int *)((int)local_78 + iVar19 * 4);
        piVar20 = (int *)(*__ptr + iVar10 * 8);
        if ((char)piVar20[1] == '\x04') {
          iVar14 = 0;
          do {
            piVar1 = (int *)(*__ptr + *(int *)((int)local_78 + iVar14 * 4) * 8);
            if (((char)piVar1[1] == '\t') && (*piVar1 == *piVar20)) {
              iVar10 = **(int **)(__ptr[5] + iVar10 * 0xc + 8);
              iVar14 = FUN_00018c70();
              if (iVar14 == 0) {
                local_94 = FUN_00019140(local_ac,__ptr[6] + iVar10 * 0xc);
                if (local_94 != 0) goto LAB_00023f26;
                iVar19 = 1;
                iVar18 = local_7c;
                if (1 < local_7c) goto LAB_00023e3b;
                goto LAB_00023ee2;
              }
              break;
            }
            iVar14 = iVar14 + 1;
          } while (iVar18 != iVar14);
        }
        iVar19 = iVar19 + 1;
      } while (iVar19 < iVar18);
    }
LAB_00023ee2:
    iVar18 = FUN_0001a040(local_88,__ptr,local_ac,0);
    __ptr[9] = iVar18;
    if (iVar18 == 0) {
LAB_000241e0:
      local_94 = local_88[0];
    }
    else {
      if (*(char *)(iVar18 + 0x34) < '\0') {
        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,1);
        __ptr[10] = iVar18;
        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,2);
        __ptr[0xb] = iVar18;
        iVar18 = FUN_0001a040(local_88,__ptr,local_ac,6);
        __ptr[0xc] = iVar18;
        if (((__ptr[10] == 0) || (__ptr[0xb] == 0)) || (iVar18 == 0)) goto LAB_000241e0;
      }
      else {
        __ptr[0xc] = iVar18;
        __ptr[0xb] = iVar18;
        __ptr[10] = iVar18;
      }
      free(local_78);
      local_94 = iVar9;
    }
  }
LAB_00023f26:
  iVar9 = *param_1;
  puVar23 = *(undefined4 **)(iVar9 + 0x38);
  local_8c = local_94;
  while (puVar23 != (undefined4 *)0x0) {
    puVar3 = (undefined4 *)*puVar23;
    free(puVar23);
    puVar23 = puVar3;
  }
  *(undefined4 *)(iVar9 + 0x38) = 0;
  *(undefined4 *)(iVar9 + 0x40) = 0x1f;
  *(undefined4 *)(iVar9 + 0x34) = 0;
  free(*(void **)(iVar9 + 0x10));
  *(undefined4 *)(iVar9 + 0x10) = 0;
  FUN_000188a0();
  iVar9 = local_8c;
  if (local_8c == 0) goto LAB_00023f97;
LAB_00023fc8:
  FUN_0001c4f0();
  *param_1 = 0;
  param_1[1] = 0;
  iVar9 = local_8c;
LAB_00023f97:
  if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
                    /* WARNING: Subroutine does not return */
    FUN_000253d0();
  }
  return iVar9;
}

