// Generated by Snowball 2.0.0 - https://snowballstem.org/

package org.tartarus.snowball.ext;

import org.tartarus.snowball.Among;

/**
 * This class implements the stemming algorithm defined by a snowball script.
 * <p>
 * Generated by Snowball 2.0.0 - https://snowballstem.org/
 * </p>
 */
@SuppressWarnings("unused")
public class ArabicStemmer extends org.tartarus.snowball.SnowballStemmer {

  private static final long serialVersionUID = 1L;
  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();

private final static Among a_0[] = {
  new Among("\u0640", -1, 1),
  new Among("\u064B", -1, 1),
  new Among("\u064C", -1, 1),
  new Among("\u064D", -1, 1),
  new Among("\u064E", -1, 1),
  new Among("\u064F", -1, 1),
  new Among("\u0650", -1, 1),
  new Among("\u0651", -1, 1),
  new Among("\u0652", -1, 1),
  new Among("\u0660", -1, 2),
  new Among("\u0661", -1, 3),
  new Among("\u0662", -1, 4),
  new Among("\u0663", -1, 5),
  new Among("\u0664", -1, 6),
  new Among("\u0665", -1, 7),
  new Among("\u0666", -1, 8),
  new Among("\u0667", -1, 9),
  new Among("\u0668", -1, 10),
  new Among("\u0669", -1, 11),
  new Among("\uFE80", -1, 12),
  new Among("\uFE81", -1, 16),
  new Among("\uFE82", -1, 16),
  new Among("\uFE83", -1, 13),
  new Among("\uFE84", -1, 13),
  new Among("\uFE85", -1, 17),
  new Among("\uFE86", -1, 17),
  new Among("\uFE87", -1, 14),
  new Among("\uFE88", -1, 14),
  new Among("\uFE89", -1, 15),
  new Among("\uFE8A", -1, 15),
  new Among("\uFE8B", -1, 15),
  new Among("\uFE8C", -1, 15),
  new Among("\uFE8D", -1, 18),
  new Among("\uFE8E", -1, 18),
  new Among("\uFE8F", -1, 19),
  new Among("\uFE90", -1, 19),
  new Among("\uFE91", -1, 19),
  new Among("\uFE92", -1, 19),
  new Among("\uFE93", -1, 20),
  new Among("\uFE94", -1, 20),
  new Among("\uFE95", -1, 21),
  new Among("\uFE96", -1, 21),
  new Among("\uFE97", -1, 21),
  new Among("\uFE98", -1, 21),
  new Among("\uFE99", -1, 22),
  new Among("\uFE9A", -1, 22),
  new Among("\uFE9B", -1, 22),
  new Among("\uFE9C", -1, 22),
  new Among("\uFE9D", -1, 23),
  new Among("\uFE9E", -1, 23),
  new Among("\uFE9F", -1, 23),
  new Among("\uFEA0", -1, 23),
  new Among("\uFEA1", -1, 24),
  new Among("\uFEA2", -1, 24),
  new Among("\uFEA3", -1, 24),
  new Among("\uFEA4", -1, 24),
  new Among("\uFEA5", -1, 25),
  new Among("\uFEA6", -1, 25),
  new Among("\uFEA7", -1, 25),
  new Among("\uFEA8", -1, 25),
  new Among("\uFEA9", -1, 26),
  new Among("\uFEAA", -1, 26),
  new Among("\uFEAB", -1, 27),
  new Among("\uFEAC", -1, 27),
  new Among("\uFEAD", -1, 28),
  new Among("\uFEAE", -1, 28),
  new Among("\uFEAF", -1, 29),
  new Among("\uFEB0", -1, 29),
  new Among("\uFEB1", -1, 30),
  new Among("\uFEB2", -1, 30),
  new Among("\uFEB3", -1, 30),
  new Among("\uFEB4", -1, 30),
  new Among("\uFEB5", -1, 31),
  new Among("\uFEB6", -1, 31),
  new Among("\uFEB7", -1, 31),
  new Among("\uFEB8", -1, 31),
  new Among("\uFEB9", -1, 32),
  new Among("\uFEBA", -1, 32),
  new Among("\uFEBB", -1, 32),
  new Among("\uFEBC", -1, 32),
  new Among("\uFEBD", -1, 33),
  new Among("\uFEBE", -1, 33),
  new Among("\uFEBF", -1, 33),
  new Among("\uFEC0", -1, 33),
  new Among("\uFEC1", -1, 34),
  new Among("\uFEC2", -1, 34),
  new Among("\uFEC3", -1, 34),
  new Among("\uFEC4", -1, 34),
  new Among("\uFEC5", -1, 35),
  new Among("\uFEC6", -1, 35),
  new Among("\uFEC7", -1, 35),
  new Among("\uFEC8", -1, 35),
  new Among("\uFEC9", -1, 36),
  new Among("\uFECA", -1, 36),
  new Among("\uFECB", -1, 36),
  new Among("\uFECC", -1, 36),
  new Among("\uFECD", -1, 37),
  new Among("\uFECE", -1, 37),
  new Among("\uFECF", -1, 37),
  new Among("\uFED0", -1, 37),
  new Among("\uFED1", -1, 38),
  new Among("\uFED2", -1, 38),
  new Among("\uFED3", -1, 38),
  new Among("\uFED4", -1, 38),
  new Among("\uFED5", -1, 39),
  new Among("\uFED6", -1, 39),
  new Among("\uFED7", -1, 39),
  new Among("\uFED8", -1, 39),
  new Among("\uFED9", -1, 40),
  new Among("\uFEDA", -1, 40),
  new Among("\uFEDB", -1, 40),
  new Among("\uFEDC", -1, 40),
  new Among("\uFEDD", -1, 41),
  new Among("\uFEDE", -1, 41),
  new Among("\uFEDF", -1, 41),
  new Among("\uFEE0", -1, 41),
  new Among("\uFEE1", -1, 42),
  new Among("\uFEE2", -1, 42),
  new Among("\uFEE3", -1, 42),
  new Among("\uFEE4", -1, 42),
  new Among("\uFEE5", -1, 43),
  new Among("\uFEE6", -1, 43),
  new Among("\uFEE7", -1, 43),
  new Among("\uFEE8", -1, 43),
  new Among("\uFEE9", -1, 44),
  new Among("\uFEEA", -1, 44),
  new Among("\uFEEB", -1, 44),
  new Among("\uFEEC", -1, 44),
  new Among("\uFEED", -1, 45),
  new Among("\uFEEE", -1, 45),
  new Among("\uFEEF", -1, 46),
  new Among("\uFEF0", -1, 46),
  new Among("\uFEF1", -1, 47),
  new Among("\uFEF2", -1, 47),
  new Among("\uFEF3", -1, 47),
  new Among("\uFEF4", -1, 47),
  new Among("\uFEF5", -1, 51),
  new Among("\uFEF6", -1, 51),
  new Among("\uFEF7", -1, 49),
  new Among("\uFEF8", -1, 49),
  new Among("\uFEF9", -1, 50),
  new Among("\uFEFA", -1, 50),
  new Among("\uFEFB", -1, 48),
  new Among("\uFEFC", -1, 48)
};

private final static Among a_1[] = {
  new Among("\u0622", -1, 1),
  new Among("\u0623", -1, 1),
  new Among("\u0624", -1, 1),
  new Among("\u0625", -1, 1),
  new Among("\u0626", -1, 1)
};

private final static Among a_2[] = {
  new Among("\u0622", -1, 1),
  new Among("\u0623", -1, 1),
  new Among("\u0624", -1, 2),
  new Among("\u0625", -1, 1),
  new Among("\u0626", -1, 3)
};

private final static Among a_3[] = {
  new Among("\u0627\u0644", -1, 2),
  new Among("\u0628\u0627\u0644", -1, 1),
  new Among("\u0643\u0627\u0644", -1, 1),
  new Among("\u0644\u0644", -1, 2)
};

private final static Among a_4[] = {
  new Among("\u0623\u0622", -1, 2),
  new Among("\u0623\u0623", -1, 1),
  new Among("\u0623\u0624", -1, 1),
  new Among("\u0623\u0625", -1, 4),
  new Among("\u0623\u0627", -1, 3)
};

private final static Among a_5[] = {
  new Among("\u0641", -1, 1),
  new Among("\u0648", -1, 1)
};

private final static Among a_6[] = {
  new Among("\u0627\u0644", -1, 2),
  new Among("\u0628\u0627\u0644", -1, 1),
  new Among("\u0643\u0627\u0644", -1, 1),
  new Among("\u0644\u0644", -1, 2)
};

private final static Among a_7[] = {
  new Among("\u0628", -1, 1),
  new Among("\u0628\u0628", 0, 2),
  new Among("\u0643\u0643", -1, 3)
};

private final static Among a_8[] = {
  new Among("\u0633\u0623", -1, 4),
  new Among("\u0633\u062A", -1, 2),
  new Among("\u0633\u0646", -1, 3),
  new Among("\u0633\u064A", -1, 1)
};

private final static Among a_9[] = {
  new Among("\u062A\u0633\u062A", -1, 1),
  new Among("\u0646\u0633\u062A", -1, 1),
  new Among("\u064A\u0633\u062A", -1, 1)
};

private final static Among a_10[] = {
  new Among("\u0643\u0645\u0627", -1, 3),
  new Among("\u0647\u0645\u0627", -1, 3),
  new Among("\u0646\u0627", -1, 2),
  new Among("\u0647\u0627", -1, 2),
  new Among("\u0643", -1, 1),
  new Among("\u0643\u0645", -1, 2),
  new Among("\u0647\u0645", -1, 2),
  new Among("\u0647\u0646", -1, 2),
  new Among("\u0647", -1, 1),
  new Among("\u064A", -1, 1)
};

private final static Among a_11[] = {
  new Among("\u0646", -1, 1)
};

private final static Among a_12[] = {
  new Among("\u0627", -1, 1),
  new Among("\u0648", -1, 1),
  new Among("\u064A", -1, 1)
};

private final static Among a_13[] = {
  new Among("\u0627\u062A", -1, 1)
};

private final static Among a_14[] = {
  new Among("\u062A", -1, 1)
};

private final static Among a_15[] = {
  new Among("\u0629", -1, 1)
};

private final static Among a_16[] = {
  new Among("\u064A", -1, 1)
};

private final static Among a_17[] = {
  new Among("\u0643\u0645\u0627", -1, 3),
  new Among("\u0647\u0645\u0627", -1, 3),
  new Among("\u0646\u0627", -1, 2),
  new Among("\u0647\u0627", -1, 2),
  new Among("\u0643", -1, 1),
  new Among("\u0643\u0645", -1, 2),
  new Among("\u0647\u0645", -1, 2),
  new Among("\u0643\u0646", -1, 2),
  new Among("\u0647\u0646", -1, 2),
  new Among("\u0647", -1, 1),
  new Among("\u0643\u0645\u0648", -1, 3),
  new Among("\u0646\u064A", -1, 2)
};

private final static Among a_18[] = {
  new Among("\u0627", -1, 1),
  new Among("\u062A\u0627", 0, 2),
  new Among("\u062A\u0645\u0627", 0, 4),
  new Among("\u0646\u0627", 0, 2),
  new Among("\u062A", -1, 1),
  new Among("\u0646", -1, 1),
  new Among("\u0627\u0646", 5, 3),
  new Among("\u062A\u0646", 5, 2),
  new Among("\u0648\u0646", 5, 3),
  new Among("\u064A\u0646", 5, 3),
  new Among("\u064A", -1, 1)
};

private final static Among a_19[] = {
  new Among("\u0648\u0627", -1, 1),
  new Among("\u062A\u0645", -1, 1)
};

private final static Among a_20[] = {
  new Among("\u0648", -1, 1),
  new Among("\u062A\u0645\u0648", 0, 2)
};

private final static Among a_21[] = {
  new Among("\u0649", -1, 1)
};

private boolean B_is_defined;
private boolean B_is_verb;
private boolean B_is_noun;


private boolean r_Normalize_pre() {
  int among_var;
  int v_1 = cursor;
  lab0: {
    while(true)
    {
      int v_2 = cursor;
      lab1: {
        lab2: {
          int v_3 = cursor;
          lab3: {
            bra = cursor;
            among_var = find_among(a_0);
            if (among_var == 0)
            {
              break lab3;
            }
            ket = cursor;
            switch (among_var) {
              case 1:
                slice_del();
                break;
              case 2:
                slice_from("0");
                break;
              case 3:
                slice_from("1");
                break;
              case 4:
                slice_from("2");
                break;
              case 5:
                slice_from("3");
                break;
              case 6:
                slice_from("4");
                break;
              case 7:
                slice_from("5");
                break;
              case 8:
                slice_from("6");
                break;
              case 9:
                slice_from("7");
                break;
              case 10:
                slice_from("8");
                break;
              case 11:
                slice_from("9");
                break;
              case 12:
                slice_from("\u0621");
                break;
              case 13:
                slice_from("\u0623");
                break;
              case 14:
                slice_from("\u0625");
                break;
              case 15:
                slice_from("\u0626");
                break;
              case 16:
                slice_from("\u0622");
                break;
              case 17:
                slice_from("\u0624");
                break;
              case 18:
                slice_from("\u0627");
                break;
              case 19:
                slice_from("\u0628");
                break;
              case 20:
                slice_from("\u0629");
                break;
              case 21:
                slice_from("\u062A");
                break;
              case 22:
                slice_from("\u062B");
                break;
              case 23:
                slice_from("\u062C");
                break;
              case 24:
                slice_from("\u062D");
                break;
              case 25:
                slice_from("\u062E");
                break;
              case 26:
                slice_from("\u062F");
                break;
              case 27:
                slice_from("\u0630");
                break;
              case 28:
                slice_from("\u0631");
                break;
              case 29:
                slice_from("\u0632");
                break;
              case 30:
                slice_from("\u0633");
                break;
              case 31:
                slice_from("\u0634");
                break;
              case 32:
                slice_from("\u0635");
                break;
              case 33:
                slice_from("\u0636");
                break;
              case 34:
                slice_from("\u0637");
                break;
              case 35:
                slice_from("\u0638");
                break;
              case 36:
                slice_from("\u0639");
                break;
              case 37:
                slice_from("\u063A");
                break;
              case 38:
                slice_from("\u0641");
                break;
              case 39:
                slice_from("\u0642");
                break;
              case 40:
                slice_from("\u0643");
                break;
              case 41:
                slice_from("\u0644");
                break;
              case 42:
                slice_from("\u0645");
                break;
              case 43:
                slice_from("\u0646");
                break;
              case 44:
                slice_from("\u0647");
                break;
              case 45:
                slice_from("\u0648");
                break;
              case 46:
                slice_from("\u0649");
                break;
              case 47:
                slice_from("\u064A");
                break;
              case 48:
                slice_from("\u0644\u0627");
                break;
              case 49:
                slice_from("\u0644\u0623");
                break;
              case 50:
                slice_from("\u0644\u0625");
                break;
              case 51:
                slice_from("\u0644\u0622");
                break;
            }
            break lab2;
          }
          cursor = v_3;
          if (cursor >= limit)
          {
            break lab1;
          }
          cursor++;
        }
        continue;
      }
      cursor = v_2;
      break;
    }
  }
  cursor = v_1;
  return true;
}

private boolean r_Normalize_post() {
  int among_var;
  int v_1 = cursor;
  lab0: {
    limit_backward = cursor;
    cursor = limit;
    ket = cursor;
    if (find_among_b(a_1) == 0)
    {
      break lab0;
    }
    bra = cursor;
    slice_from("\u0621");
    cursor = limit_backward;
  }
  cursor = v_1;
  int v_2 = cursor;
  lab1: {
    while(true)
    {
      int v_3 = cursor;
      lab2: {
        lab3: {
          int v_4 = cursor;
          lab4: {
            bra = cursor;
            among_var = find_among(a_2);
            if (among_var == 0)
            {
              break lab4;
            }
            ket = cursor;
            switch (among_var) {
              case 1:
                slice_from("\u0627");
                break;
              case 2:
                slice_from("\u0648");
                break;
              case 3:
                slice_from("\u064A");
                break;
            }
            break lab3;
          }
          cursor = v_4;
          if (cursor >= limit)
          {
            break lab2;
          }
          cursor++;
        }
        continue;
      }
      cursor = v_3;
      break;
    }
  }
  cursor = v_2;
  return true;
}

private boolean r_Checks1() {
  int among_var;
  bra = cursor;
  among_var = find_among(a_3);
  if (among_var == 0)
  {
    return false;
  }
  ket = cursor;
  switch (among_var) {
    case 1:
      if (!(limit > 4))
      {
        return false;
      }
      B_is_noun = true;
      B_is_verb = false;
      B_is_defined = true;
      break;
    case 2:
      if (!(limit > 3))
      {
        return false;
      }
      B_is_noun = true;
      B_is_verb = false;
      B_is_defined = true;
      break;
  }
  return true;
}

private boolean r_Prefix_Step1() {
  int among_var;
  bra = cursor;
  among_var = find_among(a_4);
  if (among_var == 0)
  {
    return false;
  }
  ket = cursor;
  switch (among_var) {
    case 1:
      if (!(limit > 3))
      {
        return false;
      }
      slice_from("\u0623");
      break;
    case 2:
      if (!(limit > 3))
      {
        return false;
      }
      slice_from("\u0622");
      break;
    case 3:
      if (!(limit > 3))
      {
        return false;
      }
      slice_from("\u0627");
      break;
    case 4:
      if (!(limit > 3))
      {
        return false;
      }
      slice_from("\u0625");
      break;
  }
  return true;
}

private boolean r_Prefix_Step2() {
  {
    int v_1 = cursor;
    lab0: {
      if (!(eq_s("\u0641\u0627")))
      {
        break lab0;
      }
      return false;
    }
    cursor = v_1;
  }
  {
    int v_2 = cursor;
    lab1: {
      if (!(eq_s("\u0648\u0627")))
      {
        break lab1;
      }
      return false;
    }
    cursor = v_2;
  }
  bra = cursor;
  if (find_among(a_5) == 0)
  {
    return false;
  }
  ket = cursor;
  if (!(limit > 3))
  {
    return false;
  }
  slice_del();
  return true;
}

private boolean r_Prefix_Step3a_Noun() {
  int among_var;
  bra = cursor;
  among_var = find_among(a_6);
  if (among_var == 0)
  {
    return false;
  }
  ket = cursor;
  switch (among_var) {
    case 1:
      if (!(limit > 5))
      {
        return false;
      }
      slice_del();
      break;
    case 2:
      if (!(limit > 4))
      {
        return false;
      }
      slice_del();
      break;
  }
  return true;
}

private boolean r_Prefix_Step3b_Noun() {
  int among_var;
  {
    int v_1 = cursor;
    lab0: {
      if (!(eq_s("\u0628\u0627")))
      {
        break lab0;
      }
      return false;
    }
    cursor = v_1;
  }
  bra = cursor;
  among_var = find_among(a_7);
  if (among_var == 0)
  {
    return false;
  }
  ket = cursor;
  switch (among_var) {
    case 1:
      if (!(limit > 3))
      {
        return false;
      }
      slice_del();
      break;
    case 2:
      if (!(limit > 3))
      {
        return false;
      }
      slice_from("\u0628");
      break;
    case 3:
      if (!(limit > 3))
      {
        return false;
      }
      slice_from("\u0643");
      break;
  }
  return true;
}

private boolean r_Prefix_Step3_Verb() {
  int among_var;
  bra = cursor;
  among_var = find_among(a_8);
  if (among_var == 0)
  {
    return false;
  }
  ket = cursor;
  switch (among_var) {
    case 1:
      if (!(limit > 4))
      {
        return false;
      }
      slice_from("\u064A");
      break;
    case 2:
      if (!(limit > 4))
      {
        return false;
      }
      slice_from("\u062A");
      break;
    case 3:
      if (!(limit > 4))
      {
        return false;
      }
      slice_from("\u0646");
      break;
    case 4:
      if (!(limit > 4))
      {
        return false;
      }
      slice_from("\u0623");
      break;
  }
  return true;
}

private boolean r_Prefix_Step4_Verb() {
  bra = cursor;
  if (find_among(a_9) == 0)
  {
    return false;
  }
  ket = cursor;
  if (!(limit > 4))
  {
    return false;
  }
  B_is_verb = true;
  B_is_noun = false;
  slice_from("\u0627\u0633\u062A");
  return true;
}

private boolean r_Suffix_Noun_Step1a() {
  int among_var;
  ket = cursor;
  among_var = find_among_b(a_10);
  if (among_var == 0)
  {
    return false;
  }
  bra = cursor;
  switch (among_var) {
    case 1:
      if (!(limit >= 4))
      {
        return false;
      }
      slice_del();
      break;
    case 2:
      if (!(limit >= 5))
      {
        return false;
      }
      slice_del();
      break;
    case 3:
      if (!(limit >= 6))
      {
        return false;
      }
      slice_del();
      break;
  }
  return true;
}

private boolean r_Suffix_Noun_Step1b() {
  ket = cursor;
  if (find_among_b(a_11) == 0)
  {
    return false;
  }
  bra = cursor;
  if (!(limit > 5))
  {
    return false;
  }
  slice_del();
  return true;
}

private boolean r_Suffix_Noun_Step2a() {
  ket = cursor;
  if (find_among_b(a_12) == 0)
  {
    return false;
  }
  bra = cursor;
  if (!(limit > 4))
  {
    return false;
  }
  slice_del();
  return true;
}

private boolean r_Suffix_Noun_Step2b() {
  ket = cursor;
  if (find_among_b(a_13) == 0)
  {
    return false;
  }
  bra = cursor;
  if (!(limit >= 5))
  {
    return false;
  }
  slice_del();
  return true;
}

private boolean r_Suffix_Noun_Step2c1() {
  ket = cursor;
  if (find_among_b(a_14) == 0)
  {
    return false;
  }
  bra = cursor;
  if (!(limit >= 4))
  {
    return false;
  }
  slice_del();
  return true;
}

private boolean r_Suffix_Noun_Step2c2() {
  ket = cursor;
  if (find_among_b(a_15) == 0)
  {
    return false;
  }
  bra = cursor;
  if (!(limit >= 4))
  {
    return false;
  }
  slice_del();
  return true;
}

private boolean r_Suffix_Noun_Step3() {
  ket = cursor;
  if (find_among_b(a_16) == 0)
  {
    return false;
  }
  bra = cursor;
  if (!(limit >= 3))
  {
    return false;
  }
  slice_del();
  return true;
}

private boolean r_Suffix_Verb_Step1() {
  int among_var;
  ket = cursor;
  among_var = find_among_b(a_17);
  if (among_var == 0)
  {
    return false;
  }
  bra = cursor;
  switch (among_var) {
    case 1:
      if (!(limit >= 4))
      {
        return false;
      }
      slice_del();
      break;
    case 2:
      if (!(limit >= 5))
      {
        return false;
      }
      slice_del();
      break;
    case 3:
      if (!(limit >= 6))
      {
        return false;
      }
      slice_del();
      break;
  }
  return true;
}

private boolean r_Suffix_Verb_Step2a() {
  int among_var;
  ket = cursor;
  among_var = find_among_b(a_18);
  if (among_var == 0)
  {
    return false;
  }
  bra = cursor;
  switch (among_var) {
    case 1:
      if (!(limit >= 4))
      {
        return false;
      }
      slice_del();
      break;
    case 2:
      if (!(limit >= 5))
      {
        return false;
      }
      slice_del();
      break;
    case 3:
      if (!(limit > 5))
      {
        return false;
      }
      slice_del();
      break;
    case 4:
      if (!(limit >= 6))
      {
        return false;
      }
      slice_del();
      break;
  }
  return true;
}

private boolean r_Suffix_Verb_Step2b() {
  ket = cursor;
  if (find_among_b(a_19) == 0)
  {
    return false;
  }
  bra = cursor;
  if (!(limit >= 5))
  {
    return false;
  }
  slice_del();
  return true;
}

private boolean r_Suffix_Verb_Step2c() {
  int among_var;
  ket = cursor;
  among_var = find_among_b(a_20);
  if (among_var == 0)
  {
    return false;
  }
  bra = cursor;
  switch (among_var) {
    case 1:
      if (!(limit >= 4))
      {
        return false;
      }
      slice_del();
      break;
    case 2:
      if (!(limit >= 6))
      {
        return false;
      }
      slice_del();
      break;
  }
  return true;
}

private boolean r_Suffix_All_alef_maqsura() {
  ket = cursor;
  if (find_among_b(a_21) == 0)
  {
    return false;
  }
  bra = cursor;
  slice_from("\u064A");
  return true;
}

public boolean stem() {
  B_is_noun = true;
  B_is_verb = true;
  B_is_defined = false;
  int v_1 = cursor;
  r_Checks1();
  cursor = v_1;
  r_Normalize_pre();
  limit_backward = cursor;
  cursor = limit;
  int v_3 = limit - cursor;
  lab0: {
    lab1: {
      int v_4 = limit - cursor;
      lab2: {
        if (!(B_is_verb))
        {
          break lab2;
        }
        lab3: {
          int v_5 = limit - cursor;
          lab4: {
            {
              int v_6 = 1;
              while(true)
              {
                int v_7 = limit - cursor;
                lab5: {
                  if (!r_Suffix_Verb_Step1())
                  {
                    break lab5;
                  }
                  v_6--;
                  continue;
                }
                cursor = limit - v_7;
                break;
              }
              if (v_6 > 0)
              {
                break lab4;
              }
            }
            lab6: {
              int v_8 = limit - cursor;
              lab7: {
                if (!r_Suffix_Verb_Step2a())
                {
                  break lab7;
                }
                break lab6;
              }
              cursor = limit - v_8;
              lab8: {
                if (!r_Suffix_Verb_Step2c())
                {
                  break lab8;
                }
                break lab6;
              }
              cursor = limit - v_8;
              if (cursor <= limit_backward)
              {
                break lab4;
              }
              cursor--;
            }
            break lab3;
          }
          cursor = limit - v_5;
          lab9: {
            if (!r_Suffix_Verb_Step2b())
            {
              break lab9;
            }
            break lab3;
          }
          cursor = limit - v_5;
          if (!r_Suffix_Verb_Step2a())
          {
            break lab2;
          }
        }
        break lab1;
      }
      cursor = limit - v_4;
      lab10: {
        if (!(B_is_noun))
        {
          break lab10;
        }
        int v_9 = limit - cursor;
        lab11: {
          lab12: {
            int v_10 = limit - cursor;
            lab13: {
              if (!r_Suffix_Noun_Step2c2())
              {
                break lab13;
              }
              break lab12;
            }
            cursor = limit - v_10;
            lab14: {
              lab15: {
                if (!(B_is_defined))
                {
                  break lab15;
                }
                break lab14;
              }
              if (!r_Suffix_Noun_Step1a())
              {
                break lab14;
              }
              lab16: {
                int v_12 = limit - cursor;
                lab17: {
                  if (!r_Suffix_Noun_Step2a())
                  {
                    break lab17;
                  }
                  break lab16;
                }
                cursor = limit - v_12;
                lab18: {
                  if (!r_Suffix_Noun_Step2b())
                  {
                    break lab18;
                  }
                  break lab16;
                }
                cursor = limit - v_12;
                lab19: {
                  if (!r_Suffix_Noun_Step2c1())
                  {
                    break lab19;
                  }
                  break lab16;
                }
                cursor = limit - v_12;
                if (cursor <= limit_backward)
                {
                  break lab14;
                }
                cursor--;
              }
              break lab12;
            }
            cursor = limit - v_10;
            lab20: {
              if (!r_Suffix_Noun_Step1b())
              {
                break lab20;
              }
              lab21: {
                int v_13 = limit - cursor;
                lab22: {
                  if (!r_Suffix_Noun_Step2a())
                  {
                    break lab22;
                  }
                  break lab21;
                }
                cursor = limit - v_13;
                lab23: {
                  if (!r_Suffix_Noun_Step2b())
                  {
                    break lab23;
                  }
                  break lab21;
                }
                cursor = limit - v_13;
                if (!r_Suffix_Noun_Step2c1())
                {
                  break lab20;
                }
              }
              break lab12;
            }
            cursor = limit - v_10;
            lab24: {
              lab25: {
                if (!(B_is_defined))
                {
                  break lab25;
                }
                break lab24;
              }
              if (!r_Suffix_Noun_Step2a())
              {
                break lab24;
              }
              break lab12;
            }
            cursor = limit - v_10;
            if (!r_Suffix_Noun_Step2b())
            {
              cursor = limit - v_9;
              break lab11;
            }
          }
        }
        if (!r_Suffix_Noun_Step3())
        {
          break lab10;
        }
        break lab1;
      }
      cursor = limit - v_4;
      if (!r_Suffix_All_alef_maqsura())
      {
        break lab0;
      }
    }
  }
  cursor = limit - v_3;
  cursor = limit_backward;
  int v_15 = cursor;
  lab26: {
    int v_16 = cursor;
    lab27: {
      if (!r_Prefix_Step1())
      {
        cursor = v_16;
        break lab27;
      }
    }
    int v_17 = cursor;
    lab28: {
      if (!r_Prefix_Step2())
      {
        cursor = v_17;
        break lab28;
      }
    }
    lab29: {
      int v_18 = cursor;
      lab30: {
        if (!r_Prefix_Step3a_Noun())
        {
          break lab30;
        }
        break lab29;
      }
      cursor = v_18;
      lab31: {
        if (!(B_is_noun))
        {
          break lab31;
        }
        if (!r_Prefix_Step3b_Noun())
        {
          break lab31;
        }
        break lab29;
      }
      cursor = v_18;
      if (!(B_is_verb))
      {
        break lab26;
      }
      int v_19 = cursor;
      lab32: {
        if (!r_Prefix_Step3_Verb())
        {
          cursor = v_19;
          break lab32;
        }
      }
      if (!r_Prefix_Step4_Verb())
      {
        break lab26;
      }
    }
  }
  cursor = v_15;
  r_Normalize_post();
  return true;
}

@Override
public boolean equals( Object o ) {
  return o instanceof ArabicStemmer;
}

@Override
public int hashCode() {
  return ArabicStemmer.class.getName().hashCode();
}



}

