
NODE * asort_actual(wchar_t nargs,sort_context_t ctxt)

{
  long *plVar1;
  STACK_ITEM *pSVar2;
  char cVar3;
  wchar_t wVar4;
  wchar_t wVar5;
  ulong uVar6;
  anon_union_8_4_38bfafa6_for_x aVar7;
  size_t sVar8;
  undefined8 uVar9;
  afunc_t p_Var10;
  NODE *pNVar11;
  NODE *pNVar12;
  char *pcVar13;
  NODE **__ptr;
  long lVar14;
  anon_union_8_4_7583dc62_for_l aVar15;
  NODE *pNVar16;
  exp_node **ppeVar17;
  NODE *symbol;
  char *pcVar18;
  exp_node *peVar19;
  anon_union_8_4_7583dc62_for_l symbol_00;
  ulong uVar20;
  char *pcVar21;
  NODE **ppNVar22;
  NODE **local_58;
  
  pNVar11 = Nnull_string;
  wVar5 = CONVFMTidx;
  pcVar21 = CONVFMT;
  if (nargs == L'\x03') {
    pSVar2 = stack_ptr + -1;
    pNVar11 = stack_ptr->rptr;
    stack_ptr = pSVar2;
    if (pNVar11->type == Node_var_array) {
      set_loc("awk.h",L'ܫ');
      pcVar18 = array_vname(pNVar11);
      pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);
      r_fatal(pcVar13,pcVar18);
    }
    if (((pNVar11->flags & 4) == 0) ||
       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))) {
      pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);
      goto LAB_0010b8dc;
    }
LAB_0010baa0:
    wVar5 = (pNVar11->sub).val.idx;
    if ((wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff')) goto LAB_0010b900;
  }
  else {
    if ((Nnull_string->flags & 1) == 0) {
      pNVar11 = r_dupnode(Nnull_string);
    }
    else {
      plVar1 = &(Nnull_string->sub).val.sref;
      *plVar1 = *plVar1 + 1;
    }
LAB_0010b8dc:
    if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;
  }
  pNVar11 = (*format_val)(CONVFMT,CONVFMTidx,pNVar11);
LAB_0010b900:
  pcVar21 = (pNVar11->sub).val.sp;
  cVar3 = pcVar21[(pNVar11->sub).val.slen];
  pcVar21[(pNVar11->sub).val.slen] = '\0';
  if (((pNVar11->sub).val.slen == 0) && (pcVar21 = "@val_type_asc", ctxt != ASORT)) {
    pcVar21 = "@ind_str_asc";
  }
  symbol_00.lptr = (exp_node *)0x0;
  if (L'\x01' < nargs) {
    pSVar2 = stack_ptr + -1;
    symbol_00 = (anon_union_8_4_7583dc62_for_l)stack_ptr->lptr;
    stack_ptr = pSVar2;
    if (((symbol_00.lptr)->type != Node_var_array) &&
       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array
       )) {
      set_loc("array.c",L'̸');
      pcVar18 = "asort";
      if (ctxt != ASORT) {
        pcVar18 = "asorti";
      }
      pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);
      r_fatal(pcVar13,pcVar18);
    }
  }
  pSVar2 = stack_ptr + -1;
  pNVar12 = stack_ptr->rptr;
  stack_ptr = pSVar2;
  if ((pNVar12->type == Node_var_array) ||
     (pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array)) {
    pNVar16 = func_table;
    symbol = symbol_table;
    if (symbol_table == pNVar12) {
      set_loc("array.c",L'̓');
      pcVar18 = "asort";
      if (ctxt != ASORT) {
        pcVar18 = "asorti";
      }
      pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);
      r_fatal(pcVar13,pcVar18);
    }
    else {
      symbol = pNVar12;
      if (func_table == pNVar12) {
        set_loc("array.c",L'͆');
        pcVar18 = "asort";
        if (ctxt != ASORT) {
          pcVar18 = "asorti";
        }
        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);
        r_fatal(pcVar13,pcVar18);
        symbol = pNVar16;
      }
    }
  }
  else {
    set_loc("array.c",L'̿');
    pcVar18 = "asort";
    if (ctxt != ASORT) {
      pcVar18 = "asorti";
    }
    pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5);
    r_fatal(pcVar13,pcVar18);
    symbol = pNVar12;
  }
  if (symbol_00.lptr != (exp_node *)0x0) {
    pNVar12 = (NODE *)((symbol_00.lptr)->sub).val.sref;
    if (pNVar12 != (NODE *)0x0) {
      pcVar18 = "asorti";
      if (ctxt == ASORT) {
        pcVar18 = "asort";
      }
      do {
        if (pNVar12 == symbol) {
          set_loc("array.c",L'͌');
          pcVar13 = (char *)dcgettext(0,
                                      "%s: cannot use a subarray of first argument for second argument"
                                      ,5);
          r_fatal(pcVar13,pcVar18);
        }
        pNVar12 = (NODE *)(pNVar12->sub).val.sref;
      } while (pNVar12 != (NODE *)0x0);
    }
    peVar19 = (exp_node *)(symbol->sub).val.sref;
    if (peVar19 != (exp_node *)0x0) {
      pcVar18 = "asorti";
      if (ctxt == ASORT) {
        pcVar18 = "asort";
      }
      do {
        if (symbol_00.lptr == peVar19) {
          set_loc("array.c",L'͑');
          pcVar13 = (char *)dcgettext(0,
                                      "%s: cannot use a subarray of second argument for first argument"
                                      ,5);
          r_fatal(pcVar13,pcVar18);
        }
        peVar19 = (exp_node *)(peVar19->sub).val.sref;
      } while (peVar19 != (exp_node *)0x0);
    }
  }
  __ptr = assoc_list(symbol,pcVar21,ctxt);
  (pNVar11->sub).val.sp[(pNVar11->sub).val.slen] = cVar3;
  lVar14 = (pNVar11->sub).val.sref + -1;
  (pNVar11->sub).val.sref = lVar14;
  if (lVar14 == 0) {
    r_unref(pNVar11);
  }
  uVar6 = (symbol->sub).nodep.reflags;
  if ((uVar6 == 0) || (__ptr == (NODE **)0x0)) {
    if ((symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol)) {
      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);
    }
    if (__ptr != (NODE **)0x0) {
      free(__ptr);
    }
    pNVar11 = (*make_number)(0.0);
  }
  else {
    if ((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)) {
      aVar15.lptr = make_array();
      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;
      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;
    }
    else {
      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);
      aVar15 = symbol_00;
    }
    if (ctxt == ASORTI) {
      if (uVar6 != 0) {
        uVar20 = 1;
        ppNVar22 = __ptr;
        do {
          pNVar16 = (*make_number)((double)uVar20);
          pNVar11 = *ppNVar22;
          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);
          pNVar12 = *ppeVar17;
          if ((pNVar12 != (NODE *)0x0) &&
             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))
          {
            r_unref(pNVar12);
          }
          *ppeVar17 = pNVar11;
          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;
          if (p_Var10 != (afunc_t)0x0) {
            (*p_Var10)(aVar15.lptr,pNVar16);
          }
          if ((pNVar16 != (NODE *)0x0) &&
             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))
          {
            r_unref(pNVar16);
          }
          uVar20 = uVar20 + 1;
          ppNVar22 = ppNVar22 + 2;
        } while (uVar20 <= uVar6);
      }
    }
    else {
      uVar20 = 1;
      local_58 = __ptr;
      if (uVar6 != 0) {
        do {
          pNVar12 = (*make_number)((double)uVar20);
          pNVar11 = *local_58;
          if ((pNVar11 != (NODE *)0x0) &&
             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))
          {
            r_unref(pNVar11);
          }
          pNVar11 = local_58[1];
          if (pNVar11->type == Node_val) {
            if ((pNVar11->flags & 1) == 0) {
              pNVar11 = r_dupnode(pNVar11);
            }
            else {
              plVar1 = &(pNVar11->sub).val.sref;
              *plVar1 = *plVar1 + 1;
            }
          }
          else {
            pNVar16 = make_array();
            if (((pNVar12->flags & 4) == 0) ||
               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))
            {
              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);
            }
            pcVar21 = (pNVar12->sub).val.sp;
            (pNVar16->sub).nodep.name = pcVar21;
            pcVar21[(pNVar12->sub).val.slen] = '\0';
            (pNVar12->sub).val.sp = (char *)0x0;
            pNVar12->flags = pNVar12->flags & 0xfffffffb;
            (pNVar16->sub).val.sref = (long)symbol;
            pNVar11 = assoc_copy(pNVar11,pNVar16);
          }
          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);
          pNVar16 = *ppeVar17;
          if ((pNVar16 != (NODE *)0x0) &&
             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))
          {
            r_unref(pNVar16);
          }
          *ppeVar17 = pNVar11;
          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;
          if (p_Var10 != (afunc_t)0x0) {
            (*p_Var10)(aVar15.lptr,pNVar12);
          }
          if ((pNVar12 != (NODE *)0x0) &&
             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))
          {
            r_unref(pNVar12);
          }
          uVar20 = uVar20 + 1;
          local_58 = local_58 + 2;
        } while (uVar20 <= uVar6);
      }
    }
    free(__ptr);
    if (symbol_00.lptr != aVar15.lptr) {
      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);
      pcVar21 = ((aVar15.lptr)->sub).val.sp;
      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;
      (symbol->sub).val.sp = pcVar21;
      aVar7 = ((aVar15.lptr)->sub).nodep.x;
      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;
      (symbol->sub).nodep.x = aVar7;
      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;
      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;
      (symbol->sub).nodep.reserved = sVar8;
      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;
      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;
      (symbol->sub).nodep.cnt = uVar20;
      uVar9 = (aVar15.lp)->dump;
      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;
      *(undefined8 *)&symbol->type = uVar9;
      ((aVar15.lptr)->sub).nodep.l = nextfree;
      nextfree = aVar15;
    }
    pNVar11 = (*make_number)((double)uVar6);
  }
  return pNVar11;
}



void FUN_0010b8aa(int param_1,int param_2)

{
  char cVar1;
  ulong uVar2;
  undefined *puVar3;
  int iVar4;
  long lVar5;
  long *plVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  long lVar9;
  long *plVar10;
  long *plVar11;
  long *plVar12;
  long lVar13;
  long lVar14;
  long *plVar15;
  char *pcVar16;
  long *plVar17;
  ulong uVar18;
  char *pcVar19;
  long *local_58;
  
  lVar5 = DAT_0039deb8;
  iVar4 = DAT_0039ddd4;
  puVar3 = PTR_DAT_00396da8;
  if (param_1 == 3) {
    plVar17 = DAT_00399c70 + -1;
    lVar5 = *DAT_00399c70;
    DAT_00399c70 = plVar17;
    if (*(int *)(lVar5 + 0x48) == 5) {
      FUN_00157301("awk.h",0x72b);
      uVar7 = FUN_0010a1ed(lVar5);
      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);
      FUN_00157844(uVar8,uVar7);
    }
    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||
       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {
      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);
      goto LAB_0010b8dc;
    }
LAB_0010baa0:
    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))
    goto LAB_0010b900;
  }
  else {
    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {
      lVar5 = FUN_00158b1f(DAT_0039deb8);
    }
    else {
      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;
    }
LAB_0010b8dc:
    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;
  }
  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);
LAB_0010b900:
  pcVar19 = *(char **)(lVar5 + 8);
  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];
  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';
  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {
    pcVar19 = "@ind_str_asc";
  }
  plVar17 = (long *)0x0;
  if (1 < param_1) {
    plVar15 = DAT_00399c70 + -1;
    plVar17 = (long *)*DAT_00399c70;
    DAT_00399c70 = plVar15;
    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))
    {
      FUN_00157301("array.c",0x338);
      pcVar16 = "asort";
      if (param_2 != 2) {
        pcVar16 = "asorti";
      }
      uVar7 = dcgettext(0,"%s: second argument is not an array",5);
      FUN_00157844(uVar7,pcVar16);
    }
  }
  plVar15 = DAT_00399c70 + -1;
  plVar6 = (long *)*DAT_00399c70;
  DAT_00399c70 = plVar15;
  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {
    plVar10 = DAT_0039e4c8;
    plVar15 = DAT_0039e4c0;
    if (DAT_0039e4c0 == plVar6) {
      FUN_00157301("array.c",0x343);
      pcVar16 = "asort";
      if (param_2 != 2) {
        pcVar16 = "asorti";
      }
      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);
      FUN_00157844(uVar7,pcVar16);
    }
    else {
      plVar15 = plVar6;
      if (DAT_0039e4c8 == plVar6) {
        FUN_00157301("array.c",0x346);
        pcVar16 = "asort";
        if (param_2 != 2) {
          pcVar16 = "asorti";
        }
        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);
        FUN_00157844(uVar7,pcVar16);
        plVar15 = plVar10;
      }
    }
  }
  else {
    FUN_00157301("array.c",0x33f);
    pcVar16 = "asort";
    if (param_2 != 2) {
      pcVar16 = "asorti";
    }
    uVar7 = dcgettext(0,"%s: first argument is not an array",5);
    FUN_00157844(uVar7,pcVar16);
    plVar15 = plVar6;
  }
  if (plVar17 != (long *)0x0) {
    plVar6 = (long *)plVar17[3];
    if (plVar6 != (long *)0x0) {
      pcVar16 = "asorti";
      if (param_2 == 2) {
        pcVar16 = "asort";
      }
      do {
        if (plVar6 == plVar15) {
          FUN_00157301("array.c",0x34c);
          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);
          FUN_00157844(uVar7,pcVar16);
        }
        plVar6 = (long *)plVar6[3];
      } while (plVar6 != (long *)0x0);
    }
    plVar6 = (long *)plVar15[3];
    if (plVar6 != (long *)0x0) {
      pcVar16 = "asorti";
      if (param_2 == 2) {
        pcVar16 = "asort";
      }
      do {
        if (plVar17 == plVar6) {
          FUN_00157301("array.c",0x351);
          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);
          FUN_00157844(uVar7,pcVar16);
        }
        plVar6 = (long *)plVar6[3];
      } while (plVar6 != (long *)0x0);
    }
  }
  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);
  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;
  lVar9 = *(long *)(lVar5 + 0x18) + -1;
  *(long *)(lVar5 + 0x18) = lVar9;
  if (lVar9 == 0) {
    FUN_001582a6(lVar5);
  }
  uVar2 = plVar15[8];
  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {
    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {
      (**(code **)(*plVar17 + 0x28))(plVar17,0);
    }
    if (plVar6 != (long *)0x0) {
      free(plVar6);
    }
    (*(code *)PTR_FUN_00396e58)(0);
  }
  else {
    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {
      plVar10 = (long *)FUN_00109c9d();
      plVar10[4] = plVar15[4];
      plVar10[3] = plVar15[3];
    }
    else {
      (**(code **)(*plVar17 + 0x28))(plVar17,0);
      plVar10 = plVar17;
    }
    if (param_2 == 3) {
      if (uVar2 != 0) {
        uVar18 = 1;
        plVar12 = plVar6;
        do {
          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);
          lVar5 = *plVar12;
          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);
          lVar9 = *plVar11;
          if ((lVar9 != 0) &&
             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))
          {
            FUN_001582a6();
          }
          *plVar11 = lVar5;
          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {
            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);
          }
          if ((lVar14 != 0) &&
             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {
            FUN_001582a6(lVar14);
          }
          uVar18 = uVar18 + 1;
          plVar12 = plVar12 + 2;
        } while (uVar18 <= uVar2);
      }
    }
    else {
      uVar18 = 1;
      local_58 = plVar6;
      if (uVar2 != 0) {
        do {
          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);
          lVar5 = *local_58;
          if ((lVar5 != 0) &&
             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))
          {
            FUN_001582a6();
          }
          lVar5 = local_58[1];
          if (*(int *)(lVar5 + 0x48) == 1) {
            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {
              lVar5 = FUN_00158b1f(lVar5);
            }
            else {
              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;
            }
          }
          else {
            lVar14 = FUN_00109c9d();
            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||
               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {
              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);
            }
            lVar13 = *(long *)(lVar9 + 8);
            *(long *)(lVar14 + 0x20) = lVar13;
            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;
            *(undefined8 *)(lVar9 + 8) = 0;
            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;
            *(long **)(lVar14 + 0x18) = plVar15;
            lVar5 = FUN_00109e11(lVar5,lVar14);
          }
          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);
          lVar14 = *plVar12;
          if ((lVar14 != 0) &&
             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)
             ) {
            FUN_001582a6();
          }
          *plVar12 = lVar5;
          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {
            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);
          }
          if ((lVar9 != 0) &&
             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {
            FUN_001582a6(lVar9);
          }
          uVar18 = uVar18 + 1;
          local_58 = local_58 + 2;
        } while (uVar18 <= uVar2);
      }
    }
    free(plVar6);
    if (plVar17 != plVar10) {
      (**(code **)(*plVar15 + 0x28))(plVar15,0);
      lVar5 = plVar10[1];
      *plVar15 = *plVar10;
      plVar15[1] = lVar5;
      lVar5 = plVar10[3];
      plVar15[2] = plVar10[2];
      plVar15[3] = lVar5;
      lVar5 = plVar10[5];
      plVar15[4] = plVar10[4];
      plVar15[5] = lVar5;
      lVar5 = plVar10[7];
      plVar15[6] = plVar10[6];
      plVar15[7] = lVar5;
      lVar5 = plVar10[9];
      plVar15[8] = plVar10[8];
      plVar15[9] = lVar5;
      *plVar10 = (long)DAT_00396dc0;
      DAT_00396dc0 = plVar10;
    }
    (*(code *)PTR_FUN_00396e58)((double)uVar2);
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x28
MOV EBP,EDI
MOV EBX,ESI
CMP EDI,0x3
JZ 0x0010b9f9
MOV R14,qword ptr [0x0039deb8]
TEST byte ptr [R14 + 0x4c],0x1
JZ 0x0010baba
ADD qword ptr [R14 + 0x18],0x1
MOV ESI,dword ptr [0x0039ddd4]
MOV RDI,qword ptr [0x00396da8]
TEST byte ptr [R14 + 0x4c],0x4
JNZ 0x0010baa0
MOV RDX,R14
CALL qword ptr [0x00396e48]
MOV R14,RAX
MOV R15,qword ptr [R14 + 0x8]
MOV RAX,R15
ADD RAX,qword ptr [R14 + 0x10]
MOVZX ECX,byte ptr [RAX]
MOV byte ptr [RSP],CL
MOV byte ptr [RAX],0x0
CMP qword ptr [R14 + 0x10],0x0
JNZ 0x0010b930
CMP EBX,0x2
LEA R15,[0x17720b]
LEA RAX,[0x177219]
CMOVNZ R15,RAX
MOV R13D,0x0
CMP EBP,0x1
JG 0x0010baca
MOV RAX,qword ptr [0x00399c70]
LEA RDX,[RAX + -0x8]
MOV qword ptr [0x00399c70],RDX
MOV RBP,qword ptr [RAX]
CMP dword ptr [RBP + 0x48],0x5
JZ 0x0010bb55
MOV ESI,0x0
MOV RDI,RBP
CALL 0x0010a748
MOV RBP,RAX
CMP dword ptr [RAX + 0x48],0x5
JZ 0x0010bb55
MOV ESI,0x33f
LEA RDI,[0x1857ec]
CALL 0x00157301
CMP EBX,0x2
LEA R12,[0x177226]
LEA RAX,[0x17722c]
CMOVNZ R12,RAX
MOV EDX,0x5
LEA RSI,[0x177480]
MOV EDI,0x0
CALL 0x00108bf0
MOV RSI,R12
MOV RDI,RAX
MOV EAX,0x0
CALL 0x00157844
TEST R13,R13
JZ 0x0010bcd2
MOV R12,qword ptr [R13 + 0x18]
TEST R12,R12
JZ 0x0010bc63
CMP EBX,0x2
LEA RDX,[0x177226]
LEA RAX,[0x17722c]
CMOVZ RAX,RDX
MOV qword ptr [RSP + 0x8],RAX
JMP 0x0010bc23
MOV R12D,dword ptr [0x0039ddd4]
MOV R13,qword ptr [0x00396da8]
MOV RAX,qword ptr [0x00399c70]
LEA RDX,[RAX + -0x8]
MOV qword ptr [0x00399c70],RDX
MOV R14,qword ptr [RAX]
CMP dword ptr [R14 + 0x48],0x5
JZ 0x0010ba41
TEST byte ptr [R14 + 0x4c],0x4
JNZ 0x0010ba85
MOV RDX,R14
MOV ESI,R12D
MOV RDI,R13
CALL qword ptr [0x00396e48]
MOV R14,RAX
JMP 0x0010b8dc
MOV ESI,0x72b
LEA RDI,[0x177186]
CALL 0x00157301
MOV RDI,R14
CALL 0x0010a1ed
MOV R15,RAX
MOV EDX,0x5
LEA RSI,[0x177370]
MOV EDI,0x0
CALL 0x00108bf0
MOV RSI,R15
MOV RDI,RAX
MOV EAX,0x0
CALL 0x00157844
JMP 0x0010ba23
MOV EAX,dword ptr [R14 + 0x20]
CMP EAX,-0x1
JZ 0x0010ba93
CMP R12D,EAX
JNZ 0x0010ba2a
MOV ESI,dword ptr [0x0039ddd4]
MOV RDI,qword ptr [0x00396da8]
MOV EAX,dword ptr [R14 + 0x20]
CMP EAX,ESI
JZ 0x0010b900
CMP EAX,-0x1
JNZ 0x0010b8f4
JMP 0x0010b900
MOV RDI,R14
CALL 0x00158b1f
MOV R14,RAX
JMP 0x0010b8dc
MOV RAX,qword ptr [0x00399c70]
LEA RDX,[RAX + -0x8]
MOV qword ptr [0x00399c70],RDX
MOV R13,qword ptr [RAX]
CMP dword ptr [R13 + 0x48],0x5
JZ 0x0010b93f
MOV ESI,0x0
MOV RDI,R13
CALL 0x0010a748
MOV R13,RAX
CMP dword ptr [RAX + 0x48],0x5
JZ 0x0010b93f
MOV ESI,0x338
LEA RDI,[0x1857ec]
CALL 0x00157301
CMP EBX,0x2
LEA RBP,[0x177226]
LEA RAX,[0x17722c]
CMOVNZ RBP,RAX
MOV EDX,0x5
LEA RSI,[0x177500]
MOV EDI,0x0
CALL 0x00108bf0
MOV RSI,RBP
MOV RDI,RAX
MOV EAX,0x0
CALL 0x00157844
JMP 0x0010b93f
MOV R12,qword ptr [0x0039e4c0]
CMP R12,RBP
JZ 0x0010bbc5
MOV R12,qword ptr [0x0039e4c8]
CMP R12,RBP
JNZ 0x0010b9c4
MOV ESI,0x346
LEA RDI,[0x1857ec]
CALL 0x00157301
CMP EBX,0x2
LEA RBP,[0x177226]
LEA RAX,[0x17722c]
CMOVNZ RBP,RAX
MOV EDX,0x5
LEA RSI,[0x177550]
MOV EDI,0x0
CALL 0x00108bf0
MOV RSI,RBP
MOV RDI,RAX
MOV EAX,0x0
CALL 0x00157844
MOV RBP,R12
JMP 0x0010b9c4
MOV ESI,0x343
LEA RDI,[0x1857ec]
CALL 0x00157301
CMP EBX,0x2
LEA RBP,[0x177226]
LEA RAX,[0x17722c]
CMOVNZ RBP,RAX
MOV EDX,0x5
LEA RSI,[0x177528]
MOV EDI,0x0
CALL 0x00108bf0
MOV RSI,RBP
MOV RDI,RAX
MOV EAX,0x0
CALL 0x00157844
MOV RBP,R12
JMP 0x0010b9c4
MOV R12,qword ptr [R12 + 0x18]
TEST R12,R12
JZ 0x0010bc63
CMP R12,RBP
JNZ 0x0010bc19
MOV ESI,0x34c
LEA RDI,[0x1857ec]
CALL 0x00157301
MOV EDX,0x5
LEA RSI,[0x177578]
MOV EDI,0x0
CALL 0x00108bf0
MOV RSI,qword ptr [RSP + 0x8]
MOV RDI,RAX
MOV EAX,0x0
CALL 0x00157844
JMP 0x0010bc19
MOV R12,qword ptr [RBP + 0x18]
TEST R12,R12
JZ 0x0010bcd2
CMP EBX,0x2
LEA RDX,[0x177226]
LEA RAX,[0x17722c]
CMOVZ RAX,RDX
MOV qword ptr [RSP + 0x8],RAX
JMP 0x0010bc92
MOV R12,qword ptr [R12 + 0x18]
TEST R12,R12
JZ 0x0010bcd2
CMP R13,R12
JNZ 0x0010bc88
MOV ESI,0x351
LEA RDI,[0x1857ec]
CALL 0x00157301
MOV EDX,0x5
LEA RSI,[0x1775b8]
MOV EDI,0x0
CALL 0x00108bf0
MOV RSI,qword ptr [RSP + 0x8]
MOV RDI,RAX
MOV EAX,0x0
CALL 0x00157844
JMP 0x0010bc88
MOV EDX,EBX
MOV RSI,R15
MOV RDI,RBP
CALL 0x0010b51e
MOV qword ptr [RSP + 0x18],RAX
MOV RDX,qword ptr [R14 + 0x8]
MOV RAX,qword ptr [R14 + 0x10]
MOVZX ECX,byte ptr [RSP]
MOV byte ptr [RDX + RAX*0x1],CL
MOV RAX,qword ptr [R14 + 0x18]
SUB RAX,0x1
MOV qword ptr [R14 + 0x18],RAX
TEST RAX,RAX
JZ 0x0010be16
MOV RAX,qword ptr [RBP + 0x40]
MOV qword ptr [RSP + 0x8],RAX
TEST RAX,RAX
JZ 0x0010be23
CMP qword ptr [RSP + 0x18],0x0
JZ 0x0010be23
TEST R13,R13
JZ 0x0010be67
CMP R13,RBP
JZ 0x0010be67
MOV RAX,qword ptr [R13]
MOV ESI,0x0
MOV RDI,R13
CALL qword ptr [RAX + 0x28]
MOV R12,R13
CMP EBX,0x3
JZ 0x0010be86
MOV RAX,qword ptr [RSP + 0x18]
MOV qword ptr [RSP],RAX
MOV R14D,0x1
CMP qword ptr [RSP + 0x8],0x0
JNZ 0x0010c079
MOV RDI,qword ptr [RSP + 0x18]
CALL 0x00108a20
CMP R13,R12
JZ 0x0010bdf7
MOV RAX,qword ptr [RBP]
MOV ESI,0x0
MOV RDI,RBP
CALL qword ptr [RAX + 0x28]
MOV RAX,qword ptr [R12]
MOV RDX,qword ptr [R12 + 0x8]
MOV qword ptr [RBP],RAX
MOV qword ptr [RBP + 0x8],RDX
MOV RAX,qword ptr [R12 + 0x10]
MOV RDX,qword ptr [R12 + 0x18]
MOV qword ptr [RBP + 0x10],RAX
MOV qword ptr [RBP + 0x18],RDX
MOV RAX,qword ptr [R12 + 0x20]
MOV RDX,qword ptr [R12 + 0x28]
MOV qword ptr [RBP + 0x20],RAX
MOV qword ptr [RBP + 0x28],RDX
MOV RAX,qword ptr [R12 + 0x30]
MOV RDX,qword ptr [R12 + 0x38]
MOV qword ptr [RBP + 0x30],RAX
MOV qword ptr [RBP + 0x38],RDX
MOV RAX,qword ptr [R12 + 0x40]
MOV RDX,qword ptr [R12 + 0x48]
MOV qword ptr [RBP + 0x40],RAX
MOV qword ptr [RBP + 0x48],RDX
MOV RAX,qword ptr [0x00396dc0]
MOV qword ptr [R12],RAX
MOV qword ptr [0x00396dc0],R12
CMP qword ptr [RSP + 0x8],0x0
JS 0x0010c112
PXOR XMM0,XMM0
CVTSI2SD XMM0,qword ptr [RSP + 0x8]
CALL qword ptr [0x00396e58]
JMP 0x0010be58
MOV RDI,R14
CALL 0x001582a6
JMP 0x0010bd08
TEST R13,R13
JZ 0x0010be3c
CMP R13,RBP
JZ 0x0010be3c
MOV RAX,qword ptr [R13]
MOV ESI,0x0
MOV RDI,R13
CALL qword ptr [RAX + 0x28]
MOV RAX,qword ptr [RSP + 0x18]
TEST RAX,RAX
JZ 0x0010be4e
MOV RDI,RAX
CALL 0x00108a20
PXOR XMM0,XMM0
CALL qword ptr [0x00396e58]
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CALL 0x00109c9d
MOV R12,RAX
MOV RAX,qword ptr [RBP + 0x20]
MOV qword ptr [R12 + 0x20],RAX
MOV RAX,qword ptr [RBP + 0x18]
MOV qword ptr [R12 + 0x18],RAX
JMP 0x0010bd4a
CMP qword ptr [RSP + 0x8],0x0
JZ 0x0010bd6e
MOV R15,qword ptr [RSP + 0x18]
MOV R14D,0x1
JMP 0x0010bf07
MOV RAX,R14
SHR RAX,0x1
MOV RDX,R14
AND EDX,0x1
OR RAX,RDX
PXOR XMM0,XMM0
CVTSI2SD XMM0,RAX
ADDSD XMM0,XMM0
JMP 0x0010bf15
MOV RAX,qword ptr [RSP + 0x10]
MOV RCX,qword ptr [RSP]
MOV qword ptr [RAX],RCX
MOV RAX,qword ptr [R12]
MOV RAX,qword ptr [RAX + 0x50]
TEST RAX,RAX
JZ 0x0010bede
MOV RSI,RBX
MOV RDI,R12
CALL RAX
TEST RBX,RBX
JZ 0x0010bef4
MOV RAX,qword ptr [RBX + 0x18]
SUB RAX,0x1
MOV qword ptr [RBX + 0x18],RAX
TEST RAX,RAX
JLE 0x0010bf62
ADD R14,0x1
ADD R15,0x10
CMP qword ptr [RSP + 0x8],R14
JC 0x0010bd6e
TEST R14,R14
JS 0x0010be9f
PXOR XMM0,XMM0
CVTSI2SD XMM0,R14
CALL qword ptr [0x00396e58]
MOV RBX,RAX
MOV RAX,qword ptr [R15]
MOV qword ptr [RSP],RAX
MOV RAX,qword ptr [R12]
MOV RSI,RBX
MOV RDI,R12
CALL qword ptr [RAX + 0x18]
MOV qword ptr [RSP + 0x10],RAX
MOV RDI,qword ptr [RAX]
TEST RDI,RDI
JZ 0x0010bebd
MOV RAX,qword ptr [RDI + 0x18]
SUB RAX,0x1
MOV qword ptr [RDI + 0x18],RAX
TEST RAX,RAX
JG 0x0010bebd
CALL 0x001582a6
JMP 0x0010bebd
MOV RDI,RBX
CALL 0x001582a6
JMP 0x0010bef4
MOV RAX,R14
SHR RAX,0x1
MOV RDX,R14
AND EDX,0x1
OR RAX,RDX
PXOR XMM0,XMM0
CVTSI2SD XMM0,RAX
ADDSD XMM0,XMM0
JMP 0x0010c08b
CALL 0x001582a6
JMP 0x0010c0b5
MOV RDI,R15
CALL 0x00158b1f
MOV R15,RAX
JMP 0x0010c004
CALL 0x00109c9d
MOV qword ptr [RSP + 0x10],RAX
MOV ESI,dword ptr [0x0039ddd4]
MOV RDI,qword ptr [0x00396da8]
TEST byte ptr [RBX + 0x4c],0x4
JNZ 0x0010c0e2
MOV RDX,RBX
CALL qword ptr [0x00396e48]
MOV RBX,RAX
MOV RAX,qword ptr [RBX + 0x8]
MOV RCX,qword ptr [RSP + 0x10]
MOV qword ptr [RCX + 0x20],RAX
MOV RDX,qword ptr [RBX + 0x10]
MOV byte ptr [RAX + RDX*0x1],0x0
MOV qword ptr [RBX + 0x8],0x0
AND dword ptr [RBX + 0x4c],0xfffffffb
MOV qword ptr [RCX + 0x18],RBP
MOV RSI,RCX
MOV RDI,R15
CALL 0x00109e11
MOV R15,RAX
MOV RAX,qword ptr [R12]
MOV RSI,RBX
MOV RDI,R12
CALL qword ptr [RAX + 0x18]
MOV qword ptr [RSP + 0x10],RAX
MOV RDI,qword ptr [RAX]
TEST RDI,RDI
JZ 0x0010c033
MOV RAX,qword ptr [RDI + 0x18]
SUB RAX,0x1
MOV qword ptr [RDI + 0x18],RAX
TEST RAX,RAX
JLE 0x0010c0fb
MOV RAX,qword ptr [RSP + 0x10]
MOV qword ptr [RAX],R15
MOV RAX,qword ptr [R12]
MOV RAX,qword ptr [RAX + 0x50]
TEST RAX,RAX
JZ 0x0010c050
MOV RSI,RBX
MOV RDI,R12
CALL RAX
TEST RBX,RBX
JZ 0x0010c06a
MOV RAX,qword ptr [RBX + 0x18]
SUB RAX,0x1
MOV qword ptr [RBX + 0x18],RAX
TEST RAX,RAX
JLE 0x0010c105
ADD R14,0x1
CMP qword ptr [RSP + 0x8],R14
JC 0x0010bd6e
TEST R14,R14
JS 0x0010bf6c
PXOR XMM0,XMM0
CVTSI2SD XMM0,R14
CALL qword ptr [0x00396e58]
MOV RBX,RAX
MOV RAX,qword ptr [RSP]
MOV RDI,qword ptr [RAX]
TEST RDI,RDI
JZ 0x0010c0b5
MOV RAX,qword ptr [RDI + 0x18]
SUB RAX,0x1
MOV qword ptr [RDI + 0x18],RAX
TEST RAX,RAX
JLE 0x0010bf8d
ADD qword ptr [RSP],0x10
MOV RAX,qword ptr [RSP]
MOV R15,qword ptr [RAX + -0x8]
CMP dword ptr [R15 + 0x48],0x1
JNZ 0x0010bfa4
TEST byte ptr [R15 + 0x4c],0x1
JZ 0x0010bf97
ADD qword ptr [R15 + 0x18],0x1
JMP 0x0010c004
MOV EAX,dword ptr [RBX + 0x20]
CMP ESI,EAX
JZ 0x0010bfd1
CMP EAX,-0x1
JNZ 0x0010bfc5
JMP 0x0010bfd1
CALL 0x001582a6
JMP 0x0010c033
MOV RDI,RBX
CALL 0x001582a6
JMP 0x0010c06a
MOV RAX,qword ptr [RSP + 0x8]
MOV RDX,RAX
SHR RDX,0x1
AND EAX,0x1
OR RDX,RAX
PXOR XMM0,XMM0
CVTSI2SD XMM0,RDX
ADDSD XMM0,XMM0
JMP 0x0010be0e
(translation_unit "void FUN_0010b8aa(int param_1,int param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  undefined *puVar3;\n  int iVar4;\n  long lVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long lVar9;\n  long *plVar10;\n  long *plVar11;\n  long *plVar12;\n  long lVar13;\n  long lVar14;\n  long *plVar15;\n  char *pcVar16;\n  long *plVar17;\n  ulong uVar18;\n  char *pcVar19;\n  long *local_58;\n  \n  lVar5 = DAT_0039deb8;\n  iVar4 = DAT_0039ddd4;\n  puVar3 = PTR_DAT_00396da8;\n  if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }\n  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);\nLAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);\n  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];\n  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';\n  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }\n  plVar17 = (long *)0x0;\n  if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }\n  plVar15 = DAT_00399c70 + -1;\n  plVar6 = (long *)*DAT_00399c70;\n  DAT_00399c70 = plVar15;\n  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }\n  if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }\n  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);\n  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;\n  lVar9 = *(long *)(lVar5 + 0x18) + -1;\n  *(long *)(lVar5 + 0x18) = lVar9;\n  if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }\n  uVar2 = plVar15[8];\n  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0010b8aa(int param_1,int param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  undefined *puVar3;\n  int iVar4;\n  long lVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long lVar9;\n  long *plVar10;\n  long *plVar11;\n  long *plVar12;\n  long lVar13;\n  long lVar14;\n  long *plVar15;\n  char *pcVar16;\n  long *plVar17;\n  ulong uVar18;\n  char *pcVar19;\n  long *local_58;\n  \n  lVar5 = DAT_0039deb8;\n  iVar4 = DAT_0039ddd4;\n  puVar3 = PTR_DAT_00396da8;\n  if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }\n  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);\nLAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);\n  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];\n  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';\n  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }\n  plVar17 = (long *)0x0;\n  if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }\n  plVar15 = DAT_00399c70 + -1;\n  plVar6 = (long *)*DAT_00399c70;\n  DAT_00399c70 = plVar15;\n  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }\n  if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }\n  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);\n  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;\n  lVar9 = *(long *)(lVar5 + 0x18) + -1;\n  *(long *)(lVar5 + 0x18) = lVar9;\n  if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }\n  uVar2 = plVar15[8];\n  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0010b8aa(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  undefined *puVar3;\n  int iVar4;\n  long lVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long lVar9;\n  long *plVar10;\n  long *plVar11;\n  long *plVar12;\n  long lVar13;\n  long lVar14;\n  long *plVar15;\n  char *pcVar16;\n  long *plVar17;\n  ulong uVar18;\n  char *pcVar19;\n  long *local_58;\n  \n  lVar5 = DAT_0039deb8;\n  iVar4 = DAT_0039ddd4;\n  puVar3 = PTR_DAT_00396da8;\n  if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }\n  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);\nLAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);\n  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];\n  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';\n  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }\n  plVar17 = (long *)0x0;\n  if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }\n  plVar15 = DAT_00399c70 + -1;\n  plVar6 = (long *)*DAT_00399c70;\n  DAT_00399c70 = plVar15;\n  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }\n  if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }\n  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);\n  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;\n  lVar9 = *(long *)(lVar5 + 0x18) + -1;\n  *(long *)(lVar5 + 0x18) = lVar9;\n  if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }\n  uVar2 = plVar15[8];\n  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar6;" (sized_type_specifier "long" long) (pointer_declarator "*plVar6" * identifier) ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar10;" (sized_type_specifier "long" long) (pointer_declarator "*plVar10" * identifier) ;) (declaration "long *plVar11;" (sized_type_specifier "long" long) (pointer_declarator "*plVar11" * identifier) ;) (declaration "long *plVar12;" (sized_type_specifier "long" long) (pointer_declarator "*plVar12" * identifier) ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar14;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar15;" (sized_type_specifier "long" long) (pointer_declarator "*plVar15" * identifier) ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (declaration "long *plVar17;" (sized_type_specifier "long" long) (pointer_declarator "*plVar17" * identifier) ;) (declaration "ulong uVar18;" type_identifier identifier ;) (declaration "char *pcVar19;" primitive_type (pointer_declarator "*pcVar19" * identifier) ;) (declaration "long *local_58;" (sized_type_specifier "long" long) (pointer_declarator "*local_58" * identifier) ;) (expression_statement "lVar5 = DAT_0039deb8;" (assignment_expression "lVar5 = DAT_0039deb8" identifier = identifier) ;) (expression_statement "iVar4 = DAT_0039ddd4;" (assignment_expression "iVar4 = DAT_0039ddd4" identifier = identifier) ;) (expression_statement "puVar3 = PTR_DAT_00396da8;" (assignment_expression "puVar3 = PTR_DAT_00396da8" identifier = identifier) ;) (if_statement "if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" if (parenthesized_expression "(param_1 == 3)" ( (binary_expression "param_1 == 3" identifier == number_literal) )) (compound_statement "{\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }" { (expression_statement "plVar17 = DAT_00399c70 + -1;" (assignment_expression "plVar17 = DAT_00399c70 + -1" identifier = (binary_expression "DAT_00399c70 + -1" identifier + number_literal)) ;) (expression_statement "lVar5 = *DAT_00399c70;" (assignment_expression "lVar5 = *DAT_00399c70" identifier = (pointer_expression "*DAT_00399c70" * identifier)) ;) (expression_statement "DAT_00399c70 = plVar17;" (assignment_expression "DAT_00399c70 = plVar17" identifier = identifier) ;) (if_statement "if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }" if (parenthesized_expression "(*(int *)(lVar5 + 0x48) == 5)" ( (binary_expression "*(int *)(lVar5 + 0x48) == 5" (pointer_expression "*(int *)(lVar5 + 0x48)" * (cast_expression "(int *)(lVar5 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x48)" ( (binary_expression "lVar5 + 0x48" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }" { (expression_statement "FUN_00157301("awk.h",0x72b);" (call_expression "FUN_00157301("awk.h",0x72b)" identifier (argument_list "("awk.h",0x72b)" ( (string_literal ""awk.h"" " string_content ") , number_literal ))) ;) (expression_statement "uVar7 = FUN_0010a1ed(lVar5);" (assignment_expression "uVar7 = FUN_0010a1ed(lVar5)" identifier = (call_expression "FUN_0010a1ed(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) (expression_statement "uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);" (assignment_expression "uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" identifier = (call_expression "dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" identifier (argument_list "(0,"attempt to use array `%s\' in a scalar context",5)" ( number_literal , (string_literal ""attempt to use array `%s\' in a scalar context"" " string_content escape_sequence string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar8,uVar7);" (call_expression "FUN_00157844(uVar8,uVar7)" identifier (argument_list "(uVar8,uVar7)" ( identifier , identifier ))) ;) })) (if_statement "if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }" if (parenthesized_expression "(((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20)))))" ( (binary_expression "((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))" (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 4) == 0)" ( (binary_expression "(*(byte *)(lVar5 + 0x4c) & 4) == 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 4)" ( (binary_expression "*(byte *)(lVar5 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar5 + 0x4c)" * (cast_expression "(byte *)(lVar5 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x4c)" ( (binary_expression "lVar5 + 0x4c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))" ( (parenthesized_expression "(*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20)))" ( (binary_expression "*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))" (binary_expression "*(int *)(lVar5 + 0x20) != -1" (pointer_expression "*(int *)(lVar5 + 0x20)" * (cast_expression "(int *)(lVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))) != number_literal) && (parenthesized_expression "(iVar4 != *(int *)(lVar5 + 0x20))" ( (binary_expression "iVar4 != *(int *)(lVar5 + 0x20)" identifier != (pointer_expression "*(int *)(lVar5 + 0x20)" * (cast_expression "(int *)(lVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) ))))) ))) )) ))) )) (compound_statement "{\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }" { (expression_statement "lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);" (assignment_expression "lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5)" identifier = (call_expression "(*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" ( (pointer_expression "*(code *)PTR_FUN_00396e48" * (cast_expression "(code *)PTR_FUN_00396e48" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3,iVar4,lVar5)" ( identifier , identifier , identifier )))) ;) (goto_statement "goto LAB_0010b8dc;" goto statement_identifier ;) })) (labeled_statement "LAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;" statement_identifier : (if_statement "if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;" if (parenthesized_expression "((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))" ( (binary_expression "(*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1)" (parenthesized_expression "(*(int *)(lVar5 + 0x20) == DAT_0039ddd4)" ( (binary_expression "*(int *)(lVar5 + 0x20) == DAT_0039ddd4" (pointer_expression "*(int *)(lVar5 + 0x20)" * (cast_expression "(int *)(lVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))) == identifier) )) || (parenthesized_expression "(*(int *)(lVar5 + 0x20) == -1)" ( (binary_expression "*(int *)(lVar5 + 0x20) == -1" (pointer_expression "*(int *)(lVar5 + 0x20)" * (cast_expression "(int *)(lVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))) == number_literal) ))) )) (goto_statement "goto LAB_0010b900;" goto statement_identifier ;))) }) (else_clause "else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" else (compound_statement "{\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" { (if_statement "if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" if (parenthesized_expression "((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0)" ( (binary_expression "(*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0" (parenthesized_expression "(*(byte *)(DAT_0039deb8 + 0x4c) & 1)" ( (binary_expression "*(byte *)(DAT_0039deb8 + 0x4c) & 1" (pointer_expression "*(byte *)(DAT_0039deb8 + 0x4c)" * (cast_expression "(byte *)(DAT_0039deb8 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_0039deb8 + 0x4c)" ( (binary_expression "DAT_0039deb8 + 0x4c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }" { (expression_statement "lVar5 = FUN_00158b1f(DAT_0039deb8);" (assignment_expression "lVar5 = FUN_00158b1f(DAT_0039deb8)" identifier = (call_expression "FUN_00158b1f(DAT_0039deb8)" identifier (argument_list "(DAT_0039deb8)" ( identifier )))) ;) }) (else_clause "else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" else (compound_statement "{\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" { (expression_statement "*(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;" (assignment_expression "*(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1" (pointer_expression "*(long *)(DAT_0039deb8 + 0x18)" * (cast_expression "(long *)(DAT_0039deb8 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_0039deb8 + 0x18)" ( (binary_expression "DAT_0039deb8 + 0x18" identifier + number_literal) )))) = (binary_expression "*(long *)(DAT_0039deb8 + 0x18) + 1" (pointer_expression "*(long *)(DAT_0039deb8 + 0x18)" * (cast_expression "(long *)(DAT_0039deb8 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_0039deb8 + 0x18)" ( (binary_expression "DAT_0039deb8 + 0x18" identifier + number_literal) )))) + number_literal)) ;) }))) (labeled_statement "LAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;" statement_identifier : (if_statement "if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;" if (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 4) != 0)" ( (binary_expression "(*(byte *)(lVar5 + 0x4c) & 4) != 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 4)" ( (binary_expression "*(byte *)(lVar5 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar5 + 0x4c)" * (cast_expression "(byte *)(lVar5 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x4c)" ( (binary_expression "lVar5 + 0x4c" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0010baa0;" goto statement_identifier ;))) }))) (expression_statement "lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);" (assignment_expression "lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" identifier = (call_expression "(*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" ( (pointer_expression "*(code *)PTR_FUN_00396e48" * (cast_expression "(code *)PTR_FUN_00396e48" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" ( identifier , identifier , identifier )))) ;) (labeled_statement "LAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);" statement_identifier : (expression_statement "pcVar19 = *(char **)(lVar5 + 8);" (assignment_expression "pcVar19 = *(char **)(lVar5 + 8)" identifier = (pointer_expression "*(char **)(lVar5 + 8)" * (cast_expression "(char **)(lVar5 + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;)) (expression_statement "cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];" (assignment_expression "cVar1 = pcVar19[*(long *)(lVar5 + 0x10)]" identifier = (subscript_expression "pcVar19[*(long *)(lVar5 + 0x10)]" identifier [ (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) ])) ;) (expression_statement "pcVar19[*(long *)(lVar5 + 0x10)] = '\0';" (assignment_expression "pcVar19[*(long *)(lVar5 + 0x10)] = '\0'" (subscript_expression "pcVar19[*(long *)(lVar5 + 0x10)]" identifier [ (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }" if (parenthesized_expression "((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2))" ( (binary_expression "(*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)" (parenthesized_expression "(*(long *)(lVar5 + 0x10) == 0)" ( (binary_expression "*(long *)(lVar5 + 0x10) == 0" (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) == number_literal) )) && (parenthesized_expression "(pcVar19 = "@val_type_asc", param_2 != 2)" ( (comma_expression "pcVar19 = "@val_type_asc", param_2 != 2" (assignment_expression "pcVar19 = "@val_type_asc"" identifier = (string_literal ""@val_type_asc"" " string_content ")) , (binary_expression "param_2 != 2" identifier != number_literal)) ))) )) (compound_statement "{\n    pcVar19 = "@ind_str_asc";\n  }" { (expression_statement "pcVar19 = "@ind_str_asc";" (assignment_expression "pcVar19 = "@ind_str_asc"" identifier = (string_literal ""@ind_str_asc"" " string_content ")) ;) })) (expression_statement "plVar17 = (long *)0x0;" (assignment_expression "plVar17 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }" if (parenthesized_expression "(1 < param_1)" ( (binary_expression "1 < param_1" number_literal < identifier) )) (compound_statement "{\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }" { (expression_statement "plVar15 = DAT_00399c70 + -1;" (assignment_expression "plVar15 = DAT_00399c70 + -1" identifier = (binary_expression "DAT_00399c70 + -1" identifier + number_literal)) ;) (expression_statement "plVar17 = (long *)*DAT_00399c70;" (assignment_expression "plVar17 = (long *)*DAT_00399c70" identifier = (cast_expression "(long *)*DAT_00399c70" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*DAT_00399c70" * identifier))) ;) (expression_statement "DAT_00399c70 = plVar15;" (assignment_expression "DAT_00399c70 = plVar15" identifier = identifier) ;) (if_statement "if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" if (parenthesized_expression "(((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))" ( (binary_expression "((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5)" (parenthesized_expression "((int)plVar17[9] != 5)" ( (binary_expression "(int)plVar17[9] != 5" (cast_expression "(int)plVar17[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar17[9]" identifier [ number_literal ])) != number_literal) )) && (parenthesized_expression "(plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5)" ( (comma_expression "plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5" (assignment_expression "plVar17 = (long *)FUN_0010a748(plVar17,0)" identifier = (cast_expression "(long *)FUN_0010a748(plVar17,0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0010a748(plVar17,0)" identifier (argument_list "(plVar17,0)" ( identifier , number_literal ))))) , (binary_expression "(int)plVar17[9] != 5" (cast_expression "(int)plVar17[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar17[9]" identifier [ number_literal ])) != number_literal)) ))) )) (compound_statement "{\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" { (expression_statement "FUN_00157301("array.c",0x338);" (call_expression "FUN_00157301("array.c",0x338)" identifier (argument_list "("array.c",0x338)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (compound_statement "{\n        pcVar16 = "asorti";\n      }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "uVar7 = dcgettext(0,"%s: second argument is not an array",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: second argument is not an array",5)" identifier = (call_expression "dcgettext(0,"%s: second argument is not an array",5)" identifier (argument_list "(0,"%s: second argument is not an array",5)" ( number_literal , (string_literal ""%s: second argument is not an array"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) })) })) (expression_statement "plVar15 = DAT_00399c70 + -1;" (assignment_expression "plVar15 = DAT_00399c70 + -1" identifier = (binary_expression "DAT_00399c70 + -1" identifier + number_literal)) ;) (expression_statement "plVar6 = (long *)*DAT_00399c70;" (assignment_expression "plVar6 = (long *)*DAT_00399c70" identifier = (cast_expression "(long *)*DAT_00399c70" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*DAT_00399c70" * identifier))) ;) (expression_statement "DAT_00399c70 = plVar15;" (assignment_expression "DAT_00399c70 = plVar15" identifier = identifier) ;) (if_statement "if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" if (parenthesized_expression "(((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5))" ( (binary_expression "((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)" (parenthesized_expression "((int)plVar6[9] == 5)" ( (binary_expression "(int)plVar6[9] == 5" (cast_expression "(int)plVar6[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar6[9]" identifier [ number_literal ])) == number_literal) )) || (parenthesized_expression "(plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)" ( (comma_expression "plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5" (assignment_expression "plVar6 = (long *)FUN_0010a748(plVar6,0)" identifier = (cast_expression "(long *)FUN_0010a748(plVar6,0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0010a748(plVar6,0)" identifier (argument_list "(plVar6,0)" ( identifier , number_literal ))))) , (binary_expression "(int)plVar6[9] == 5" (cast_expression "(int)plVar6[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar6[9]" identifier [ number_literal ])) == number_literal)) ))) )) (compound_statement "{\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }" { (expression_statement "plVar10 = DAT_0039e4c8;" (assignment_expression "plVar10 = DAT_0039e4c8" identifier = identifier) ;) (expression_statement "plVar15 = DAT_0039e4c0;" (assignment_expression "plVar15 = DAT_0039e4c0" identifier = identifier) ;) (if_statement "if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" if (parenthesized_expression "(DAT_0039e4c0 == plVar6)" ( (binary_expression "DAT_0039e4c0 == plVar6" identifier == identifier) )) (compound_statement "{\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" { (expression_statement "FUN_00157301("array.c",0x343);" (call_expression "FUN_00157301("array.c",0x343)" identifier (argument_list "("array.c",0x343)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (compound_statement "{\n        pcVar16 = "asorti";\n      }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5)" identifier = (call_expression "dcgettext(0,"%s: first argument cannot be SYMTAB",5)" identifier (argument_list "(0,"%s: first argument cannot be SYMTAB",5)" ( number_literal , (string_literal ""%s: first argument cannot be SYMTAB"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) }) (else_clause "else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" else (compound_statement "{\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" { (expression_statement "plVar15 = plVar6;" (assignment_expression "plVar15 = plVar6" identifier = identifier) ;) (if_statement "if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }" if (parenthesized_expression "(DAT_0039e4c8 == plVar6)" ( (binary_expression "DAT_0039e4c8 == plVar6" identifier == identifier) )) (compound_statement "{\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }" { (expression_statement "FUN_00157301("array.c",0x346);" (call_expression "FUN_00157301("array.c",0x346)" identifier (argument_list "("array.c",0x346)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (compound_statement "{\n          pcVar16 = "asorti";\n        }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" identifier = (call_expression "dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" identifier (argument_list "(0,"%s: first argument cannot be FUNCTAB",5)" ( number_literal , (string_literal ""%s: first argument cannot be FUNCTAB"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) (expression_statement "plVar15 = plVar10;" (assignment_expression "plVar15 = plVar10" identifier = identifier) ;) })) }))) }) (else_clause "else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" else (compound_statement "{\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" { (expression_statement "FUN_00157301("array.c",0x33f);" (call_expression "FUN_00157301("array.c",0x33f)" identifier (argument_list "("array.c",0x33f)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (compound_statement "{\n      pcVar16 = "asorti";\n    }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "uVar7 = dcgettext(0,"%s: first argument is not an array",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument is not an array",5)" identifier = (call_expression "dcgettext(0,"%s: first argument is not an array",5)" identifier (argument_list "(0,"%s: first argument is not an array",5)" ( number_literal , (string_literal ""%s: first argument is not an array"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) (expression_statement "plVar15 = plVar6;" (assignment_expression "plVar15 = plVar6" identifier = identifier) ;) }))) (if_statement "if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }" if (parenthesized_expression "(plVar17 != (long *)0x0)" ( (binary_expression "plVar17 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }" { (expression_statement "plVar6 = (long *)plVar17[3];" (assignment_expression "plVar6 = (long *)plVar17[3]" identifier = (cast_expression "(long *)plVar17[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar17[3]" identifier [ number_literal ]))) ;) (if_statement "if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" if (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) (if_statement "if (param_2 == 2) {\n        pcVar16 = "asort";\n      }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n        pcVar16 = "asort";\n      }" { (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) })) (do_statement "do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);" do (compound_statement "{\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      }" { (if_statement "if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" if (parenthesized_expression "(plVar6 == plVar15)" ( (binary_expression "plVar6 == plVar15" identifier == identifier) )) (compound_statement "{\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" { (expression_statement "FUN_00157301("array.c",0x34c);" (call_expression "FUN_00157301("array.c",0x34c)" identifier (argument_list "("array.c",0x34c)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5)" identifier = (call_expression "dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5)" identifier (argument_list "(0,"%s: cannot use a subarray of first argument for second argument",5)" ( number_literal , (string_literal ""%s: cannot use a subarray of first argument for second argument"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) })) (expression_statement "plVar6 = (long *)plVar6[3];" (assignment_expression "plVar6 = (long *)plVar6[3]" identifier = (cast_expression "(long *)plVar6[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar6[3]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (expression_statement "plVar6 = (long *)plVar15[3];" (assignment_expression "plVar6 = (long *)plVar15[3]" identifier = (cast_expression "(long *)plVar15[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar15[3]" identifier [ number_literal ]))) ;) (if_statement "if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" if (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) (if_statement "if (param_2 == 2) {\n        pcVar16 = "asort";\n      }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n        pcVar16 = "asort";\n      }" { (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) })) (do_statement "do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);" do (compound_statement "{\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      }" { (if_statement "if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" if (parenthesized_expression "(plVar17 == plVar6)" ( (binary_expression "plVar17 == plVar6" identifier == identifier) )) (compound_statement "{\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" { (expression_statement "FUN_00157301("array.c",0x351);" (call_expression "FUN_00157301("array.c",0x351)" identifier (argument_list "("array.c",0x351)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5)" identifier = (call_expression "dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5)" identifier (argument_list "(0,"%s: cannot use a subarray of second argument for first argument",5)" ( number_literal , (string_literal ""%s: cannot use a subarray of second argument for first argument"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) })) (expression_statement "plVar6 = (long *)plVar6[3];" (assignment_expression "plVar6 = (long *)plVar6[3]" identifier = (cast_expression "(long *)plVar6[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar6[3]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) })) (expression_statement "plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);" (assignment_expression "plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2)" identifier = (cast_expression "(long *)FUN_0010b51e(plVar15,pcVar19,param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0010b51e(plVar15,pcVar19,param_2)" identifier (argument_list "(plVar15,pcVar19,param_2)" ( identifier , identifier , identifier ))))) ;) (expression_statement "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;" (assignment_expression "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1" (pointer_expression "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" * (cast_expression "(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" ( (binary_expression "*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)" (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) )))) + (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) ))))) )))) = identifier) ;) (expression_statement "lVar9 = *(long *)(lVar5 + 0x18) + -1;" (assignment_expression "lVar9 = *(long *)(lVar5 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar5 + 0x18) + -1" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "*(long *)(lVar5 + 0x18) = lVar9;" (assignment_expression "*(long *)(lVar5 + 0x18) = lVar9" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_001582a6(lVar5);\n  }" { (expression_statement "FUN_001582a6(lVar5);" (call_expression "FUN_001582a6(lVar5)" identifier (argument_list "(lVar5)" ( identifier ))) ;) })) (expression_statement "uVar2 = plVar15[8];" (assignment_expression "uVar2 = plVar15[8]" identifier = (subscript_expression "plVar15[8]" identifier [ number_literal ])) ;) (if_statement "if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" if (parenthesized_expression "((uVar2 == 0) || (plVar6 == (long *)0x0))" ( (binary_expression "(uVar2 == 0) || (plVar6 == (long *)0x0)" (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) || (parenthesized_expression "(plVar6 == (long *)0x0)" ( (binary_expression "plVar6 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }" { (if_statement "if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }" if (parenthesized_expression "((plVar17 != (long *)0x0) && (plVar17 != plVar15))" ( (binary_expression "(plVar17 != (long *)0x0) && (plVar17 != plVar15)" (parenthesized_expression "(plVar17 != (long *)0x0)" ( (binary_expression "plVar17 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(plVar17 != plVar15)" ( (binary_expression "plVar17 != plVar15" identifier != identifier) ))) )) (compound_statement "{\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }" { (expression_statement "(**(code **)(*plVar17 + 0x28))(plVar17,0);" (call_expression "(**(code **)(*plVar17 + 0x28))(plVar17,0)" (parenthesized_expression "(**(code **)(*plVar17 + 0x28))" ( (pointer_expression "**(code **)(*plVar17 + 0x28)" * (pointer_expression "*(code **)(*plVar17 + 0x28)" * (cast_expression "(code **)(*plVar17 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar17 + 0x28)" ( (binary_expression "*plVar17 + 0x28" (pointer_expression "*plVar17" * identifier) + number_literal) ))))) )) (argument_list "(plVar17,0)" ( identifier , number_literal ))) ;) })) (if_statement "if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }" if (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(plVar6);\n    }" { (expression_statement "free(plVar6);" (call_expression "free(plVar6)" identifier (argument_list "(plVar6)" ( identifier ))) ;) })) (expression_statement "(*(code *)PTR_FUN_00396e58)(0);" (call_expression "(*(code *)PTR_FUN_00396e58)(0)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" ( (pointer_expression "*(code *)PTR_FUN_00396e58" * (cast_expression "(code *)PTR_FUN_00396e58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0)" ( number_literal ))) ;) }) (else_clause "else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" else (compound_statement "{\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" { (if_statement "if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" if (parenthesized_expression "((plVar17 == (long *)0x0) || (plVar17 == plVar15))" ( (binary_expression "(plVar17 == (long *)0x0) || (plVar17 == plVar15)" (parenthesized_expression "(plVar17 == (long *)0x0)" ( (binary_expression "plVar17 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(plVar17 == plVar15)" ( (binary_expression "plVar17 == plVar15" identifier == identifier) ))) )) (compound_statement "{\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }" { (expression_statement "plVar10 = (long *)FUN_00109c9d();" (assignment_expression "plVar10 = (long *)FUN_00109c9d()" identifier = (cast_expression "(long *)FUN_00109c9d()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00109c9d()" identifier (argument_list "()" ( ))))) ;) (expression_statement "plVar10[4] = plVar15[4];" (assignment_expression "plVar10[4] = plVar15[4]" (subscript_expression "plVar10[4]" identifier [ number_literal ]) = (subscript_expression "plVar15[4]" identifier [ number_literal ])) ;) (expression_statement "plVar10[3] = plVar15[3];" (assignment_expression "plVar10[3] = plVar15[3]" (subscript_expression "plVar10[3]" identifier [ number_literal ]) = (subscript_expression "plVar15[3]" identifier [ number_literal ])) ;) }) (else_clause "else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" else (compound_statement "{\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" { (expression_statement "(**(code **)(*plVar17 + 0x28))(plVar17,0);" (call_expression "(**(code **)(*plVar17 + 0x28))(plVar17,0)" (parenthesized_expression "(**(code **)(*plVar17 + 0x28))" ( (pointer_expression "**(code **)(*plVar17 + 0x28)" * (pointer_expression "*(code **)(*plVar17 + 0x28)" * (cast_expression "(code **)(*plVar17 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar17 + 0x28)" ( (binary_expression "*plVar17 + 0x28" (pointer_expression "*plVar17" * identifier) + number_literal) ))))) )) (argument_list "(plVar17,0)" ( identifier , number_literal ))) ;) (expression_statement "plVar10 = plVar17;" (assignment_expression "plVar10 = plVar17" identifier = identifier) ;) }))) (if_statement "if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" if (parenthesized_expression "(param_2 == 3)" ( (binary_expression "param_2 == 3" identifier == number_literal) )) (compound_statement "{\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" { (if_statement "if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }" { (expression_statement "uVar18 = 1;" (assignment_expression "uVar18 = 1" identifier = number_literal) ;) (expression_statement "plVar12 = plVar6;" (assignment_expression "plVar12 = plVar6" identifier = identifier) ;) (do_statement "do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);" do (compound_statement "{\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        }" { (expression_statement "lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);" (assignment_expression "lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18)" identifier = (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar18)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" ( (pointer_expression "*(code *)PTR_FUN_00396e58" * (cast_expression "(code *)PTR_FUN_00396e58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "((double)uVar18)" ( (cast_expression "(double)uVar18" ( (type_descriptor "double" primitive_type) ) identifier) )))) ;) (expression_statement "lVar5 = *plVar12;" (assignment_expression "lVar5 = *plVar12" identifier = (pointer_expression "*plVar12" * identifier)) ;) (expression_statement "plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);" (assignment_expression "plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" identifier = (cast_expression "(long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" (parenthesized_expression "(**(code **)(*plVar10 + 0x18))" ( (pointer_expression "**(code **)(*plVar10 + 0x18)" * (pointer_expression "*(code **)(*plVar10 + 0x18)" * (cast_expression "(code **)(*plVar10 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x18)" ( (binary_expression "*plVar10 + 0x18" (pointer_expression "*plVar10" * identifier) + number_literal) ))))) )) (argument_list "(plVar10,lVar14)" ( identifier , identifier ))))) ;) (expression_statement "lVar9 = *plVar11;" (assignment_expression "lVar9 = *plVar11" identifier = (pointer_expression "*plVar11" * identifier)) ;) (if_statement "if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }" if (parenthesized_expression "((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))" ( (binary_expression "(lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1)" (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1)" ( (comma_expression "lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "lVar13 = *(long *)(lVar9 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar9 + 0x18) + -1" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "*(long *)(lVar9 + 0x18) = lVar13" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar13 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6();\n          }" { (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*plVar11 = lVar5;" (assignment_expression "*plVar11 = lVar5" (pointer_expression "*plVar11" * identifier) = identifier) ;) (if_statement "if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }" if (parenthesized_expression "(*(code **)(*plVar10 + 0x50) != (code *)0x0)" ( (binary_expression "*(code **)(*plVar10 + 0x50) != (code *)0x0" (pointer_expression "*(code **)(*plVar10 + 0x50)" * (cast_expression "(code **)(*plVar10 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x50)" ( (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" * identifier) + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }" { (expression_statement "(**(code **)(*plVar10 + 0x50))(plVar10,lVar14);" (call_expression "(**(code **)(*plVar10 + 0x50))(plVar10,lVar14)" (parenthesized_expression "(**(code **)(*plVar10 + 0x50))" ( (pointer_expression "**(code **)(*plVar10 + 0x50)" * (pointer_expression "*(code **)(*plVar10 + 0x50)" * (cast_expression "(code **)(*plVar10 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x50)" ( (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" * identifier) + number_literal) ))))) )) (argument_list "(plVar10,lVar14)" ( identifier , identifier ))) ;) })) (if_statement "if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }" if (parenthesized_expression "((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1))" ( (binary_expression "(lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)" (parenthesized_expression "(lVar14 != 0)" ( (binary_expression "lVar14 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)" ( (comma_expression "lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "lVar5 = *(long *)(lVar14 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar14 + 0x18) + -1" (pointer_expression "*(long *)(lVar14 + 0x18)" * (cast_expression "(long *)(lVar14 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "*(long *)(lVar14 + 0x18) = lVar5" (pointer_expression "*(long *)(lVar14 + 0x18)" * (cast_expression "(long *)(lVar14 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar5 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6(lVar14);\n          }" { (expression_statement "FUN_001582a6(lVar14);" (call_expression "FUN_001582a6(lVar14)" identifier (argument_list "(lVar14)" ( identifier ))) ;) })) (expression_statement "uVar18 = uVar18 + 1;" (assignment_expression "uVar18 = uVar18 + 1" identifier = (binary_expression "uVar18 + 1" identifier + number_literal)) ;) (expression_statement "plVar12 = plVar12 + 2;" (assignment_expression "plVar12 = plVar12 + 2" identifier = (binary_expression "plVar12 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar18 <= uVar2)" ( (binary_expression "uVar18 <= uVar2" identifier <= identifier) )) ;) })) }) (else_clause "else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" else (compound_statement "{\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" { (expression_statement "uVar18 = 1;" (assignment_expression "uVar18 = 1" identifier = number_literal) ;) (expression_statement "local_58 = plVar6;" (assignment_expression "local_58 = plVar6" identifier = identifier) ;) (if_statement "if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }" { (do_statement "do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);" do (compound_statement "{\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        }" { (expression_statement "lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);" (assignment_expression "lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18)" identifier = (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar18)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" ( (pointer_expression "*(code *)PTR_FUN_00396e58" * (cast_expression "(code *)PTR_FUN_00396e58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "((double)uVar18)" ( (cast_expression "(double)uVar18" ( (type_descriptor "double" primitive_type) ) identifier) )))) ;) (expression_statement "lVar5 = *local_58;" (assignment_expression "lVar5 = *local_58" identifier = (pointer_expression "*local_58" * identifier)) ;) (if_statement "if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }" if (parenthesized_expression "((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))" ( (binary_expression "(lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1)" (parenthesized_expression "(lVar5 != 0)" ( (binary_expression "lVar5 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1)" ( (comma_expression "lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1" (assignment_expression "lVar14 = *(long *)(lVar5 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar5 + 0x18) + -1" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1" (assignment_expression "*(long *)(lVar5 + 0x18) = lVar14" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar14 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6();\n          }" { (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "lVar5 = local_58[1];" (assignment_expression "lVar5 = local_58[1]" identifier = (subscript_expression "local_58[1]" identifier [ number_literal ])) ;) (if_statement "if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" if (parenthesized_expression "(*(int *)(lVar5 + 0x48) == 1)" ( (binary_expression "*(int *)(lVar5 + 0x48) == 1" (pointer_expression "*(int *)(lVar5 + 0x48)" * (cast_expression "(int *)(lVar5 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x48)" ( (binary_expression "lVar5 + 0x48" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }" { (if_statement "if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" if (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 1) == 0)" ( (binary_expression "(*(byte *)(lVar5 + 0x4c) & 1) == 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 1)" ( (binary_expression "*(byte *)(lVar5 + 0x4c) & 1" (pointer_expression "*(byte *)(lVar5 + 0x4c)" * (cast_expression "(byte *)(lVar5 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x4c)" ( (binary_expression "lVar5 + 0x4c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n              lVar5 = FUN_00158b1f(lVar5);\n            }" { (expression_statement "lVar5 = FUN_00158b1f(lVar5);" (assignment_expression "lVar5 = FUN_00158b1f(lVar5)" identifier = (call_expression "FUN_00158b1f(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) }) (else_clause "else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" else (compound_statement "{\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" { (expression_statement "*(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;" (assignment_expression "*(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) = (binary_expression "*(long *)(lVar5 + 0x18) + 1" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) + number_literal)) ;) }))) }) (else_clause "else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" else (compound_statement "{\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" { (expression_statement "lVar14 = FUN_00109c9d();" (assignment_expression "lVar14 = FUN_00109c9d()" identifier = (call_expression "FUN_00109c9d()" identifier (argument_list "()" ( )))) ;) (if_statement "if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }" if (parenthesized_expression "(((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1))))" ( (binary_expression "((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))" (parenthesized_expression "((*(byte *)(lVar9 + 0x4c) & 4) == 0)" ( (binary_expression "(*(byte *)(lVar9 + 0x4c) & 4) == 0" (parenthesized_expression "(*(byte *)(lVar9 + 0x4c) & 4)" ( (binary_expression "*(byte *)(lVar9 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar9 + 0x4c)" * (cast_expression "(byte *)(lVar9 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x4c)" ( (binary_expression "lVar9 + 0x4c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))" ( (parenthesized_expression "(DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1))" ( (binary_expression "DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)" (binary_expression "DAT_0039ddd4 != *(int *)(lVar9 + 0x20)" identifier != (pointer_expression "*(int *)(lVar9 + 0x20)" * (cast_expression "(int *)(lVar9 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x20)" ( (binary_expression "lVar9 + 0x20" identifier + number_literal) ))))) && (parenthesized_expression "(*(int *)(lVar9 + 0x20) != -1)" ( (binary_expression "*(int *)(lVar9 + 0x20) != -1" (pointer_expression "*(int *)(lVar9 + 0x20)" * (cast_expression "(int *)(lVar9 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x20)" ( (binary_expression "lVar9 + 0x20" identifier + number_literal) )))) != number_literal) ))) )) ))) )) (compound_statement "{\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }" { (expression_statement "lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);" (assignment_expression "lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" identifier = (call_expression "(*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" ( (pointer_expression "*(code *)PTR_FUN_00396e48" * (cast_expression "(code *)PTR_FUN_00396e48" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" ( identifier , identifier , identifier )))) ;) })) (expression_statement "lVar13 = *(long *)(lVar9 + 8);" (assignment_expression "lVar13 = *(long *)(lVar9 + 8)" identifier = (pointer_expression "*(long *)(lVar9 + 8)" * (cast_expression "(long *)(lVar9 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 8)" ( (binary_expression "lVar9 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(long *)(lVar14 + 0x20) = lVar13;" (assignment_expression "*(long *)(lVar14 + 0x20) = lVar13" (pointer_expression "*(long *)(lVar14 + 0x20)" * (cast_expression "(long *)(lVar14 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x20)" ( (binary_expression "lVar14 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;" (assignment_expression "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0" (pointer_expression "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10))" * (cast_expression "(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + *(long *)(lVar9 + 0x10))" ( (binary_expression "lVar13 + *(long *)(lVar9 + 0x10)" identifier + (pointer_expression "*(long *)(lVar9 + 0x10)" * (cast_expression "(long *)(lVar9 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) ))))) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar9 + 8) = 0;" (assignment_expression "*(undefined8 *)(lVar9 + 8) = 0" (pointer_expression "*(undefined8 *)(lVar9 + 8)" * (cast_expression "(undefined8 *)(lVar9 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 8)" ( (binary_expression "lVar9 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;" (assignment_expression "*(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb" (pointer_expression "*(uint *)(lVar9 + 0x4c)" * (cast_expression "(uint *)(lVar9 + 0x4c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x4c)" ( (binary_expression "lVar9 + 0x4c" identifier + number_literal) )))) = (binary_expression "*(uint *)(lVar9 + 0x4c) & 0xfffffffb" (pointer_expression "*(uint *)(lVar9 + 0x4c)" * (cast_expression "(uint *)(lVar9 + 0x4c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x4c)" ( (binary_expression "lVar9 + 0x4c" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "*(long **)(lVar14 + 0x18) = plVar15;" (assignment_expression "*(long **)(lVar14 + 0x18) = plVar15" (pointer_expression "*(long **)(lVar14 + 0x18)" * (cast_expression "(long **)(lVar14 + 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar5 = FUN_00109e11(lVar5,lVar14);" (assignment_expression "lVar5 = FUN_00109e11(lVar5,lVar14)" identifier = (call_expression "FUN_00109e11(lVar5,lVar14)" identifier (argument_list "(lVar5,lVar14)" ( identifier , identifier )))) ;) }))) (expression_statement "plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);" (assignment_expression "plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" identifier = (cast_expression "(long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" (parenthesized_expression "(**(code **)(*plVar10 + 0x18))" ( (pointer_expression "**(code **)(*plVar10 + 0x18)" * (pointer_expression "*(code **)(*plVar10 + 0x18)" * (cast_expression "(code **)(*plVar10 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x18)" ( (binary_expression "*plVar10 + 0x18" (pointer_expression "*plVar10" * identifier) + number_literal) ))))) )) (argument_list "(plVar10,lVar9)" ( identifier , identifier ))))) ;) (expression_statement "lVar14 = *plVar12;" (assignment_expression "lVar14 = *plVar12" identifier = (pointer_expression "*plVar12" * identifier)) ;) (if_statement "if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }" if (parenthesized_expression "((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             )" ( (binary_expression "(lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)" (parenthesized_expression "(lVar14 != 0)" ( (binary_expression "lVar14 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)" ( (comma_expression "lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "lVar13 = *(long *)(lVar14 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar14 + 0x18) + -1" (pointer_expression "*(long *)(lVar14 + 0x18)" * (cast_expression "(long *)(lVar14 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "*(long *)(lVar14 + 0x18) = lVar13" (pointer_expression "*(long *)(lVar14 + 0x18)" * (cast_expression "(long *)(lVar14 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar13 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6();\n          }" { (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*plVar12 = lVar5;" (assignment_expression "*plVar12 = lVar5" (pointer_expression "*plVar12" * identifier) = identifier) ;) (if_statement "if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }" if (parenthesized_expression "(*(code **)(*plVar10 + 0x50) != (code *)0x0)" ( (binary_expression "*(code **)(*plVar10 + 0x50) != (code *)0x0" (pointer_expression "*(code **)(*plVar10 + 0x50)" * (cast_expression "(code **)(*plVar10 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x50)" ( (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" * identifier) + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }" { (expression_statement "(**(code **)(*plVar10 + 0x50))(plVar10,lVar9);" (call_expression "(**(code **)(*plVar10 + 0x50))(plVar10,lVar9)" (parenthesized_expression "(**(code **)(*plVar10 + 0x50))" ( (pointer_expression "**(code **)(*plVar10 + 0x50)" * (pointer_expression "*(code **)(*plVar10 + 0x50)" * (cast_expression "(code **)(*plVar10 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x50)" ( (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" * identifier) + number_literal) ))))) )) (argument_list "(plVar10,lVar9)" ( identifier , identifier ))) ;) })) (if_statement "if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }" if (parenthesized_expression "((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1))" ( (binary_expression "(lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)" (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)" ( (comma_expression "lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "lVar5 = *(long *)(lVar9 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar9 + 0x18) + -1" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "*(long *)(lVar9 + 0x18) = lVar5" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar5 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6(lVar9);\n          }" { (expression_statement "FUN_001582a6(lVar9);" (call_expression "FUN_001582a6(lVar9)" identifier (argument_list "(lVar9)" ( identifier ))) ;) })) (expression_statement "uVar18 = uVar18 + 1;" (assignment_expression "uVar18 = uVar18 + 1" identifier = (binary_expression "uVar18 + 1" identifier + number_literal)) ;) (expression_statement "local_58 = local_58 + 2;" (assignment_expression "local_58 = local_58 + 2" identifier = (binary_expression "local_58 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar18 <= uVar2)" ( (binary_expression "uVar18 <= uVar2" identifier <= identifier) )) ;) })) }))) (expression_statement "free(plVar6);" (call_expression "free(plVar6)" identifier (argument_list "(plVar6)" ( identifier ))) ;) (if_statement "if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }" if (parenthesized_expression "(plVar17 != plVar10)" ( (binary_expression "plVar17 != plVar10" identifier != identifier) )) (compound_statement "{\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }" { (expression_statement "(**(code **)(*plVar15 + 0x28))(plVar15,0);" (call_expression "(**(code **)(*plVar15 + 0x28))(plVar15,0)" (parenthesized_expression "(**(code **)(*plVar15 + 0x28))" ( (pointer_expression "**(code **)(*plVar15 + 0x28)" * (pointer_expression "*(code **)(*plVar15 + 0x28)" * (cast_expression "(code **)(*plVar15 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar15 + 0x28)" ( (binary_expression "*plVar15 + 0x28" (pointer_expression "*plVar15" * identifier) + number_literal) ))))) )) (argument_list "(plVar15,0)" ( identifier , number_literal ))) ;) (expression_statement "lVar5 = plVar10[1];" (assignment_expression "lVar5 = plVar10[1]" identifier = (subscript_expression "plVar10[1]" identifier [ number_literal ])) ;) (expression_statement "*plVar15 = *plVar10;" (assignment_expression "*plVar15 = *plVar10" (pointer_expression "*plVar15" * identifier) = (pointer_expression "*plVar10" * identifier)) ;) (expression_statement "plVar15[1] = lVar5;" (assignment_expression "plVar15[1] = lVar5" (subscript_expression "plVar15[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = plVar10[3];" (assignment_expression "lVar5 = plVar10[3]" identifier = (subscript_expression "plVar10[3]" identifier [ number_literal ])) ;) (expression_statement "plVar15[2] = plVar10[2];" (assignment_expression "plVar15[2] = plVar10[2]" (subscript_expression "plVar15[2]" identifier [ number_literal ]) = (subscript_expression "plVar10[2]" identifier [ number_literal ])) ;) (expression_statement "plVar15[3] = lVar5;" (assignment_expression "plVar15[3] = lVar5" (subscript_expression "plVar15[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = plVar10[5];" (assignment_expression "lVar5 = plVar10[5]" identifier = (subscript_expression "plVar10[5]" identifier [ number_literal ])) ;) (expression_statement "plVar15[4] = plVar10[4];" (assignment_expression "plVar15[4] = plVar10[4]" (subscript_expression "plVar15[4]" identifier [ number_literal ]) = (subscript_expression "plVar10[4]" identifier [ number_literal ])) ;) (expression_statement "plVar15[5] = lVar5;" (assignment_expression "plVar15[5] = lVar5" (subscript_expression "plVar15[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = plVar10[7];" (assignment_expression "lVar5 = plVar10[7]" identifier = (subscript_expression "plVar10[7]" identifier [ number_literal ])) ;) (expression_statement "plVar15[6] = plVar10[6];" (assignment_expression "plVar15[6] = plVar10[6]" (subscript_expression "plVar15[6]" identifier [ number_literal ]) = (subscript_expression "plVar10[6]" identifier [ number_literal ])) ;) (expression_statement "plVar15[7] = lVar5;" (assignment_expression "plVar15[7] = lVar5" (subscript_expression "plVar15[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = plVar10[9];" (assignment_expression "lVar5 = plVar10[9]" identifier = (subscript_expression "plVar10[9]" identifier [ number_literal ])) ;) (expression_statement "plVar15[8] = plVar10[8];" (assignment_expression "plVar15[8] = plVar10[8]" (subscript_expression "plVar15[8]" identifier [ number_literal ]) = (subscript_expression "plVar10[8]" identifier [ number_literal ])) ;) (expression_statement "plVar15[9] = lVar5;" (assignment_expression "plVar15[9] = lVar5" (subscript_expression "plVar15[9]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*plVar10 = (long)DAT_00396dc0;" (assignment_expression "*plVar10 = (long)DAT_00396dc0" (pointer_expression "*plVar10" * identifier) = (cast_expression "(long)DAT_00396dc0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "DAT_00396dc0 = plVar10;" (assignment_expression "DAT_00396dc0 = plVar10" identifier = identifier) ;) })) (expression_statement "(*(code *)PTR_FUN_00396e58)((double)uVar2);" (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar2)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" ( (pointer_expression "*(code *)PTR_FUN_00396e58" * (cast_expression "(code *)PTR_FUN_00396e58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "((double)uVar2)" ( (cast_expression "(double)uVar2" ( (type_descriptor "double" primitive_type) ) identifier) ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit "NODE * asort_actual(wchar_t nargs,sort_context_t ctxt)\n\n{\n  long *plVar1;\n  STACK_ITEM *pSVar2;\n  char cVar3;\n  wchar_t wVar4;\n  wchar_t wVar5;\n  ulong uVar6;\n  anon_union_8_4_38bfafa6_for_x aVar7;\n  size_t sVar8;\n  undefined8 uVar9;\n  afunc_t p_Var10;\n  NODE *pNVar11;\n  NODE *pNVar12;\n  char *pcVar13;\n  NODE **__ptr;\n  long lVar14;\n  anon_union_8_4_7583dc62_for_l aVar15;\n  NODE *pNVar16;\n  exp_node **ppeVar17;\n  NODE *symbol;\n  char *pcVar18;\n  exp_node *peVar19;\n  anon_union_8_4_7583dc62_for_l symbol_00;\n  ulong uVar20;\n  char *pcVar21;\n  NODE **ppNVar22;\n  NODE **local_58;\n  \n  pNVar11 = Nnull_string;\n  wVar5 = CONVFMTidx;\n  pcVar21 = CONVFMT;\n  if (nargs == L'\x03') {\n    pSVar2 = stack_ptr + -1;\n    pNVar11 = stack_ptr->rptr;\n    stack_ptr = pSVar2;\n    if (pNVar11->type == Node_var_array) {\n      set_loc("awk.h",L'ܫ');\n      pcVar18 = array_vname(pNVar11);\n      pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    if (((pNVar11->flags & 4) == 0) ||\n       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))) {\n      pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    wVar5 = (pNVar11->sub).val.idx;\n    if ((wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff')) goto LAB_0010b900;\n  }\n  else {\n    if ((Nnull_string->flags & 1) == 0) {\n      pNVar11 = r_dupnode(Nnull_string);\n    }\n    else {\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }\nLAB_0010b8dc:\n    if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;\n  }\n  pNVar11 = (*format_val)(CONVFMT,CONVFMTidx,pNVar11);\nLAB_0010b900:\n  pcVar21 = (pNVar11->sub).val.sp;\n  cVar3 = pcVar21[(pNVar11->sub).val.slen];\n  pcVar21[(pNVar11->sub).val.slen] = '\0';\n  if (((pNVar11->sub).val.slen == 0) && (pcVar21 = "@val_type_asc", ctxt != ASORT)) {\n    pcVar21 = "@ind_str_asc";\n  }\n  symbol_00.lptr = (exp_node *)0x0;\n  if (L'\x01' < nargs) {\n    pSVar2 = stack_ptr + -1;\n    symbol_00 = (anon_union_8_4_7583dc62_for_l)stack_ptr->lptr;\n    stack_ptr = pSVar2;\n    if (((symbol_00.lptr)->type != Node_var_array) &&\n       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       )) {\n      set_loc("array.c",L'̸');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n  }\n  pSVar2 = stack_ptr + -1;\n  pNVar12 = stack_ptr->rptr;\n  stack_ptr = pSVar2;\n  if ((pNVar12->type == Node_var_array) ||\n     (pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array)) {\n    pNVar16 = func_table;\n    symbol = symbol_table;\n    if (symbol_table == pNVar12) {\n      set_loc("array.c",L'̓');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    else {\n      symbol = pNVar12;\n      if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }\n    }\n  }\n  else {\n    set_loc("array.c",L'̿');\n    pcVar18 = "asort";\n    if (ctxt != ASORT) {\n      pcVar18 = "asorti";\n    }\n    pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5);\n    r_fatal(pcVar13,pcVar18);\n    symbol = pNVar12;\n  }\n  if (symbol_00.lptr != (exp_node *)0x0) {\n    pNVar12 = (NODE *)((symbol_00.lptr)->sub).val.sref;\n    if (pNVar12 != (NODE *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      } while (pNVar12 != (NODE *)0x0);\n    }\n    peVar19 = (exp_node *)(symbol->sub).val.sref;\n    if (peVar19 != (exp_node *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      } while (peVar19 != (exp_node *)0x0);\n    }\n  }\n  __ptr = assoc_list(symbol,pcVar21,ctxt);\n  (pNVar11->sub).val.sp[(pNVar11->sub).val.slen] = cVar3;\n  lVar14 = (pNVar11->sub).val.sref + -1;\n  (pNVar11->sub).val.sref = lVar14;\n  if (lVar14 == 0) {\n    r_unref(pNVar11);\n  }\n  uVar6 = (symbol->sub).nodep.reflags;\n  if ((uVar6 == 0) || (__ptr == (NODE **)0x0)) {\n    if ((symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol)) {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n    }\n    if (__ptr != (NODE **)0x0) {\n      free(__ptr);\n    }\n    pNVar11 = (*make_number)(0.0);\n  }\n  else {\n    if ((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)) {\n      aVar15.lptr = make_array();\n      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;\n      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;\n    }\n    else {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }\n    if (ctxt == ASORTI) {\n      if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    else {\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    free(__ptr);\n    if (symbol_00.lptr != aVar15.lptr) {\n      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);\n      pcVar21 = ((aVar15.lptr)->sub).val.sp;\n      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;\n      (symbol->sub).val.sp = pcVar21;\n      aVar7 = ((aVar15.lptr)->sub).nodep.x;\n      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;\n      (symbol->sub).nodep.x = aVar7;\n      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;\n      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;\n      (symbol->sub).nodep.reserved = sVar8;\n      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;\n      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;\n      (symbol->sub).nodep.cnt = uVar20;\n      uVar9 = (aVar15.lp)->dump;\n      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;\n      *(undefined8 *)&symbol->type = uVar9;\n      ((aVar15.lptr)->sub).nodep.l = nextfree;\n      nextfree = aVar15;\n    }\n    pNVar11 = (*make_number)((double)uVar6);\n  }\n  return pNVar11;\n}\n\n" (function_definition "NODE * asort_actual(wchar_t nargs,sort_context_t ctxt)\n\n{\n  long *plVar1;\n  STACK_ITEM *pSVar2;\n  char cVar3;\n  wchar_t wVar4;\n  wchar_t wVar5;\n  ulong uVar6;\n  anon_union_8_4_38bfafa6_for_x aVar7;\n  size_t sVar8;\n  undefined8 uVar9;\n  afunc_t p_Var10;\n  NODE *pNVar11;\n  NODE *pNVar12;\n  char *pcVar13;\n  NODE **__ptr;\n  long lVar14;\n  anon_union_8_4_7583dc62_for_l aVar15;\n  NODE *pNVar16;\n  exp_node **ppeVar17;\n  NODE *symbol;\n  char *pcVar18;\n  exp_node *peVar19;\n  anon_union_8_4_7583dc62_for_l symbol_00;\n  ulong uVar20;\n  char *pcVar21;\n  NODE **ppNVar22;\n  NODE **local_58;\n  \n  pNVar11 = Nnull_string;\n  wVar5 = CONVFMTidx;\n  pcVar21 = CONVFMT;\n  if (nargs == L'\x03') {\n    pSVar2 = stack_ptr + -1;\n    pNVar11 = stack_ptr->rptr;\n    stack_ptr = pSVar2;\n    if (pNVar11->type == Node_var_array) {\n      set_loc("awk.h",L'ܫ');\n      pcVar18 = array_vname(pNVar11);\n      pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    if (((pNVar11->flags & 4) == 0) ||\n       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))) {\n      pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    wVar5 = (pNVar11->sub).val.idx;\n    if ((wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff')) goto LAB_0010b900;\n  }\n  else {\n    if ((Nnull_string->flags & 1) == 0) {\n      pNVar11 = r_dupnode(Nnull_string);\n    }\n    else {\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }\nLAB_0010b8dc:\n    if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;\n  }\n  pNVar11 = (*format_val)(CONVFMT,CONVFMTidx,pNVar11);\nLAB_0010b900:\n  pcVar21 = (pNVar11->sub).val.sp;\n  cVar3 = pcVar21[(pNVar11->sub).val.slen];\n  pcVar21[(pNVar11->sub).val.slen] = '\0';\n  if (((pNVar11->sub).val.slen == 0) && (pcVar21 = "@val_type_asc", ctxt != ASORT)) {\n    pcVar21 = "@ind_str_asc";\n  }\n  symbol_00.lptr = (exp_node *)0x0;\n  if (L'\x01' < nargs) {\n    pSVar2 = stack_ptr + -1;\n    symbol_00 = (anon_union_8_4_7583dc62_for_l)stack_ptr->lptr;\n    stack_ptr = pSVar2;\n    if (((symbol_00.lptr)->type != Node_var_array) &&\n       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       )) {\n      set_loc("array.c",L'̸');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n  }\n  pSVar2 = stack_ptr + -1;\n  pNVar12 = stack_ptr->rptr;\n  stack_ptr = pSVar2;\n  if ((pNVar12->type == Node_var_array) ||\n     (pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array)) {\n    pNVar16 = func_table;\n    symbol = symbol_table;\n    if (symbol_table == pNVar12) {\n      set_loc("array.c",L'̓');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    else {\n      symbol = pNVar12;\n      if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }\n    }\n  }\n  else {\n    set_loc("array.c",L'̿');\n    pcVar18 = "asort";\n    if (ctxt != ASORT) {\n      pcVar18 = "asorti";\n    }\n    pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5);\n    r_fatal(pcVar13,pcVar18);\n    symbol = pNVar12;\n  }\n  if (symbol_00.lptr != (exp_node *)0x0) {\n    pNVar12 = (NODE *)((symbol_00.lptr)->sub).val.sref;\n    if (pNVar12 != (NODE *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      } while (pNVar12 != (NODE *)0x0);\n    }\n    peVar19 = (exp_node *)(symbol->sub).val.sref;\n    if (peVar19 != (exp_node *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      } while (peVar19 != (exp_node *)0x0);\n    }\n  }\n  __ptr = assoc_list(symbol,pcVar21,ctxt);\n  (pNVar11->sub).val.sp[(pNVar11->sub).val.slen] = cVar3;\n  lVar14 = (pNVar11->sub).val.sref + -1;\n  (pNVar11->sub).val.sref = lVar14;\n  if (lVar14 == 0) {\n    r_unref(pNVar11);\n  }\n  uVar6 = (symbol->sub).nodep.reflags;\n  if ((uVar6 == 0) || (__ptr == (NODE **)0x0)) {\n    if ((symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol)) {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n    }\n    if (__ptr != (NODE **)0x0) {\n      free(__ptr);\n    }\n    pNVar11 = (*make_number)(0.0);\n  }\n  else {\n    if ((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)) {\n      aVar15.lptr = make_array();\n      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;\n      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;\n    }\n    else {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }\n    if (ctxt == ASORTI) {\n      if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    else {\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    free(__ptr);\n    if (symbol_00.lptr != aVar15.lptr) {\n      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);\n      pcVar21 = ((aVar15.lptr)->sub).val.sp;\n      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;\n      (symbol->sub).val.sp = pcVar21;\n      aVar7 = ((aVar15.lptr)->sub).nodep.x;\n      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;\n      (symbol->sub).nodep.x = aVar7;\n      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;\n      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;\n      (symbol->sub).nodep.reserved = sVar8;\n      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;\n      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;\n      (symbol->sub).nodep.cnt = uVar20;\n      uVar9 = (aVar15.lp)->dump;\n      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;\n      *(undefined8 *)&symbol->type = uVar9;\n      ((aVar15.lptr)->sub).nodep.l = nextfree;\n      nextfree = aVar15;\n    }\n    pNVar11 = (*make_number)((double)uVar6);\n  }\n  return pNVar11;\n}" type_identifier (pointer_declarator "* asort_actual(wchar_t nargs,sort_context_t ctxt)" * (function_declarator "asort_actual(wchar_t nargs,sort_context_t ctxt)" identifier (parameter_list "(wchar_t nargs,sort_context_t ctxt)" ( (parameter_declaration "wchar_t nargs" type_identifier identifier) , (parameter_declaration "sort_context_t ctxt" type_identifier identifier) )))) (compound_statement "{\n  long *plVar1;\n  STACK_ITEM *pSVar2;\n  char cVar3;\n  wchar_t wVar4;\n  wchar_t wVar5;\n  ulong uVar6;\n  anon_union_8_4_38bfafa6_for_x aVar7;\n  size_t sVar8;\n  undefined8 uVar9;\n  afunc_t p_Var10;\n  NODE *pNVar11;\n  NODE *pNVar12;\n  char *pcVar13;\n  NODE **__ptr;\n  long lVar14;\n  anon_union_8_4_7583dc62_for_l aVar15;\n  NODE *pNVar16;\n  exp_node **ppeVar17;\n  NODE *symbol;\n  char *pcVar18;\n  exp_node *peVar19;\n  anon_union_8_4_7583dc62_for_l symbol_00;\n  ulong uVar20;\n  char *pcVar21;\n  NODE **ppNVar22;\n  NODE **local_58;\n  \n  pNVar11 = Nnull_string;\n  wVar5 = CONVFMTidx;\n  pcVar21 = CONVFMT;\n  if (nargs == L'\x03') {\n    pSVar2 = stack_ptr + -1;\n    pNVar11 = stack_ptr->rptr;\n    stack_ptr = pSVar2;\n    if (pNVar11->type == Node_var_array) {\n      set_loc("awk.h",L'ܫ');\n      pcVar18 = array_vname(pNVar11);\n      pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    if (((pNVar11->flags & 4) == 0) ||\n       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))) {\n      pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    wVar5 = (pNVar11->sub).val.idx;\n    if ((wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff')) goto LAB_0010b900;\n  }\n  else {\n    if ((Nnull_string->flags & 1) == 0) {\n      pNVar11 = r_dupnode(Nnull_string);\n    }\n    else {\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }\nLAB_0010b8dc:\n    if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;\n  }\n  pNVar11 = (*format_val)(CONVFMT,CONVFMTidx,pNVar11);\nLAB_0010b900:\n  pcVar21 = (pNVar11->sub).val.sp;\n  cVar3 = pcVar21[(pNVar11->sub).val.slen];\n  pcVar21[(pNVar11->sub).val.slen] = '\0';\n  if (((pNVar11->sub).val.slen == 0) && (pcVar21 = "@val_type_asc", ctxt != ASORT)) {\n    pcVar21 = "@ind_str_asc";\n  }\n  symbol_00.lptr = (exp_node *)0x0;\n  if (L'\x01' < nargs) {\n    pSVar2 = stack_ptr + -1;\n    symbol_00 = (anon_union_8_4_7583dc62_for_l)stack_ptr->lptr;\n    stack_ptr = pSVar2;\n    if (((symbol_00.lptr)->type != Node_var_array) &&\n       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       )) {\n      set_loc("array.c",L'̸');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n  }\n  pSVar2 = stack_ptr + -1;\n  pNVar12 = stack_ptr->rptr;\n  stack_ptr = pSVar2;\n  if ((pNVar12->type == Node_var_array) ||\n     (pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array)) {\n    pNVar16 = func_table;\n    symbol = symbol_table;\n    if (symbol_table == pNVar12) {\n      set_loc("array.c",L'̓');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    else {\n      symbol = pNVar12;\n      if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }\n    }\n  }\n  else {\n    set_loc("array.c",L'̿');\n    pcVar18 = "asort";\n    if (ctxt != ASORT) {\n      pcVar18 = "asorti";\n    }\n    pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5);\n    r_fatal(pcVar13,pcVar18);\n    symbol = pNVar12;\n  }\n  if (symbol_00.lptr != (exp_node *)0x0) {\n    pNVar12 = (NODE *)((symbol_00.lptr)->sub).val.sref;\n    if (pNVar12 != (NODE *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      } while (pNVar12 != (NODE *)0x0);\n    }\n    peVar19 = (exp_node *)(symbol->sub).val.sref;\n    if (peVar19 != (exp_node *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      } while (peVar19 != (exp_node *)0x0);\n    }\n  }\n  __ptr = assoc_list(symbol,pcVar21,ctxt);\n  (pNVar11->sub).val.sp[(pNVar11->sub).val.slen] = cVar3;\n  lVar14 = (pNVar11->sub).val.sref + -1;\n  (pNVar11->sub).val.sref = lVar14;\n  if (lVar14 == 0) {\n    r_unref(pNVar11);\n  }\n  uVar6 = (symbol->sub).nodep.reflags;\n  if ((uVar6 == 0) || (__ptr == (NODE **)0x0)) {\n    if ((symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol)) {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n    }\n    if (__ptr != (NODE **)0x0) {\n      free(__ptr);\n    }\n    pNVar11 = (*make_number)(0.0);\n  }\n  else {\n    if ((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)) {\n      aVar15.lptr = make_array();\n      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;\n      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;\n    }\n    else {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }\n    if (ctxt == ASORTI) {\n      if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    else {\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    free(__ptr);\n    if (symbol_00.lptr != aVar15.lptr) {\n      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);\n      pcVar21 = ((aVar15.lptr)->sub).val.sp;\n      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;\n      (symbol->sub).val.sp = pcVar21;\n      aVar7 = ((aVar15.lptr)->sub).nodep.x;\n      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;\n      (symbol->sub).nodep.x = aVar7;\n      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;\n      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;\n      (symbol->sub).nodep.reserved = sVar8;\n      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;\n      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;\n      (symbol->sub).nodep.cnt = uVar20;\n      uVar9 = (aVar15.lp)->dump;\n      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;\n      *(undefined8 *)&symbol->type = uVar9;\n      ((aVar15.lptr)->sub).nodep.l = nextfree;\n      nextfree = aVar15;\n    }\n    pNVar11 = (*make_number)((double)uVar6);\n  }\n  return pNVar11;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "STACK_ITEM *pSVar2;" type_identifier (pointer_declarator "*pSVar2" * identifier) ;) (declaration "char cVar3;" primitive_type identifier ;) (declaration "wchar_t wVar4;" type_identifier identifier ;) (declaration "wchar_t wVar5;" type_identifier identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "anon_union_8_4_38bfafa6_for_x aVar7;" type_identifier identifier ;) (declaration "size_t sVar8;" primitive_type identifier ;) (declaration "undefined8 uVar9;" type_identifier identifier ;) (declaration "afunc_t p_Var10;" type_identifier identifier ;) (declaration "NODE *pNVar11;" type_identifier (pointer_declarator "*pNVar11" * identifier) ;) (declaration "NODE *pNVar12;" type_identifier (pointer_declarator "*pNVar12" * identifier) ;) (declaration "char *pcVar13;" primitive_type (pointer_declarator "*pcVar13" * identifier) ;) (declaration "NODE **__ptr;" type_identifier (pointer_declarator "**__ptr" * (pointer_declarator "*__ptr" * identifier)) ;) (declaration "long lVar14;" (sized_type_specifier "long" long) identifier ;) (declaration "anon_union_8_4_7583dc62_for_l aVar15;" type_identifier identifier ;) (declaration "NODE *pNVar16;" type_identifier (pointer_declarator "*pNVar16" * identifier) ;) (declaration "exp_node **ppeVar17;" type_identifier (pointer_declarator "**ppeVar17" * (pointer_declarator "*ppeVar17" * identifier)) ;) (declaration "NODE *symbol;" type_identifier (pointer_declarator "*symbol" * identifier) ;) (declaration "char *pcVar18;" primitive_type (pointer_declarator "*pcVar18" * identifier) ;) (declaration "exp_node *peVar19;" type_identifier (pointer_declarator "*peVar19" * identifier) ;) (declaration "anon_union_8_4_7583dc62_for_l symbol_00;" type_identifier identifier ;) (declaration "ulong uVar20;" type_identifier identifier ;) (declaration "char *pcVar21;" primitive_type (pointer_declarator "*pcVar21" * identifier) ;) (declaration "NODE **ppNVar22;" type_identifier (pointer_declarator "**ppNVar22" * (pointer_declarator "*ppNVar22" * identifier)) ;) (declaration "NODE **local_58;" type_identifier (pointer_declarator "**local_58" * (pointer_declarator "*local_58" * identifier)) ;) (expression_statement "pNVar11 = Nnull_string;" (assignment_expression "pNVar11 = Nnull_string" identifier = identifier) ;) (expression_statement "wVar5 = CONVFMTidx;" (assignment_expression "wVar5 = CONVFMTidx" identifier = identifier) ;) (expression_statement "pcVar21 = CONVFMT;" (assignment_expression "pcVar21 = CONVFMT" identifier = identifier) ;) (if_statement "if (nargs == L'\x03') {\n    pSVar2 = stack_ptr + -1;\n    pNVar11 = stack_ptr->rptr;\n    stack_ptr = pSVar2;\n    if (pNVar11->type == Node_var_array) {\n      set_loc("awk.h",L'ܫ');\n      pcVar18 = array_vname(pNVar11);\n      pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    if (((pNVar11->flags & 4) == 0) ||\n       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))) {\n      pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    wVar5 = (pNVar11->sub).val.idx;\n    if ((wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff')) goto LAB_0010b900;\n  }\n  else {\n    if ((Nnull_string->flags & 1) == 0) {\n      pNVar11 = r_dupnode(Nnull_string);\n    }\n    else {\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }\nLAB_0010b8dc:\n    if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;\n  }" if (parenthesized_expression "(nargs == L'\x03')" ( (binary_expression "nargs == L'\x03'" identifier == (char_literal "L'\x03'" L' escape_sequence ')) )) (compound_statement "{\n    pSVar2 = stack_ptr + -1;\n    pNVar11 = stack_ptr->rptr;\n    stack_ptr = pSVar2;\n    if (pNVar11->type == Node_var_array) {\n      set_loc("awk.h",L'ܫ');\n      pcVar18 = array_vname(pNVar11);\n      pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    if (((pNVar11->flags & 4) == 0) ||\n       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))) {\n      pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    wVar5 = (pNVar11->sub).val.idx;\n    if ((wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff')) goto LAB_0010b900;\n  }" { (expression_statement "pSVar2 = stack_ptr + -1;" (assignment_expression "pSVar2 = stack_ptr + -1" identifier = (binary_expression "stack_ptr + -1" identifier + number_literal)) ;) (expression_statement "pNVar11 = stack_ptr->rptr;" (assignment_expression "pNVar11 = stack_ptr->rptr" identifier = (field_expression "stack_ptr->rptr" identifier -> field_identifier)) ;) (expression_statement "stack_ptr = pSVar2;" (assignment_expression "stack_ptr = pSVar2" identifier = identifier) ;) (if_statement "if (pNVar11->type == Node_var_array) {\n      set_loc("awk.h",L'ܫ');\n      pcVar18 = array_vname(pNVar11);\n      pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      r_fatal(pcVar13,pcVar18);\n    }" if (parenthesized_expression "(pNVar11->type == Node_var_array)" ( (binary_expression "pNVar11->type == Node_var_array" (field_expression "pNVar11->type" identifier -> field_identifier) == identifier) )) (compound_statement "{\n      set_loc("awk.h",L'ܫ');\n      pcVar18 = array_vname(pNVar11);\n      pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      r_fatal(pcVar13,pcVar18);\n    }" { (expression_statement "set_loc("awk.h",L'ܫ');" (call_expression "set_loc("awk.h",L'ܫ')" identifier (argument_list "("awk.h",L'ܫ')" ( (string_literal ""awk.h"" " string_content ") , (char_literal "L'ܫ'" L' character ') ))) ;) (expression_statement "pcVar18 = array_vname(pNVar11);" (assignment_expression "pcVar18 = array_vname(pNVar11)" identifier = (call_expression "array_vname(pNVar11)" identifier (argument_list "(pNVar11)" ( identifier )))) ;) (expression_statement "pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5);" (assignment_expression "pcVar13 = (char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" identifier = (cast_expression "(char *)dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" identifier (argument_list "(0,"attempt to use array `%s\' in a scalar context",5)" ( number_literal , (string_literal ""attempt to use array `%s\' in a scalar context"" " string_content escape_sequence string_content ") , number_literal ))))) ;) (expression_statement "r_fatal(pcVar13,pcVar18);" (call_expression "r_fatal(pcVar13,pcVar18)" identifier (argument_list "(pcVar13,pcVar18)" ( identifier , identifier ))) ;) })) (if_statement "if (((pNVar11->flags & 4) == 0) ||\n       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))) {\n      pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);\n      goto LAB_0010b8dc;\n    }" if (parenthesized_expression "(((pNVar11->flags & 4) == 0) ||\n       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4))))" ( (binary_expression "((pNVar11->flags & 4) == 0) ||\n       ((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))" (parenthesized_expression "((pNVar11->flags & 4) == 0)" ( (binary_expression "(pNVar11->flags & 4) == 0" (parenthesized_expression "(pNVar11->flags & 4)" ( (binary_expression "pNVar11->flags & 4" (field_expression "pNVar11->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)))" ( (parenthesized_expression "(wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4))" ( (comma_expression "wVar4 = (pNVar11->sub).val.idx, wVar4 != L'\xffffffff' && (wVar5 != wVar4)" (assignment_expression "wVar4 = (pNVar11->sub).val.idx" identifier = (field_expression "(pNVar11->sub).val.idx" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier)) , (binary_expression "wVar4 != L'\xffffffff' && (wVar5 != wVar4)" (binary_expression "wVar4 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) && (parenthesized_expression "(wVar5 != wVar4)" ( (binary_expression "wVar5 != wVar4" identifier != identifier) )))) )) ))) )) (compound_statement "{\n      pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);\n      goto LAB_0010b8dc;\n    }" { (expression_statement "pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11);" (assignment_expression "pNVar11 = (*format_val)(pcVar21,wVar5,pNVar11)" identifier = (call_expression "(*format_val)(pcVar21,wVar5,pNVar11)" (parenthesized_expression "(*format_val)" ( (pointer_expression "*format_val" * identifier) )) (argument_list "(pcVar21,wVar5,pNVar11)" ( identifier , identifier , identifier )))) ;) (goto_statement "goto LAB_0010b8dc;" goto statement_identifier ;) })) (labeled_statement "LAB_0010baa0:\n    wVar5 = (pNVar11->sub).val.idx;" statement_identifier : (expression_statement "wVar5 = (pNVar11->sub).val.idx;" (assignment_expression "wVar5 = (pNVar11->sub).val.idx" identifier = (field_expression "(pNVar11->sub).val.idx" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;)) (if_statement "if ((wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff')) goto LAB_0010b900;" if (parenthesized_expression "((wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff'))" ( (binary_expression "(wVar5 == CONVFMTidx) || (wVar5 == L'\xffffffff')" (parenthesized_expression "(wVar5 == CONVFMTidx)" ( (binary_expression "wVar5 == CONVFMTidx" identifier == identifier) )) || (parenthesized_expression "(wVar5 == L'\xffffffff')" ( (binary_expression "wVar5 == L'\xffffffff'" identifier == (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) ))) )) (goto_statement "goto LAB_0010b900;" goto statement_identifier ;)) }) (else_clause "else {\n    if ((Nnull_string->flags & 1) == 0) {\n      pNVar11 = r_dupnode(Nnull_string);\n    }\n    else {\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }\nLAB_0010b8dc:\n    if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;\n  }" else (compound_statement "{\n    if ((Nnull_string->flags & 1) == 0) {\n      pNVar11 = r_dupnode(Nnull_string);\n    }\n    else {\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }\nLAB_0010b8dc:\n    if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;\n  }" { (if_statement "if ((Nnull_string->flags & 1) == 0) {\n      pNVar11 = r_dupnode(Nnull_string);\n    }\n    else {\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }" if (parenthesized_expression "((Nnull_string->flags & 1) == 0)" ( (binary_expression "(Nnull_string->flags & 1) == 0" (parenthesized_expression "(Nnull_string->flags & 1)" ( (binary_expression "Nnull_string->flags & 1" (field_expression "Nnull_string->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      pNVar11 = r_dupnode(Nnull_string);\n    }" { (expression_statement "pNVar11 = r_dupnode(Nnull_string);" (assignment_expression "pNVar11 = r_dupnode(Nnull_string)" identifier = (call_expression "r_dupnode(Nnull_string)" identifier (argument_list "(Nnull_string)" ( identifier )))) ;) }) (else_clause "else {\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }" else (compound_statement "{\n      plVar1 = &(Nnull_string->sub).val.sref;\n      *plVar1 = *plVar1 + 1;\n    }" { (expression_statement "plVar1 = &(Nnull_string->sub).val.sref;" (assignment_expression "plVar1 = &(Nnull_string->sub).val.sref" identifier = (pointer_expression "&(Nnull_string->sub).val.sref" & (field_expression "(Nnull_string->sub).val.sref" (field_expression "(Nnull_string->sub).val" (parenthesized_expression "(Nnull_string->sub)" ( (field_expression "Nnull_string->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (expression_statement "*plVar1 = *plVar1 + 1;" (assignment_expression "*plVar1 = *plVar1 + 1" (pointer_expression "*plVar1" * identifier) = (binary_expression "*plVar1 + 1" (pointer_expression "*plVar1" * identifier) + number_literal)) ;) }))) (labeled_statement "LAB_0010b8dc:\n    if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;" statement_identifier : (if_statement "if ((pNVar11->flags & 4) != 0) goto LAB_0010baa0;" if (parenthesized_expression "((pNVar11->flags & 4) != 0)" ( (binary_expression "(pNVar11->flags & 4) != 0" (parenthesized_expression "(pNVar11->flags & 4)" ( (binary_expression "pNVar11->flags & 4" (field_expression "pNVar11->flags" identifier -> field_identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0010baa0;" goto statement_identifier ;))) }))) (expression_statement "pNVar11 = (*format_val)(CONVFMT,CONVFMTidx,pNVar11);" (assignment_expression "pNVar11 = (*format_val)(CONVFMT,CONVFMTidx,pNVar11)" identifier = (call_expression "(*format_val)(CONVFMT,CONVFMTidx,pNVar11)" (parenthesized_expression "(*format_val)" ( (pointer_expression "*format_val" * identifier) )) (argument_list "(CONVFMT,CONVFMTidx,pNVar11)" ( identifier , identifier , identifier )))) ;) (labeled_statement "LAB_0010b900:\n  pcVar21 = (pNVar11->sub).val.sp;" statement_identifier : (expression_statement "pcVar21 = (pNVar11->sub).val.sp;" (assignment_expression "pcVar21 = (pNVar11->sub).val.sp" identifier = (field_expression "(pNVar11->sub).val.sp" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;)) (expression_statement "cVar3 = pcVar21[(pNVar11->sub).val.slen];" (assignment_expression "cVar3 = pcVar21[(pNVar11->sub).val.slen]" identifier = (subscript_expression "pcVar21[(pNVar11->sub).val.slen]" identifier [ (field_expression "(pNVar11->sub).val.slen" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) ])) ;) (expression_statement "pcVar21[(pNVar11->sub).val.slen] = '\0';" (assignment_expression "pcVar21[(pNVar11->sub).val.slen] = '\0'" (subscript_expression "pcVar21[(pNVar11->sub).val.slen]" identifier [ (field_expression "(pNVar11->sub).val.slen" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if (((pNVar11->sub).val.slen == 0) && (pcVar21 = "@val_type_asc", ctxt != ASORT)) {\n    pcVar21 = "@ind_str_asc";\n  }" if (parenthesized_expression "(((pNVar11->sub).val.slen == 0) && (pcVar21 = "@val_type_asc", ctxt != ASORT))" ( (binary_expression "((pNVar11->sub).val.slen == 0) && (pcVar21 = "@val_type_asc", ctxt != ASORT)" (parenthesized_expression "((pNVar11->sub).val.slen == 0)" ( (binary_expression "(pNVar11->sub).val.slen == 0" (field_expression "(pNVar11->sub).val.slen" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) == number_literal) )) && (parenthesized_expression "(pcVar21 = "@val_type_asc", ctxt != ASORT)" ( (comma_expression "pcVar21 = "@val_type_asc", ctxt != ASORT" (assignment_expression "pcVar21 = "@val_type_asc"" identifier = (string_literal ""@val_type_asc"" " string_content ")) , (binary_expression "ctxt != ASORT" identifier != identifier)) ))) )) (compound_statement "{\n    pcVar21 = "@ind_str_asc";\n  }" { (expression_statement "pcVar21 = "@ind_str_asc";" (assignment_expression "pcVar21 = "@ind_str_asc"" identifier = (string_literal ""@ind_str_asc"" " string_content ")) ;) })) (expression_statement "symbol_00.lptr = (exp_node *)0x0;" (assignment_expression "symbol_00.lptr = (exp_node *)0x0" (field_expression "symbol_00.lptr" identifier . field_identifier) = (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (L'\x01' < nargs) {\n    pSVar2 = stack_ptr + -1;\n    symbol_00 = (anon_union_8_4_7583dc62_for_l)stack_ptr->lptr;\n    stack_ptr = pSVar2;\n    if (((symbol_00.lptr)->type != Node_var_array) &&\n       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       )) {\n      set_loc("array.c",L'̸');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n  }" if (parenthesized_expression "(L'\x01' < nargs)" ( (binary_expression "L'\x01' < nargs" (char_literal "L'\x01'" L' escape_sequence ') < identifier) )) (compound_statement "{\n    pSVar2 = stack_ptr + -1;\n    symbol_00 = (anon_union_8_4_7583dc62_for_l)stack_ptr->lptr;\n    stack_ptr = pSVar2;\n    if (((symbol_00.lptr)->type != Node_var_array) &&\n       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       )) {\n      set_loc("array.c",L'̸');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n  }" { (expression_statement "pSVar2 = stack_ptr + -1;" (assignment_expression "pSVar2 = stack_ptr + -1" identifier = (binary_expression "stack_ptr + -1" identifier + number_literal)) ;) (expression_statement "symbol_00 = (anon_union_8_4_7583dc62_for_l)stack_ptr->lptr;" (assignment_expression "symbol_00 = (anon_union_8_4_7583dc62_for_l)stack_ptr->lptr" identifier = (cast_expression "(anon_union_8_4_7583dc62_for_l)stack_ptr->lptr" ( (type_descriptor "anon_union_8_4_7583dc62_for_l" type_identifier) ) (field_expression "stack_ptr->lptr" identifier -> field_identifier))) ;) (expression_statement "stack_ptr = pSVar2;" (assignment_expression "stack_ptr = pSVar2" identifier = identifier) ;) (if_statement "if (((symbol_00.lptr)->type != Node_var_array) &&\n       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       )) {\n      set_loc("array.c",L'̸');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);\n      r_fatal(pcVar13,pcVar18);\n    }" if (parenthesized_expression "(((symbol_00.lptr)->type != Node_var_array) &&\n       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       ))" ( (binary_expression "((symbol_00.lptr)->type != Node_var_array) &&\n       (symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       )" (parenthesized_expression "((symbol_00.lptr)->type != Node_var_array)" ( (binary_expression "(symbol_00.lptr)->type != Node_var_array" (field_expression "(symbol_00.lptr)->type" (parenthesized_expression "(symbol_00.lptr)" ( (field_expression "symbol_00.lptr" identifier . field_identifier) )) -> field_identifier) != identifier) )) && (parenthesized_expression "(symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array\n       )" ( (comma_expression "symbol_00.lptr = force_array(symbol_00.lptr,false), (symbol_00.lptr)->type != Node_var_array" (assignment_expression "symbol_00.lptr = force_array(symbol_00.lptr,false)" (field_expression "symbol_00.lptr" identifier . field_identifier) = (call_expression "force_array(symbol_00.lptr,false)" identifier (argument_list "(symbol_00.lptr,false)" ( (field_expression "symbol_00.lptr" identifier . field_identifier) , false )))) , (binary_expression "(symbol_00.lptr)->type != Node_var_array" (field_expression "(symbol_00.lptr)->type" (parenthesized_expression "(symbol_00.lptr)" ( (field_expression "symbol_00.lptr" identifier . field_identifier) )) -> field_identifier) != identifier)) ))) )) (compound_statement "{\n      set_loc("array.c",L'̸');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);\n      r_fatal(pcVar13,pcVar18);\n    }" { (expression_statement "set_loc("array.c",L'̸');" (call_expression "set_loc("array.c",L'̸')" identifier (argument_list "("array.c",L'̸')" ( (string_literal ""array.c"" " string_content ") , (char_literal "L'̸'" L' character ') ))) ;) (expression_statement "pcVar18 = "asort";" (assignment_expression "pcVar18 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }" if (parenthesized_expression "(ctxt != ASORT)" ( (binary_expression "ctxt != ASORT" identifier != identifier) )) (compound_statement "{\n        pcVar18 = "asorti";\n      }" { (expression_statement "pcVar18 = "asorti";" (assignment_expression "pcVar18 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5);" (assignment_expression "pcVar13 = (char *)dcgettext(0,"%s: second argument is not an array",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s: second argument is not an array",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s: second argument is not an array",5)" identifier (argument_list "(0,"%s: second argument is not an array",5)" ( number_literal , (string_literal ""%s: second argument is not an array"" " string_content ") , number_literal ))))) ;) (expression_statement "r_fatal(pcVar13,pcVar18);" (call_expression "r_fatal(pcVar13,pcVar18)" identifier (argument_list "(pcVar13,pcVar18)" ( identifier , identifier ))) ;) })) })) (expression_statement "pSVar2 = stack_ptr + -1;" (assignment_expression "pSVar2 = stack_ptr + -1" identifier = (binary_expression "stack_ptr + -1" identifier + number_literal)) ;) (expression_statement "pNVar12 = stack_ptr->rptr;" (assignment_expression "pNVar12 = stack_ptr->rptr" identifier = (field_expression "stack_ptr->rptr" identifier -> field_identifier)) ;) (expression_statement "stack_ptr = pSVar2;" (assignment_expression "stack_ptr = pSVar2" identifier = identifier) ;) (if_statement "if ((pNVar12->type == Node_var_array) ||\n     (pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array)) {\n    pNVar16 = func_table;\n    symbol = symbol_table;\n    if (symbol_table == pNVar12) {\n      set_loc("array.c",L'̓');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    else {\n      symbol = pNVar12;\n      if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }\n    }\n  }\n  else {\n    set_loc("array.c",L'̿');\n    pcVar18 = "asort";\n    if (ctxt != ASORT) {\n      pcVar18 = "asorti";\n    }\n    pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5);\n    r_fatal(pcVar13,pcVar18);\n    symbol = pNVar12;\n  }" if (parenthesized_expression "((pNVar12->type == Node_var_array) ||\n     (pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array))" ( (binary_expression "(pNVar12->type == Node_var_array) ||\n     (pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array)" (parenthesized_expression "(pNVar12->type == Node_var_array)" ( (binary_expression "pNVar12->type == Node_var_array" (field_expression "pNVar12->type" identifier -> field_identifier) == identifier) )) || (parenthesized_expression "(pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array)" ( (comma_expression "pNVar12 = force_array(pNVar12,false), pNVar12->type == Node_var_array" (assignment_expression "pNVar12 = force_array(pNVar12,false)" identifier = (call_expression "force_array(pNVar12,false)" identifier (argument_list "(pNVar12,false)" ( identifier , false )))) , (binary_expression "pNVar12->type == Node_var_array" (field_expression "pNVar12->type" identifier -> field_identifier) == identifier)) ))) )) (compound_statement "{\n    pNVar16 = func_table;\n    symbol = symbol_table;\n    if (symbol_table == pNVar12) {\n      set_loc("array.c",L'̓');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    else {\n      symbol = pNVar12;\n      if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }\n    }\n  }" { (expression_statement "pNVar16 = func_table;" (assignment_expression "pNVar16 = func_table" identifier = identifier) ;) (expression_statement "symbol = symbol_table;" (assignment_expression "symbol = symbol_table" identifier = identifier) ;) (if_statement "if (symbol_table == pNVar12) {\n      set_loc("array.c",L'̓');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      r_fatal(pcVar13,pcVar18);\n    }\n    else {\n      symbol = pNVar12;\n      if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }\n    }" if (parenthesized_expression "(symbol_table == pNVar12)" ( (binary_expression "symbol_table == pNVar12" identifier == identifier) )) (compound_statement "{\n      set_loc("array.c",L'̓');\n      pcVar18 = "asort";\n      if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }\n      pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      r_fatal(pcVar13,pcVar18);\n    }" { (expression_statement "set_loc("array.c",L'̓');" (call_expression "set_loc("array.c",L'̓')" identifier (argument_list "("array.c",L'̓')" ( (string_literal ""array.c"" " string_content ") , (char_literal "L'̓'" L' character ') ))) ;) (expression_statement "pcVar18 = "asort";" (assignment_expression "pcVar18 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (ctxt != ASORT) {\n        pcVar18 = "asorti";\n      }" if (parenthesized_expression "(ctxt != ASORT)" ( (binary_expression "ctxt != ASORT" identifier != identifier) )) (compound_statement "{\n        pcVar18 = "asorti";\n      }" { (expression_statement "pcVar18 = "asorti";" (assignment_expression "pcVar18 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5);" (assignment_expression "pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s: first argument cannot be SYMTAB",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s: first argument cannot be SYMTAB",5)" identifier (argument_list "(0,"%s: first argument cannot be SYMTAB",5)" ( number_literal , (string_literal ""%s: first argument cannot be SYMTAB"" " string_content ") , number_literal ))))) ;) (expression_statement "r_fatal(pcVar13,pcVar18);" (call_expression "r_fatal(pcVar13,pcVar18)" identifier (argument_list "(pcVar13,pcVar18)" ( identifier , identifier ))) ;) }) (else_clause "else {\n      symbol = pNVar12;\n      if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }\n    }" else (compound_statement "{\n      symbol = pNVar12;\n      if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }\n    }" { (expression_statement "symbol = pNVar12;" (assignment_expression "symbol = pNVar12" identifier = identifier) ;) (if_statement "if (func_table == pNVar12) {\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }" if (parenthesized_expression "(func_table == pNVar12)" ( (binary_expression "func_table == pNVar12" identifier == identifier) )) (compound_statement "{\n        set_loc("array.c",L'͆');\n        pcVar18 = "asort";\n        if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }\n        pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        r_fatal(pcVar13,pcVar18);\n        symbol = pNVar16;\n      }" { (expression_statement "set_loc("array.c",L'͆');" (call_expression "set_loc("array.c",L'͆')" identifier (argument_list "("array.c",L'͆')" ( (string_literal ""array.c"" " string_content ") , (char_literal "L'͆'" L' character ') ))) ;) (expression_statement "pcVar18 = "asort";" (assignment_expression "pcVar18 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (ctxt != ASORT) {\n          pcVar18 = "asorti";\n        }" if (parenthesized_expression "(ctxt != ASORT)" ( (binary_expression "ctxt != ASORT" identifier != identifier) )) (compound_statement "{\n          pcVar18 = "asorti";\n        }" { (expression_statement "pcVar18 = "asorti";" (assignment_expression "pcVar18 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5);" (assignment_expression "pcVar13 = (char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" identifier (argument_list "(0,"%s: first argument cannot be FUNCTAB",5)" ( number_literal , (string_literal ""%s: first argument cannot be FUNCTAB"" " string_content ") , number_literal ))))) ;) (expression_statement "r_fatal(pcVar13,pcVar18);" (call_expression "r_fatal(pcVar13,pcVar18)" identifier (argument_list "(pcVar13,pcVar18)" ( identifier , identifier ))) ;) (expression_statement "symbol = pNVar16;" (assignment_expression "symbol = pNVar16" identifier = identifier) ;) })) }))) }) (else_clause "else {\n    set_loc("array.c",L'̿');\n    pcVar18 = "asort";\n    if (ctxt != ASORT) {\n      pcVar18 = "asorti";\n    }\n    pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5);\n    r_fatal(pcVar13,pcVar18);\n    symbol = pNVar12;\n  }" else (compound_statement "{\n    set_loc("array.c",L'̿');\n    pcVar18 = "asort";\n    if (ctxt != ASORT) {\n      pcVar18 = "asorti";\n    }\n    pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5);\n    r_fatal(pcVar13,pcVar18);\n    symbol = pNVar12;\n  }" { (expression_statement "set_loc("array.c",L'̿');" (call_expression "set_loc("array.c",L'̿')" identifier (argument_list "("array.c",L'̿')" ( (string_literal ""array.c"" " string_content ") , (char_literal "L'̿'" L' character ') ))) ;) (expression_statement "pcVar18 = "asort";" (assignment_expression "pcVar18 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (ctxt != ASORT) {\n      pcVar18 = "asorti";\n    }" if (parenthesized_expression "(ctxt != ASORT)" ( (binary_expression "ctxt != ASORT" identifier != identifier) )) (compound_statement "{\n      pcVar18 = "asorti";\n    }" { (expression_statement "pcVar18 = "asorti";" (assignment_expression "pcVar18 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5);" (assignment_expression "pcVar13 = (char *)dcgettext(0,"%s: first argument is not an array",5)" identifier = (cast_expression "(char *)dcgettext(0,"%s: first argument is not an array",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%s: first argument is not an array",5)" identifier (argument_list "(0,"%s: first argument is not an array",5)" ( number_literal , (string_literal ""%s: first argument is not an array"" " string_content ") , number_literal ))))) ;) (expression_statement "r_fatal(pcVar13,pcVar18);" (call_expression "r_fatal(pcVar13,pcVar18)" identifier (argument_list "(pcVar13,pcVar18)" ( identifier , identifier ))) ;) (expression_statement "symbol = pNVar12;" (assignment_expression "symbol = pNVar12" identifier = identifier) ;) }))) (if_statement "if (symbol_00.lptr != (exp_node *)0x0) {\n    pNVar12 = (NODE *)((symbol_00.lptr)->sub).val.sref;\n    if (pNVar12 != (NODE *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      } while (pNVar12 != (NODE *)0x0);\n    }\n    peVar19 = (exp_node *)(symbol->sub).val.sref;\n    if (peVar19 != (exp_node *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      } while (peVar19 != (exp_node *)0x0);\n    }\n  }" if (parenthesized_expression "(symbol_00.lptr != (exp_node *)0x0)" ( (binary_expression "symbol_00.lptr != (exp_node *)0x0" (field_expression "symbol_00.lptr" identifier . field_identifier) != (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    pNVar12 = (NODE *)((symbol_00.lptr)->sub).val.sref;\n    if (pNVar12 != (NODE *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      } while (pNVar12 != (NODE *)0x0);\n    }\n    peVar19 = (exp_node *)(symbol->sub).val.sref;\n    if (peVar19 != (exp_node *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      } while (peVar19 != (exp_node *)0x0);\n    }\n  }" { (expression_statement "pNVar12 = (NODE *)((symbol_00.lptr)->sub).val.sref;" (assignment_expression "pNVar12 = (NODE *)((symbol_00.lptr)->sub).val.sref" identifier = (cast_expression "(NODE *)((symbol_00.lptr)->sub).val.sref" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "((symbol_00.lptr)->sub).val.sref" (field_expression "((symbol_00.lptr)->sub).val" (parenthesized_expression "((symbol_00.lptr)->sub)" ( (field_expression "(symbol_00.lptr)->sub" (parenthesized_expression "(symbol_00.lptr)" ( (field_expression "symbol_00.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier))) ;) (if_statement "if (pNVar12 != (NODE *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      } while (pNVar12 != (NODE *)0x0);\n    }" if (parenthesized_expression "(pNVar12 != (NODE *)0x0)" ( (binary_expression "pNVar12 != (NODE *)0x0" identifier != (cast_expression "(NODE *)0x0" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      } while (pNVar12 != (NODE *)0x0);\n    }" { (expression_statement "pcVar18 = "asorti";" (assignment_expression "pcVar18 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) (if_statement "if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }" if (parenthesized_expression "(ctxt == ASORT)" ( (binary_expression "ctxt == ASORT" identifier == identifier) )) (compound_statement "{\n        pcVar18 = "asort";\n      }" { (expression_statement "pcVar18 = "asort";" (assignment_expression "pcVar18 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) })) (do_statement "do {\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      } while (pNVar12 != (NODE *)0x0);" do (compound_statement "{\n        if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        pNVar12 = (NODE *)(pNVar12->sub).val.sref;\n      }" { (if_statement "if (pNVar12 == symbol) {\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }" if (parenthesized_expression "(pNVar12 == symbol)" ( (binary_expression "pNVar12 == symbol" identifier == identifier) )) (compound_statement "{\n          set_loc("array.c",L'͌');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }" { (expression_statement "set_loc("array.c",L'͌');" (call_expression "set_loc("array.c",L'͌')" identifier (argument_list "("array.c",L'͌')" ( (string_literal ""array.c"" " string_content ") , (char_literal "L'͌'" L' character ') ))) ;) (expression_statement "pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5);" (assignment_expression "pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5)" identifier = (cast_expression "(char *)dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5)" identifier (argument_list "(0,\n                                      "%s: cannot use a subarray of first argument for second argument"\n                                      ,5)" ( number_literal , (string_literal ""%s: cannot use a subarray of first argument for second argument"" " string_content ") , number_literal ))))) ;) (expression_statement "r_fatal(pcVar13,pcVar18);" (call_expression "r_fatal(pcVar13,pcVar18)" identifier (argument_list "(pcVar13,pcVar18)" ( identifier , identifier ))) ;) })) (expression_statement "pNVar12 = (NODE *)(pNVar12->sub).val.sref;" (assignment_expression "pNVar12 = (NODE *)(pNVar12->sub).val.sref" identifier = (cast_expression "(NODE *)(pNVar12->sub).val.sref" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(pNVar12->sub).val.sref" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) }) while (parenthesized_expression "(pNVar12 != (NODE *)0x0)" ( (binary_expression "pNVar12 != (NODE *)0x0" identifier != (cast_expression "(NODE *)0x0" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (expression_statement "peVar19 = (exp_node *)(symbol->sub).val.sref;" (assignment_expression "peVar19 = (exp_node *)(symbol->sub).val.sref" identifier = (cast_expression "(exp_node *)(symbol->sub).val.sref" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(symbol->sub).val.sref" (field_expression "(symbol->sub).val" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (if_statement "if (peVar19 != (exp_node *)0x0) {\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      } while (peVar19 != (exp_node *)0x0);\n    }" if (parenthesized_expression "(peVar19 != (exp_node *)0x0)" ( (binary_expression "peVar19 != (exp_node *)0x0" identifier != (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar18 = "asorti";\n      if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }\n      do {\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      } while (peVar19 != (exp_node *)0x0);\n    }" { (expression_statement "pcVar18 = "asorti";" (assignment_expression "pcVar18 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) (if_statement "if (ctxt == ASORT) {\n        pcVar18 = "asort";\n      }" if (parenthesized_expression "(ctxt == ASORT)" ( (binary_expression "ctxt == ASORT" identifier == identifier) )) (compound_statement "{\n        pcVar18 = "asort";\n      }" { (expression_statement "pcVar18 = "asort";" (assignment_expression "pcVar18 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) })) (do_statement "do {\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      } while (peVar19 != (exp_node *)0x0);" do (compound_statement "{\n        if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }\n        peVar19 = (exp_node *)(peVar19->sub).val.sref;\n      }" { (if_statement "if (symbol_00.lptr == peVar19) {\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }" if (parenthesized_expression "(symbol_00.lptr == peVar19)" ( (binary_expression "symbol_00.lptr == peVar19" (field_expression "symbol_00.lptr" identifier . field_identifier) == identifier) )) (compound_statement "{\n          set_loc("array.c",L'͑');\n          pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);\n          r_fatal(pcVar13,pcVar18);\n        }" { (expression_statement "set_loc("array.c",L'͑');" (call_expression "set_loc("array.c",L'͑')" identifier (argument_list "("array.c",L'͑')" ( (string_literal ""array.c"" " string_content ") , (char_literal "L'͑'" L' character ') ))) ;) (expression_statement "pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5);" (assignment_expression "pcVar13 = (char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5)" identifier = (cast_expression "(char *)dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5)" identifier (argument_list "(0,\n                                      "%s: cannot use a subarray of second argument for first argument"\n                                      ,5)" ( number_literal , (string_literal ""%s: cannot use a subarray of second argument for first argument"" " string_content ") , number_literal ))))) ;) (expression_statement "r_fatal(pcVar13,pcVar18);" (call_expression "r_fatal(pcVar13,pcVar18)" identifier (argument_list "(pcVar13,pcVar18)" ( identifier , identifier ))) ;) })) (expression_statement "peVar19 = (exp_node *)(peVar19->sub).val.sref;" (assignment_expression "peVar19 = (exp_node *)(peVar19->sub).val.sref" identifier = (cast_expression "(exp_node *)(peVar19->sub).val.sref" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(peVar19->sub).val.sref" (field_expression "(peVar19->sub).val" (parenthesized_expression "(peVar19->sub)" ( (field_expression "peVar19->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) }) while (parenthesized_expression "(peVar19 != (exp_node *)0x0)" ( (binary_expression "peVar19 != (exp_node *)0x0" identifier != (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) })) (expression_statement "__ptr = assoc_list(symbol,pcVar21,ctxt);" (assignment_expression "__ptr = assoc_list(symbol,pcVar21,ctxt)" identifier = (call_expression "assoc_list(symbol,pcVar21,ctxt)" identifier (argument_list "(symbol,pcVar21,ctxt)" ( identifier , identifier , identifier )))) ;) (expression_statement "(pNVar11->sub).val.sp[(pNVar11->sub).val.slen] = cVar3;" (assignment_expression "(pNVar11->sub).val.sp[(pNVar11->sub).val.slen] = cVar3" (subscript_expression "(pNVar11->sub).val.sp[(pNVar11->sub).val.slen]" (field_expression "(pNVar11->sub).val.sp" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) [ (field_expression "(pNVar11->sub).val.slen" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) ]) = identifier) ;) (expression_statement "lVar14 = (pNVar11->sub).val.sref + -1;" (assignment_expression "lVar14 = (pNVar11->sub).val.sref + -1" identifier = (binary_expression "(pNVar11->sub).val.sref + -1" (field_expression "(pNVar11->sub).val.sref" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) + number_literal)) ;) (expression_statement "(pNVar11->sub).val.sref = lVar14;" (assignment_expression "(pNVar11->sub).val.sref = lVar14" (field_expression "(pNVar11->sub).val.sref" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) (if_statement "if (lVar14 == 0) {\n    r_unref(pNVar11);\n  }" if (parenthesized_expression "(lVar14 == 0)" ( (binary_expression "lVar14 == 0" identifier == number_literal) )) (compound_statement "{\n    r_unref(pNVar11);\n  }" { (expression_statement "r_unref(pNVar11);" (call_expression "r_unref(pNVar11)" identifier (argument_list "(pNVar11)" ( identifier ))) ;) })) (expression_statement "uVar6 = (symbol->sub).nodep.reflags;" (assignment_expression "uVar6 = (symbol->sub).nodep.reflags" identifier = (field_expression "(symbol->sub).nodep.reflags" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if ((uVar6 == 0) || (__ptr == (NODE **)0x0)) {\n    if ((symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol)) {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n    }\n    if (__ptr != (NODE **)0x0) {\n      free(__ptr);\n    }\n    pNVar11 = (*make_number)(0.0);\n  }\n  else {\n    if ((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)) {\n      aVar15.lptr = make_array();\n      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;\n      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;\n    }\n    else {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }\n    if (ctxt == ASORTI) {\n      if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    else {\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    free(__ptr);\n    if (symbol_00.lptr != aVar15.lptr) {\n      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);\n      pcVar21 = ((aVar15.lptr)->sub).val.sp;\n      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;\n      (symbol->sub).val.sp = pcVar21;\n      aVar7 = ((aVar15.lptr)->sub).nodep.x;\n      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;\n      (symbol->sub).nodep.x = aVar7;\n      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;\n      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;\n      (symbol->sub).nodep.reserved = sVar8;\n      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;\n      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;\n      (symbol->sub).nodep.cnt = uVar20;\n      uVar9 = (aVar15.lp)->dump;\n      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;\n      *(undefined8 *)&symbol->type = uVar9;\n      ((aVar15.lptr)->sub).nodep.l = nextfree;\n      nextfree = aVar15;\n    }\n    pNVar11 = (*make_number)((double)uVar6);\n  }" if (parenthesized_expression "((uVar6 == 0) || (__ptr == (NODE **)0x0))" ( (binary_expression "(uVar6 == 0) || (__ptr == (NODE **)0x0)" (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) || (parenthesized_expression "(__ptr == (NODE **)0x0)" ( (binary_expression "__ptr == (NODE **)0x0" identifier == (cast_expression "(NODE **)0x0" ( (type_descriptor "NODE **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) ))) )) (compound_statement "{\n    if ((symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol)) {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n    }\n    if (__ptr != (NODE **)0x0) {\n      free(__ptr);\n    }\n    pNVar11 = (*make_number)(0.0);\n  }" { (if_statement "if ((symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol)) {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n    }" if (parenthesized_expression "((symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol))" ( (binary_expression "(symbol_00.lptr != (exp_node *)0x0) && (symbol_00.lptr != symbol)" (parenthesized_expression "(symbol_00.lptr != (exp_node *)0x0)" ( (binary_expression "symbol_00.lptr != (exp_node *)0x0" (field_expression "symbol_00.lptr" identifier . field_identifier) != (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(symbol_00.lptr != symbol)" ( (binary_expression "symbol_00.lptr != symbol" (field_expression "symbol_00.lptr" identifier . field_identifier) != identifier) ))) )) (compound_statement "{\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n    }" { (expression_statement "(*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);" (call_expression "(*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0)" (parenthesized_expression "(*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)" ( (pointer_expression "*(((symbol_00.lptr)->sub).nodep.l.lp)->clear" * (field_expression "(((symbol_00.lptr)->sub).nodep.l.lp)->clear" (parenthesized_expression "(((symbol_00.lptr)->sub).nodep.l.lp)" ( (field_expression "((symbol_00.lptr)->sub).nodep.l.lp" (field_expression "((symbol_00.lptr)->sub).nodep.l" (field_expression "((symbol_00.lptr)->sub).nodep" (parenthesized_expression "((symbol_00.lptr)->sub)" ( (field_expression "(symbol_00.lptr)->sub" (parenthesized_expression "(symbol_00.lptr)" ( (field_expression "symbol_00.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) )) -> field_identifier)) )) (argument_list "(symbol_00.lptr,(exp_node *)0x0)" ( (field_expression "symbol_00.lptr" identifier . field_identifier) , (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) })) (if_statement "if (__ptr != (NODE **)0x0) {\n      free(__ptr);\n    }" if (parenthesized_expression "(__ptr != (NODE **)0x0)" ( (binary_expression "__ptr != (NODE **)0x0" identifier != (cast_expression "(NODE **)0x0" ( (type_descriptor "NODE **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      free(__ptr);\n    }" { (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) })) (expression_statement "pNVar11 = (*make_number)(0.0);" (assignment_expression "pNVar11 = (*make_number)(0.0)" identifier = (call_expression "(*make_number)(0.0)" (parenthesized_expression "(*make_number)" ( (pointer_expression "*make_number" * identifier) )) (argument_list "(0.0)" ( number_literal )))) ;) }) (else_clause "else {\n    if ((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)) {\n      aVar15.lptr = make_array();\n      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;\n      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;\n    }\n    else {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }\n    if (ctxt == ASORTI) {\n      if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    else {\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    free(__ptr);\n    if (symbol_00.lptr != aVar15.lptr) {\n      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);\n      pcVar21 = ((aVar15.lptr)->sub).val.sp;\n      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;\n      (symbol->sub).val.sp = pcVar21;\n      aVar7 = ((aVar15.lptr)->sub).nodep.x;\n      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;\n      (symbol->sub).nodep.x = aVar7;\n      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;\n      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;\n      (symbol->sub).nodep.reserved = sVar8;\n      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;\n      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;\n      (symbol->sub).nodep.cnt = uVar20;\n      uVar9 = (aVar15.lp)->dump;\n      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;\n      *(undefined8 *)&symbol->type = uVar9;\n      ((aVar15.lptr)->sub).nodep.l = nextfree;\n      nextfree = aVar15;\n    }\n    pNVar11 = (*make_number)((double)uVar6);\n  }" else (compound_statement "{\n    if ((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)) {\n      aVar15.lptr = make_array();\n      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;\n      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;\n    }\n    else {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }\n    if (ctxt == ASORTI) {\n      if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    else {\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    free(__ptr);\n    if (symbol_00.lptr != aVar15.lptr) {\n      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);\n      pcVar21 = ((aVar15.lptr)->sub).val.sp;\n      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;\n      (symbol->sub).val.sp = pcVar21;\n      aVar7 = ((aVar15.lptr)->sub).nodep.x;\n      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;\n      (symbol->sub).nodep.x = aVar7;\n      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;\n      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;\n      (symbol->sub).nodep.reserved = sVar8;\n      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;\n      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;\n      (symbol->sub).nodep.cnt = uVar20;\n      uVar9 = (aVar15.lp)->dump;\n      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;\n      *(undefined8 *)&symbol->type = uVar9;\n      ((aVar15.lptr)->sub).nodep.l = nextfree;\n      nextfree = aVar15;\n    }\n    pNVar11 = (*make_number)((double)uVar6);\n  }" { (if_statement "if ((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)) {\n      aVar15.lptr = make_array();\n      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;\n      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;\n    }\n    else {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }" if (parenthesized_expression "((symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol))" ( (binary_expression "(symbol_00.lptr == (exp_node *)0x0) || (symbol_00.lptr == symbol)" (parenthesized_expression "(symbol_00.lptr == (exp_node *)0x0)" ( (binary_expression "symbol_00.lptr == (exp_node *)0x0" (field_expression "symbol_00.lptr" identifier . field_identifier) == (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(symbol_00.lptr == symbol)" ( (binary_expression "symbol_00.lptr == symbol" (field_expression "symbol_00.lptr" identifier . field_identifier) == identifier) ))) )) (compound_statement "{\n      aVar15.lptr = make_array();\n      ((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;\n      ((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;\n    }" { (expression_statement "aVar15.lptr = make_array();" (assignment_expression "aVar15.lptr = make_array()" (field_expression "aVar15.lptr" identifier . field_identifier) = (call_expression "make_array()" identifier (argument_list "()" ( )))) ;) (expression_statement "((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name;" (assignment_expression "((aVar15.lptr)->sub).nodep.name = (symbol->sub).nodep.name" (field_expression "((aVar15.lptr)->sub).nodep.name" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "(symbol->sub).nodep.name" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x;" (assignment_expression "((aVar15.lptr)->sub).nodep.x = (symbol->sub).nodep.x" (field_expression "((aVar15.lptr)->sub).nodep.x" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "(symbol->sub).nodep.x" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) }) (else_clause "else {\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }" else (compound_statement "{\n      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);\n      aVar15 = symbol_00;\n    }" { (expression_statement "(*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0);" (call_expression "(*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(exp_node *)0x0)" (parenthesized_expression "(*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)" ( (pointer_expression "*(((symbol_00.lptr)->sub).nodep.l.lp)->clear" * (field_expression "(((symbol_00.lptr)->sub).nodep.l.lp)->clear" (parenthesized_expression "(((symbol_00.lptr)->sub).nodep.l.lp)" ( (field_expression "((symbol_00.lptr)->sub).nodep.l.lp" (field_expression "((symbol_00.lptr)->sub).nodep.l" (field_expression "((symbol_00.lptr)->sub).nodep" (parenthesized_expression "((symbol_00.lptr)->sub)" ( (field_expression "(symbol_00.lptr)->sub" (parenthesized_expression "(symbol_00.lptr)" ( (field_expression "symbol_00.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) )) -> field_identifier)) )) (argument_list "(symbol_00.lptr,(exp_node *)0x0)" ( (field_expression "symbol_00.lptr" identifier . field_identifier) , (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (expression_statement "aVar15 = symbol_00;" (assignment_expression "aVar15 = symbol_00" identifier = identifier) ;) }))) (if_statement "if (ctxt == ASORTI) {\n      if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }\n    else {\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }" if (parenthesized_expression "(ctxt == ASORTI)" ( (binary_expression "ctxt == ASORTI" identifier == identifier) )) (compound_statement "{\n      if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }" { (if_statement "if (uVar6 != 0) {\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }" if (parenthesized_expression "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar20 = 1;\n        ppNVar22 = __ptr;\n        do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);\n      }" { (expression_statement "uVar20 = 1;" (assignment_expression "uVar20 = 1" identifier = number_literal) ;) (expression_statement "ppNVar22 = __ptr;" (assignment_expression "ppNVar22 = __ptr" identifier = identifier) ;) (do_statement "do {\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        } while (uVar20 <= uVar6);" do (compound_statement "{\n          pNVar16 = (*make_number)((double)uVar20);\n          pNVar11 = *ppNVar22;\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);\n          pNVar12 = *ppeVar17;\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          uVar20 = uVar20 + 1;\n          ppNVar22 = ppNVar22 + 2;\n        }" { (expression_statement "pNVar16 = (*make_number)((double)uVar20);" (assignment_expression "pNVar16 = (*make_number)((double)uVar20)" identifier = (call_expression "(*make_number)((double)uVar20)" (parenthesized_expression "(*make_number)" ( (pointer_expression "*make_number" * identifier) )) (argument_list "((double)uVar20)" ( (cast_expression "(double)uVar20" ( (type_descriptor "double" primitive_type) ) identifier) )))) ;) (expression_statement "pNVar11 = *ppNVar22;" (assignment_expression "pNVar11 = *ppNVar22" identifier = (pointer_expression "*ppNVar22" * identifier)) ;) (expression_statement "ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16);" (assignment_expression "ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16)" identifier = (call_expression "(*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar16)" (parenthesized_expression "(*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)" ( (pointer_expression "*(((aVar15.lptr)->sub).nodep.l.lp)->lookup" * (field_expression "(((aVar15.lptr)->sub).nodep.l.lp)->lookup" (parenthesized_expression "(((aVar15.lptr)->sub).nodep.l.lp)" ( (field_expression "((aVar15.lptr)->sub).nodep.l.lp" (field_expression "((aVar15.lptr)->sub).nodep.l" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) )) -> field_identifier)) )) (argument_list "(aVar15.lptr,pNVar16)" ( (field_expression "aVar15.lptr" identifier . field_identifier) , identifier )))) ;) (expression_statement "pNVar12 = *ppeVar17;" (assignment_expression "pNVar12 = *ppeVar17" identifier = (pointer_expression "*ppeVar17" * identifier)) ;) (if_statement "if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }" if (parenthesized_expression "((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))" ( (binary_expression "(pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1)" (parenthesized_expression "(pNVar12 != (NODE *)0x0)" ( (binary_expression "pNVar12 != (NODE *)0x0" identifier != (cast_expression "(NODE *)0x0" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1)" ( (comma_expression "lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "lVar14 = (pNVar12->sub).val.sref + -1" identifier = (binary_expression "(pNVar12->sub).val.sref + -1" (field_expression "(pNVar12->sub).val.sref" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) + number_literal)) , (comma_expression "(pNVar12->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "(pNVar12->sub).val.sref = lVar14" (field_expression "(pNVar12->sub).val.sref" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) , (binary_expression "lVar14 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            r_unref(pNVar12);\n          }" { (expression_statement "r_unref(pNVar12);" (call_expression "r_unref(pNVar12)" identifier (argument_list "(pNVar12)" ( identifier ))) ;) })) (expression_statement "*ppeVar17 = pNVar11;" (assignment_expression "*ppeVar17 = pNVar11" (pointer_expression "*ppeVar17" * identifier) = identifier) ;) (expression_statement "p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;" (assignment_expression "p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store" identifier = (field_expression "(((aVar15.lptr)->sub).nodep.l.lp)->store" (parenthesized_expression "(((aVar15.lptr)->sub).nodep.l.lp)" ( (field_expression "((aVar15.lptr)->sub).nodep.l.lp" (field_expression "((aVar15.lptr)->sub).nodep.l" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) )) -> field_identifier)) ;) (if_statement "if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }" if (parenthesized_expression "(p_Var10 != (afunc_t)0x0)" ( (binary_expression "p_Var10 != (afunc_t)0x0" identifier != (cast_expression "(afunc_t)0x0" ( (type_descriptor "afunc_t" type_identifier) ) number_literal)) )) (compound_statement "{\n            (*p_Var10)(aVar15.lptr,pNVar16);\n          }" { (expression_statement "(*p_Var10)(aVar15.lptr,pNVar16);" (call_expression "(*p_Var10)(aVar15.lptr,pNVar16)" (parenthesized_expression "(*p_Var10)" ( (pointer_expression "*p_Var10" * identifier) )) (argument_list "(aVar15.lptr,pNVar16)" ( (field_expression "aVar15.lptr" identifier . field_identifier) , identifier ))) ;) })) (if_statement "if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }" if (parenthesized_expression "((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))" ( (binary_expression "(pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1)" (parenthesized_expression "(pNVar16 != (NODE *)0x0)" ( (binary_expression "pNVar16 != (NODE *)0x0" identifier != (cast_expression "(NODE *)0x0" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1)" ( (comma_expression "lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "lVar14 = (pNVar16->sub).val.sref + -1" identifier = (binary_expression "(pNVar16->sub).val.sref + -1" (field_expression "(pNVar16->sub).val.sref" (field_expression "(pNVar16->sub).val" (parenthesized_expression "(pNVar16->sub)" ( (field_expression "pNVar16->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) + number_literal)) , (comma_expression "(pNVar16->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "(pNVar16->sub).val.sref = lVar14" (field_expression "(pNVar16->sub).val.sref" (field_expression "(pNVar16->sub).val" (parenthesized_expression "(pNVar16->sub)" ( (field_expression "pNVar16->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) , (binary_expression "lVar14 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            r_unref(pNVar16);\n          }" { (expression_statement "r_unref(pNVar16);" (call_expression "r_unref(pNVar16)" identifier (argument_list "(pNVar16)" ( identifier ))) ;) })) (expression_statement "uVar20 = uVar20 + 1;" (assignment_expression "uVar20 = uVar20 + 1" identifier = (binary_expression "uVar20 + 1" identifier + number_literal)) ;) (expression_statement "ppNVar22 = ppNVar22 + 2;" (assignment_expression "ppNVar22 = ppNVar22 + 2" identifier = (binary_expression "ppNVar22 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar20 <= uVar6)" ( (binary_expression "uVar20 <= uVar6" identifier <= identifier) )) ;) })) }) (else_clause "else {\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }" else (compound_statement "{\n      uVar20 = 1;\n      local_58 = __ptr;\n      if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }\n    }" { (expression_statement "uVar20 = 1;" (assignment_expression "uVar20 = 1" identifier = number_literal) ;) (expression_statement "local_58 = __ptr;" (assignment_expression "local_58 = __ptr" identifier = identifier) ;) (if_statement "if (uVar6 != 0) {\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }" if (parenthesized_expression "(uVar6 != 0)" ( (binary_expression "uVar6 != 0" identifier != number_literal) )) (compound_statement "{\n        do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);\n      }" { (do_statement "do {\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar20 <= uVar6);" do (compound_statement "{\n          pNVar12 = (*make_number)((double)uVar20);\n          pNVar11 = *local_58;\n          if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }\n          pNVar11 = local_58[1];\n          if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }\n          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);\n          pNVar16 = *ppeVar17;\n          if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }\n          *ppeVar17 = pNVar11;\n          p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;\n          if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }\n          if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }\n          uVar20 = uVar20 + 1;\n          local_58 = local_58 + 2;\n        }" { (expression_statement "pNVar12 = (*make_number)((double)uVar20);" (assignment_expression "pNVar12 = (*make_number)((double)uVar20)" identifier = (call_expression "(*make_number)((double)uVar20)" (parenthesized_expression "(*make_number)" ( (pointer_expression "*make_number" * identifier) )) (argument_list "((double)uVar20)" ( (cast_expression "(double)uVar20" ( (type_descriptor "double" primitive_type) ) identifier) )))) ;) (expression_statement "pNVar11 = *local_58;" (assignment_expression "pNVar11 = *local_58" identifier = (pointer_expression "*local_58" * identifier)) ;) (if_statement "if ((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar11);\n          }" if (parenthesized_expression "((pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1))" ( (binary_expression "(pNVar11 != (NODE *)0x0) &&\n             (lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1)" (parenthesized_expression "(pNVar11 != (NODE *)0x0)" ( (binary_expression "pNVar11 != (NODE *)0x0" identifier != (cast_expression "(NODE *)0x0" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1)" ( (comma_expression "lVar14 = (pNVar11->sub).val.sref + -1, (pNVar11->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "lVar14 = (pNVar11->sub).val.sref + -1" identifier = (binary_expression "(pNVar11->sub).val.sref + -1" (field_expression "(pNVar11->sub).val.sref" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) + number_literal)) , (comma_expression "(pNVar11->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "(pNVar11->sub).val.sref = lVar14" (field_expression "(pNVar11->sub).val.sref" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) , (binary_expression "lVar14 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            r_unref(pNVar11);\n          }" { (expression_statement "r_unref(pNVar11);" (call_expression "r_unref(pNVar11)" identifier (argument_list "(pNVar11)" ( identifier ))) ;) })) (expression_statement "pNVar11 = local_58[1];" (assignment_expression "pNVar11 = local_58[1]" identifier = (subscript_expression "local_58[1]" identifier [ number_literal ])) ;) (if_statement "if (pNVar11->type == Node_val) {\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }\n          else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }" if (parenthesized_expression "(pNVar11->type == Node_val)" ( (binary_expression "pNVar11->type == Node_val" (field_expression "pNVar11->type" identifier -> field_identifier) == identifier) )) (compound_statement "{\n            if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }\n          }" { (if_statement "if ((pNVar11->flags & 1) == 0) {\n              pNVar11 = r_dupnode(pNVar11);\n            }\n            else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }" if (parenthesized_expression "((pNVar11->flags & 1) == 0)" ( (binary_expression "(pNVar11->flags & 1) == 0" (parenthesized_expression "(pNVar11->flags & 1)" ( (binary_expression "pNVar11->flags & 1" (field_expression "pNVar11->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n              pNVar11 = r_dupnode(pNVar11);\n            }" { (expression_statement "pNVar11 = r_dupnode(pNVar11);" (assignment_expression "pNVar11 = r_dupnode(pNVar11)" identifier = (call_expression "r_dupnode(pNVar11)" identifier (argument_list "(pNVar11)" ( identifier )))) ;) }) (else_clause "else {\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }" else (compound_statement "{\n              plVar1 = &(pNVar11->sub).val.sref;\n              *plVar1 = *plVar1 + 1;\n            }" { (expression_statement "plVar1 = &(pNVar11->sub).val.sref;" (assignment_expression "plVar1 = &(pNVar11->sub).val.sref" identifier = (pointer_expression "&(pNVar11->sub).val.sref" & (field_expression "(pNVar11->sub).val.sref" (field_expression "(pNVar11->sub).val" (parenthesized_expression "(pNVar11->sub)" ( (field_expression "pNVar11->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (expression_statement "*plVar1 = *plVar1 + 1;" (assignment_expression "*plVar1 = *plVar1 + 1" (pointer_expression "*plVar1" * identifier) = (binary_expression "*plVar1 + 1" (pointer_expression "*plVar1" * identifier) + number_literal)) ;) }))) }) (else_clause "else {\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }" else (compound_statement "{\n            pNVar16 = make_array();\n            if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }\n            pcVar21 = (pNVar12->sub).val.sp;\n            (pNVar16->sub).nodep.name = pcVar21;\n            pcVar21[(pNVar12->sub).val.slen] = '\0';\n            (pNVar12->sub).val.sp = (char *)0x0;\n            pNVar12->flags = pNVar12->flags & 0xfffffffb;\n            (pNVar16->sub).val.sref = (long)symbol;\n            pNVar11 = assoc_copy(pNVar11,pNVar16);\n          }" { (expression_statement "pNVar16 = make_array();" (assignment_expression "pNVar16 = make_array()" identifier = (call_expression "make_array()" identifier (argument_list "()" ( )))) ;) (if_statement "if (((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))\n            {\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }" if (parenthesized_expression "(((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))))" ( (binary_expression "((pNVar12->flags & 4) == 0) ||\n               ((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff')))" (parenthesized_expression "((pNVar12->flags & 4) == 0)" ( (binary_expression "(pNVar12->flags & 4) == 0" (parenthesized_expression "(pNVar12->flags & 4)" ( (binary_expression "pNVar12->flags & 4" (field_expression "pNVar12->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff')))" ( (parenthesized_expression "(wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff'))" ( (comma_expression "wVar5 = (pNVar12->sub).val.idx, CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff')" (assignment_expression "wVar5 = (pNVar12->sub).val.idx" identifier = (field_expression "(pNVar12->sub).val.idx" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier)) , (binary_expression "CONVFMTidx != wVar5 && (wVar5 != L'\xffffffff')" (binary_expression "CONVFMTidx != wVar5" identifier != identifier) && (parenthesized_expression "(wVar5 != L'\xffffffff')" ( (binary_expression "wVar5 != L'\xffffffff'" identifier != (char_literal "L'\xffffffff'" L' escape_sequence character character character character ')) )))) )) ))) )) (compound_statement "{\n              pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);\n            }" { (expression_statement "pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12);" (assignment_expression "pNVar12 = (*format_val)(CONVFMT,CONVFMTidx,pNVar12)" identifier = (call_expression "(*format_val)(CONVFMT,CONVFMTidx,pNVar12)" (parenthesized_expression "(*format_val)" ( (pointer_expression "*format_val" * identifier) )) (argument_list "(CONVFMT,CONVFMTidx,pNVar12)" ( identifier , identifier , identifier )))) ;) })) (expression_statement "pcVar21 = (pNVar12->sub).val.sp;" (assignment_expression "pcVar21 = (pNVar12->sub).val.sp" identifier = (field_expression "(pNVar12->sub).val.sp" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(pNVar16->sub).nodep.name = pcVar21;" (assignment_expression "(pNVar16->sub).nodep.name = pcVar21" (field_expression "(pNVar16->sub).nodep.name" (field_expression "(pNVar16->sub).nodep" (parenthesized_expression "(pNVar16->sub)" ( (field_expression "pNVar16->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "pcVar21[(pNVar12->sub).val.slen] = '\0';" (assignment_expression "pcVar21[(pNVar12->sub).val.slen] = '\0'" (subscript_expression "pcVar21[(pNVar12->sub).val.slen]" identifier [ (field_expression "(pNVar12->sub).val.slen" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "(pNVar12->sub).val.sp = (char *)0x0;" (assignment_expression "(pNVar12->sub).val.sp = (char *)0x0" (field_expression "(pNVar12->sub).val.sp" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pNVar12->flags = pNVar12->flags & 0xfffffffb;" (assignment_expression "pNVar12->flags = pNVar12->flags & 0xfffffffb" (field_expression "pNVar12->flags" identifier -> field_identifier) = (binary_expression "pNVar12->flags & 0xfffffffb" (field_expression "pNVar12->flags" identifier -> field_identifier) & number_literal)) ;) (expression_statement "(pNVar16->sub).val.sref = (long)symbol;" (assignment_expression "(pNVar16->sub).val.sref = (long)symbol" (field_expression "(pNVar16->sub).val.sref" (field_expression "(pNVar16->sub).val" (parenthesized_expression "(pNVar16->sub)" ( (field_expression "pNVar16->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (cast_expression "(long)symbol" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "pNVar11 = assoc_copy(pNVar11,pNVar16);" (assignment_expression "pNVar11 = assoc_copy(pNVar11,pNVar16)" identifier = (call_expression "assoc_copy(pNVar11,pNVar16)" identifier (argument_list "(pNVar11,pNVar16)" ( identifier , identifier )))) ;) }))) (expression_statement "ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12);" (assignment_expression "ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12)" identifier = (call_expression "(*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,pNVar12)" (parenthesized_expression "(*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)" ( (pointer_expression "*(((aVar15.lptr)->sub).nodep.l.lp)->lookup" * (field_expression "(((aVar15.lptr)->sub).nodep.l.lp)->lookup" (parenthesized_expression "(((aVar15.lptr)->sub).nodep.l.lp)" ( (field_expression "((aVar15.lptr)->sub).nodep.l.lp" (field_expression "((aVar15.lptr)->sub).nodep.l" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) )) -> field_identifier)) )) (argument_list "(aVar15.lptr,pNVar12)" ( (field_expression "aVar15.lptr" identifier . field_identifier) , identifier )))) ;) (expression_statement "pNVar16 = *ppeVar17;" (assignment_expression "pNVar16 = *ppeVar17" identifier = (pointer_expression "*ppeVar17" * identifier)) ;) (if_statement "if ((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar16);\n          }" if (parenthesized_expression "((pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1))" ( (binary_expression "(pNVar16 != (NODE *)0x0) &&\n             (lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1)" (parenthesized_expression "(pNVar16 != (NODE *)0x0)" ( (binary_expression "pNVar16 != (NODE *)0x0" identifier != (cast_expression "(NODE *)0x0" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1)" ( (comma_expression "lVar14 = (pNVar16->sub).val.sref + -1, (pNVar16->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "lVar14 = (pNVar16->sub).val.sref + -1" identifier = (binary_expression "(pNVar16->sub).val.sref + -1" (field_expression "(pNVar16->sub).val.sref" (field_expression "(pNVar16->sub).val" (parenthesized_expression "(pNVar16->sub)" ( (field_expression "pNVar16->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) + number_literal)) , (comma_expression "(pNVar16->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "(pNVar16->sub).val.sref = lVar14" (field_expression "(pNVar16->sub).val.sref" (field_expression "(pNVar16->sub).val" (parenthesized_expression "(pNVar16->sub)" ( (field_expression "pNVar16->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) , (binary_expression "lVar14 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            r_unref(pNVar16);\n          }" { (expression_statement "r_unref(pNVar16);" (call_expression "r_unref(pNVar16)" identifier (argument_list "(pNVar16)" ( identifier ))) ;) })) (expression_statement "*ppeVar17 = pNVar11;" (assignment_expression "*ppeVar17 = pNVar11" (pointer_expression "*ppeVar17" * identifier) = identifier) ;) (expression_statement "p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store;" (assignment_expression "p_Var10 = (((aVar15.lptr)->sub).nodep.l.lp)->store" identifier = (field_expression "(((aVar15.lptr)->sub).nodep.l.lp)->store" (parenthesized_expression "(((aVar15.lptr)->sub).nodep.l.lp)" ( (field_expression "((aVar15.lptr)->sub).nodep.l.lp" (field_expression "((aVar15.lptr)->sub).nodep.l" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) )) -> field_identifier)) ;) (if_statement "if (p_Var10 != (afunc_t)0x0) {\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }" if (parenthesized_expression "(p_Var10 != (afunc_t)0x0)" ( (binary_expression "p_Var10 != (afunc_t)0x0" identifier != (cast_expression "(afunc_t)0x0" ( (type_descriptor "afunc_t" type_identifier) ) number_literal)) )) (compound_statement "{\n            (*p_Var10)(aVar15.lptr,pNVar12);\n          }" { (expression_statement "(*p_Var10)(aVar15.lptr,pNVar12);" (call_expression "(*p_Var10)(aVar15.lptr,pNVar12)" (parenthesized_expression "(*p_Var10)" ( (pointer_expression "*p_Var10" * identifier) )) (argument_list "(aVar15.lptr,pNVar12)" ( (field_expression "aVar15.lptr" identifier . field_identifier) , identifier ))) ;) })) (if_statement "if ((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))\n          {\n            r_unref(pNVar12);\n          }" if (parenthesized_expression "((pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1))" ( (binary_expression "(pNVar12 != (NODE *)0x0) &&\n             (lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1)" (parenthesized_expression "(pNVar12 != (NODE *)0x0)" ( (binary_expression "pNVar12 != (NODE *)0x0" identifier != (cast_expression "(NODE *)0x0" ( (type_descriptor "NODE *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1)" ( (comma_expression "lVar14 = (pNVar12->sub).val.sref + -1, (pNVar12->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "lVar14 = (pNVar12->sub).val.sref + -1" identifier = (binary_expression "(pNVar12->sub).val.sref + -1" (field_expression "(pNVar12->sub).val.sref" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) + number_literal)) , (comma_expression "(pNVar12->sub).val.sref = lVar14, lVar14 < 1" (assignment_expression "(pNVar12->sub).val.sref = lVar14" (field_expression "(pNVar12->sub).val.sref" (field_expression "(pNVar12->sub).val" (parenthesized_expression "(pNVar12->sub)" ( (field_expression "pNVar12->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) , (binary_expression "lVar14 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            r_unref(pNVar12);\n          }" { (expression_statement "r_unref(pNVar12);" (call_expression "r_unref(pNVar12)" identifier (argument_list "(pNVar12)" ( identifier ))) ;) })) (expression_statement "uVar20 = uVar20 + 1;" (assignment_expression "uVar20 = uVar20 + 1" identifier = (binary_expression "uVar20 + 1" identifier + number_literal)) ;) (expression_statement "local_58 = local_58 + 2;" (assignment_expression "local_58 = local_58 + 2" identifier = (binary_expression "local_58 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar20 <= uVar6)" ( (binary_expression "uVar20 <= uVar6" identifier <= identifier) )) ;) })) }))) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (if_statement "if (symbol_00.lptr != aVar15.lptr) {\n      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);\n      pcVar21 = ((aVar15.lptr)->sub).val.sp;\n      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;\n      (symbol->sub).val.sp = pcVar21;\n      aVar7 = ((aVar15.lptr)->sub).nodep.x;\n      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;\n      (symbol->sub).nodep.x = aVar7;\n      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;\n      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;\n      (symbol->sub).nodep.reserved = sVar8;\n      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;\n      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;\n      (symbol->sub).nodep.cnt = uVar20;\n      uVar9 = (aVar15.lp)->dump;\n      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;\n      *(undefined8 *)&symbol->type = uVar9;\n      ((aVar15.lptr)->sub).nodep.l = nextfree;\n      nextfree = aVar15;\n    }" if (parenthesized_expression "(symbol_00.lptr != aVar15.lptr)" ( (binary_expression "symbol_00.lptr != aVar15.lptr" (field_expression "symbol_00.lptr" identifier . field_identifier) != (field_expression "aVar15.lptr" identifier . field_identifier)) )) (compound_statement "{\n      (*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);\n      pcVar21 = ((aVar15.lptr)->sub).val.sp;\n      (symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;\n      (symbol->sub).val.sp = pcVar21;\n      aVar7 = ((aVar15.lptr)->sub).nodep.x;\n      (symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;\n      (symbol->sub).nodep.x = aVar7;\n      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;\n      (symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;\n      (symbol->sub).nodep.reserved = sVar8;\n      uVar20 = ((aVar15.lptr)->sub).nodep.cnt;\n      (symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;\n      (symbol->sub).nodep.cnt = uVar20;\n      uVar9 = (aVar15.lp)->dump;\n      (symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;\n      *(undefined8 *)&symbol->type = uVar9;\n      ((aVar15.lptr)->sub).nodep.l = nextfree;\n      nextfree = aVar15;\n    }" { (expression_statement "(*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0);" (call_expression "(*((symbol->sub).nodep.l.lp)->clear)(symbol,(exp_node *)0x0)" (parenthesized_expression "(*((symbol->sub).nodep.l.lp)->clear)" ( (pointer_expression "*((symbol->sub).nodep.l.lp)->clear" * (field_expression "((symbol->sub).nodep.l.lp)->clear" (parenthesized_expression "((symbol->sub).nodep.l.lp)" ( (field_expression "(symbol->sub).nodep.l.lp" (field_expression "(symbol->sub).nodep.l" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) )) -> field_identifier)) )) (argument_list "(symbol,(exp_node *)0x0)" ( identifier , (cast_expression "(exp_node *)0x0" ( (type_descriptor "exp_node *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (expression_statement "pcVar21 = ((aVar15.lptr)->sub).val.sp;" (assignment_expression "pcVar21 = ((aVar15.lptr)->sub).val.sp" identifier = (field_expression "((aVar15.lptr)->sub).val.sp" (field_expression "((aVar15.lptr)->sub).val" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;" (assignment_expression "(symbol->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l" (field_expression "(symbol->sub).nodep.l" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "((aVar15.lptr)->sub).nodep.l" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(symbol->sub).val.sp = pcVar21;" (assignment_expression "(symbol->sub).val.sp = pcVar21" (field_expression "(symbol->sub).val.sp" (field_expression "(symbol->sub).val" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "aVar7 = ((aVar15.lptr)->sub).nodep.x;" (assignment_expression "aVar7 = ((aVar15.lptr)->sub).nodep.x" identifier = (field_expression "((aVar15.lptr)->sub).nodep.x" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen;" (assignment_expression "(symbol->sub).val.slen = ((aVar15.lptr)->sub).val.slen" (field_expression "(symbol->sub).val.slen" (field_expression "(symbol->sub).val" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "((aVar15.lptr)->sub).val.slen" (field_expression "((aVar15.lptr)->sub).val" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(symbol->sub).nodep.x = aVar7;" (assignment_expression "(symbol->sub).nodep.x = aVar7" (field_expression "(symbol->sub).nodep.x" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "sVar8 = ((aVar15.lptr)->sub).nodep.reserved;" (assignment_expression "sVar8 = ((aVar15.lptr)->sub).nodep.reserved" identifier = (field_expression "((aVar15.lptr)->sub).nodep.reserved" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;" (assignment_expression "(symbol->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name" (field_expression "(symbol->sub).nodep.name" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "((aVar15.lptr)->sub).nodep.name" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(symbol->sub).nodep.reserved = sVar8;" (assignment_expression "(symbol->sub).nodep.reserved = sVar8" (field_expression "(symbol->sub).nodep.reserved" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "uVar20 = ((aVar15.lptr)->sub).nodep.cnt;" (assignment_expression "uVar20 = ((aVar15.lptr)->sub).nodep.cnt" identifier = (field_expression "((aVar15.lptr)->sub).nodep.cnt" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;" (assignment_expression "(symbol->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn" (field_expression "(symbol->sub).nodep.rn" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "((aVar15.lptr)->sub).nodep.rn" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(symbol->sub).nodep.cnt = uVar20;" (assignment_expression "(symbol->sub).nodep.cnt = uVar20" (field_expression "(symbol->sub).nodep.cnt" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "uVar9 = (aVar15.lp)->dump;" (assignment_expression "uVar9 = (aVar15.lp)->dump" identifier = (field_expression "(aVar15.lp)->dump" (parenthesized_expression "(aVar15.lp)" ( (field_expression "aVar15.lp" identifier . field_identifier) )) -> field_identifier)) ;) (expression_statement "(symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;" (assignment_expression "(symbol->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags" (field_expression "(symbol->sub).nodep.reflags" (field_expression "(symbol->sub).nodep" (parenthesized_expression "(symbol->sub)" ( (field_expression "symbol->sub" identifier -> field_identifier) )) . field_identifier) . field_identifier) = (field_expression "((aVar15.lptr)->sub).nodep.reflags" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "*(undefined8 *)&symbol->type = uVar9;" (assignment_expression "*(undefined8 *)&symbol->type = uVar9" (pointer_expression "*(undefined8 *)&symbol->type" * (cast_expression "(undefined8 *)&symbol->type" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&symbol->type" & (field_expression "symbol->type" identifier -> field_identifier)))) = identifier) ;) (expression_statement "((aVar15.lptr)->sub).nodep.l = nextfree;" (assignment_expression "((aVar15.lptr)->sub).nodep.l = nextfree" (field_expression "((aVar15.lptr)->sub).nodep.l" (field_expression "((aVar15.lptr)->sub).nodep" (parenthesized_expression "((aVar15.lptr)->sub)" ( (field_expression "(aVar15.lptr)->sub" (parenthesized_expression "(aVar15.lptr)" ( (field_expression "aVar15.lptr" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "nextfree = aVar15;" (assignment_expression "nextfree = aVar15" identifier = identifier) ;) })) (expression_statement "pNVar11 = (*make_number)((double)uVar6);" (assignment_expression "pNVar11 = (*make_number)((double)uVar6)" identifier = (call_expression "(*make_number)((double)uVar6)" (parenthesized_expression "(*make_number)" ( (pointer_expression "*make_number" * identifier) )) (argument_list "((double)uVar6)" ( (cast_expression "(double)uVar6" ( (type_descriptor "double" primitive_type) ) identifier) )))) ;) }))) (return_statement "return pNVar11;" return identifier ;) })))
(translation_unit "void FUN_0010b8aa(int param_1,int param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  undefined *puVar3;\n  int iVar4;\n  long lVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long lVar9;\n  long *plVar10;\n  long *plVar11;\n  long *plVar12;\n  long lVar13;\n  long lVar14;\n  long *plVar15;\n  char *pcVar16;\n  long *plVar17;\n  ulong uVar18;\n  char *pcVar19;\n  long *local_58;\n  \n  lVar5 = DAT_0039deb8;\n  iVar4 = DAT_0039ddd4;\n  puVar3 = PTR_DAT_00396da8;\n  if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }\n  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);\nLAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);\n  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];\n  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';\n  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }\n  plVar17 = (long *)0x0;\n  if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }\n  plVar15 = DAT_00399c70 + -1;\n  plVar6 = (long *)*DAT_00399c70;\n  DAT_00399c70 = plVar15;\n  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }\n  if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }\n  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);\n  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;\n  lVar9 = *(long *)(lVar5 + 0x18) + -1;\n  *(long *)(lVar5 + 0x18) = lVar9;\n  if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }\n  uVar2 = plVar15[8];\n  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }\n  return;\n}\n\n" (function_definition "void FUN_0010b8aa(int param_1,int param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  undefined *puVar3;\n  int iVar4;\n  long lVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long lVar9;\n  long *plVar10;\n  long *plVar11;\n  long *plVar12;\n  long lVar13;\n  long lVar14;\n  long *plVar15;\n  char *pcVar16;\n  long *plVar17;\n  ulong uVar18;\n  char *pcVar19;\n  long *local_58;\n  \n  lVar5 = DAT_0039deb8;\n  iVar4 = DAT_0039ddd4;\n  puVar3 = PTR_DAT_00396da8;\n  if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }\n  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);\nLAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);\n  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];\n  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';\n  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }\n  plVar17 = (long *)0x0;\n  if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }\n  plVar15 = DAT_00399c70 + -1;\n  plVar6 = (long *)*DAT_00399c70;\n  DAT_00399c70 = plVar15;\n  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }\n  if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }\n  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);\n  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;\n  lVar9 = *(long *)(lVar5 + 0x18) + -1;\n  *(long *)(lVar5 + 0x18) = lVar9;\n  if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }\n  uVar2 = plVar15[8];\n  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0010b8aa(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  undefined *puVar3;\n  int iVar4;\n  long lVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long lVar9;\n  long *plVar10;\n  long *plVar11;\n  long *plVar12;\n  long lVar13;\n  long lVar14;\n  long *plVar15;\n  char *pcVar16;\n  long *plVar17;\n  ulong uVar18;\n  char *pcVar19;\n  long *local_58;\n  \n  lVar5 = DAT_0039deb8;\n  iVar4 = DAT_0039ddd4;\n  puVar3 = PTR_DAT_00396da8;\n  if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }\n  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);\nLAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);\n  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];\n  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';\n  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }\n  plVar17 = (long *)0x0;\n  if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }\n  plVar15 = DAT_00399c70 + -1;\n  plVar6 = (long *)*DAT_00399c70;\n  DAT_00399c70 = plVar15;\n  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }\n  if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }\n  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);\n  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;\n  lVar9 = *(long *)(lVar5 + 0x18) + -1;\n  *(long *)(lVar5 + 0x18) = lVar9;\n  if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }\n  uVar2 = plVar15[8];\n  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "undefined *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar6;" (sized_type_specifier "long" long) (pointer_declarator "*plVar6" * identifier) ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar10;" (sized_type_specifier "long" long) (pointer_declarator "*plVar10" * identifier) ;) (declaration "long *plVar11;" (sized_type_specifier "long" long) (pointer_declarator "*plVar11" * identifier) ;) (declaration "long *plVar12;" (sized_type_specifier "long" long) (pointer_declarator "*plVar12" * identifier) ;) (declaration "long lVar13;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar14;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar15;" (sized_type_specifier "long" long) (pointer_declarator "*plVar15" * identifier) ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (declaration "long *plVar17;" (sized_type_specifier "long" long) (pointer_declarator "*plVar17" * identifier) ;) (declaration "ulong uVar18;" type_identifier identifier ;) (declaration "char *pcVar19;" primitive_type (pointer_declarator "*pcVar19" * identifier) ;) (declaration "long *local_58;" (sized_type_specifier "long" long) (pointer_declarator "*local_58" * identifier) ;) (expression_statement "lVar5 = DAT_0039deb8;" (assignment_expression "lVar5 = DAT_0039deb8" identifier = identifier) ;) (expression_statement "iVar4 = DAT_0039ddd4;" (assignment_expression "iVar4 = DAT_0039ddd4" identifier = identifier) ;) (expression_statement "puVar3 = PTR_DAT_00396da8;" (assignment_expression "puVar3 = PTR_DAT_00396da8" identifier = identifier) ;) (if_statement "if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" if (parenthesized_expression "(param_1 == 3)" ( (binary_expression "param_1 == 3" identifier == number_literal) )) (compound_statement "{\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }" { (expression_statement "plVar17 = DAT_00399c70 + -1;" (assignment_expression "plVar17 = DAT_00399c70 + -1" identifier = (binary_expression "DAT_00399c70 + -1" identifier + number_literal)) ;) (expression_statement "lVar5 = *DAT_00399c70;" (assignment_expression "lVar5 = *DAT_00399c70" identifier = (pointer_expression "*DAT_00399c70" * identifier)) ;) (expression_statement "DAT_00399c70 = plVar17;" (assignment_expression "DAT_00399c70 = plVar17" identifier = identifier) ;) (if_statement "if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }" if (parenthesized_expression "(*(int *)(lVar5 + 0x48) == 5)" ( (binary_expression "*(int *)(lVar5 + 0x48) == 5" (pointer_expression "*(int *)(lVar5 + 0x48)" * (cast_expression "(int *)(lVar5 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x48)" ( (binary_expression "lVar5 + 0x48" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }" { (expression_statement "FUN_00157301("awk.h",0x72b);" (call_expression "FUN_00157301("awk.h",0x72b)" identifier (argument_list "("awk.h",0x72b)" ( (string_literal ""awk.h"" " string_content ") , number_literal ))) ;) (expression_statement "uVar7 = FUN_0010a1ed(lVar5);" (assignment_expression "uVar7 = FUN_0010a1ed(lVar5)" identifier = (call_expression "FUN_0010a1ed(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) (expression_statement "uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);" (assignment_expression "uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" identifier = (call_expression "dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" identifier (argument_list "(0,"attempt to use array `%s\' in a scalar context",5)" ( number_literal , (string_literal ""attempt to use array `%s\' in a scalar context"" " string_content escape_sequence string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar8,uVar7);" (call_expression "FUN_00157844(uVar8,uVar7)" identifier (argument_list "(uVar8,uVar7)" ( identifier , identifier ))) ;) })) (if_statement "if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }" if (parenthesized_expression "(((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20)))))" ( (binary_expression "((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))" (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 4) == 0)" ( (binary_expression "(*(byte *)(lVar5 + 0x4c) & 4) == 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 4)" ( (binary_expression "*(byte *)(lVar5 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar5 + 0x4c)" * (cast_expression "(byte *)(lVar5 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x4c)" ( (binary_expression "lVar5 + 0x4c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))" ( (parenthesized_expression "(*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20)))" ( (binary_expression "*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))" (binary_expression "*(int *)(lVar5 + 0x20) != -1" (pointer_expression "*(int *)(lVar5 + 0x20)" * (cast_expression "(int *)(lVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))) != number_literal) && (parenthesized_expression "(iVar4 != *(int *)(lVar5 + 0x20))" ( (binary_expression "iVar4 != *(int *)(lVar5 + 0x20)" identifier != (pointer_expression "*(int *)(lVar5 + 0x20)" * (cast_expression "(int *)(lVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) ))))) ))) )) ))) )) (compound_statement "{\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }" { (expression_statement "lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);" (assignment_expression "lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5)" identifier = (call_expression "(*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" ( (pointer_expression "*(code *)PTR_FUN_00396e48" * (cast_expression "(code *)PTR_FUN_00396e48" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3,iVar4,lVar5)" ( identifier , identifier , identifier )))) ;) (goto_statement "goto LAB_0010b8dc;" goto statement_identifier ;) })) (labeled_statement "LAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;" statement_identifier : (if_statement "if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;" if (parenthesized_expression "((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))" ( (binary_expression "(*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1)" (parenthesized_expression "(*(int *)(lVar5 + 0x20) == DAT_0039ddd4)" ( (binary_expression "*(int *)(lVar5 + 0x20) == DAT_0039ddd4" (pointer_expression "*(int *)(lVar5 + 0x20)" * (cast_expression "(int *)(lVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))) == identifier) )) || (parenthesized_expression "(*(int *)(lVar5 + 0x20) == -1)" ( (binary_expression "*(int *)(lVar5 + 0x20) == -1" (pointer_expression "*(int *)(lVar5 + 0x20)" * (cast_expression "(int *)(lVar5 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x20)" ( (binary_expression "lVar5 + 0x20" identifier + number_literal) )))) == number_literal) ))) )) (goto_statement "goto LAB_0010b900;" goto statement_identifier ;))) }) (else_clause "else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" else (compound_statement "{\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" { (if_statement "if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" if (parenthesized_expression "((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0)" ( (binary_expression "(*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0" (parenthesized_expression "(*(byte *)(DAT_0039deb8 + 0x4c) & 1)" ( (binary_expression "*(byte *)(DAT_0039deb8 + 0x4c) & 1" (pointer_expression "*(byte *)(DAT_0039deb8 + 0x4c)" * (cast_expression "(byte *)(DAT_0039deb8 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_0039deb8 + 0x4c)" ( (binary_expression "DAT_0039deb8 + 0x4c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }" { (expression_statement "lVar5 = FUN_00158b1f(DAT_0039deb8);" (assignment_expression "lVar5 = FUN_00158b1f(DAT_0039deb8)" identifier = (call_expression "FUN_00158b1f(DAT_0039deb8)" identifier (argument_list "(DAT_0039deb8)" ( identifier )))) ;) }) (else_clause "else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" else (compound_statement "{\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" { (expression_statement "*(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;" (assignment_expression "*(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1" (pointer_expression "*(long *)(DAT_0039deb8 + 0x18)" * (cast_expression "(long *)(DAT_0039deb8 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_0039deb8 + 0x18)" ( (binary_expression "DAT_0039deb8 + 0x18" identifier + number_literal) )))) = (binary_expression "*(long *)(DAT_0039deb8 + 0x18) + 1" (pointer_expression "*(long *)(DAT_0039deb8 + 0x18)" * (cast_expression "(long *)(DAT_0039deb8 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(DAT_0039deb8 + 0x18)" ( (binary_expression "DAT_0039deb8 + 0x18" identifier + number_literal) )))) + number_literal)) ;) }))) (labeled_statement "LAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;" statement_identifier : (if_statement "if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;" if (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 4) != 0)" ( (binary_expression "(*(byte *)(lVar5 + 0x4c) & 4) != 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 4)" ( (binary_expression "*(byte *)(lVar5 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar5 + 0x4c)" * (cast_expression "(byte *)(lVar5 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x4c)" ( (binary_expression "lVar5 + 0x4c" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_0010baa0;" goto statement_identifier ;))) }))) (expression_statement "lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);" (assignment_expression "lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" identifier = (call_expression "(*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" ( (pointer_expression "*(code *)PTR_FUN_00396e48" * (cast_expression "(code *)PTR_FUN_00396e48" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" ( identifier , identifier , identifier )))) ;) (labeled_statement "LAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);" statement_identifier : (expression_statement "pcVar19 = *(char **)(lVar5 + 8);" (assignment_expression "pcVar19 = *(char **)(lVar5 + 8)" identifier = (pointer_expression "*(char **)(lVar5 + 8)" * (cast_expression "(char **)(lVar5 + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;)) (expression_statement "cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];" (assignment_expression "cVar1 = pcVar19[*(long *)(lVar5 + 0x10)]" identifier = (subscript_expression "pcVar19[*(long *)(lVar5 + 0x10)]" identifier [ (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) ])) ;) (expression_statement "pcVar19[*(long *)(lVar5 + 0x10)] = '\0';" (assignment_expression "pcVar19[*(long *)(lVar5 + 0x10)] = '\0'" (subscript_expression "pcVar19[*(long *)(lVar5 + 0x10)]" identifier [ (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (if_statement "if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }" if (parenthesized_expression "((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2))" ( (binary_expression "(*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)" (parenthesized_expression "(*(long *)(lVar5 + 0x10) == 0)" ( (binary_expression "*(long *)(lVar5 + 0x10) == 0" (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) )))) == number_literal) )) && (parenthesized_expression "(pcVar19 = "@val_type_asc", param_2 != 2)" ( (comma_expression "pcVar19 = "@val_type_asc", param_2 != 2" (assignment_expression "pcVar19 = "@val_type_asc"" identifier = (string_literal ""@val_type_asc"" " string_content ")) , (binary_expression "param_2 != 2" identifier != number_literal)) ))) )) (compound_statement "{\n    pcVar19 = "@ind_str_asc";\n  }" { (expression_statement "pcVar19 = "@ind_str_asc";" (assignment_expression "pcVar19 = "@ind_str_asc"" identifier = (string_literal ""@ind_str_asc"" " string_content ")) ;) })) (expression_statement "plVar17 = (long *)0x0;" (assignment_expression "plVar17 = (long *)0x0" identifier = (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }" if (parenthesized_expression "(1 < param_1)" ( (binary_expression "1 < param_1" number_literal < identifier) )) (compound_statement "{\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }" { (expression_statement "plVar15 = DAT_00399c70 + -1;" (assignment_expression "plVar15 = DAT_00399c70 + -1" identifier = (binary_expression "DAT_00399c70 + -1" identifier + number_literal)) ;) (expression_statement "plVar17 = (long *)*DAT_00399c70;" (assignment_expression "plVar17 = (long *)*DAT_00399c70" identifier = (cast_expression "(long *)*DAT_00399c70" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*DAT_00399c70" * identifier))) ;) (expression_statement "DAT_00399c70 = plVar15;" (assignment_expression "DAT_00399c70 = plVar15" identifier = identifier) ;) (if_statement "if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" if (parenthesized_expression "(((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))" ( (binary_expression "((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5)" (parenthesized_expression "((int)plVar17[9] != 5)" ( (binary_expression "(int)plVar17[9] != 5" (cast_expression "(int)plVar17[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar17[9]" identifier [ number_literal ])) != number_literal) )) && (parenthesized_expression "(plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5)" ( (comma_expression "plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5" (assignment_expression "plVar17 = (long *)FUN_0010a748(plVar17,0)" identifier = (cast_expression "(long *)FUN_0010a748(plVar17,0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0010a748(plVar17,0)" identifier (argument_list "(plVar17,0)" ( identifier , number_literal ))))) , (binary_expression "(int)plVar17[9] != 5" (cast_expression "(int)plVar17[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar17[9]" identifier [ number_literal ])) != number_literal)) ))) )) (compound_statement "{\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" { (expression_statement "FUN_00157301("array.c",0x338);" (call_expression "FUN_00157301("array.c",0x338)" identifier (argument_list "("array.c",0x338)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (compound_statement "{\n        pcVar16 = "asorti";\n      }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "uVar7 = dcgettext(0,"%s: second argument is not an array",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: second argument is not an array",5)" identifier = (call_expression "dcgettext(0,"%s: second argument is not an array",5)" identifier (argument_list "(0,"%s: second argument is not an array",5)" ( number_literal , (string_literal ""%s: second argument is not an array"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) })) })) (expression_statement "plVar15 = DAT_00399c70 + -1;" (assignment_expression "plVar15 = DAT_00399c70 + -1" identifier = (binary_expression "DAT_00399c70 + -1" identifier + number_literal)) ;) (expression_statement "plVar6 = (long *)*DAT_00399c70;" (assignment_expression "plVar6 = (long *)*DAT_00399c70" identifier = (cast_expression "(long *)*DAT_00399c70" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (pointer_expression "*DAT_00399c70" * identifier))) ;) (expression_statement "DAT_00399c70 = plVar15;" (assignment_expression "DAT_00399c70 = plVar15" identifier = identifier) ;) (if_statement "if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" if (parenthesized_expression "(((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5))" ( (binary_expression "((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)" (parenthesized_expression "((int)plVar6[9] == 5)" ( (binary_expression "(int)plVar6[9] == 5" (cast_expression "(int)plVar6[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar6[9]" identifier [ number_literal ])) == number_literal) )) || (parenthesized_expression "(plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)" ( (comma_expression "plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5" (assignment_expression "plVar6 = (long *)FUN_0010a748(plVar6,0)" identifier = (cast_expression "(long *)FUN_0010a748(plVar6,0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0010a748(plVar6,0)" identifier (argument_list "(plVar6,0)" ( identifier , number_literal ))))) , (binary_expression "(int)plVar6[9] == 5" (cast_expression "(int)plVar6[9]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar6[9]" identifier [ number_literal ])) == number_literal)) ))) )) (compound_statement "{\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }" { (expression_statement "plVar10 = DAT_0039e4c8;" (assignment_expression "plVar10 = DAT_0039e4c8" identifier = identifier) ;) (expression_statement "plVar15 = DAT_0039e4c0;" (assignment_expression "plVar15 = DAT_0039e4c0" identifier = identifier) ;) (if_statement "if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" if (parenthesized_expression "(DAT_0039e4c0 == plVar6)" ( (binary_expression "DAT_0039e4c0 == plVar6" identifier == identifier) )) (compound_statement "{\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" { (expression_statement "FUN_00157301("array.c",0x343);" (call_expression "FUN_00157301("array.c",0x343)" identifier (argument_list "("array.c",0x343)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (compound_statement "{\n        pcVar16 = "asorti";\n      }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5)" identifier = (call_expression "dcgettext(0,"%s: first argument cannot be SYMTAB",5)" identifier (argument_list "(0,"%s: first argument cannot be SYMTAB",5)" ( number_literal , (string_literal ""%s: first argument cannot be SYMTAB"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) }) (else_clause "else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" else (compound_statement "{\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" { (expression_statement "plVar15 = plVar6;" (assignment_expression "plVar15 = plVar6" identifier = identifier) ;) (if_statement "if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }" if (parenthesized_expression "(DAT_0039e4c8 == plVar6)" ( (binary_expression "DAT_0039e4c8 == plVar6" identifier == identifier) )) (compound_statement "{\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }" { (expression_statement "FUN_00157301("array.c",0x346);" (call_expression "FUN_00157301("array.c",0x346)" identifier (argument_list "("array.c",0x346)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (compound_statement "{\n          pcVar16 = "asorti";\n        }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" identifier = (call_expression "dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" identifier (argument_list "(0,"%s: first argument cannot be FUNCTAB",5)" ( number_literal , (string_literal ""%s: first argument cannot be FUNCTAB"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) (expression_statement "plVar15 = plVar10;" (assignment_expression "plVar15 = plVar10" identifier = identifier) ;) })) }))) }) (else_clause "else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" else (compound_statement "{\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" { (expression_statement "FUN_00157301("array.c",0x33f);" (call_expression "FUN_00157301("array.c",0x33f)" identifier (argument_list "("array.c",0x33f)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) (if_statement "if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }" if (parenthesized_expression "(param_2 != 2)" ( (binary_expression "param_2 != 2" identifier != number_literal) )) (compound_statement "{\n      pcVar16 = "asorti";\n    }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) })) (expression_statement "uVar7 = dcgettext(0,"%s: first argument is not an array",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument is not an array",5)" identifier = (call_expression "dcgettext(0,"%s: first argument is not an array",5)" identifier (argument_list "(0,"%s: first argument is not an array",5)" ( number_literal , (string_literal ""%s: first argument is not an array"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) (expression_statement "plVar15 = plVar6;" (assignment_expression "plVar15 = plVar6" identifier = identifier) ;) }))) (if_statement "if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }" if (parenthesized_expression "(plVar17 != (long *)0x0)" ( (binary_expression "plVar17 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }" { (expression_statement "plVar6 = (long *)plVar17[3];" (assignment_expression "plVar6 = (long *)plVar17[3]" identifier = (cast_expression "(long *)plVar17[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar17[3]" identifier [ number_literal ]))) ;) (if_statement "if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" if (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) (if_statement "if (param_2 == 2) {\n        pcVar16 = "asort";\n      }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n        pcVar16 = "asort";\n      }" { (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) })) (do_statement "do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);" do (compound_statement "{\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      }" { (if_statement "if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" if (parenthesized_expression "(plVar6 == plVar15)" ( (binary_expression "plVar6 == plVar15" identifier == identifier) )) (compound_statement "{\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" { (expression_statement "FUN_00157301("array.c",0x34c);" (call_expression "FUN_00157301("array.c",0x34c)" identifier (argument_list "("array.c",0x34c)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5)" identifier = (call_expression "dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5)" identifier (argument_list "(0,"%s: cannot use a subarray of first argument for second argument",5)" ( number_literal , (string_literal ""%s: cannot use a subarray of first argument for second argument"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) })) (expression_statement "plVar6 = (long *)plVar6[3];" (assignment_expression "plVar6 = (long *)plVar6[3]" identifier = (cast_expression "(long *)plVar6[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar6[3]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) (expression_statement "plVar6 = (long *)plVar15[3];" (assignment_expression "plVar6 = (long *)plVar15[3]" identifier = (cast_expression "(long *)plVar15[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar15[3]" identifier [ number_literal ]))) ;) (if_statement "if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" if (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" { (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" identifier = (string_literal ""asorti"" " string_content ")) ;) (if_statement "if (param_2 == 2) {\n        pcVar16 = "asort";\n      }" if (parenthesized_expression "(param_2 == 2)" ( (binary_expression "param_2 == 2" identifier == number_literal) )) (compound_statement "{\n        pcVar16 = "asort";\n      }" { (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" identifier = (string_literal ""asort"" " string_content ")) ;) })) (do_statement "do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);" do (compound_statement "{\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      }" { (if_statement "if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" if (parenthesized_expression "(plVar17 == plVar6)" ( (binary_expression "plVar17 == plVar6" identifier == identifier) )) (compound_statement "{\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" { (expression_statement "FUN_00157301("array.c",0x351);" (call_expression "FUN_00157301("array.c",0x351)" identifier (argument_list "("array.c",0x351)" ( (string_literal ""array.c"" " string_content ") , number_literal ))) ;) (expression_statement "uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5)" identifier = (call_expression "dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5)" identifier (argument_list "(0,"%s: cannot use a subarray of second argument for first argument",5)" ( number_literal , (string_literal ""%s: cannot use a subarray of second argument for first argument"" " string_content ") , number_literal )))) ;) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" identifier (argument_list "(uVar7,pcVar16)" ( identifier , identifier ))) ;) })) (expression_statement "plVar6 = (long *)plVar6[3];" (assignment_expression "plVar6 = (long *)plVar6[3]" identifier = (cast_expression "(long *)plVar6[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar6[3]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) })) })) (expression_statement "plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);" (assignment_expression "plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2)" identifier = (cast_expression "(long *)FUN_0010b51e(plVar15,pcVar19,param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0010b51e(plVar15,pcVar19,param_2)" identifier (argument_list "(plVar15,pcVar19,param_2)" ( identifier , identifier , identifier ))))) ;) (expression_statement "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;" (assignment_expression "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1" (pointer_expression "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" * (cast_expression "(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" ( (binary_expression "*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)" (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) )))) + (pointer_expression "*(long *)(lVar5 + 0x10)" * (cast_expression "(long *)(lVar5 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) ))))) )))) = identifier) ;) (expression_statement "lVar9 = *(long *)(lVar5 + 0x18) + -1;" (assignment_expression "lVar9 = *(long *)(lVar5 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar5 + 0x18) + -1" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) + number_literal)) ;) (expression_statement "*(long *)(lVar5 + 0x18) = lVar9;" (assignment_expression "*(long *)(lVar5 + 0x18) = lVar9" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }" if (parenthesized_expression "(lVar9 == 0)" ( (binary_expression "lVar9 == 0" identifier == number_literal) )) (compound_statement "{\n    FUN_001582a6(lVar5);\n  }" { (expression_statement "FUN_001582a6(lVar5);" (call_expression "FUN_001582a6(lVar5)" identifier (argument_list "(lVar5)" ( identifier ))) ;) })) (expression_statement "uVar2 = plVar15[8];" (assignment_expression "uVar2 = plVar15[8]" identifier = (subscript_expression "plVar15[8]" identifier [ number_literal ])) ;) (if_statement "if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" if (parenthesized_expression "((uVar2 == 0) || (plVar6 == (long *)0x0))" ( (binary_expression "(uVar2 == 0) || (plVar6 == (long *)0x0)" (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) || (parenthesized_expression "(plVar6 == (long *)0x0)" ( (binary_expression "plVar6 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }" { (if_statement "if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }" if (parenthesized_expression "((plVar17 != (long *)0x0) && (plVar17 != plVar15))" ( (binary_expression "(plVar17 != (long *)0x0) && (plVar17 != plVar15)" (parenthesized_expression "(plVar17 != (long *)0x0)" ( (binary_expression "plVar17 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(plVar17 != plVar15)" ( (binary_expression "plVar17 != plVar15" identifier != identifier) ))) )) (compound_statement "{\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }" { (expression_statement "(**(code **)(*plVar17 + 0x28))(plVar17,0);" (call_expression "(**(code **)(*plVar17 + 0x28))(plVar17,0)" (parenthesized_expression "(**(code **)(*plVar17 + 0x28))" ( (pointer_expression "**(code **)(*plVar17 + 0x28)" * (pointer_expression "*(code **)(*plVar17 + 0x28)" * (cast_expression "(code **)(*plVar17 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar17 + 0x28)" ( (binary_expression "*plVar17 + 0x28" (pointer_expression "*plVar17" * identifier) + number_literal) ))))) )) (argument_list "(plVar17,0)" ( identifier , number_literal ))) ;) })) (if_statement "if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }" if (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      free(plVar6);\n    }" { (expression_statement "free(plVar6);" (call_expression "free(plVar6)" identifier (argument_list "(plVar6)" ( identifier ))) ;) })) (expression_statement "(*(code *)PTR_FUN_00396e58)(0);" (call_expression "(*(code *)PTR_FUN_00396e58)(0)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" ( (pointer_expression "*(code *)PTR_FUN_00396e58" * (cast_expression "(code *)PTR_FUN_00396e58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(0)" ( number_literal ))) ;) }) (else_clause "else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" else (compound_statement "{\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" { (if_statement "if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" if (parenthesized_expression "((plVar17 == (long *)0x0) || (plVar17 == plVar15))" ( (binary_expression "(plVar17 == (long *)0x0) || (plVar17 == plVar15)" (parenthesized_expression "(plVar17 == (long *)0x0)" ( (binary_expression "plVar17 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) || (parenthesized_expression "(plVar17 == plVar15)" ( (binary_expression "plVar17 == plVar15" identifier == identifier) ))) )) (compound_statement "{\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }" { (expression_statement "plVar10 = (long *)FUN_00109c9d();" (assignment_expression "plVar10 = (long *)FUN_00109c9d()" identifier = (cast_expression "(long *)FUN_00109c9d()" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00109c9d()" identifier (argument_list "()" ( ))))) ;) (expression_statement "plVar10[4] = plVar15[4];" (assignment_expression "plVar10[4] = plVar15[4]" (subscript_expression "plVar10[4]" identifier [ number_literal ]) = (subscript_expression "plVar15[4]" identifier [ number_literal ])) ;) (expression_statement "plVar10[3] = plVar15[3];" (assignment_expression "plVar10[3] = plVar15[3]" (subscript_expression "plVar10[3]" identifier [ number_literal ]) = (subscript_expression "plVar15[3]" identifier [ number_literal ])) ;) }) (else_clause "else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" else (compound_statement "{\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" { (expression_statement "(**(code **)(*plVar17 + 0x28))(plVar17,0);" (call_expression "(**(code **)(*plVar17 + 0x28))(plVar17,0)" (parenthesized_expression "(**(code **)(*plVar17 + 0x28))" ( (pointer_expression "**(code **)(*plVar17 + 0x28)" * (pointer_expression "*(code **)(*plVar17 + 0x28)" * (cast_expression "(code **)(*plVar17 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar17 + 0x28)" ( (binary_expression "*plVar17 + 0x28" (pointer_expression "*plVar17" * identifier) + number_literal) ))))) )) (argument_list "(plVar17,0)" ( identifier , number_literal ))) ;) (expression_statement "plVar10 = plVar17;" (assignment_expression "plVar10 = plVar17" identifier = identifier) ;) }))) (if_statement "if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" if (parenthesized_expression "(param_2 == 3)" ( (binary_expression "param_2 == 3" identifier == number_literal) )) (compound_statement "{\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" { (if_statement "if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }" { (expression_statement "uVar18 = 1;" (assignment_expression "uVar18 = 1" identifier = number_literal) ;) (expression_statement "plVar12 = plVar6;" (assignment_expression "plVar12 = plVar6" identifier = identifier) ;) (do_statement "do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);" do (compound_statement "{\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        }" { (expression_statement "lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);" (assignment_expression "lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18)" identifier = (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar18)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" ( (pointer_expression "*(code *)PTR_FUN_00396e58" * (cast_expression "(code *)PTR_FUN_00396e58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "((double)uVar18)" ( (cast_expression "(double)uVar18" ( (type_descriptor "double" primitive_type) ) identifier) )))) ;) (expression_statement "lVar5 = *plVar12;" (assignment_expression "lVar5 = *plVar12" identifier = (pointer_expression "*plVar12" * identifier)) ;) (expression_statement "plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);" (assignment_expression "plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" identifier = (cast_expression "(long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" (parenthesized_expression "(**(code **)(*plVar10 + 0x18))" ( (pointer_expression "**(code **)(*plVar10 + 0x18)" * (pointer_expression "*(code **)(*plVar10 + 0x18)" * (cast_expression "(code **)(*plVar10 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x18)" ( (binary_expression "*plVar10 + 0x18" (pointer_expression "*plVar10" * identifier) + number_literal) ))))) )) (argument_list "(plVar10,lVar14)" ( identifier , identifier ))))) ;) (expression_statement "lVar9 = *plVar11;" (assignment_expression "lVar9 = *plVar11" identifier = (pointer_expression "*plVar11" * identifier)) ;) (if_statement "if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }" if (parenthesized_expression "((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))" ( (binary_expression "(lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1)" (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1)" ( (comma_expression "lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "lVar13 = *(long *)(lVar9 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar9 + 0x18) + -1" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "*(long *)(lVar9 + 0x18) = lVar13" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar13 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6();\n          }" { (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*plVar11 = lVar5;" (assignment_expression "*plVar11 = lVar5" (pointer_expression "*plVar11" * identifier) = identifier) ;) (if_statement "if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }" if (parenthesized_expression "(*(code **)(*plVar10 + 0x50) != (code *)0x0)" ( (binary_expression "*(code **)(*plVar10 + 0x50) != (code *)0x0" (pointer_expression "*(code **)(*plVar10 + 0x50)" * (cast_expression "(code **)(*plVar10 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x50)" ( (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" * identifier) + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }" { (expression_statement "(**(code **)(*plVar10 + 0x50))(plVar10,lVar14);" (call_expression "(**(code **)(*plVar10 + 0x50))(plVar10,lVar14)" (parenthesized_expression "(**(code **)(*plVar10 + 0x50))" ( (pointer_expression "**(code **)(*plVar10 + 0x50)" * (pointer_expression "*(code **)(*plVar10 + 0x50)" * (cast_expression "(code **)(*plVar10 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x50)" ( (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" * identifier) + number_literal) ))))) )) (argument_list "(plVar10,lVar14)" ( identifier , identifier ))) ;) })) (if_statement "if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }" if (parenthesized_expression "((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1))" ( (binary_expression "(lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)" (parenthesized_expression "(lVar14 != 0)" ( (binary_expression "lVar14 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)" ( (comma_expression "lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "lVar5 = *(long *)(lVar14 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar14 + 0x18) + -1" (pointer_expression "*(long *)(lVar14 + 0x18)" * (cast_expression "(long *)(lVar14 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "*(long *)(lVar14 + 0x18) = lVar5" (pointer_expression "*(long *)(lVar14 + 0x18)" * (cast_expression "(long *)(lVar14 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar5 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6(lVar14);\n          }" { (expression_statement "FUN_001582a6(lVar14);" (call_expression "FUN_001582a6(lVar14)" identifier (argument_list "(lVar14)" ( identifier ))) ;) })) (expression_statement "uVar18 = uVar18 + 1;" (assignment_expression "uVar18 = uVar18 + 1" identifier = (binary_expression "uVar18 + 1" identifier + number_literal)) ;) (expression_statement "plVar12 = plVar12 + 2;" (assignment_expression "plVar12 = plVar12 + 2" identifier = (binary_expression "plVar12 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar18 <= uVar2)" ( (binary_expression "uVar18 <= uVar2" identifier <= identifier) )) ;) })) }) (else_clause "else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" else (compound_statement "{\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" { (expression_statement "uVar18 = 1;" (assignment_expression "uVar18 = 1" identifier = number_literal) ;) (expression_statement "local_58 = plVar6;" (assignment_expression "local_58 = plVar6" identifier = identifier) ;) (if_statement "if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }" { (do_statement "do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);" do (compound_statement "{\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        }" { (expression_statement "lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);" (assignment_expression "lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18)" identifier = (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar18)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" ( (pointer_expression "*(code *)PTR_FUN_00396e58" * (cast_expression "(code *)PTR_FUN_00396e58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "((double)uVar18)" ( (cast_expression "(double)uVar18" ( (type_descriptor "double" primitive_type) ) identifier) )))) ;) (expression_statement "lVar5 = *local_58;" (assignment_expression "lVar5 = *local_58" identifier = (pointer_expression "*local_58" * identifier)) ;) (if_statement "if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }" if (parenthesized_expression "((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))" ( (binary_expression "(lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1)" (parenthesized_expression "(lVar5 != 0)" ( (binary_expression "lVar5 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1)" ( (comma_expression "lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1" (assignment_expression "lVar14 = *(long *)(lVar5 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar5 + 0x18) + -1" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1" (assignment_expression "*(long *)(lVar5 + 0x18) = lVar14" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar14 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6();\n          }" { (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "lVar5 = local_58[1];" (assignment_expression "lVar5 = local_58[1]" identifier = (subscript_expression "local_58[1]" identifier [ number_literal ])) ;) (if_statement "if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" if (parenthesized_expression "(*(int *)(lVar5 + 0x48) == 1)" ( (binary_expression "*(int *)(lVar5 + 0x48) == 1" (pointer_expression "*(int *)(lVar5 + 0x48)" * (cast_expression "(int *)(lVar5 + 0x48)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x48)" ( (binary_expression "lVar5 + 0x48" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }" { (if_statement "if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" if (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 1) == 0)" ( (binary_expression "(*(byte *)(lVar5 + 0x4c) & 1) == 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 1)" ( (binary_expression "*(byte *)(lVar5 + 0x4c) & 1" (pointer_expression "*(byte *)(lVar5 + 0x4c)" * (cast_expression "(byte *)(lVar5 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x4c)" ( (binary_expression "lVar5 + 0x4c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n              lVar5 = FUN_00158b1f(lVar5);\n            }" { (expression_statement "lVar5 = FUN_00158b1f(lVar5);" (assignment_expression "lVar5 = FUN_00158b1f(lVar5)" identifier = (call_expression "FUN_00158b1f(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) }) (else_clause "else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" else (compound_statement "{\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" { (expression_statement "*(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;" (assignment_expression "*(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) = (binary_expression "*(long *)(lVar5 + 0x18) + 1" (pointer_expression "*(long *)(lVar5 + 0x18)" * (cast_expression "(long *)(lVar5 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 0x18)" ( (binary_expression "lVar5 + 0x18" identifier + number_literal) )))) + number_literal)) ;) }))) }) (else_clause "else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" else (compound_statement "{\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" { (expression_statement "lVar14 = FUN_00109c9d();" (assignment_expression "lVar14 = FUN_00109c9d()" identifier = (call_expression "FUN_00109c9d()" identifier (argument_list "()" ( )))) ;) (if_statement "if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }" if (parenthesized_expression "(((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1))))" ( (binary_expression "((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))" (parenthesized_expression "((*(byte *)(lVar9 + 0x4c) & 4) == 0)" ( (binary_expression "(*(byte *)(lVar9 + 0x4c) & 4) == 0" (parenthesized_expression "(*(byte *)(lVar9 + 0x4c) & 4)" ( (binary_expression "*(byte *)(lVar9 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar9 + 0x4c)" * (cast_expression "(byte *)(lVar9 + 0x4c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x4c)" ( (binary_expression "lVar9 + 0x4c" identifier + number_literal) )))) & number_literal) )) == number_literal) )) || (parenthesized_expression "((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))" ( (parenthesized_expression "(DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1))" ( (binary_expression "DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)" (binary_expression "DAT_0039ddd4 != *(int *)(lVar9 + 0x20)" identifier != (pointer_expression "*(int *)(lVar9 + 0x20)" * (cast_expression "(int *)(lVar9 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x20)" ( (binary_expression "lVar9 + 0x20" identifier + number_literal) ))))) && (parenthesized_expression "(*(int *)(lVar9 + 0x20) != -1)" ( (binary_expression "*(int *)(lVar9 + 0x20) != -1" (pointer_expression "*(int *)(lVar9 + 0x20)" * (cast_expression "(int *)(lVar9 + 0x20)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x20)" ( (binary_expression "lVar9 + 0x20" identifier + number_literal) )))) != number_literal) ))) )) ))) )) (compound_statement "{\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }" { (expression_statement "lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);" (assignment_expression "lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" identifier = (call_expression "(*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" ( (pointer_expression "*(code *)PTR_FUN_00396e48" * (cast_expression "(code *)PTR_FUN_00396e48" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" ( identifier , identifier , identifier )))) ;) })) (expression_statement "lVar13 = *(long *)(lVar9 + 8);" (assignment_expression "lVar13 = *(long *)(lVar9 + 8)" identifier = (pointer_expression "*(long *)(lVar9 + 8)" * (cast_expression "(long *)(lVar9 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 8)" ( (binary_expression "lVar9 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(long *)(lVar14 + 0x20) = lVar13;" (assignment_expression "*(long *)(lVar14 + 0x20) = lVar13" (pointer_expression "*(long *)(lVar14 + 0x20)" * (cast_expression "(long *)(lVar14 + 0x20)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x20)" ( (binary_expression "lVar14 + 0x20" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;" (assignment_expression "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0" (pointer_expression "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10))" * (cast_expression "(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar13 + *(long *)(lVar9 + 0x10))" ( (binary_expression "lVar13 + *(long *)(lVar9 + 0x10)" identifier + (pointer_expression "*(long *)(lVar9 + 0x10)" * (cast_expression "(long *)(lVar9 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x10)" ( (binary_expression "lVar9 + 0x10" identifier + number_literal) ))))) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(lVar9 + 8) = 0;" (assignment_expression "*(undefined8 *)(lVar9 + 8) = 0" (pointer_expression "*(undefined8 *)(lVar9 + 8)" * (cast_expression "(undefined8 *)(lVar9 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 8)" ( (binary_expression "lVar9 + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;" (assignment_expression "*(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb" (pointer_expression "*(uint *)(lVar9 + 0x4c)" * (cast_expression "(uint *)(lVar9 + 0x4c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x4c)" ( (binary_expression "lVar9 + 0x4c" identifier + number_literal) )))) = (binary_expression "*(uint *)(lVar9 + 0x4c) & 0xfffffffb" (pointer_expression "*(uint *)(lVar9 + 0x4c)" * (cast_expression "(uint *)(lVar9 + 0x4c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x4c)" ( (binary_expression "lVar9 + 0x4c" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "*(long **)(lVar14 + 0x18) = plVar15;" (assignment_expression "*(long **)(lVar14 + 0x18) = plVar15" (pointer_expression "*(long **)(lVar14 + 0x18)" * (cast_expression "(long **)(lVar14 + 0x18)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) = identifier) ;) (expression_statement "lVar5 = FUN_00109e11(lVar5,lVar14);" (assignment_expression "lVar5 = FUN_00109e11(lVar5,lVar14)" identifier = (call_expression "FUN_00109e11(lVar5,lVar14)" identifier (argument_list "(lVar5,lVar14)" ( identifier , identifier )))) ;) }))) (expression_statement "plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);" (assignment_expression "plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" identifier = (cast_expression "(long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" (parenthesized_expression "(**(code **)(*plVar10 + 0x18))" ( (pointer_expression "**(code **)(*plVar10 + 0x18)" * (pointer_expression "*(code **)(*plVar10 + 0x18)" * (cast_expression "(code **)(*plVar10 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x18)" ( (binary_expression "*plVar10 + 0x18" (pointer_expression "*plVar10" * identifier) + number_literal) ))))) )) (argument_list "(plVar10,lVar9)" ( identifier , identifier ))))) ;) (expression_statement "lVar14 = *plVar12;" (assignment_expression "lVar14 = *plVar12" identifier = (pointer_expression "*plVar12" * identifier)) ;) (if_statement "if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }" if (parenthesized_expression "((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             )" ( (binary_expression "(lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)" (parenthesized_expression "(lVar14 != 0)" ( (binary_expression "lVar14 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)" ( (comma_expression "lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "lVar13 = *(long *)(lVar14 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar14 + 0x18) + -1" (pointer_expression "*(long *)(lVar14 + 0x18)" * (cast_expression "(long *)(lVar14 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "*(long *)(lVar14 + 0x18) = lVar13" (pointer_expression "*(long *)(lVar14 + 0x18)" * (cast_expression "(long *)(lVar14 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar14 + 0x18)" ( (binary_expression "lVar14 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar13 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6();\n          }" { (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "*plVar12 = lVar5;" (assignment_expression "*plVar12 = lVar5" (pointer_expression "*plVar12" * identifier) = identifier) ;) (if_statement "if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }" if (parenthesized_expression "(*(code **)(*plVar10 + 0x50) != (code *)0x0)" ( (binary_expression "*(code **)(*plVar10 + 0x50) != (code *)0x0" (pointer_expression "*(code **)(*plVar10 + 0x50)" * (cast_expression "(code **)(*plVar10 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x50)" ( (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" * identifier) + number_literal) )))) != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }" { (expression_statement "(**(code **)(*plVar10 + 0x50))(plVar10,lVar9);" (call_expression "(**(code **)(*plVar10 + 0x50))(plVar10,lVar9)" (parenthesized_expression "(**(code **)(*plVar10 + 0x50))" ( (pointer_expression "**(code **)(*plVar10 + 0x50)" * (pointer_expression "*(code **)(*plVar10 + 0x50)" * (cast_expression "(code **)(*plVar10 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar10 + 0x50)" ( (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" * identifier) + number_literal) ))))) )) (argument_list "(plVar10,lVar9)" ( identifier , identifier ))) ;) })) (if_statement "if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }" if (parenthesized_expression "((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1))" ( (binary_expression "(lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)" (parenthesized_expression "(lVar9 != 0)" ( (binary_expression "lVar9 != 0" identifier != number_literal) )) && (parenthesized_expression "(lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)" ( (comma_expression "lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "lVar5 = *(long *)(lVar9 + 0x18) + -1" identifier = (binary_expression "*(long *)(lVar9 + 0x18) + -1" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) + number_literal)) , (comma_expression "*(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "*(long *)(lVar9 + 0x18) = lVar5" (pointer_expression "*(long *)(lVar9 + 0x18)" * (cast_expression "(long *)(lVar9 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar9 + 0x18)" ( (binary_expression "lVar9 + 0x18" identifier + number_literal) )))) = identifier) , (binary_expression "lVar5 < 1" identifier < number_literal))) ))) )) (compound_statement "{\n            FUN_001582a6(lVar9);\n          }" { (expression_statement "FUN_001582a6(lVar9);" (call_expression "FUN_001582a6(lVar9)" identifier (argument_list "(lVar9)" ( identifier ))) ;) })) (expression_statement "uVar18 = uVar18 + 1;" (assignment_expression "uVar18 = uVar18 + 1" identifier = (binary_expression "uVar18 + 1" identifier + number_literal)) ;) (expression_statement "local_58 = local_58 + 2;" (assignment_expression "local_58 = local_58 + 2" identifier = (binary_expression "local_58 + 2" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar18 <= uVar2)" ( (binary_expression "uVar18 <= uVar2" identifier <= identifier) )) ;) })) }))) (expression_statement "free(plVar6);" (call_expression "free(plVar6)" identifier (argument_list "(plVar6)" ( identifier ))) ;) (if_statement "if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }" if (parenthesized_expression "(plVar17 != plVar10)" ( (binary_expression "plVar17 != plVar10" identifier != identifier) )) (compound_statement "{\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }" { (expression_statement "(**(code **)(*plVar15 + 0x28))(plVar15,0);" (call_expression "(**(code **)(*plVar15 + 0x28))(plVar15,0)" (parenthesized_expression "(**(code **)(*plVar15 + 0x28))" ( (pointer_expression "**(code **)(*plVar15 + 0x28)" * (pointer_expression "*(code **)(*plVar15 + 0x28)" * (cast_expression "(code **)(*plVar15 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar15 + 0x28)" ( (binary_expression "*plVar15 + 0x28" (pointer_expression "*plVar15" * identifier) + number_literal) ))))) )) (argument_list "(plVar15,0)" ( identifier , number_literal ))) ;) (expression_statement "lVar5 = plVar10[1];" (assignment_expression "lVar5 = plVar10[1]" identifier = (subscript_expression "plVar10[1]" identifier [ number_literal ])) ;) (expression_statement "*plVar15 = *plVar10;" (assignment_expression "*plVar15 = *plVar10" (pointer_expression "*plVar15" * identifier) = (pointer_expression "*plVar10" * identifier)) ;) (expression_statement "plVar15[1] = lVar5;" (assignment_expression "plVar15[1] = lVar5" (subscript_expression "plVar15[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = plVar10[3];" (assignment_expression "lVar5 = plVar10[3]" identifier = (subscript_expression "plVar10[3]" identifier [ number_literal ])) ;) (expression_statement "plVar15[2] = plVar10[2];" (assignment_expression "plVar15[2] = plVar10[2]" (subscript_expression "plVar15[2]" identifier [ number_literal ]) = (subscript_expression "plVar10[2]" identifier [ number_literal ])) ;) (expression_statement "plVar15[3] = lVar5;" (assignment_expression "plVar15[3] = lVar5" (subscript_expression "plVar15[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = plVar10[5];" (assignment_expression "lVar5 = plVar10[5]" identifier = (subscript_expression "plVar10[5]" identifier [ number_literal ])) ;) (expression_statement "plVar15[4] = plVar10[4];" (assignment_expression "plVar15[4] = plVar10[4]" (subscript_expression "plVar15[4]" identifier [ number_literal ]) = (subscript_expression "plVar10[4]" identifier [ number_literal ])) ;) (expression_statement "plVar15[5] = lVar5;" (assignment_expression "plVar15[5] = lVar5" (subscript_expression "plVar15[5]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = plVar10[7];" (assignment_expression "lVar5 = plVar10[7]" identifier = (subscript_expression "plVar10[7]" identifier [ number_literal ])) ;) (expression_statement "plVar15[6] = plVar10[6];" (assignment_expression "plVar15[6] = plVar10[6]" (subscript_expression "plVar15[6]" identifier [ number_literal ]) = (subscript_expression "plVar10[6]" identifier [ number_literal ])) ;) (expression_statement "plVar15[7] = lVar5;" (assignment_expression "plVar15[7] = lVar5" (subscript_expression "plVar15[7]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = plVar10[9];" (assignment_expression "lVar5 = plVar10[9]" identifier = (subscript_expression "plVar10[9]" identifier [ number_literal ])) ;) (expression_statement "plVar15[8] = plVar10[8];" (assignment_expression "plVar15[8] = plVar10[8]" (subscript_expression "plVar15[8]" identifier [ number_literal ]) = (subscript_expression "plVar10[8]" identifier [ number_literal ])) ;) (expression_statement "plVar15[9] = lVar5;" (assignment_expression "plVar15[9] = lVar5" (subscript_expression "plVar15[9]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*plVar10 = (long)DAT_00396dc0;" (assignment_expression "*plVar10 = (long)DAT_00396dc0" (pointer_expression "*plVar10" * identifier) = (cast_expression "(long)DAT_00396dc0" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "DAT_00396dc0 = plVar10;" (assignment_expression "DAT_00396dc0 = plVar10" identifier = identifier) ;) })) (expression_statement "(*(code *)PTR_FUN_00396e58)((double)uVar2);" (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar2)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" ( (pointer_expression "*(code *)PTR_FUN_00396e58" * (cast_expression "(code *)PTR_FUN_00396e58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "((double)uVar2)" ( (cast_expression "(double)uVar2" ( (type_descriptor "double" primitive_type) ) identifier) ))) ;) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) (pointer_declarator * 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 { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (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 (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (if_statement if (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 ( (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) && (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 (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == IDENT) )) || (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 ;))) }) (else_clause else (compound_statement { (if_statement if (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) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) }))) (labeled_statement statement_identifier : (if_statement if (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) )) (goto_statement goto statement_identifier ;))) }))) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , 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) ))))) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ]) = (char_literal ' escape_sequence ')) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (string_literal " string_content ")) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) != LIT)) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT ))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == LIT) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) , (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT ))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT ))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }))) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT ))) ;) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) })) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression IDENT != IDENT) ))) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( LIT ))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) || (parenthesized_expression ( (binary_expression IDENT == IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = 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 = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) , (comma_expression (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) , (binary_expression IDENT < LIT))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) , (comma_expression (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) , (binary_expression IDENT < LIT))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (cast_expression ( (type_descriptor TYPE) ) IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) , (comma_expression (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) , (binary_expression IDENT < LIT))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_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 { (if_statement if (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) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (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 ( (parenthesized_expression ( (binary_expression (binary_expression IDENT != (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) && (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 = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (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) )))) = (binary_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 (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) , (comma_expression (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) , (binary_expression IDENT < LIT))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) , (comma_expression (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) , (binary_expression IDENT < LIT))) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) ;) })) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (cast_expression ( (type_descriptor TYPE) ) IDENT) ))) ;) }))) (return_statement return ;) })))
(function_definition "void FUN_0010b8aa(int param_1,int param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  undefined *puVar3;\n  int iVar4;\n  long lVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long lVar9;\n  long *plVar10;\n  long *plVar11;\n  long *plVar12;\n  long lVar13;\n  long lVar14;\n  long *plVar15;\n  char *pcVar16;\n  long *plVar17;\n  ulong uVar18;\n  char *pcVar19;\n  long *local_58;\n  \n  lVar5 = DAT_0039deb8;\n  iVar4 = DAT_0039ddd4;\n  puVar3 = PTR_DAT_00396da8;\n  if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }\n  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);\nLAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);\n  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];\n  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';\n  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }\n  plVar17 = (long *)0x0;\n  if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }\n  plVar15 = DAT_00399c70 + -1;\n  plVar6 = (long *)*DAT_00399c70;\n  DAT_00399c70 = plVar15;\n  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }\n  if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }\n  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);\n  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;\n  lVar9 = *(long *)(lVar5 + 0x18) + -1;\n  *(long *)(lVar5 + 0x18) = lVar9;\n  if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }\n  uVar2 = plVar15[8];\n  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0010b8aa(int param_1,int param_2)" (identifier "FUN_0010b8aa") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  undefined *puVar3;\n  int iVar4;\n  long lVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long lVar9;\n  long *plVar10;\n  long *plVar11;\n  long *plVar12;\n  long lVar13;\n  long lVar14;\n  long *plVar15;\n  char *pcVar16;\n  long *plVar17;\n  ulong uVar18;\n  char *pcVar19;\n  long *local_58;\n  \n  lVar5 = DAT_0039deb8;\n  iVar4 = DAT_0039ddd4;\n  puVar3 = PTR_DAT_00396da8;\n  if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }\n  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);\nLAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);\n  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];\n  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';\n  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }\n  plVar17 = (long *)0x0;\n  if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }\n  plVar15 = DAT_00399c70 + -1;\n  plVar6 = (long *)*DAT_00399c70;\n  DAT_00399c70 = plVar15;\n  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }\n  if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }\n  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);\n  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;\n  lVar9 = *(long *)(lVar5 + 0x18) + -1;\n  *(long *)(lVar5 + 0x18) = lVar9;\n  if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }\n  uVar2 = plVar15[8];\n  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }\n  return;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "undefined *puVar3;" (type_identifier "undefined") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "long *plVar6;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar6" (* "*") (identifier "plVar6")) (; ";")) (declaration "undefined8 uVar7;" (type_identifier "undefined8") (identifier "uVar7") (; ";")) (declaration "undefined8 uVar8;" (type_identifier "undefined8") (identifier "uVar8") (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "long *plVar10;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar10" (* "*") (identifier "plVar10")) (; ";")) (declaration "long *plVar11;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar11" (* "*") (identifier "plVar11")) (; ";")) (declaration "long *plVar12;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar12" (* "*") (identifier "plVar12")) (; ";")) (declaration "long lVar13;" (sized_type_specifier "long" (long "long")) (identifier "lVar13") (; ";")) (declaration "long lVar14;" (sized_type_specifier "long" (long "long")) (identifier "lVar14") (; ";")) (declaration "long *plVar15;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar15" (* "*") (identifier "plVar15")) (; ";")) (declaration "char *pcVar16;" (primitive_type "char") (pointer_declarator "*pcVar16" (* "*") (identifier "pcVar16")) (; ";")) (declaration "long *plVar17;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar17" (* "*") (identifier "plVar17")) (; ";")) (declaration "ulong uVar18;" (type_identifier "ulong") (identifier "uVar18") (; ";")) (declaration "char *pcVar19;" (primitive_type "char") (pointer_declarator "*pcVar19" (* "*") (identifier "pcVar19")) (; ";")) (declaration "long *local_58;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*local_58" (* "*") (identifier "local_58")) (; ";")) (expression_statement "lVar5 = DAT_0039deb8;" (assignment_expression "lVar5 = DAT_0039deb8" (identifier "lVar5") (= "=") (identifier "DAT_0039deb8")) (; ";")) (expression_statement "iVar4 = DAT_0039ddd4;" (assignment_expression "iVar4 = DAT_0039ddd4" (identifier "iVar4") (= "=") (identifier "DAT_0039ddd4")) (; ";")) (expression_statement "puVar3 = PTR_DAT_00396da8;" (assignment_expression "puVar3 = PTR_DAT_00396da8" (identifier "puVar3") (= "=") (identifier "PTR_DAT_00396da8")) (; ";")) (if_statement "if (param_1 == 3) {\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }\n  else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" (if "if") (parenthesized_expression "(param_1 == 3)" (( "(") (binary_expression "param_1 == 3" (identifier "param_1") (== "==") (number_literal "3")) () ")")) (compound_statement "{\n    plVar17 = DAT_00399c70 + -1;\n    lVar5 = *DAT_00399c70;\n    DAT_00399c70 = plVar17;\n    if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }\n    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }\nLAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;\n  }" ({ "{") (expression_statement "plVar17 = DAT_00399c70 + -1;" (assignment_expression "plVar17 = DAT_00399c70 + -1" (identifier "plVar17") (= "=") (binary_expression "DAT_00399c70 + -1" (identifier "DAT_00399c70") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "lVar5 = *DAT_00399c70;" (assignment_expression "lVar5 = *DAT_00399c70" (identifier "lVar5") (= "=") (pointer_expression "*DAT_00399c70" (* "*") (identifier "DAT_00399c70"))) (; ";")) (expression_statement "DAT_00399c70 = plVar17;" (assignment_expression "DAT_00399c70 = plVar17" (identifier "DAT_00399c70") (= "=") (identifier "plVar17")) (; ";")) (if_statement "if (*(int *)(lVar5 + 0x48) == 5) {\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }" (if "if") (parenthesized_expression "(*(int *)(lVar5 + 0x48) == 5)" (( "(") (binary_expression "*(int *)(lVar5 + 0x48) == 5" (pointer_expression "*(int *)(lVar5 + 0x48)" (* "*") (cast_expression "(int *)(lVar5 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x48)" (( "(") (binary_expression "lVar5 + 0x48" (identifier "lVar5") (+ "+") (number_literal "0x48")) () ")")))) (== "==") (number_literal "5")) () ")")) (compound_statement "{\n      FUN_00157301("awk.h",0x72b);\n      uVar7 = FUN_0010a1ed(lVar5);\n      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);\n      FUN_00157844(uVar8,uVar7);\n    }" ({ "{") (expression_statement "FUN_00157301("awk.h",0x72b);" (call_expression "FUN_00157301("awk.h",0x72b)" (identifier "FUN_00157301") (argument_list "("awk.h",0x72b)" (( "(") (string_literal ""awk.h"" (" """) (string_content "awk.h") (" """)) (, ",") (number_literal "0x72b") () ")"))) (; ";")) (expression_statement "uVar7 = FUN_0010a1ed(lVar5);" (assignment_expression "uVar7 = FUN_0010a1ed(lVar5)" (identifier "uVar7") (= "=") (call_expression "FUN_0010a1ed(lVar5)" (identifier "FUN_0010a1ed") (argument_list "(lVar5)" (( "(") (identifier "lVar5") () ")")))) (; ";")) (expression_statement "uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);" (assignment_expression "uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" (identifier "uVar8") (= "=") (call_expression "dcgettext(0,"attempt to use array `%s\' in a scalar context",5)" (identifier "dcgettext") (argument_list "(0,"attempt to use array `%s\' in a scalar context",5)" (( "(") (number_literal "0") (, ",") (string_literal ""attempt to use array `%s\' in a scalar context"" (" """) (string_content "attempt to use array `%s") (escape_sequence "\'") (string_content " in a scalar context") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_00157844(uVar8,uVar7);" (call_expression "FUN_00157844(uVar8,uVar7)" (identifier "FUN_00157844") (argument_list "(uVar8,uVar7)" (( "(") (identifier "uVar8") (, ",") (identifier "uVar7") () ")"))) (; ";")) (} "}"))) (if_statement "if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }" (if "if") (parenthesized_expression "(((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20)))))" (( "(") (binary_expression "((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||\n       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))" (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 4) == 0)" (( "(") (binary_expression "(*(byte *)(lVar5 + 0x4c) & 4) == 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 4)" (( "(") (binary_expression "*(byte *)(lVar5 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar5 + 0x4c)" (* "*") (cast_expression "(byte *)(lVar5 + 0x4c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x4c)" (( "(") (binary_expression "lVar5 + 0x4c" (identifier "lVar5") (+ "+") (number_literal "0x4c")) () ")")))) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))" (( "(") (parenthesized_expression "(*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20)))" (( "(") (binary_expression "*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))" (binary_expression "*(int *)(lVar5 + 0x20) != -1" (pointer_expression "*(int *)(lVar5 + 0x20)" (* "*") (cast_expression "(int *)(lVar5 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x20)" (( "(") (binary_expression "lVar5 + 0x20" (identifier "lVar5") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (number_literal "-1")) (&& "&&") (parenthesized_expression "(iVar4 != *(int *)(lVar5 + 0x20))" (( "(") (binary_expression "iVar4 != *(int *)(lVar5 + 0x20)" (identifier "iVar4") (!= "!=") (pointer_expression "*(int *)(lVar5 + 0x20)" (* "*") (cast_expression "(int *)(lVar5 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x20)" (( "(") (binary_expression "lVar5 + 0x20" (identifier "lVar5") (+ "+") (number_literal "0x20")) () ")"))))) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);\n      goto LAB_0010b8dc;\n    }" ({ "{") (expression_statement "lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);" (assignment_expression "lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5)" (identifier "lVar5") (= "=") (call_expression "(*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" (( "(") (pointer_expression "*(code *)PTR_FUN_00396e48" (* "*") (cast_expression "(code *)PTR_FUN_00396e48" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_00396e48"))) () ")")) (argument_list "(puVar3,iVar4,lVar5)" (( "(") (identifier "puVar3") (, ",") (identifier "iVar4") (, ",") (identifier "lVar5") () ")")))) (; ";")) (goto_statement "goto LAB_0010b8dc;" (goto "goto") (statement_identifier "LAB_0010b8dc") (; ";")) (} "}"))) (labeled_statement "LAB_0010baa0:\n    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;" (statement_identifier "LAB_0010baa0") (: ":") (if_statement "if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))\n    goto LAB_0010b900;" (if "if") (parenthesized_expression "((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))" (( "(") (binary_expression "(*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1)" (parenthesized_expression "(*(int *)(lVar5 + 0x20) == DAT_0039ddd4)" (( "(") (binary_expression "*(int *)(lVar5 + 0x20) == DAT_0039ddd4" (pointer_expression "*(int *)(lVar5 + 0x20)" (* "*") (cast_expression "(int *)(lVar5 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x20)" (( "(") (binary_expression "lVar5 + 0x20" (identifier "lVar5") (+ "+") (number_literal "0x20")) () ")")))) (== "==") (identifier "DAT_0039ddd4")) () ")")) (|| "||") (parenthesized_expression "(*(int *)(lVar5 + 0x20) == -1)" (( "(") (binary_expression "*(int *)(lVar5 + 0x20) == -1" (pointer_expression "*(int *)(lVar5 + 0x20)" (* "*") (cast_expression "(int *)(lVar5 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x20)" (( "(") (binary_expression "lVar5 + 0x20" (identifier "lVar5") (+ "+") (number_literal "0x20")) () ")")))) (== "==") (number_literal "-1")) () ")"))) () ")")) (goto_statement "goto LAB_0010b900;" (goto "goto") (statement_identifier "LAB_0010b900") (; ";")))) (} "}")) (else_clause "else {\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" (else "else") (compound_statement "{\n    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }\nLAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;\n  }" ({ "{") (if_statement "if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }\n    else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" (if "if") (parenthesized_expression "((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0" (parenthesized_expression "(*(byte *)(DAT_0039deb8 + 0x4c) & 1)" (( "(") (binary_expression "*(byte *)(DAT_0039deb8 + 0x4c) & 1" (pointer_expression "*(byte *)(DAT_0039deb8 + 0x4c)" (* "*") (cast_expression "(byte *)(DAT_0039deb8 + 0x4c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_0039deb8 + 0x4c)" (( "(") (binary_expression "DAT_0039deb8 + 0x4c" (identifier "DAT_0039deb8") (+ "+") (number_literal "0x4c")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      lVar5 = FUN_00158b1f(DAT_0039deb8);\n    }" ({ "{") (expression_statement "lVar5 = FUN_00158b1f(DAT_0039deb8);" (assignment_expression "lVar5 = FUN_00158b1f(DAT_0039deb8)" (identifier "lVar5") (= "=") (call_expression "FUN_00158b1f(DAT_0039deb8)" (identifier "FUN_00158b1f") (argument_list "(DAT_0039deb8)" (( "(") (identifier "DAT_0039deb8") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" (else "else") (compound_statement "{\n      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;\n    }" ({ "{") (expression_statement "*(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;" (assignment_expression "*(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1" (pointer_expression "*(long *)(DAT_0039deb8 + 0x18)" (* "*") (cast_expression "(long *)(DAT_0039deb8 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_0039deb8 + 0x18)" (( "(") (binary_expression "DAT_0039deb8 + 0x18" (identifier "DAT_0039deb8") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (binary_expression "*(long *)(DAT_0039deb8 + 0x18) + 1" (pointer_expression "*(long *)(DAT_0039deb8 + 0x18)" (* "*") (cast_expression "(long *)(DAT_0039deb8 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(DAT_0039deb8 + 0x18)" (( "(") (binary_expression "DAT_0039deb8 + 0x18" (identifier "DAT_0039deb8") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (labeled_statement "LAB_0010b8dc:\n    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;" (statement_identifier "LAB_0010b8dc") (: ":") (if_statement "if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;" (if "if") (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 4) != 0)" (( "(") (binary_expression "(*(byte *)(lVar5 + 0x4c) & 4) != 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 4)" (( "(") (binary_expression "*(byte *)(lVar5 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar5 + 0x4c)" (* "*") (cast_expression "(byte *)(lVar5 + 0x4c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x4c)" (( "(") (binary_expression "lVar5 + 0x4c" (identifier "lVar5") (+ "+") (number_literal "0x4c")) () ")")))) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0010baa0;" (goto "goto") (statement_identifier "LAB_0010baa0") (; ";")))) (} "}")))) (expression_statement "lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);" (assignment_expression "lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" (identifier "lVar5") (= "=") (call_expression "(*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" (( "(") (pointer_expression "*(code *)PTR_FUN_00396e48" (* "*") (cast_expression "(code *)PTR_FUN_00396e48" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_00396e48"))) () ")")) (argument_list "(PTR_DAT_00396da8,DAT_0039ddd4,lVar5)" (( "(") (identifier "PTR_DAT_00396da8") (, ",") (identifier "DAT_0039ddd4") (, ",") (identifier "lVar5") () ")")))) (; ";")) (labeled_statement "LAB_0010b900:\n  pcVar19 = *(char **)(lVar5 + 8);" (statement_identifier "LAB_0010b900") (: ":") (expression_statement "pcVar19 = *(char **)(lVar5 + 8);" (assignment_expression "pcVar19 = *(char **)(lVar5 + 8)" (identifier "pcVar19") (= "=") (pointer_expression "*(char **)(lVar5 + 8)" (* "*") (cast_expression "(char **)(lVar5 + 8)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar5 + 8)" (( "(") (binary_expression "lVar5 + 8" (identifier "lVar5") (+ "+") (number_literal "8")) () ")"))))) (; ";"))) (expression_statement "cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];" (assignment_expression "cVar1 = pcVar19[*(long *)(lVar5 + 0x10)]" (identifier "cVar1") (= "=") (subscript_expression "pcVar19[*(long *)(lVar5 + 0x10)]" (identifier "pcVar19") ([ "[") (pointer_expression "*(long *)(lVar5 + 0x10)" (* "*") (cast_expression "(long *)(lVar5 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")")))) (] "]"))) (; ";")) (expression_statement "pcVar19[*(long *)(lVar5 + 0x10)] = '\0';" (assignment_expression "pcVar19[*(long *)(lVar5 + 0x10)] = '\0'" (subscript_expression "pcVar19[*(long *)(lVar5 + 0x10)]" (identifier "pcVar19") ([ "[") (pointer_expression "*(long *)(lVar5 + 0x10)" (* "*") (cast_expression "(long *)(lVar5 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")")))) (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (if_statement "if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {\n    pcVar19 = "@ind_str_asc";\n  }" (if "if") (parenthesized_expression "((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2))" (( "(") (binary_expression "(*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)" (parenthesized_expression "(*(long *)(lVar5 + 0x10) == 0)" (( "(") (binary_expression "*(long *)(lVar5 + 0x10) == 0" (pointer_expression "*(long *)(lVar5 + 0x10)" (* "*") (cast_expression "(long *)(lVar5 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(pcVar19 = "@val_type_asc", param_2 != 2)" (( "(") (comma_expression "pcVar19 = "@val_type_asc", param_2 != 2" (assignment_expression "pcVar19 = "@val_type_asc"" (identifier "pcVar19") (= "=") (string_literal ""@val_type_asc"" (" """) (string_content "@val_type_asc") (" """))) (, ",") (binary_expression "param_2 != 2" (identifier "param_2") (!= "!=") (number_literal "2"))) () ")"))) () ")")) (compound_statement "{\n    pcVar19 = "@ind_str_asc";\n  }" ({ "{") (expression_statement "pcVar19 = "@ind_str_asc";" (assignment_expression "pcVar19 = "@ind_str_asc"" (identifier "pcVar19") (= "=") (string_literal ""@ind_str_asc"" (" """) (string_content "@ind_str_asc") (" """))) (; ";")) (} "}"))) (expression_statement "plVar17 = (long *)0x0;" (assignment_expression "plVar17 = (long *)0x0" (identifier "plVar17") (= "=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (if_statement "if (1 < param_1) {\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }" (if "if") (parenthesized_expression "(1 < param_1)" (( "(") (binary_expression "1 < param_1" (number_literal "1") (< "<") (identifier "param_1")) () ")")) (compound_statement "{\n    plVar15 = DAT_00399c70 + -1;\n    plVar17 = (long *)*DAT_00399c70;\n    DAT_00399c70 = plVar15;\n    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n  }" ({ "{") (expression_statement "plVar15 = DAT_00399c70 + -1;" (assignment_expression "plVar15 = DAT_00399c70 + -1" (identifier "plVar15") (= "=") (binary_expression "DAT_00399c70 + -1" (identifier "DAT_00399c70") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "plVar17 = (long *)*DAT_00399c70;" (assignment_expression "plVar17 = (long *)*DAT_00399c70" (identifier "plVar17") (= "=") (cast_expression "(long *)*DAT_00399c70" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*DAT_00399c70" (* "*") (identifier "DAT_00399c70")))) (; ";")) (expression_statement "DAT_00399c70 = plVar15;" (assignment_expression "DAT_00399c70 = plVar15" (identifier "DAT_00399c70") (= "=") (identifier "plVar15")) (; ";")) (if_statement "if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))\n    {\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" (if "if") (parenthesized_expression "(((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))" (( "(") (binary_expression "((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5)" (parenthesized_expression "((int)plVar17[9] != 5)" (( "(") (binary_expression "(int)plVar17[9] != 5" (cast_expression "(int)plVar17[9]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar17[9]" (identifier "plVar17") ([ "[") (number_literal "9") (] "]"))) (!= "!=") (number_literal "5")) () ")")) (&& "&&") (parenthesized_expression "(plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5)" (( "(") (comma_expression "plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5" (assignment_expression "plVar17 = (long *)FUN_0010a748(plVar17,0)" (identifier "plVar17") (= "=") (cast_expression "(long *)FUN_0010a748(plVar17,0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0010a748(plVar17,0)" (identifier "FUN_0010a748") (argument_list "(plVar17,0)" (( "(") (identifier "plVar17") (, ",") (number_literal "0") () ")"))))) (, ",") (binary_expression "(int)plVar17[9] != 5" (cast_expression "(int)plVar17[9]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar17[9]" (identifier "plVar17") ([ "[") (number_literal "9") (] "]"))) (!= "!=") (number_literal "5"))) () ")"))) () ")")) (compound_statement "{\n      FUN_00157301("array.c",0x338);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: second argument is not an array",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" ({ "{") (expression_statement "FUN_00157301("array.c",0x338);" (call_expression "FUN_00157301("array.c",0x338)" (identifier "FUN_00157301") (argument_list "("array.c",0x338)" (( "(") (string_literal ""array.c"" (" """) (string_content "array.c") (" """)) (, ",") (number_literal "0x338") () ")"))) (; ";")) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" (identifier "pcVar16") (= "=") (string_literal ""asort"" (" """) (string_content "asort") (" """))) (; ";")) (if_statement "if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }" (if "if") (parenthesized_expression "(param_2 != 2)" (( "(") (binary_expression "param_2 != 2" (identifier "param_2") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n        pcVar16 = "asorti";\n      }" ({ "{") (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" (identifier "pcVar16") (= "=") (string_literal ""asorti"" (" """) (string_content "asorti") (" """))) (; ";")) (} "}"))) (expression_statement "uVar7 = dcgettext(0,"%s: second argument is not an array",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: second argument is not an array",5)" (identifier "uVar7") (= "=") (call_expression "dcgettext(0,"%s: second argument is not an array",5)" (identifier "dcgettext") (argument_list "(0,"%s: second argument is not an array",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: second argument is not an array"" (" """) (string_content "%s: second argument is not an array") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" (identifier "FUN_00157844") (argument_list "(uVar7,pcVar16)" (( "(") (identifier "uVar7") (, ",") (identifier "pcVar16") () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "plVar15 = DAT_00399c70 + -1;" (assignment_expression "plVar15 = DAT_00399c70 + -1" (identifier "plVar15") (= "=") (binary_expression "DAT_00399c70 + -1" (identifier "DAT_00399c70") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "plVar6 = (long *)*DAT_00399c70;" (assignment_expression "plVar6 = (long *)*DAT_00399c70" (identifier "plVar6") (= "=") (cast_expression "(long *)*DAT_00399c70" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*DAT_00399c70" (* "*") (identifier "DAT_00399c70")))) (; ";")) (expression_statement "DAT_00399c70 = plVar15;" (assignment_expression "DAT_00399c70 = plVar15" (identifier "DAT_00399c70") (= "=") (identifier "plVar15")) (; ";")) (if_statement "if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }\n  else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" (if "if") (parenthesized_expression "(((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5))" (( "(") (binary_expression "((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)" (parenthesized_expression "((int)plVar6[9] == 5)" (( "(") (binary_expression "(int)plVar6[9] == 5" (cast_expression "(int)plVar6[9]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar6[9]" (identifier "plVar6") ([ "[") (number_literal "9") (] "]"))) (== "==") (number_literal "5")) () ")")) (|| "||") (parenthesized_expression "(plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)" (( "(") (comma_expression "plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5" (assignment_expression "plVar6 = (long *)FUN_0010a748(plVar6,0)" (identifier "plVar6") (= "=") (cast_expression "(long *)FUN_0010a748(plVar6,0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0010a748(plVar6,0)" (identifier "FUN_0010a748") (argument_list "(plVar6,0)" (( "(") (identifier "plVar6") (, ",") (number_literal "0") () ")"))))) (, ",") (binary_expression "(int)plVar6[9] == 5" (cast_expression "(int)plVar6[9]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar6[9]" (identifier "plVar6") ([ "[") (number_literal "9") (] "]"))) (== "==") (number_literal "5"))) () ")"))) () ")")) (compound_statement "{\n    plVar10 = DAT_0039e4c8;\n    plVar15 = DAT_0039e4c0;\n    if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }\n  }" ({ "{") (expression_statement "plVar10 = DAT_0039e4c8;" (assignment_expression "plVar10 = DAT_0039e4c8" (identifier "plVar10") (= "=") (identifier "DAT_0039e4c8")) (; ";")) (expression_statement "plVar15 = DAT_0039e4c0;" (assignment_expression "plVar15 = DAT_0039e4c0" (identifier "plVar15") (= "=") (identifier "DAT_0039e4c0")) (; ";")) (if_statement "if (DAT_0039e4c0 == plVar6) {\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }\n    else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" (if "if") (parenthesized_expression "(DAT_0039e4c0 == plVar6)" (( "(") (binary_expression "DAT_0039e4c0 == plVar6" (identifier "DAT_0039e4c0") (== "==") (identifier "plVar6")) () ")")) (compound_statement "{\n      FUN_00157301("array.c",0x343);\n      pcVar16 = "asort";\n      if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }\n      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);\n      FUN_00157844(uVar7,pcVar16);\n    }" ({ "{") (expression_statement "FUN_00157301("array.c",0x343);" (call_expression "FUN_00157301("array.c",0x343)" (identifier "FUN_00157301") (argument_list "("array.c",0x343)" (( "(") (string_literal ""array.c"" (" """) (string_content "array.c") (" """)) (, ",") (number_literal "0x343") () ")"))) (; ";")) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" (identifier "pcVar16") (= "=") (string_literal ""asort"" (" """) (string_content "asort") (" """))) (; ";")) (if_statement "if (param_2 != 2) {\n        pcVar16 = "asorti";\n      }" (if "if") (parenthesized_expression "(param_2 != 2)" (( "(") (binary_expression "param_2 != 2" (identifier "param_2") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n        pcVar16 = "asorti";\n      }" ({ "{") (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" (identifier "pcVar16") (= "=") (string_literal ""asorti"" (" """) (string_content "asorti") (" """))) (; ";")) (} "}"))) (expression_statement "uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5)" (identifier "uVar7") (= "=") (call_expression "dcgettext(0,"%s: first argument cannot be SYMTAB",5)" (identifier "dcgettext") (argument_list "(0,"%s: first argument cannot be SYMTAB",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: first argument cannot be SYMTAB"" (" """) (string_content "%s: first argument cannot be SYMTAB") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" (identifier "FUN_00157844") (argument_list "(uVar7,pcVar16)" (( "(") (identifier "uVar7") (, ",") (identifier "pcVar16") () ")"))) (; ";")) (} "}")) (else_clause "else {\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" (else "else") (compound_statement "{\n      plVar15 = plVar6;\n      if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }\n    }" ({ "{") (expression_statement "plVar15 = plVar6;" (assignment_expression "plVar15 = plVar6" (identifier "plVar15") (= "=") (identifier "plVar6")) (; ";")) (if_statement "if (DAT_0039e4c8 == plVar6) {\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }" (if "if") (parenthesized_expression "(DAT_0039e4c8 == plVar6)" (( "(") (binary_expression "DAT_0039e4c8 == plVar6" (identifier "DAT_0039e4c8") (== "==") (identifier "plVar6")) () ")")) (compound_statement "{\n        FUN_00157301("array.c",0x346);\n        pcVar16 = "asort";\n        if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }\n        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);\n        FUN_00157844(uVar7,pcVar16);\n        plVar15 = plVar10;\n      }" ({ "{") (expression_statement "FUN_00157301("array.c",0x346);" (call_expression "FUN_00157301("array.c",0x346)" (identifier "FUN_00157301") (argument_list "("array.c",0x346)" (( "(") (string_literal ""array.c"" (" """) (string_content "array.c") (" """)) (, ",") (number_literal "0x346") () ")"))) (; ";")) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" (identifier "pcVar16") (= "=") (string_literal ""asort"" (" """) (string_content "asort") (" """))) (; ";")) (if_statement "if (param_2 != 2) {\n          pcVar16 = "asorti";\n        }" (if "if") (parenthesized_expression "(param_2 != 2)" (( "(") (binary_expression "param_2 != 2" (identifier "param_2") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n          pcVar16 = "asorti";\n        }" ({ "{") (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" (identifier "pcVar16") (= "=") (string_literal ""asorti"" (" """) (string_content "asorti") (" """))) (; ";")) (} "}"))) (expression_statement "uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" (identifier "uVar7") (= "=") (call_expression "dcgettext(0,"%s: first argument cannot be FUNCTAB",5)" (identifier "dcgettext") (argument_list "(0,"%s: first argument cannot be FUNCTAB",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: first argument cannot be FUNCTAB"" (" """) (string_content "%s: first argument cannot be FUNCTAB") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" (identifier "FUN_00157844") (argument_list "(uVar7,pcVar16)" (( "(") (identifier "uVar7") (, ",") (identifier "pcVar16") () ")"))) (; ";")) (expression_statement "plVar15 = plVar10;" (assignment_expression "plVar15 = plVar10" (identifier "plVar15") (= "=") (identifier "plVar10")) (; ";")) (} "}"))) (} "}")))) (} "}")) (else_clause "else {\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" (else "else") (compound_statement "{\n    FUN_00157301("array.c",0x33f);\n    pcVar16 = "asort";\n    if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }\n    uVar7 = dcgettext(0,"%s: first argument is not an array",5);\n    FUN_00157844(uVar7,pcVar16);\n    plVar15 = plVar6;\n  }" ({ "{") (expression_statement "FUN_00157301("array.c",0x33f);" (call_expression "FUN_00157301("array.c",0x33f)" (identifier "FUN_00157301") (argument_list "("array.c",0x33f)" (( "(") (string_literal ""array.c"" (" """) (string_content "array.c") (" """)) (, ",") (number_literal "0x33f") () ")"))) (; ";")) (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" (identifier "pcVar16") (= "=") (string_literal ""asort"" (" """) (string_content "asort") (" """))) (; ";")) (if_statement "if (param_2 != 2) {\n      pcVar16 = "asorti";\n    }" (if "if") (parenthesized_expression "(param_2 != 2)" (( "(") (binary_expression "param_2 != 2" (identifier "param_2") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n      pcVar16 = "asorti";\n    }" ({ "{") (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" (identifier "pcVar16") (= "=") (string_literal ""asorti"" (" """) (string_content "asorti") (" """))) (; ";")) (} "}"))) (expression_statement "uVar7 = dcgettext(0,"%s: first argument is not an array",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: first argument is not an array",5)" (identifier "uVar7") (= "=") (call_expression "dcgettext(0,"%s: first argument is not an array",5)" (identifier "dcgettext") (argument_list "(0,"%s: first argument is not an array",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: first argument is not an array"" (" """) (string_content "%s: first argument is not an array") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" (identifier "FUN_00157844") (argument_list "(uVar7,pcVar16)" (( "(") (identifier "uVar7") (, ",") (identifier "pcVar16") () ")"))) (; ";")) (expression_statement "plVar15 = plVar6;" (assignment_expression "plVar15 = plVar6" (identifier "plVar15") (= "=") (identifier "plVar6")) (; ";")) (} "}")))) (if_statement "if (plVar17 != (long *)0x0) {\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }" (if "if") (parenthesized_expression "(plVar17 != (long *)0x0)" (( "(") (binary_expression "plVar17 != (long *)0x0" (identifier "plVar17") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    plVar6 = (long *)plVar17[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n    plVar6 = (long *)plVar15[3];\n    if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }\n  }" ({ "{") (expression_statement "plVar6 = (long *)plVar17[3];" (assignment_expression "plVar6 = (long *)plVar17[3]" (identifier "plVar6") (= "=") (cast_expression "(long *)plVar17[3]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar17[3]" (identifier "plVar17") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" (if "if") (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" ({ "{") (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" (identifier "pcVar16") (= "=") (string_literal ""asorti"" (" """) (string_content "asorti") (" """))) (; ";")) (if_statement "if (param_2 == 2) {\n        pcVar16 = "asort";\n      }" (if "if") (parenthesized_expression "(param_2 == 2)" (( "(") (binary_expression "param_2 == 2" (identifier "param_2") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n        pcVar16 = "asort";\n      }" ({ "{") (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" (identifier "pcVar16") (= "=") (string_literal ""asort"" (" """) (string_content "asort") (" """))) (; ";")) (} "}"))) (do_statement "do {\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);" (do "do") (compound_statement "{\n        if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      }" ({ "{") (if_statement "if (plVar6 == plVar15) {\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" (if "if") (parenthesized_expression "(plVar6 == plVar15)" (( "(") (binary_expression "plVar6 == plVar15" (identifier "plVar6") (== "==") (identifier "plVar15")) () ")")) (compound_statement "{\n          FUN_00157301("array.c",0x34c);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" ({ "{") (expression_statement "FUN_00157301("array.c",0x34c);" (call_expression "FUN_00157301("array.c",0x34c)" (identifier "FUN_00157301") (argument_list "("array.c",0x34c)" (( "(") (string_literal ""array.c"" (" """) (string_content "array.c") (" """)) (, ",") (number_literal "0x34c") () ")"))) (; ";")) (expression_statement "uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5)" (identifier "uVar7") (= "=") (call_expression "dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5)" (identifier "dcgettext") (argument_list "(0,"%s: cannot use a subarray of first argument for second argument",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: cannot use a subarray of first argument for second argument"" (" """) (string_content "%s: cannot use a subarray of first argument for second argument") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" (identifier "FUN_00157844") (argument_list "(uVar7,pcVar16)" (( "(") (identifier "uVar7") (, ",") (identifier "pcVar16") () ")"))) (; ";")) (} "}"))) (expression_statement "plVar6 = (long *)plVar6[3];" (assignment_expression "plVar6 = (long *)plVar6[3]" (identifier "plVar6") (= "=") (cast_expression "(long *)plVar6[3]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar6[3]" (identifier "plVar6") ([ "[") (number_literal "3") (] "]")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (} "}"))) (expression_statement "plVar6 = (long *)plVar15[3];" (assignment_expression "plVar6 = (long *)plVar15[3]" (identifier "plVar6") (= "=") (cast_expression "(long *)plVar15[3]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar15[3]" (identifier "plVar15") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if (plVar6 != (long *)0x0) {\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" (if "if") (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      pcVar16 = "asorti";\n      if (param_2 == 2) {\n        pcVar16 = "asort";\n      }\n      do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);\n    }" ({ "{") (expression_statement "pcVar16 = "asorti";" (assignment_expression "pcVar16 = "asorti"" (identifier "pcVar16") (= "=") (string_literal ""asorti"" (" """) (string_content "asorti") (" """))) (; ";")) (if_statement "if (param_2 == 2) {\n        pcVar16 = "asort";\n      }" (if "if") (parenthesized_expression "(param_2 == 2)" (( "(") (binary_expression "param_2 == 2" (identifier "param_2") (== "==") (number_literal "2")) () ")")) (compound_statement "{\n        pcVar16 = "asort";\n      }" ({ "{") (expression_statement "pcVar16 = "asort";" (assignment_expression "pcVar16 = "asort"" (identifier "pcVar16") (= "=") (string_literal ""asort"" (" """) (string_content "asort") (" """))) (; ";")) (} "}"))) (do_statement "do {\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      } while (plVar6 != (long *)0x0);" (do "do") (compound_statement "{\n        if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }\n        plVar6 = (long *)plVar6[3];\n      }" ({ "{") (if_statement "if (plVar17 == plVar6) {\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" (if "if") (parenthesized_expression "(plVar17 == plVar6)" (( "(") (binary_expression "plVar17 == plVar6" (identifier "plVar17") (== "==") (identifier "plVar6")) () ")")) (compound_statement "{\n          FUN_00157301("array.c",0x351);\n          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);\n          FUN_00157844(uVar7,pcVar16);\n        }" ({ "{") (expression_statement "FUN_00157301("array.c",0x351);" (call_expression "FUN_00157301("array.c",0x351)" (identifier "FUN_00157301") (argument_list "("array.c",0x351)" (( "(") (string_literal ""array.c"" (" """) (string_content "array.c") (" """)) (, ",") (number_literal "0x351") () ")"))) (; ";")) (expression_statement "uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);" (assignment_expression "uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5)" (identifier "uVar7") (= "=") (call_expression "dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5)" (identifier "dcgettext") (argument_list "(0,"%s: cannot use a subarray of second argument for first argument",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%s: cannot use a subarray of second argument for first argument"" (" """) (string_content "%s: cannot use a subarray of second argument for first argument") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_00157844(uVar7,pcVar16);" (call_expression "FUN_00157844(uVar7,pcVar16)" (identifier "FUN_00157844") (argument_list "(uVar7,pcVar16)" (( "(") (identifier "uVar7") (, ",") (identifier "pcVar16") () ")"))) (; ";")) (} "}"))) (expression_statement "plVar6 = (long *)plVar6[3];" (assignment_expression "plVar6 = (long *)plVar6[3]" (identifier "plVar6") (= "=") (cast_expression "(long *)plVar6[3]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar6[3]" (identifier "plVar6") ([ "[") (number_literal "3") (] "]")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (} "}"))) (} "}"))) (expression_statement "plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);" (assignment_expression "plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2)" (identifier "plVar6") (= "=") (cast_expression "(long *)FUN_0010b51e(plVar15,pcVar19,param_2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0010b51e(plVar15,pcVar19,param_2)" (identifier "FUN_0010b51e") (argument_list "(plVar15,pcVar19,param_2)" (( "(") (identifier "plVar15") (, ",") (identifier "pcVar19") (, ",") (identifier "param_2") () ")"))))) (; ";")) (expression_statement "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;" (assignment_expression "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1" (pointer_expression "*(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" (* "*") (cast_expression "(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10))" (( "(") (binary_expression "*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)" (pointer_expression "*(long *)(lVar5 + 8)" (* "*") (cast_expression "(long *)(lVar5 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 8)" (( "(") (binary_expression "lVar5 + 8" (identifier "lVar5") (+ "+") (number_literal "8")) () ")")))) (+ "+") (pointer_expression "*(long *)(lVar5 + 0x10)" (* "*") (cast_expression "(long *)(lVar5 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")"))))) () ")")))) (= "=") (identifier "cVar1")) (; ";")) (expression_statement "lVar9 = *(long *)(lVar5 + 0x18) + -1;" (assignment_expression "lVar9 = *(long *)(lVar5 + 0x18) + -1" (identifier "lVar9") (= "=") (binary_expression "*(long *)(lVar5 + 0x18) + -1" (pointer_expression "*(long *)(lVar5 + 0x18)" (* "*") (cast_expression "(long *)(lVar5 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x18)" (( "(") (binary_expression "lVar5 + 0x18" (identifier "lVar5") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "*(long *)(lVar5 + 0x18) = lVar9;" (assignment_expression "*(long *)(lVar5 + 0x18) = lVar9" (pointer_expression "*(long *)(lVar5 + 0x18)" (* "*") (cast_expression "(long *)(lVar5 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x18)" (( "(") (binary_expression "lVar5 + 0x18" (identifier "lVar5") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar9")) (; ";")) (if_statement "if (lVar9 == 0) {\n    FUN_001582a6(lVar5);\n  }" (if "if") (parenthesized_expression "(lVar9 == 0)" (( "(") (binary_expression "lVar9 == 0" (identifier "lVar9") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001582a6(lVar5);\n  }" ({ "{") (expression_statement "FUN_001582a6(lVar5);" (call_expression "FUN_001582a6(lVar5)" (identifier "FUN_001582a6") (argument_list "(lVar5)" (( "(") (identifier "lVar5") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar2 = plVar15[8];" (assignment_expression "uVar2 = plVar15[8]" (identifier "uVar2") (= "=") (subscript_expression "plVar15[8]" (identifier "plVar15") ([ "[") (number_literal "8") (] "]"))) (; ";")) (if_statement "if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }\n  else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" (if "if") (parenthesized_expression "((uVar2 == 0) || (plVar6 == (long *)0x0))" (( "(") (binary_expression "(uVar2 == 0) || (plVar6 == (long *)0x0)" (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(plVar6 == (long *)0x0)" (( "(") (binary_expression "plVar6 == (long *)0x0" (identifier "plVar6") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }\n    if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }\n    (*(code *)PTR_FUN_00396e58)(0);\n  }" ({ "{") (if_statement "if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }" (if "if") (parenthesized_expression "((plVar17 != (long *)0x0) && (plVar17 != plVar15))" (( "(") (binary_expression "(plVar17 != (long *)0x0) && (plVar17 != plVar15)" (parenthesized_expression "(plVar17 != (long *)0x0)" (( "(") (binary_expression "plVar17 != (long *)0x0" (identifier "plVar17") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(plVar17 != plVar15)" (( "(") (binary_expression "plVar17 != plVar15" (identifier "plVar17") (!= "!=") (identifier "plVar15")) () ")"))) () ")")) (compound_statement "{\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n    }" ({ "{") (expression_statement "(**(code **)(*plVar17 + 0x28))(plVar17,0);" (call_expression "(**(code **)(*plVar17 + 0x28))(plVar17,0)" (parenthesized_expression "(**(code **)(*plVar17 + 0x28))" (( "(") (pointer_expression "**(code **)(*plVar17 + 0x28)" (* "*") (pointer_expression "*(code **)(*plVar17 + 0x28)" (* "*") (cast_expression "(code **)(*plVar17 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar17 + 0x28)" (( "(") (binary_expression "*plVar17 + 0x28" (pointer_expression "*plVar17" (* "*") (identifier "plVar17")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(plVar17,0)" (( "(") (identifier "plVar17") (, ",") (number_literal "0") () ")"))) (; ";")) (} "}"))) (if_statement "if (plVar6 != (long *)0x0) {\n      free(plVar6);\n    }" (if "if") (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      free(plVar6);\n    }" ({ "{") (expression_statement "free(plVar6);" (call_expression "free(plVar6)" (identifier "free") (argument_list "(plVar6)" (( "(") (identifier "plVar6") () ")"))) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_FUN_00396e58)(0);" (call_expression "(*(code *)PTR_FUN_00396e58)(0)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" (( "(") (pointer_expression "*(code *)PTR_FUN_00396e58" (* "*") (cast_expression "(code *)PTR_FUN_00396e58" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_00396e58"))) () ")")) (argument_list "(0)" (( "(") (number_literal "0") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" (else "else") (compound_statement "{\n    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }\n    if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    free(plVar6);\n    if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }\n    (*(code *)PTR_FUN_00396e58)((double)uVar2);\n  }" ({ "{") (if_statement "if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }\n    else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" (if "if") (parenthesized_expression "((plVar17 == (long *)0x0) || (plVar17 == plVar15))" (( "(") (binary_expression "(plVar17 == (long *)0x0) || (plVar17 == plVar15)" (parenthesized_expression "(plVar17 == (long *)0x0)" (( "(") (binary_expression "plVar17 == (long *)0x0" (identifier "plVar17") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (|| "||") (parenthesized_expression "(plVar17 == plVar15)" (( "(") (binary_expression "plVar17 == plVar15" (identifier "plVar17") (== "==") (identifier "plVar15")) () ")"))) () ")")) (compound_statement "{\n      plVar10 = (long *)FUN_00109c9d();\n      plVar10[4] = plVar15[4];\n      plVar10[3] = plVar15[3];\n    }" ({ "{") (expression_statement "plVar10 = (long *)FUN_00109c9d();" (assignment_expression "plVar10 = (long *)FUN_00109c9d()" (identifier "plVar10") (= "=") (cast_expression "(long *)FUN_00109c9d()" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00109c9d()" (identifier "FUN_00109c9d") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "plVar10[4] = plVar15[4];" (assignment_expression "plVar10[4] = plVar15[4]" (subscript_expression "plVar10[4]" (identifier "plVar10") ([ "[") (number_literal "4") (] "]")) (= "=") (subscript_expression "plVar15[4]" (identifier "plVar15") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "plVar10[3] = plVar15[3];" (assignment_expression "plVar10[3] = plVar15[3]" (subscript_expression "plVar10[3]" (identifier "plVar10") ([ "[") (number_literal "3") (] "]")) (= "=") (subscript_expression "plVar15[3]" (identifier "plVar15") ([ "[") (number_literal "3") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" (else "else") (compound_statement "{\n      (**(code **)(*plVar17 + 0x28))(plVar17,0);\n      plVar10 = plVar17;\n    }" ({ "{") (expression_statement "(**(code **)(*plVar17 + 0x28))(plVar17,0);" (call_expression "(**(code **)(*plVar17 + 0x28))(plVar17,0)" (parenthesized_expression "(**(code **)(*plVar17 + 0x28))" (( "(") (pointer_expression "**(code **)(*plVar17 + 0x28)" (* "*") (pointer_expression "*(code **)(*plVar17 + 0x28)" (* "*") (cast_expression "(code **)(*plVar17 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar17 + 0x28)" (( "(") (binary_expression "*plVar17 + 0x28" (pointer_expression "*plVar17" (* "*") (identifier "plVar17")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(plVar17,0)" (( "(") (identifier "plVar17") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "plVar10 = plVar17;" (assignment_expression "plVar10 = plVar17" (identifier "plVar10") (= "=") (identifier "plVar17")) (; ";")) (} "}")))) (if_statement "if (param_2 == 3) {\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }\n    else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" (if "if") (parenthesized_expression "(param_2 == 3)" (( "(") (binary_expression "param_2 == 3" (identifier "param_2") (== "==") (number_literal "3")) () ")")) (compound_statement "{\n      if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" ({ "{") (if_statement "if (uVar2 != 0) {\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }" (if "if") (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar18 = 1;\n        plVar12 = plVar6;\n        do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);\n      }" ({ "{") (expression_statement "uVar18 = 1;" (assignment_expression "uVar18 = 1" (identifier "uVar18") (= "=") (number_literal "1")) (; ";")) (expression_statement "plVar12 = plVar6;" (assignment_expression "plVar12 = plVar6" (identifier "plVar12") (= "=") (identifier "plVar6")) (; ";")) (do_statement "do {\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        } while (uVar18 <= uVar2);" (do "do") (compound_statement "{\n          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *plVar12;\n          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);\n          lVar9 = *plVar11;\n          if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }\n          *plVar11 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }\n          if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }\n          uVar18 = uVar18 + 1;\n          plVar12 = plVar12 + 2;\n        }" ({ "{") (expression_statement "lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);" (assignment_expression "lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18)" (identifier "lVar14") (= "=") (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar18)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" (( "(") (pointer_expression "*(code *)PTR_FUN_00396e58" (* "*") (cast_expression "(code *)PTR_FUN_00396e58" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_00396e58"))) () ")")) (argument_list "((double)uVar18)" (( "(") (cast_expression "(double)uVar18" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "uVar18")) () ")")))) (; ";")) (expression_statement "lVar5 = *plVar12;" (assignment_expression "lVar5 = *plVar12" (identifier "lVar5") (= "=") (pointer_expression "*plVar12" (* "*") (identifier "plVar12"))) (; ";")) (expression_statement "plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);" (assignment_expression "plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" (identifier "plVar11") (= "=") (cast_expression "(long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(**(code **)(*plVar10 + 0x18))(plVar10,lVar14)" (parenthesized_expression "(**(code **)(*plVar10 + 0x18))" (( "(") (pointer_expression "**(code **)(*plVar10 + 0x18)" (* "*") (pointer_expression "*(code **)(*plVar10 + 0x18)" (* "*") (cast_expression "(code **)(*plVar10 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar10 + 0x18)" (( "(") (binary_expression "*plVar10 + 0x18" (pointer_expression "*plVar10" (* "*") (identifier "plVar10")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(plVar10,lVar14)" (( "(") (identifier "plVar10") (, ",") (identifier "lVar14") () ")"))))) (; ";")) (expression_statement "lVar9 = *plVar11;" (assignment_expression "lVar9 = *plVar11" (identifier "lVar9") (= "=") (pointer_expression "*plVar11" (* "*") (identifier "plVar11"))) (; ";")) (if_statement "if ((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))\n          {\n            FUN_001582a6();\n          }" (if "if") (parenthesized_expression "((lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))" (( "(") (binary_expression "(lVar9 != 0) &&\n             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1)" (parenthesized_expression "(lVar9 != 0)" (( "(") (binary_expression "lVar9 != 0" (identifier "lVar9") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1)" (( "(") (comma_expression "lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "lVar13 = *(long *)(lVar9 + 0x18) + -1" (identifier "lVar13") (= "=") (binary_expression "*(long *)(lVar9 + 0x18) + -1" (pointer_expression "*(long *)(lVar9 + 0x18)" (* "*") (cast_expression "(long *)(lVar9 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x18)" (( "(") (binary_expression "lVar9 + 0x18" (identifier "lVar9") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "-1"))) (, ",") (comma_expression "*(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "*(long *)(lVar9 + 0x18) = lVar13" (pointer_expression "*(long *)(lVar9 + 0x18)" (* "*") (cast_expression "(long *)(lVar9 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x18)" (( "(") (binary_expression "lVar9 + 0x18" (identifier "lVar9") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar13")) (, ",") (binary_expression "lVar13 < 1" (identifier "lVar13") (< "<") (number_literal "1")))) () ")"))) () ")")) (compound_statement "{\n            FUN_001582a6();\n          }" ({ "{") (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" (identifier "FUN_001582a6") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "*plVar11 = lVar5;" (assignment_expression "*plVar11 = lVar5" (pointer_expression "*plVar11" (* "*") (identifier "plVar11")) (= "=") (identifier "lVar5")) (; ";")) (if_statement "if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }" (if "if") (parenthesized_expression "(*(code **)(*plVar10 + 0x50) != (code *)0x0)" (( "(") (binary_expression "*(code **)(*plVar10 + 0x50) != (code *)0x0" (pointer_expression "*(code **)(*plVar10 + 0x50)" (* "*") (cast_expression "(code **)(*plVar10 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar10 + 0x50)" (( "(") (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" (* "*") (identifier "plVar10")) (+ "+") (number_literal "0x50")) () ")")))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);\n          }" ({ "{") (expression_statement "(**(code **)(*plVar10 + 0x50))(plVar10,lVar14);" (call_expression "(**(code **)(*plVar10 + 0x50))(plVar10,lVar14)" (parenthesized_expression "(**(code **)(*plVar10 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar10 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar10 + 0x50)" (* "*") (cast_expression "(code **)(*plVar10 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar10 + 0x50)" (( "(") (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" (* "*") (identifier "plVar10")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar10,lVar14)" (( "(") (identifier "plVar10") (, ",") (identifier "lVar14") () ")"))) (; ";")) (} "}"))) (if_statement "if ((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar14);\n          }" (if "if") (parenthesized_expression "((lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1))" (( "(") (binary_expression "(lVar14 != 0) &&\n             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)" (parenthesized_expression "(lVar14 != 0)" (( "(") (binary_expression "lVar14 != 0" (identifier "lVar14") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)" (( "(") (comma_expression "lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "lVar5 = *(long *)(lVar14 + 0x18) + -1" (identifier "lVar5") (= "=") (binary_expression "*(long *)(lVar14 + 0x18) + -1" (pointer_expression "*(long *)(lVar14 + 0x18)" (* "*") (cast_expression "(long *)(lVar14 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar14 + 0x18)" (( "(") (binary_expression "lVar14 + 0x18" (identifier "lVar14") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "-1"))) (, ",") (comma_expression "*(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "*(long *)(lVar14 + 0x18) = lVar5" (pointer_expression "*(long *)(lVar14 + 0x18)" (* "*") (cast_expression "(long *)(lVar14 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar14 + 0x18)" (( "(") (binary_expression "lVar14 + 0x18" (identifier "lVar14") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar5")) (, ",") (binary_expression "lVar5 < 1" (identifier "lVar5") (< "<") (number_literal "1")))) () ")"))) () ")")) (compound_statement "{\n            FUN_001582a6(lVar14);\n          }" ({ "{") (expression_statement "FUN_001582a6(lVar14);" (call_expression "FUN_001582a6(lVar14)" (identifier "FUN_001582a6") (argument_list "(lVar14)" (( "(") (identifier "lVar14") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar18 = uVar18 + 1;" (assignment_expression "uVar18 = uVar18 + 1" (identifier "uVar18") (= "=") (binary_expression "uVar18 + 1" (identifier "uVar18") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "plVar12 = plVar12 + 2;" (assignment_expression "plVar12 = plVar12 + 2" (identifier "plVar12") (= "=") (binary_expression "plVar12 + 2" (identifier "plVar12") (+ "+") (number_literal "2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar18 <= uVar2)" (( "(") (binary_expression "uVar18 <= uVar2" (identifier "uVar18") (<= "<=") (identifier "uVar2")) () ")")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" (else "else") (compound_statement "{\n      uVar18 = 1;\n      local_58 = plVar6;\n      if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }\n    }" ({ "{") (expression_statement "uVar18 = 1;" (assignment_expression "uVar18 = 1" (identifier "uVar18") (= "=") (number_literal "1")) (; ";")) (expression_statement "local_58 = plVar6;" (assignment_expression "local_58 = plVar6" (identifier "local_58") (= "=") (identifier "plVar6")) (; ";")) (if_statement "if (uVar2 != 0) {\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }" (if "if") (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);\n      }" ({ "{") (do_statement "do {\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        } while (uVar18 <= uVar2);" (do "do") (compound_statement "{\n          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);\n          lVar5 = *local_58;\n          if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }\n          lVar5 = local_58[1];\n          if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }\n          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);\n          lVar14 = *plVar12;\n          if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }\n          *plVar12 = lVar5;\n          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }\n          if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }\n          uVar18 = uVar18 + 1;\n          local_58 = local_58 + 2;\n        }" ({ "{") (expression_statement "lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);" (assignment_expression "lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18)" (identifier "lVar9") (= "=") (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar18)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" (( "(") (pointer_expression "*(code *)PTR_FUN_00396e58" (* "*") (cast_expression "(code *)PTR_FUN_00396e58" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_00396e58"))) () ")")) (argument_list "((double)uVar18)" (( "(") (cast_expression "(double)uVar18" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "uVar18")) () ")")))) (; ";")) (expression_statement "lVar5 = *local_58;" (assignment_expression "lVar5 = *local_58" (identifier "lVar5") (= "=") (pointer_expression "*local_58" (* "*") (identifier "local_58"))) (; ";")) (if_statement "if ((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))\n          {\n            FUN_001582a6();\n          }" (if "if") (parenthesized_expression "((lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))" (( "(") (binary_expression "(lVar5 != 0) &&\n             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1)" (parenthesized_expression "(lVar5 != 0)" (( "(") (binary_expression "lVar5 != 0" (identifier "lVar5") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1)" (( "(") (comma_expression "lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1" (assignment_expression "lVar14 = *(long *)(lVar5 + 0x18) + -1" (identifier "lVar14") (= "=") (binary_expression "*(long *)(lVar5 + 0x18) + -1" (pointer_expression "*(long *)(lVar5 + 0x18)" (* "*") (cast_expression "(long *)(lVar5 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x18)" (( "(") (binary_expression "lVar5 + 0x18" (identifier "lVar5") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "-1"))) (, ",") (comma_expression "*(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1" (assignment_expression "*(long *)(lVar5 + 0x18) = lVar14" (pointer_expression "*(long *)(lVar5 + 0x18)" (* "*") (cast_expression "(long *)(lVar5 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x18)" (( "(") (binary_expression "lVar5 + 0x18" (identifier "lVar5") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar14")) (, ",") (binary_expression "lVar14 < 1" (identifier "lVar14") (< "<") (number_literal "1")))) () ")"))) () ")")) (compound_statement "{\n            FUN_001582a6();\n          }" ({ "{") (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" (identifier "FUN_001582a6") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "lVar5 = local_58[1];" (assignment_expression "lVar5 = local_58[1]" (identifier "lVar5") (= "=") (subscript_expression "local_58[1]" (identifier "local_58") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (*(int *)(lVar5 + 0x48) == 1) {\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }\n          else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" (if "if") (parenthesized_expression "(*(int *)(lVar5 + 0x48) == 1)" (( "(") (binary_expression "*(int *)(lVar5 + 0x48) == 1" (pointer_expression "*(int *)(lVar5 + 0x48)" (* "*") (cast_expression "(int *)(lVar5 + 0x48)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x48)" (( "(") (binary_expression "lVar5 + 0x48" (identifier "lVar5") (+ "+") (number_literal "0x48")) () ")")))) (== "==") (number_literal "1")) () ")")) (compound_statement "{\n            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }\n          }" ({ "{") (if_statement "if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {\n              lVar5 = FUN_00158b1f(lVar5);\n            }\n            else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" (if "if") (parenthesized_expression "((*(byte *)(lVar5 + 0x4c) & 1) == 0)" (( "(") (binary_expression "(*(byte *)(lVar5 + 0x4c) & 1) == 0" (parenthesized_expression "(*(byte *)(lVar5 + 0x4c) & 1)" (( "(") (binary_expression "*(byte *)(lVar5 + 0x4c) & 1" (pointer_expression "*(byte *)(lVar5 + 0x4c)" (* "*") (cast_expression "(byte *)(lVar5 + 0x4c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x4c)" (( "(") (binary_expression "lVar5 + 0x4c" (identifier "lVar5") (+ "+") (number_literal "0x4c")) () ")")))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              lVar5 = FUN_00158b1f(lVar5);\n            }" ({ "{") (expression_statement "lVar5 = FUN_00158b1f(lVar5);" (assignment_expression "lVar5 = FUN_00158b1f(lVar5)" (identifier "lVar5") (= "=") (call_expression "FUN_00158b1f(lVar5)" (identifier "FUN_00158b1f") (argument_list "(lVar5)" (( "(") (identifier "lVar5") () ")")))) (; ";")) (} "}")) (else_clause "else {\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" (else "else") (compound_statement "{\n              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;\n            }" ({ "{") (expression_statement "*(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;" (assignment_expression "*(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1" (pointer_expression "*(long *)(lVar5 + 0x18)" (* "*") (cast_expression "(long *)(lVar5 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x18)" (( "(") (binary_expression "lVar5 + 0x18" (identifier "lVar5") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (binary_expression "*(long *)(lVar5 + 0x18) + 1" (pointer_expression "*(long *)(lVar5 + 0x18)" (* "*") (cast_expression "(long *)(lVar5 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 0x18)" (( "(") (binary_expression "lVar5 + 0x18" (identifier "lVar5") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" (else "else") (compound_statement "{\n            lVar14 = FUN_00109c9d();\n            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }\n            lVar13 = *(long *)(lVar9 + 8);\n            *(long *)(lVar14 + 0x20) = lVar13;\n            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;\n            *(undefined8 *)(lVar9 + 8) = 0;\n            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;\n            *(long **)(lVar14 + 0x18) = plVar15;\n            lVar5 = FUN_00109e11(lVar5,lVar14);\n          }" ({ "{") (expression_statement "lVar14 = FUN_00109c9d();" (assignment_expression "lVar14 = FUN_00109c9d()" (identifier "lVar14") (= "=") (call_expression "FUN_00109c9d()" (identifier "FUN_00109c9d") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }" (if "if") (parenthesized_expression "(((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1))))" (( "(") (binary_expression "((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||\n               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))" (parenthesized_expression "((*(byte *)(lVar9 + 0x4c) & 4) == 0)" (( "(") (binary_expression "(*(byte *)(lVar9 + 0x4c) & 4) == 0" (parenthesized_expression "(*(byte *)(lVar9 + 0x4c) & 4)" (( "(") (binary_expression "*(byte *)(lVar9 + 0x4c) & 4" (pointer_expression "*(byte *)(lVar9 + 0x4c)" (* "*") (cast_expression "(byte *)(lVar9 + 0x4c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x4c)" (( "(") (binary_expression "lVar9 + 0x4c" (identifier "lVar9") (+ "+") (number_literal "0x4c")) () ")")))) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))" (( "(") (parenthesized_expression "(DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1))" (( "(") (binary_expression "DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)" (binary_expression "DAT_0039ddd4 != *(int *)(lVar9 + 0x20)" (identifier "DAT_0039ddd4") (!= "!=") (pointer_expression "*(int *)(lVar9 + 0x20)" (* "*") (cast_expression "(int *)(lVar9 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x20)" (( "(") (binary_expression "lVar9 + 0x20" (identifier "lVar9") (+ "+") (number_literal "0x20")) () ")"))))) (&& "&&") (parenthesized_expression "(*(int *)(lVar9 + 0x20) != -1)" (( "(") (binary_expression "*(int *)(lVar9 + 0x20) != -1" (pointer_expression "*(int *)(lVar9 + 0x20)" (* "*") (cast_expression "(int *)(lVar9 + 0x20)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x20)" (( "(") (binary_expression "lVar9 + 0x20" (identifier "lVar9") (+ "+") (number_literal "0x20")) () ")")))) (!= "!=") (number_literal "-1")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);\n            }" ({ "{") (expression_statement "lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);" (assignment_expression "lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" (identifier "lVar9") (= "=") (call_expression "(*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" (parenthesized_expression "(*(code *)PTR_FUN_00396e48)" (( "(") (pointer_expression "*(code *)PTR_FUN_00396e48" (* "*") (cast_expression "(code *)PTR_FUN_00396e48" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_00396e48"))) () ")")) (argument_list "(PTR_DAT_00396da8,DAT_0039ddd4,lVar9)" (( "(") (identifier "PTR_DAT_00396da8") (, ",") (identifier "DAT_0039ddd4") (, ",") (identifier "lVar9") () ")")))) (; ";")) (} "}"))) (expression_statement "lVar13 = *(long *)(lVar9 + 8);" (assignment_expression "lVar13 = *(long *)(lVar9 + 8)" (identifier "lVar13") (= "=") (pointer_expression "*(long *)(lVar9 + 8)" (* "*") (cast_expression "(long *)(lVar9 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 8)" (( "(") (binary_expression "lVar9 + 8" (identifier "lVar9") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "*(long *)(lVar14 + 0x20) = lVar13;" (assignment_expression "*(long *)(lVar14 + 0x20) = lVar13" (pointer_expression "*(long *)(lVar14 + 0x20)" (* "*") (cast_expression "(long *)(lVar14 + 0x20)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar14 + 0x20)" (( "(") (binary_expression "lVar14 + 0x20" (identifier "lVar14") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "lVar13")) (; ";")) (expression_statement "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;" (assignment_expression "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0" (pointer_expression "*(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10))" (* "*") (cast_expression "(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10))" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar13 + *(long *)(lVar9 + 0x10))" (( "(") (binary_expression "lVar13 + *(long *)(lVar9 + 0x10)" (identifier "lVar13") (+ "+") (pointer_expression "*(long *)(lVar9 + 0x10)" (* "*") (cast_expression "(long *)(lVar9 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x10)" (( "(") (binary_expression "lVar9 + 0x10" (identifier "lVar9") (+ "+") (number_literal "0x10")) () ")"))))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(lVar9 + 8) = 0;" (assignment_expression "*(undefined8 *)(lVar9 + 8) = 0" (pointer_expression "*(undefined8 *)(lVar9 + 8)" (* "*") (cast_expression "(undefined8 *)(lVar9 + 8)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 8)" (( "(") (binary_expression "lVar9 + 8" (identifier "lVar9") (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;" (assignment_expression "*(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb" (pointer_expression "*(uint *)(lVar9 + 0x4c)" (* "*") (cast_expression "(uint *)(lVar9 + 0x4c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x4c)" (( "(") (binary_expression "lVar9 + 0x4c" (identifier "lVar9") (+ "+") (number_literal "0x4c")) () ")")))) (= "=") (binary_expression "*(uint *)(lVar9 + 0x4c) & 0xfffffffb" (pointer_expression "*(uint *)(lVar9 + 0x4c)" (* "*") (cast_expression "(uint *)(lVar9 + 0x4c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x4c)" (( "(") (binary_expression "lVar9 + 0x4c" (identifier "lVar9") (+ "+") (number_literal "0x4c")) () ")")))) (& "&") (number_literal "0xfffffffb"))) (; ";")) (expression_statement "*(long **)(lVar14 + 0x18) = plVar15;" (assignment_expression "*(long **)(lVar14 + 0x18) = plVar15" (pointer_expression "*(long **)(lVar14 + 0x18)" (* "*") (cast_expression "(long **)(lVar14 + 0x18)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar14 + 0x18)" (( "(") (binary_expression "lVar14 + 0x18" (identifier "lVar14") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "plVar15")) (; ";")) (expression_statement "lVar5 = FUN_00109e11(lVar5,lVar14);" (assignment_expression "lVar5 = FUN_00109e11(lVar5,lVar14)" (identifier "lVar5") (= "=") (call_expression "FUN_00109e11(lVar5,lVar14)" (identifier "FUN_00109e11") (argument_list "(lVar5,lVar14)" (( "(") (identifier "lVar5") (, ",") (identifier "lVar14") () ")")))) (; ";")) (} "}")))) (expression_statement "plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);" (assignment_expression "plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" (identifier "plVar12") (= "=") (cast_expression "(long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(**(code **)(*plVar10 + 0x18))(plVar10,lVar9)" (parenthesized_expression "(**(code **)(*plVar10 + 0x18))" (( "(") (pointer_expression "**(code **)(*plVar10 + 0x18)" (* "*") (pointer_expression "*(code **)(*plVar10 + 0x18)" (* "*") (cast_expression "(code **)(*plVar10 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar10 + 0x18)" (( "(") (binary_expression "*plVar10 + 0x18" (pointer_expression "*plVar10" (* "*") (identifier "plVar10")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(plVar10,lVar9)" (( "(") (identifier "plVar10") (, ",") (identifier "lVar9") () ")"))))) (; ";")) (expression_statement "lVar14 = *plVar12;" (assignment_expression "lVar14 = *plVar12" (identifier "lVar14") (= "=") (pointer_expression "*plVar12" (* "*") (identifier "plVar12"))) (; ";")) (if_statement "if ((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             ) {\n            FUN_001582a6();\n          }" (if "if") (parenthesized_expression "((lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)\n             )" (( "(") (binary_expression "(lVar14 != 0) &&\n             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)" (parenthesized_expression "(lVar14 != 0)" (( "(") (binary_expression "lVar14 != 0" (identifier "lVar14") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)" (( "(") (comma_expression "lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "lVar13 = *(long *)(lVar14 + 0x18) + -1" (identifier "lVar13") (= "=") (binary_expression "*(long *)(lVar14 + 0x18) + -1" (pointer_expression "*(long *)(lVar14 + 0x18)" (* "*") (cast_expression "(long *)(lVar14 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar14 + 0x18)" (( "(") (binary_expression "lVar14 + 0x18" (identifier "lVar14") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "-1"))) (, ",") (comma_expression "*(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1" (assignment_expression "*(long *)(lVar14 + 0x18) = lVar13" (pointer_expression "*(long *)(lVar14 + 0x18)" (* "*") (cast_expression "(long *)(lVar14 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar14 + 0x18)" (( "(") (binary_expression "lVar14 + 0x18" (identifier "lVar14") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar13")) (, ",") (binary_expression "lVar13 < 1" (identifier "lVar13") (< "<") (number_literal "1")))) () ")"))) () ")")) (compound_statement "{\n            FUN_001582a6();\n          }" ({ "{") (expression_statement "FUN_001582a6();" (call_expression "FUN_001582a6()" (identifier "FUN_001582a6") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "*plVar12 = lVar5;" (assignment_expression "*plVar12 = lVar5" (pointer_expression "*plVar12" (* "*") (identifier "plVar12")) (= "=") (identifier "lVar5")) (; ";")) (if_statement "if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }" (if "if") (parenthesized_expression "(*(code **)(*plVar10 + 0x50) != (code *)0x0)" (( "(") (binary_expression "*(code **)(*plVar10 + 0x50) != (code *)0x0" (pointer_expression "*(code **)(*plVar10 + 0x50)" (* "*") (cast_expression "(code **)(*plVar10 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar10 + 0x50)" (( "(") (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" (* "*") (identifier "plVar10")) (+ "+") (number_literal "0x50")) () ")")))) (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);\n          }" ({ "{") (expression_statement "(**(code **)(*plVar10 + 0x50))(plVar10,lVar9);" (call_expression "(**(code **)(*plVar10 + 0x50))(plVar10,lVar9)" (parenthesized_expression "(**(code **)(*plVar10 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar10 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar10 + 0x50)" (* "*") (cast_expression "(code **)(*plVar10 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar10 + 0x50)" (( "(") (binary_expression "*plVar10 + 0x50" (pointer_expression "*plVar10" (* "*") (identifier "plVar10")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar10,lVar9)" (( "(") (identifier "plVar10") (, ",") (identifier "lVar9") () ")"))) (; ";")) (} "}"))) (if_statement "if ((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {\n            FUN_001582a6(lVar9);\n          }" (if "if") (parenthesized_expression "((lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1))" (( "(") (binary_expression "(lVar9 != 0) &&\n             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)" (parenthesized_expression "(lVar9 != 0)" (( "(") (binary_expression "lVar9 != 0" (identifier "lVar9") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)" (( "(") (comma_expression "lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "lVar5 = *(long *)(lVar9 + 0x18) + -1" (identifier "lVar5") (= "=") (binary_expression "*(long *)(lVar9 + 0x18) + -1" (pointer_expression "*(long *)(lVar9 + 0x18)" (* "*") (cast_expression "(long *)(lVar9 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x18)" (( "(") (binary_expression "lVar9 + 0x18" (identifier "lVar9") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "-1"))) (, ",") (comma_expression "*(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1" (assignment_expression "*(long *)(lVar9 + 0x18) = lVar5" (pointer_expression "*(long *)(lVar9 + 0x18)" (* "*") (cast_expression "(long *)(lVar9 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar9 + 0x18)" (( "(") (binary_expression "lVar9 + 0x18" (identifier "lVar9") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar5")) (, ",") (binary_expression "lVar5 < 1" (identifier "lVar5") (< "<") (number_literal "1")))) () ")"))) () ")")) (compound_statement "{\n            FUN_001582a6(lVar9);\n          }" ({ "{") (expression_statement "FUN_001582a6(lVar9);" (call_expression "FUN_001582a6(lVar9)" (identifier "FUN_001582a6") (argument_list "(lVar9)" (( "(") (identifier "lVar9") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar18 = uVar18 + 1;" (assignment_expression "uVar18 = uVar18 + 1" (identifier "uVar18") (= "=") (binary_expression "uVar18 + 1" (identifier "uVar18") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "local_58 = local_58 + 2;" (assignment_expression "local_58 = local_58 + 2" (identifier "local_58") (= "=") (binary_expression "local_58 + 2" (identifier "local_58") (+ "+") (number_literal "2"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar18 <= uVar2)" (( "(") (binary_expression "uVar18 <= uVar2" (identifier "uVar18") (<= "<=") (identifier "uVar2")) () ")")) (; ";")) (} "}"))) (} "}")))) (expression_statement "free(plVar6);" (call_expression "free(plVar6)" (identifier "free") (argument_list "(plVar6)" (( "(") (identifier "plVar6") () ")"))) (; ";")) (if_statement "if (plVar17 != plVar10) {\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }" (if "if") (parenthesized_expression "(plVar17 != plVar10)" (( "(") (binary_expression "plVar17 != plVar10" (identifier "plVar17") (!= "!=") (identifier "plVar10")) () ")")) (compound_statement "{\n      (**(code **)(*plVar15 + 0x28))(plVar15,0);\n      lVar5 = plVar10[1];\n      *plVar15 = *plVar10;\n      plVar15[1] = lVar5;\n      lVar5 = plVar10[3];\n      plVar15[2] = plVar10[2];\n      plVar15[3] = lVar5;\n      lVar5 = plVar10[5];\n      plVar15[4] = plVar10[4];\n      plVar15[5] = lVar5;\n      lVar5 = plVar10[7];\n      plVar15[6] = plVar10[6];\n      plVar15[7] = lVar5;\n      lVar5 = plVar10[9];\n      plVar15[8] = plVar10[8];\n      plVar15[9] = lVar5;\n      *plVar10 = (long)DAT_00396dc0;\n      DAT_00396dc0 = plVar10;\n    }" ({ "{") (expression_statement "(**(code **)(*plVar15 + 0x28))(plVar15,0);" (call_expression "(**(code **)(*plVar15 + 0x28))(plVar15,0)" (parenthesized_expression "(**(code **)(*plVar15 + 0x28))" (( "(") (pointer_expression "**(code **)(*plVar15 + 0x28)" (* "*") (pointer_expression "*(code **)(*plVar15 + 0x28)" (* "*") (cast_expression "(code **)(*plVar15 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar15 + 0x28)" (( "(") (binary_expression "*plVar15 + 0x28" (pointer_expression "*plVar15" (* "*") (identifier "plVar15")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(plVar15,0)" (( "(") (identifier "plVar15") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "lVar5 = plVar10[1];" (assignment_expression "lVar5 = plVar10[1]" (identifier "lVar5") (= "=") (subscript_expression "plVar10[1]" (identifier "plVar10") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "*plVar15 = *plVar10;" (assignment_expression "*plVar15 = *plVar10" (pointer_expression "*plVar15" (* "*") (identifier "plVar15")) (= "=") (pointer_expression "*plVar10" (* "*") (identifier "plVar10"))) (; ";")) (expression_statement "plVar15[1] = lVar5;" (assignment_expression "plVar15[1] = lVar5" (subscript_expression "plVar15[1]" (identifier "plVar15") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "lVar5 = plVar10[3];" (assignment_expression "lVar5 = plVar10[3]" (identifier "lVar5") (= "=") (subscript_expression "plVar10[3]" (identifier "plVar10") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "plVar15[2] = plVar10[2];" (assignment_expression "plVar15[2] = plVar10[2]" (subscript_expression "plVar15[2]" (identifier "plVar15") ([ "[") (number_literal "2") (] "]")) (= "=") (subscript_expression "plVar10[2]" (identifier "plVar10") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "plVar15[3] = lVar5;" (assignment_expression "plVar15[3] = lVar5" (subscript_expression "plVar15[3]" (identifier "plVar15") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "lVar5 = plVar10[5];" (assignment_expression "lVar5 = plVar10[5]" (identifier "lVar5") (= "=") (subscript_expression "plVar10[5]" (identifier "plVar10") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "plVar15[4] = plVar10[4];" (assignment_expression "plVar15[4] = plVar10[4]" (subscript_expression "plVar15[4]" (identifier "plVar15") ([ "[") (number_literal "4") (] "]")) (= "=") (subscript_expression "plVar10[4]" (identifier "plVar10") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "plVar15[5] = lVar5;" (assignment_expression "plVar15[5] = lVar5" (subscript_expression "plVar15[5]" (identifier "plVar15") ([ "[") (number_literal "5") (] "]")) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "lVar5 = plVar10[7];" (assignment_expression "lVar5 = plVar10[7]" (identifier "lVar5") (= "=") (subscript_expression "plVar10[7]" (identifier "plVar10") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "plVar15[6] = plVar10[6];" (assignment_expression "plVar15[6] = plVar10[6]" (subscript_expression "plVar15[6]" (identifier "plVar15") ([ "[") (number_literal "6") (] "]")) (= "=") (subscript_expression "plVar10[6]" (identifier "plVar10") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "plVar15[7] = lVar5;" (assignment_expression "plVar15[7] = lVar5" (subscript_expression "plVar15[7]" (identifier "plVar15") ([ "[") (number_literal "7") (] "]")) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "lVar5 = plVar10[9];" (assignment_expression "lVar5 = plVar10[9]" (identifier "lVar5") (= "=") (subscript_expression "plVar10[9]" (identifier "plVar10") ([ "[") (number_literal "9") (] "]"))) (; ";")) (expression_statement "plVar15[8] = plVar10[8];" (assignment_expression "plVar15[8] = plVar10[8]" (subscript_expression "plVar15[8]" (identifier "plVar15") ([ "[") (number_literal "8") (] "]")) (= "=") (subscript_expression "plVar10[8]" (identifier "plVar10") ([ "[") (number_literal "8") (] "]"))) (; ";")) (expression_statement "plVar15[9] = lVar5;" (assignment_expression "plVar15[9] = lVar5" (subscript_expression "plVar15[9]" (identifier "plVar15") ([ "[") (number_literal "9") (] "]")) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "*plVar10 = (long)DAT_00396dc0;" (assignment_expression "*plVar10 = (long)DAT_00396dc0" (pointer_expression "*plVar10" (* "*") (identifier "plVar10")) (= "=") (cast_expression "(long)DAT_00396dc0" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "DAT_00396dc0"))) (; ";")) (expression_statement "DAT_00396dc0 = plVar10;" (assignment_expression "DAT_00396dc0 = plVar10" (identifier "DAT_00396dc0") (= "=") (identifier "plVar10")) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_FUN_00396e58)((double)uVar2);" (call_expression "(*(code *)PTR_FUN_00396e58)((double)uVar2)" (parenthesized_expression "(*(code *)PTR_FUN_00396e58)" (( "(") (pointer_expression "*(code *)PTR_FUN_00396e58" (* "*") (cast_expression "(code *)PTR_FUN_00396e58" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_00396e58"))) () ")")) (argument_list "((double)uVar2)" (( "(") (cast_expression "(double)uVar2" (( "(") (type_descriptor "double" (primitive_type "double")) () ")") (identifier "uVar2")) () ")"))) (; ";")) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

type_1 * function_1(type_2 var_1,type_3 var_12)

{
  long *plVar1;
  type_4 *pSVar2;
  char cVar3;
  type_2 var_8;
  type_2 var_9;
  type_5 var_23;
  type_6 aVar7;
  size_t sVar8;
  type_7 uVar9;
  type_8 var_28;
  type_1 *var_32;
  type_1 *var_16;
  char *pcVar13;
  type_1 **var_24;
  long var_21;
  type_9 aVar15;
  type_1 *var_29;
  type_10 **ppeVar17;
  type_1 *var_18;
  char *pcVar18;
  type_10 *var_19;
  type_9 symbol_00;
  type_5 var_30;
  char *pcVar21;
  type_1 **var_31;
  type_1 **var_35;
  
  var_32 = Nnull_string;
  var_9 = var_10;
  pcVar21 = CONVFMT;
  if (var_1 == L'\x03') {
    pSVar2 = var_2 + -1;
    var_32 = var_2->rptr;
    var_2 = pSVar2;
    if (var_32->type == var_3) {
      var_4("awk.h",L'ܫ');
      pcVar18 = var_5(var_32);
      pcVar13 = (char *)var_6(0,"attempt to use array `%s\' in a scalar context",5);
      var_7(pcVar13,pcVar18);
    }
    if (((var_32->flags & 4) == 0) ||
       ((var_8 = (var_32->sub).val.idx, var_8 != L'\xffffffff' && (var_9 != var_8)))) {
      var_32 = (*format_val)(pcVar21,var_9,var_32);
      goto LAB_0010b8dc;
    }
LAB_0010baa0:
    var_9 = (var_32->sub).val.idx;
    if ((var_9 == var_10) || (var_9 == L'\xffffffff')) goto LAB_0010b900;
  }
  else {
    if ((Nnull_string->flags & 1) == 0) {
      var_32 = var_11(Nnull_string);
    }
    else {
      plVar1 = &(Nnull_string->sub).val.sref;
      *plVar1 = *plVar1 + 1;
    }
LAB_0010b8dc:
    if ((var_32->flags & 4) != 0) goto LAB_0010baa0;
  }
  var_32 = (*format_val)(CONVFMT,var_10,var_32);
LAB_0010b900:
  pcVar21 = (var_32->sub).val.sp;
  cVar3 = pcVar21[(var_32->sub).val.slen];
  pcVar21[(var_32->sub).val.slen] = '\0';
  if (((var_32->sub).val.slen == 0) && (pcVar21 = "@val_type_asc", var_12 != var_13)) {
    pcVar21 = "@ind_str_asc";
  }
  symbol_00.lptr = (type_10 *)0x0;
  if (L'\x01' < var_1) {
    pSVar2 = var_2 + -1;
    symbol_00 = (type_9)var_2->lptr;
    var_2 = pSVar2;
    if (((symbol_00.lptr)->type != var_3) &&
       (symbol_00.lptr = var_14(symbol_00.lptr,false), (symbol_00.lptr)->type != var_3
       )) {
      var_4("array.c",L'̸');
      pcVar18 = "asort";
      if (var_12 != var_13) {
        pcVar18 = "asorti";
      }
      pcVar13 = (char *)var_6(0,"%s: second argument is not an array",5);
      var_7(pcVar13,pcVar18);
    }
  }
  pSVar2 = var_2 + -1;
  var_16 = var_2->rptr;
  var_2 = pSVar2;
  if ((var_16->type == var_3) ||
     (var_16 = var_14(var_16,false), var_16->type == var_3)) {
    var_29 = var_17;
    var_18 = var_15;
    if (var_15 == var_16) {
      var_4("array.c",L'̓');
      pcVar18 = "asort";
      if (var_12 != var_13) {
        pcVar18 = "asorti";
      }
      pcVar13 = (char *)var_6(0,"%s: first argument cannot be SYMTAB",5);
      var_7(pcVar13,pcVar18);
    }
    else {
      var_18 = var_16;
      if (var_17 == var_16) {
        var_4("array.c",L'͆');
        pcVar18 = "asort";
        if (var_12 != var_13) {
          pcVar18 = "asorti";
        }
        pcVar13 = (char *)var_6(0,"%s: first argument cannot be FUNCTAB",5);
        var_7(pcVar13,pcVar18);
        var_18 = var_29;
      }
    }
  }
  else {
    var_4("array.c",L'̿');
    pcVar18 = "asort";
    if (var_12 != var_13) {
      pcVar18 = "asorti";
    }
    pcVar13 = (char *)var_6(0,"%s: first argument is not an array",5);
    var_7(pcVar13,pcVar18);
    var_18 = var_16;
  }
  if (symbol_00.lptr != (type_10 *)0x0) {
    var_16 = (type_1 *)((symbol_00.lptr)->sub).val.sref;
    if (var_16 != (type_1 *)0x0) {
      pcVar18 = "asorti";
      if (var_12 == var_13) {
        pcVar18 = "asort";
      }
      do {
        if (var_16 == var_18) {
          var_4("array.c",L'͌');
          pcVar13 = (char *)var_6(0,
                                      "%s: cannot use a subarray of first argument for second argument"
                                      ,5);
          var_7(pcVar13,pcVar18);
        }
        var_16 = (type_1 *)(var_16->sub).val.sref;
      } while (var_16 != (type_1 *)0x0);
    }
    var_19 = (type_10 *)(var_18->sub).val.sref;
    if (var_19 != (type_10 *)0x0) {
      pcVar18 = "asorti";
      if (var_12 == var_13) {
        pcVar18 = "asort";
      }
      do {
        if (symbol_00.lptr == var_19) {
          var_4("array.c",L'͑');
          pcVar13 = (char *)var_6(0,
                                      "%s: cannot use a subarray of second argument for first argument"
                                      ,5);
          var_7(pcVar13,pcVar18);
        }
        var_19 = (type_10 *)(var_19->sub).val.sref;
      } while (var_19 != (type_10 *)0x0);
    }
  }
  var_24 = var_20(var_18,pcVar21,var_12);
  (var_32->sub).val.sp[(var_32->sub).val.slen] = cVar3;
  var_21 = (var_32->sub).val.sref + -1;
  (var_32->sub).val.sref = var_21;
  if (var_21 == 0) {
    var_22(var_32);
  }
  var_23 = (var_18->sub).nodep.reflags;
  if ((var_23 == 0) || (var_24 == (type_1 **)0x0)) {
    if ((symbol_00.lptr != (type_10 *)0x0) && (symbol_00.lptr != var_18)) {
      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(type_10 *)0x0);
    }
    if (var_24 != (type_1 **)0x0) {
      var_25(var_24);
    }
    var_32 = (*make_number)(0.0);
  }
  else {
    if ((symbol_00.lptr == (type_10 *)0x0) || (symbol_00.lptr == var_18)) {
      aVar15.lptr = var_26();
      ((aVar15.lptr)->sub).nodep.name = (var_18->sub).nodep.name;
      ((aVar15.lptr)->sub).nodep.x = (var_18->sub).nodep.x;
    }
    else {
      (*(((symbol_00.lptr)->sub).nodep.l.lp)->clear)(symbol_00.lptr,(type_10 *)0x0);
      aVar15 = symbol_00;
    }
    if (var_12 == var_27) {
      if (var_23 != 0) {
        var_30 = 1;
        var_31 = var_24;
        do {
          var_29 = (*make_number)((double)var_30);
          var_32 = *var_31;
          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,var_29);
          var_16 = *ppeVar17;
          if ((var_16 != (type_1 *)0x0) &&
             (var_21 = (var_16->sub).val.sref + -1, (var_16->sub).val.sref = var_21, var_21 < 1))
          {
            var_22(var_16);
          }
          *ppeVar17 = var_32;
          var_28 = (((aVar15.lptr)->sub).nodep.l.lp)->store;
          if (var_28 != (type_8)0x0) {
            (*var_28)(aVar15.lptr,var_29);
          }
          if ((var_29 != (type_1 *)0x0) &&
             (var_21 = (var_29->sub).val.sref + -1, (var_29->sub).val.sref = var_21, var_21 < 1))
          {
            var_22(var_29);
          }
          var_30 = var_30 + 1;
          var_31 = var_31 + 2;
        } while (var_30 <= var_23);
      }
    }
    else {
      var_30 = 1;
      var_35 = var_24;
      if (var_23 != 0) {
        do {
          var_16 = (*make_number)((double)var_30);
          var_32 = *var_35;
          if ((var_32 != (type_1 *)0x0) &&
             (var_21 = (var_32->sub).val.sref + -1, (var_32->sub).val.sref = var_21, var_21 < 1))
          {
            var_22(var_32);
          }
          var_32 = var_35[1];
          if (var_32->type == var_33) {
            if ((var_32->flags & 1) == 0) {
              var_32 = var_11(var_32);
            }
            else {
              plVar1 = &(var_32->sub).val.sref;
              *plVar1 = *plVar1 + 1;
            }
          }
          else {
            var_29 = var_26();
            if (((var_16->flags & 4) == 0) ||
               ((var_9 = (var_16->sub).val.idx, var_10 != var_9 && (var_9 != L'\xffffffff'))))
            {
              var_16 = (*format_val)(CONVFMT,var_10,var_16);
            }
            pcVar21 = (var_16->sub).val.sp;
            (var_29->sub).nodep.name = pcVar21;
            pcVar21[(var_16->sub).val.slen] = '\0';
            (var_16->sub).val.sp = (char *)0x0;
            var_16->flags = var_16->flags & 0xfffffffb;
            (var_29->sub).val.sref = (long)var_18;
            var_32 = var_34(var_32,var_29);
          }
          ppeVar17 = (*(((aVar15.lptr)->sub).nodep.l.lp)->lookup)(aVar15.lptr,var_16);
          var_29 = *ppeVar17;
          if ((var_29 != (type_1 *)0x0) &&
             (var_21 = (var_29->sub).val.sref + -1, (var_29->sub).val.sref = var_21, var_21 < 1))
          {
            var_22(var_29);
          }
          *ppeVar17 = var_32;
          var_28 = (((aVar15.lptr)->sub).nodep.l.lp)->store;
          if (var_28 != (type_8)0x0) {
            (*var_28)(aVar15.lptr,var_16);
          }
          if ((var_16 != (type_1 *)0x0) &&
             (var_21 = (var_16->sub).val.sref + -1, (var_16->sub).val.sref = var_21, var_21 < 1))
          {
            var_22(var_16);
          }
          var_30 = var_30 + 1;
          var_35 = var_35 + 2;
        } while (var_30 <= var_23);
      }
    }
    var_25(var_24);
    if (symbol_00.lptr != aVar15.lptr) {
      (*((var_18->sub).nodep.l.lp)->clear)(var_18,(type_10 *)0x0);
      pcVar21 = ((aVar15.lptr)->sub).val.sp;
      (var_18->sub).nodep.l = ((aVar15.lptr)->sub).nodep.l;
      (var_18->sub).val.sp = pcVar21;
      aVar7 = ((aVar15.lptr)->sub).nodep.x;
      (var_18->sub).val.slen = ((aVar15.lptr)->sub).val.slen;
      (var_18->sub).nodep.x = aVar7;
      sVar8 = ((aVar15.lptr)->sub).nodep.reserved;
      (var_18->sub).nodep.name = ((aVar15.lptr)->sub).nodep.name;
      (var_18->sub).nodep.reserved = sVar8;
      var_30 = ((aVar15.lptr)->sub).nodep.cnt;
      (var_18->sub).nodep.rn = ((aVar15.lptr)->sub).nodep.rn;
      (var_18->sub).nodep.cnt = var_30;
      uVar9 = (aVar15.lp)->dump;
      (var_18->sub).nodep.reflags = ((aVar15.lptr)->sub).nodep.reflags;
      *(type_7 *)&var_18->type = uVar9;
      ((aVar15.lptr)->sub).nodep.l = nextfree;
      nextfree = aVar15;
    }
    var_32 = (*make_number)((double)var_23);
  }
  return var_32;
}


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

void MASKED(int param_1,int param_2)

{
  char cVar1;
  ulong uVar2;
  undefined *puVar3;
  int iVar4;
  long lVar5;
  long *plVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  long lVar9;
  long *plVar10;
  long *plVar11;
  long *plVar12;
  long lVar13;
  long lVar14;
  long *plVar15;
  char *pcVar16;
  long *plVar17;
  ulong uVar18;
  char *pcVar19;
  long *local_58;
  
  lVar5 = DAT_0039deb8;
  iVar4 = DAT_0039ddd4;
  puVar3 = PTR_DAT_00396da8;
  if (param_1 == 3) {
    plVar17 = DAT_00399c70 + -1;
    lVar5 = *DAT_00399c70;
    DAT_00399c70 = plVar17;
    if (*(int *)(lVar5 + 0x48) == 5) {
      FUN_00157301("awk.h",0x72b);
      uVar7 = FUN_0010a1ed(lVar5);
      uVar8 = dcgettext(0,"attempt to use array `%s\' in a scalar context",5);
      FUN_00157844(uVar8,uVar7);
    }
    if (((*(byte *)(lVar5 + 0x4c) & 4) == 0) ||
       ((*(int *)(lVar5 + 0x20) != -1 && (iVar4 != *(int *)(lVar5 + 0x20))))) {
      lVar5 = (*(code *)PTR_FUN_00396e48)(puVar3,iVar4,lVar5);
      goto LAB_0010b8dc;
    }
LAB_0010baa0:
    if ((*(int *)(lVar5 + 0x20) == DAT_0039ddd4) || (*(int *)(lVar5 + 0x20) == -1))
    goto LAB_0010b900;
  }
  else {
    if ((*(byte *)(DAT_0039deb8 + 0x4c) & 1) == 0) {
      lVar5 = FUN_00158b1f(DAT_0039deb8);
    }
    else {
      *(long *)(DAT_0039deb8 + 0x18) = *(long *)(DAT_0039deb8 + 0x18) + 1;
    }
LAB_0010b8dc:
    if ((*(byte *)(lVar5 + 0x4c) & 4) != 0) goto LAB_0010baa0;
  }
  lVar5 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar5);
LAB_0010b900:
  pcVar19 = *(char **)(lVar5 + 8);
  cVar1 = pcVar19[*(long *)(lVar5 + 0x10)];
  pcVar19[*(long *)(lVar5 + 0x10)] = '\0';
  if ((*(long *)(lVar5 + 0x10) == 0) && (pcVar19 = "@val_type_asc", param_2 != 2)) {
    pcVar19 = "@ind_str_asc";
  }
  plVar17 = (long *)0x0;
  if (1 < param_1) {
    plVar15 = DAT_00399c70 + -1;
    plVar17 = (long *)*DAT_00399c70;
    DAT_00399c70 = plVar15;
    if (((int)plVar17[9] != 5) && (plVar17 = (long *)FUN_0010a748(plVar17,0), (int)plVar17[9] != 5))
    {
      FUN_00157301("array.c",0x338);
      pcVar16 = "asort";
      if (param_2 != 2) {
        pcVar16 = "asorti";
      }
      uVar7 = dcgettext(0,"%s: second argument is not an array",5);
      FUN_00157844(uVar7,pcVar16);
    }
  }
  plVar15 = DAT_00399c70 + -1;
  plVar6 = (long *)*DAT_00399c70;
  DAT_00399c70 = plVar15;
  if (((int)plVar6[9] == 5) || (plVar6 = (long *)FUN_0010a748(plVar6,0), (int)plVar6[9] == 5)) {
    plVar10 = DAT_0039e4c8;
    plVar15 = DAT_0039e4c0;
    if (DAT_0039e4c0 == plVar6) {
      FUN_00157301("array.c",0x343);
      pcVar16 = "asort";
      if (param_2 != 2) {
        pcVar16 = "asorti";
      }
      uVar7 = dcgettext(0,"%s: first argument cannot be SYMTAB",5);
      FUN_00157844(uVar7,pcVar16);
    }
    else {
      plVar15 = plVar6;
      if (DAT_0039e4c8 == plVar6) {
        FUN_00157301("array.c",0x346);
        pcVar16 = "asort";
        if (param_2 != 2) {
          pcVar16 = "asorti";
        }
        uVar7 = dcgettext(0,"%s: first argument cannot be FUNCTAB",5);
        FUN_00157844(uVar7,pcVar16);
        plVar15 = plVar10;
      }
    }
  }
  else {
    FUN_00157301("array.c",0x33f);
    pcVar16 = "asort";
    if (param_2 != 2) {
      pcVar16 = "asorti";
    }
    uVar7 = dcgettext(0,"%s: first argument is not an array",5);
    FUN_00157844(uVar7,pcVar16);
    plVar15 = plVar6;
  }
  if (plVar17 != (long *)0x0) {
    plVar6 = (long *)plVar17[3];
    if (plVar6 != (long *)0x0) {
      pcVar16 = "asorti";
      if (param_2 == 2) {
        pcVar16 = "asort";
      }
      do {
        if (plVar6 == plVar15) {
          FUN_00157301("array.c",0x34c);
          uVar7 = dcgettext(0,"%s: cannot use a subarray of first argument for second argument",5);
          FUN_00157844(uVar7,pcVar16);
        }
        plVar6 = (long *)plVar6[3];
      } while (plVar6 != (long *)0x0);
    }
    plVar6 = (long *)plVar15[3];
    if (plVar6 != (long *)0x0) {
      pcVar16 = "asorti";
      if (param_2 == 2) {
        pcVar16 = "asort";
      }
      do {
        if (plVar17 == plVar6) {
          FUN_00157301("array.c",0x351);
          uVar7 = dcgettext(0,"%s: cannot use a subarray of second argument for first argument",5);
          FUN_00157844(uVar7,pcVar16);
        }
        plVar6 = (long *)plVar6[3];
      } while (plVar6 != (long *)0x0);
    }
  }
  plVar6 = (long *)FUN_0010b51e(plVar15,pcVar19,param_2);
  *(char *)(*(long *)(lVar5 + 8) + *(long *)(lVar5 + 0x10)) = cVar1;
  lVar9 = *(long *)(lVar5 + 0x18) + -1;
  *(long *)(lVar5 + 0x18) = lVar9;
  if (lVar9 == 0) {
    FUN_001582a6(lVar5);
  }
  uVar2 = plVar15[8];
  if ((uVar2 == 0) || (plVar6 == (long *)0x0)) {
    if ((plVar17 != (long *)0x0) && (plVar17 != plVar15)) {
      (**(code **)(*plVar17 + 0x28))(plVar17,0);
    }
    if (plVar6 != (long *)0x0) {
      free(plVar6);
    }
    (*(code *)PTR_FUN_00396e58)(0);
  }
  else {
    if ((plVar17 == (long *)0x0) || (plVar17 == plVar15)) {
      plVar10 = (long *)FUN_00109c9d();
      plVar10[4] = plVar15[4];
      plVar10[3] = plVar15[3];
    }
    else {
      (**(code **)(*plVar17 + 0x28))(plVar17,0);
      plVar10 = plVar17;
    }
    if (param_2 == 3) {
      if (uVar2 != 0) {
        uVar18 = 1;
        plVar12 = plVar6;
        do {
          lVar14 = (*(code *)PTR_FUN_00396e58)((double)uVar18);
          lVar5 = *plVar12;
          plVar11 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar14);
          lVar9 = *plVar11;
          if ((lVar9 != 0) &&
             (lVar13 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar13, lVar13 < 1))
          {
            FUN_001582a6();
          }
          *plVar11 = lVar5;
          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {
            (**(code **)(*plVar10 + 0x50))(plVar10,lVar14);
          }
          if ((lVar14 != 0) &&
             (lVar5 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar5, lVar5 < 1)) {
            FUN_001582a6(lVar14);
          }
          uVar18 = uVar18 + 1;
          plVar12 = plVar12 + 2;
        } while (uVar18 <= uVar2);
      }
    }
    else {
      uVar18 = 1;
      local_58 = plVar6;
      if (uVar2 != 0) {
        do {
          lVar9 = (*(code *)PTR_FUN_00396e58)((double)uVar18);
          lVar5 = *local_58;
          if ((lVar5 != 0) &&
             (lVar14 = *(long *)(lVar5 + 0x18) + -1, *(long *)(lVar5 + 0x18) = lVar14, lVar14 < 1))
          {
            FUN_001582a6();
          }
          lVar5 = local_58[1];
          if (*(int *)(lVar5 + 0x48) == 1) {
            if ((*(byte *)(lVar5 + 0x4c) & 1) == 0) {
              lVar5 = FUN_00158b1f(lVar5);
            }
            else {
              *(long *)(lVar5 + 0x18) = *(long *)(lVar5 + 0x18) + 1;
            }
          }
          else {
            lVar14 = FUN_00109c9d();
            if (((*(byte *)(lVar9 + 0x4c) & 4) == 0) ||
               ((DAT_0039ddd4 != *(int *)(lVar9 + 0x20) && (*(int *)(lVar9 + 0x20) != -1)))) {
              lVar9 = (*(code *)PTR_FUN_00396e48)(PTR_DAT_00396da8,DAT_0039ddd4,lVar9);
            }
            lVar13 = *(long *)(lVar9 + 8);
            *(long *)(lVar14 + 0x20) = lVar13;
            *(undefined1 *)(lVar13 + *(long *)(lVar9 + 0x10)) = 0;
            *(undefined8 *)(lVar9 + 8) = 0;
            *(uint *)(lVar9 + 0x4c) = *(uint *)(lVar9 + 0x4c) & 0xfffffffb;
            *(long **)(lVar14 + 0x18) = plVar15;
            lVar5 = FUN_00109e11(lVar5,lVar14);
          }
          plVar12 = (long *)(**(code **)(*plVar10 + 0x18))(plVar10,lVar9);
          lVar14 = *plVar12;
          if ((lVar14 != 0) &&
             (lVar13 = *(long *)(lVar14 + 0x18) + -1, *(long *)(lVar14 + 0x18) = lVar13, lVar13 < 1)
             ) {
            FUN_001582a6();
          }
          *plVar12 = lVar5;
          if (*(code **)(*plVar10 + 0x50) != (code *)0x0) {
            (**(code **)(*plVar10 + 0x50))(plVar10,lVar9);
          }
          if ((lVar9 != 0) &&
             (lVar5 = *(long *)(lVar9 + 0x18) + -1, *(long *)(lVar9 + 0x18) = lVar5, lVar5 < 1)) {
            FUN_001582a6(lVar9);
          }
          uVar18 = uVar18 + 1;
          local_58 = local_58 + 2;
        } while (uVar18 <= uVar2);
      }
    }
    free(plVar6);
    if (plVar17 != plVar10) {
      (**(code **)(*plVar15 + 0x28))(plVar15,0);
      lVar5 = plVar10[1];
      *plVar15 = *plVar10;
      plVar15[1] = lVar5;
      lVar5 = plVar10[3];
      plVar15[2] = plVar10[2];
      plVar15[3] = lVar5;
      lVar5 = plVar10[5];
      plVar15[4] = plVar10[4];
      plVar15[5] = lVar5;
      lVar5 = plVar10[7];
      plVar15[6] = plVar10[6];
      plVar15[7] = lVar5;
      lVar5 = plVar10[9];
      plVar15[8] = plVar10[8];
      plVar15[9] = lVar5;
      *plVar10 = (long)DAT_00396dc0;
      DAT_00396dc0 = plVar10;
    }
    (*(code *)PTR_FUN_00396e58)((double)uVar2);
  }
  return;
}

