You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2020/02/16 00:00:07 UTC

[lucene-solr] branch jira/LUCENE-9220 created (now fc229b1)

This is an automated email from the ASF dual-hosted git repository.

rmuir pushed a change to branch jira/LUCENE-9220
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git.


      at fc229b1  LUCENE-9220 regenerate all stemmers from snowball 2.0

This branch includes the following new commits:

     new fc229b1  LUCENE-9220 regenerate all stemmers from snowball 2.0

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[lucene-solr] 01/01: LUCENE-9220 regenerate all stemmers from snowball 2.0

Posted by rm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rmuir pushed a commit to branch jira/LUCENE-9220
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit fc229b170197e37ffcbdb330e7657939979a7def
Author: Robert Muir <rm...@apache.org>
AuthorDate: Sat Feb 15 18:58:45 2020 -0500

    LUCENE-9220 regenerate all stemmers from snowball 2.0
    
    Instead of patching them after-the-fact (both manually and
    automatically over the years) we patch the generator.
    
    This is easier to maintain than patches/changes against generated code.
    See LUCENE-9220 for more information.
    
    There is a remaining nocommit, test data. Also need to hook in and test
    the new languages that are added here.
---
 lucene/analysis/common/README.txt                  |   19 +-
 lucene/analysis/common/build.xml                   |   12 -
 .../lucene/analysis/snowball/SnowballFilter.java   |   10 +-
 .../snowball/SnowballPorterFilterFactory.java      |    8 +-
 .../src/java/org/tartarus/snowball/Among.java      |  104 +-
 .../org/tartarus/snowball/SnowballProgram.java     |  765 ++-
 .../org/tartarus/snowball/SnowballStemmer.java     |   42 +
 .../org/tartarus/snowball/ext/ArabicStemmer.java   | 3097 +++++------
 .../org/tartarus/snowball/ext/ArmenianStemmer.java |  861 ++--
 .../org/tartarus/snowball/ext/BasqueStemmer.java   | 1710 +++----
 .../org/tartarus/snowball/ext/CatalanStemmer.java  | 1914 ++++---
 .../org/tartarus/snowball/ext/DanishStemmer.java   |  691 +--
 .../org/tartarus/snowball/ext/DutchStemmer.java    | 1445 +++---
 .../org/tartarus/snowball/ext/EnglishStemmer.java  | 2237 ++++----
 .../org/tartarus/snowball/ext/EstonianStemmer.java | 2793 ++++------
 .../org/tartarus/snowball/ext/FinnishStemmer.java  | 1752 +++----
 .../org/tartarus/snowball/ext/FrenchStemmer.java   | 2603 ++++------
 .../org/tartarus/snowball/ext/German2Stemmer.java  | 1245 ++---
 .../org/tartarus/snowball/ext/GermanStemmer.java   | 1180 ++---
 .../org/tartarus/snowball/ext/GreekStemmer.java    | 2539 +++++++++
 .../org/tartarus/snowball/ext/HindiStemmer.java    |  210 +
 .../tartarus/snowball/ext/HungarianStemmer.java    | 1777 +++----
 .../tartarus/snowball/ext/IndonesianStemmer.java   |  392 ++
 .../org/tartarus/snowball/ext/IrishStemmer.java    |  933 ++--
 .../org/tartarus/snowball/ext/ItalianStemmer.java  | 2072 ++++----
 .../java/org/tartarus/snowball/ext/KpStemmer.java  | 3706 ++++++--------
 .../tartarus/snowball/ext/LithuanianStemmer.java   | 1222 ++---
 .../org/tartarus/snowball/ext/LovinsStemmer.java   | 3359 ++++++------
 .../org/tartarus/snowball/ext/NepaliStemmer.java   |  319 ++
 .../tartarus/snowball/ext/NorwegianStemmer.java    |  591 +--
 .../org/tartarus/snowball/ext/PorterStemmer.java   | 1571 +++---
 .../tartarus/snowball/ext/PortugueseStemmer.java   | 1947 +++----
 .../org/tartarus/snowball/ext/RomanianStemmer.java | 1813 +++----
 .../org/tartarus/snowball/ext/RussianStemmer.java  | 1310 +++--
 .../org/tartarus/snowball/ext/SerbianStemmer.java  | 3753 ++++++++++++++
 .../org/tartarus/snowball/ext/SpanishStemmer.java  | 2062 ++++----
 .../org/tartarus/snowball/ext/SwedishStemmer.java  |  583 +--
 .../org/tartarus/snowball/ext/TamilStemmer.java    | 1959 +++++++
 .../org/tartarus/snowball/ext/TurkishStemmer.java  | 5415 ++++++++------------
 .../lucene/analysis/core/TestRandomChains.java     |    6 +-
 .../analysis/snowball/TestSnowballVocab.java       |   11 +-
 lucene/common-build.xml                            |    2 +-
 .../carrot2/LuceneCarrot2StemmerFactory.java       |   12 +-
 43 files changed, 30521 insertions(+), 29531 deletions(-)

diff --git a/lucene/analysis/common/README.txt b/lucene/analysis/common/README.txt
index f3382f8..e98799d 100644
--- a/lucene/analysis/common/README.txt
+++ b/lucene/analysis/common/README.txt
@@ -1,22 +1,11 @@
 Lucene Analyzers README file
 
-This project provides pre-compiled version of the Snowball stemmers
-based on revision 502 of the Tartarus Snowball repository,
-now located at https://github.com/snowballstem/snowball/tree/e103b5c257383ee94a96e7fc58cab3c567bf079b (GitHub),
+This project provides pre-compiled version of the Snowball stemmers,
+now located at https://github.com/snowballstem/snowball/tree/53739a805cfa6c77ff8496dc711dc1c106d987c1 (GitHub),
 together with classes integrating them with the Lucene search engine.
 
-A few changes has been made to the static Snowball code and compiled stemmers:
-
- * Class SnowballProgram is made abstract and contains new abstract method stem() to avoid reflection in Lucene filter class SnowballFilter.
- * All use of StringBuffers has been refactored to StringBuilder for speed.
- * Snowball BSD license header has been added to the Java classes to avoid having RAT adding new ASL headers.
- * Uses Java 7 MethodHandles and fixes method visibility bug: http://article.gmane.org/gmane.comp.search.snowball/1139
-
-If you want to add new stemmers, use the exact revision / Git commit above to generate the Java class, place it
-in src/java/org/tartarus/snowball/ext, and finally execute "ant patch-snowball". The latter will change the APIs
-of the generated class to make it compatible. Already patched classes are not modified.
-The Arabic stemmer has been generated from https://github.com/snowballstem/snowball/blob/master/algorithms/arabic.sbl
-using the latest version of snowball and patched manually.
+The snowball tree needs patches applied to properly generate efficient code for lucene.
+You can find the most recent patch on https://issues.apache.org/jira/browse/LUCENE-9220
 
 IMPORTANT NOTICE ON BACKWARDS COMPATIBILITY!
 
diff --git a/lucene/analysis/common/build.xml b/lucene/analysis/common/build.xml
index ed9f029..c3d4fcc 100644
--- a/lucene/analysis/common/build.xml
+++ b/lucene/analysis/common/build.xml
@@ -29,8 +29,6 @@
 
   <import file="../analysis-module-build.xml"/>
 
-  <property name="snowball.programs.dir" location="src/java/org/tartarus/snowball/ext"/>
-
   <property name="unicode-props-file" location="src/java/org/apache/lucene/analysis/util/UnicodeProps.java"/>
 
   <!-- Because of a bug in JFlex's ant task, HTMLStripCharFilter has to be generated last.   -->
@@ -124,14 +122,4 @@
 
   <target name="regenerate" depends="jflex,unicode-data"/>
 
-  <target name="patch-snowball" description="Patches all snowball programs in '${snowball.programs.dir}' to make them work with MethodHandles">
-      <fileset id="snowball.programs" dir="${snowball.programs.dir}" includes="*Stemmer.java"/>
-      <replaceregexp match="^public class \w+Stemmer\b" replace="@SuppressWarnings(&quot;unused&quot;) \0" flags="m" encoding="UTF-8">
-        <fileset refid="snowball.programs"/>
-      </replaceregexp>
-      <replaceregexp match="private final static \w+Stemmer methodObject\b.*$" replace="/* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();" flags="m" encoding="UTF-8">
-        <fileset refid="snowball.programs"/>
-      </replaceregexp>
-      <fixcrlf srcdir="${snowball.programs.dir}" includes="*Stemmer.java" tab="remove" tablength="2" encoding="UTF-8" javafiles="yes" fixlast="yes"/>
-  </target>
 </project>
diff --git a/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballFilter.java b/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballFilter.java
index ceec615..2749879 100644
--- a/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballFilter.java
+++ b/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballFilter.java
@@ -25,7 +25,7 @@ import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
 import org.apache.lucene.analysis.tokenattributes.KeywordAttribute;
 import org.apache.lucene.analysis.tr.TurkishLowerCaseFilter; // javadoc @link
-import org.tartarus.snowball.SnowballProgram;
+import org.tartarus.snowball.SnowballStemmer;
 
 /**
  * A filter that stems words using a Snowball-generated stemmer.
@@ -51,12 +51,12 @@ import org.tartarus.snowball.SnowballProgram;
  */
 public final class SnowballFilter extends TokenFilter {
 
-  private final SnowballProgram stemmer;
+  private final SnowballStemmer stemmer;
 
   private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
   private final KeywordAttribute keywordAttr = addAttribute(KeywordAttribute.class);
 
-  public SnowballFilter(TokenStream input, SnowballProgram stemmer) {
+  public SnowballFilter(TokenStream input, SnowballStemmer stemmer) {
     super(input);
     this.stemmer = stemmer;
   }
@@ -76,8 +76,8 @@ public final class SnowballFilter extends TokenFilter {
     //Class.forName is frowned upon in place of the ResourceLoader but in this case,
     // the factory will use the other constructor so that the program is already loaded.
     try {
-      Class<? extends SnowballProgram> stemClass =
-        Class.forName("org.tartarus.snowball.ext." + name + "Stemmer").asSubclass(SnowballProgram.class);
+      Class<? extends SnowballStemmer> stemClass =
+        Class.forName("org.tartarus.snowball.ext." + name + "Stemmer").asSubclass(SnowballStemmer.class);
       stemmer = stemClass.getConstructor().newInstance();
     } catch (Exception e) {
       throw new IllegalArgumentException("Invalid stemmer class specified: " + name, e);
diff --git a/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballPorterFilterFactory.java b/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballPorterFilterFactory.java
index f61d732..633ebc5 100644
--- a/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballPorterFilterFactory.java
+++ b/lucene/analysis/common/src/java/org/apache/lucene/analysis/snowball/SnowballPorterFilterFactory.java
@@ -27,7 +27,7 @@ import org.apache.lucene.analysis.miscellaneous.SetKeywordMarkerFilter;
 import org.apache.lucene.analysis.util.ResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoaderAware;
 import org.apache.lucene.analysis.util.TokenFilterFactory;
-import org.tartarus.snowball.SnowballProgram;
+import org.tartarus.snowball.SnowballStemmer;
 
 /**
  * Factory for {@link SnowballFilter}, with configurable language
@@ -54,7 +54,7 @@ public class SnowballPorterFilterFactory extends TokenFilterFactory implements R
 
   private final String language;
   private final String wordFiles;
-  private Class<? extends SnowballProgram> stemClass;
+  private Class<? extends SnowballStemmer> stemClass;
   private CharArraySet protectedWords = null;
   
   /** Creates a new SnowballPorterFilterFactory */
@@ -70,7 +70,7 @@ public class SnowballPorterFilterFactory extends TokenFilterFactory implements R
   @Override
   public void inform(ResourceLoader loader) throws IOException {
     String className = "org.tartarus.snowball.ext." + language + "Stemmer";
-    stemClass = loader.newInstance(className, SnowballProgram.class).getClass();
+    stemClass = loader.newInstance(className, SnowballStemmer.class).getClass();
 
     if (wordFiles != null) {
       protectedWords = getWordSet(loader, wordFiles, false);
@@ -79,7 +79,7 @@ public class SnowballPorterFilterFactory extends TokenFilterFactory implements R
 
   @Override
   public TokenFilter create(TokenStream input) {
-    SnowballProgram program;
+    SnowballStemmer program;
     try {
       program = stemClass.getConstructor().newInstance();
     } catch (Exception e) {
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/Among.java b/lucene/analysis/common/src/java/org/tartarus/snowball/Among.java
index 964e0c8..0596d05 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/Among.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/Among.java
@@ -1,34 +1,34 @@
 /*
+   Copyright (c) 2001, Dr Martin Porter
+   Copyright (c) 2004,2005, Richard Boulton
+   Copyright (c) 2013, Yoshiki Shibukawa
+   Copyright (c) 2006,2007,2009,2010,2011,2014-2019, Olly Betts
+   All rights reserved.
 
-Copyright (c) 2001, Dr Martin Porter
-Copyright (c) 2002, Richard Boulton
-All rights reserved.
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
 
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-    * this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-    * notice, this list of conditions and the following disclaimer in the
-    * documentation and/or other materials provided with the distribution.
-    * Neither the name of the copyright holders nor the names of its contributors
-    * may be used to endorse or promote products derived from this software
-    * without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- */
+   1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+   3. Neither the name of the Snowball project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
 
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   */
 package org.tartarus.snowball;
 
 import java.lang.invoke.MethodHandle;
@@ -37,47 +37,41 @@ import java.lang.invoke.MethodType;
 import java.util.Locale;
 
 /**
- * This is the rev 502 of the Snowball SVN trunk,
- * now located at <a target="_blank" href="https://github.com/snowballstem/snowball/tree/e103b5c257383ee94a96e7fc58cab3c567bf079b">GitHub</a>,
- * but modified:
- * <ul>
- * <li>made abstract and introduced abstract method stem to avoid expensive reflection in filter class.
- * <li>refactored StringBuffers to StringBuilder
- * <li>uses char[] as buffer instead of StringBuffer/StringBuilder
- * <li>eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b
- * <li>use MethodHandles and fix <a target="_blank" href="http://article.gmane.org/gmane.comp.search.snowball/1139">method visibility bug</a>.
- * </ul>
+ * Internal class used by Snowball stemmers
  */
-public final class Among {
-  
-  public Among(String s, int substring_i, int result,
-               String methodname, MethodHandles.Lookup methodobject) {
-    this.s_size = s.length();
+public class Among {
+  public Among (String s, int substring_i, int result) {
     this.s = s.toCharArray();
     this.substring_i = substring_i;
     this.result = result;
-    if (methodname.isEmpty()) {
-      this.method = null;
-    } else {
-      final Class<? extends SnowballProgram> clazz = methodobject.lookupClass().asSubclass(SnowballProgram.class);
+    this.method = null;
+  }
+
+  public Among (String s, int substring_i, int result, String methodname,
+      MethodHandles.Lookup methodobject) {
+    this.s = s.toCharArray();
+    this.substring_i = substring_i;
+    this.result = result;
+    final Class<? extends SnowballProgram> clazz = methodobject.lookupClass().asSubclass(SnowballProgram.class);
+    if (methodname.length() > 0) {
       try {
         this.method = methodobject.findVirtual(clazz, methodname, MethodType.methodType(boolean.class))
-            .asType(MethodType.methodType(boolean.class, SnowballProgram.class));
+          .asType(MethodType.methodType(boolean.class, SnowballProgram.class));
       } catch (NoSuchMethodException | IllegalAccessException e) {
         throw new RuntimeException(String.format(Locale.ENGLISH,
-            "Snowball program '%s' is broken, cannot access method: boolean %s()",
-            clazz.getSimpleName(), methodname
-        ), e);
+              "Snowball program '%s' is broken, cannot access method: boolean %s()",
+              clazz.getSimpleName(), methodname
+              ), e);
       }
+    } else {
+      this.method = null;
     }
   }
 
-  final int s_size; /* search string */
   final char[] s; /* search string */
   final int substring_i; /* index to longest matching substring */
-  final int result;      /* result of the lookup */
-  
+  final int result; /* result of the lookup */
+
   // Make sure this is not accessible outside package for Java security reasons!
   final MethodHandle method; /* method to use if substring matches */
-  
-}
\ No newline at end of file
+};
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballProgram.java b/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballProgram.java
index c31065f..a532b4e 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballProgram.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballProgram.java
@@ -1,407 +1,370 @@
 /*
-
-Copyright (c) 2001, Dr Martin Porter
-Copyright (c) 2002, Richard Boulton
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-    * this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-    * notice, this list of conditions and the following disclaimer in the
-    * documentation and/or other materials provided with the distribution.
-    * Neither the name of the copyright holders nor the names of its contributors
-    * may be used to endorse or promote products derived from this software
-    * without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- */
+   Copyright (c) 2001, Dr Martin Porter
+   Copyright (c) 2004,2005, Richard Boulton
+   Copyright (c) 2013, Yoshiki Shibukawa
+   Copyright (c) 2006,2007,2009,2010,2011,2014-2019, Olly Betts
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+   3. Neither the name of the Snowball project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   */
 
 package org.tartarus.snowball;
-
 import java.lang.reflect.UndeclaredThrowableException;
-
-import org.apache.lucene.util.ArrayUtil;
+import java.io.Serializable;
 
 /**
- * This is the rev 502 of the Snowball SVN trunk,
- * now located at <a target="_blank" href="https://github.com/snowballstem/snowball/tree/e103b5c257383ee94a96e7fc58cab3c567bf079b">GitHub</a>,
- * but modified:
- * <ul>
- * <li>made abstract and introduced abstract method stem to avoid expensive reflection in filter class.
- * <li>refactored StringBuffers to StringBuilder
- * <li>uses char[] as buffer instead of StringBuffer/StringBuilder
- * <li>eq_s,eq_s_b,insert,replace_s take CharSequence like eq_v and eq_v_b
- * <li>use MethodHandles and fix <a target="_blank" href="http://article.gmane.org/gmane.comp.search.snowball/1139">method visibility bug</a>.
- * </ul>
+ * Base class for a snowball stemmer
  */
-public abstract class SnowballProgram {
-
-    protected SnowballProgram()
-    {
-      current = new char[8];
-      setCurrent("");
-    }
-
-    public abstract boolean stem();
-
-    /**
-     * Set the current string.
-     */
-    public void setCurrent(String value)
-    {
-      current = value.toCharArray();
-      cursor = 0;
-      limit = value.length();
-      limit_backward = 0;
-      bra = cursor;
-      ket = limit;
-    }
+public class SnowballProgram implements Serializable {
+  protected SnowballProgram()
+  {
+    current = new char[8];
+    setCurrent("");
+  }
 
-    /**
-     * Get the current string.
-     */
-    public String getCurrent()
-    {
-      return new String(current, 0, limit);
-    }
-    
-    /**
-     * Set the current string.
-     * @param text character array containing input
-     * @param length valid length of text.
-     */
-    public void setCurrent(char text[], int length) {
-      current = text;
-      cursor = 0;
-      limit = length;
-      limit_backward = 0;
-      bra = cursor;
-      ket = limit;
-    }
+  static final long serialVersionUID = 2016072500L;
+
+  /**
+   * Set the current string.
+   */
+  public void setCurrent(String value)
+  {
+    current = value.toCharArray();
+    cursor = 0;
+    limit = value.length();
+    limit_backward = 0;
+    bra = cursor;
+    ket = limit;
+  }
 
-    /**
-     * Get the current buffer containing the stem.
-     * <p>
-     * NOTE: this may be a reference to a different character array than the
-     * one originally provided with setCurrent, in the exceptional case that 
-     * stemming produced a longer intermediate or result string. 
-     * </p>
-     * <p>
-     * It is necessary to use {@link #getCurrentBufferLength()} to determine
-     * the valid length of the returned buffer. For example, many words are
-     * stemmed simply by subtracting from the length to remove suffixes.
-     * </p>
-     * @see #getCurrentBufferLength()
-     */
-    public char[] getCurrentBuffer() {
-      return current;
-    }
-    
-    /**
-     * Get the valid length of the character array in 
-     * {@link #getCurrentBuffer()}. 
-     * @return valid length of the array.
-     */
-    public int getCurrentBufferLength() {
-      return limit;
-    }
+  /**
+   * Get the current string.
+   */
+  public String getCurrent()
+  {
+    return new String(current, 0, limit);
+  }
 
-    // current string
-    private char current[];
+  /**
+   * Set the current string.
+   * @param text character array containing input
+   * @param length valid length of text.
+   */
+  public void setCurrent(char text[], int length) {
+    current = text;
+    cursor = 0;
+    limit = length;
+    limit_backward = 0;
+    bra = cursor;
+    ket = limit;
+  }
 
-    protected int cursor;
-    protected int limit;
-    protected int limit_backward;
-    protected int bra;
-    protected int ket;
+  /**
+   * Get the current buffer containing the stem.
+   * <p>
+   * NOTE: this may be a reference to a different character array than the
+   * one originally provided with setCurrent, in the exceptional case that
+   * stemming produced a longer intermediate or result string.
+   * </p>
+   * <p>
+   * It is necessary to use {@link #getCurrentBufferLength()} to determine
+   * the valid length of the returned buffer. For example, many words are
+   * stemmed simply by subtracting from the length to remove suffixes.
+   * </p>
+   * @see #getCurrentBufferLength()
+   */
+  public char[] getCurrentBuffer() {
+    return current;
+  }
 
-    protected void copy_from(SnowballProgram other)
-    {
-      current          = other.current;
-      cursor           = other.cursor;
-      limit            = other.limit;
-      limit_backward   = other.limit_backward;
-      bra              = other.bra;
-      ket              = other.ket;
-    }
+  /**
+   * Get the valid length of the character array in
+   * {@link #getCurrentBuffer()}.
+   * @return valid length of the array.
+   */
+  public int getCurrentBufferLength() {
+    return limit;
+  }
 
-    protected boolean in_grouping(char [] s, int min, int max)
-    {
-      if (cursor >= limit) return false;
-      char ch = current[cursor];
-      if (ch > max || ch < min) return false;
-      ch -= min;
-      if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false;
-      cursor++;
-      return true;
-    }
+  // current string
+  private char current[];
+
+  protected int cursor;
+  protected int limit;
+  protected int limit_backward;
+  protected int bra;
+  protected int ket;
+
+  public SnowballProgram(SnowballProgram other) {
+    current          = other.current;
+    cursor           = other.cursor;
+    limit            = other.limit;
+    limit_backward   = other.limit_backward;
+    bra              = other.bra;
+    ket              = other.ket;
+  }
 
-    protected boolean in_grouping_b(char [] s, int min, int max)
-    {
-      if (cursor <= limit_backward) return false;
-      char ch = current[cursor - 1];
-      if (ch > max || ch < min) return false;
-      ch -= min;
-      if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false;
-      cursor--;
-      return true;
-    }
+  protected void copy_from(SnowballProgram other)
+  {
+    current          = other.current;
+    cursor           = other.cursor;
+    limit            = other.limit;
+    limit_backward   = other.limit_backward;
+    bra              = other.bra;
+    ket              = other.ket;
+  }
 
-    protected boolean out_grouping(char [] s, int min, int max)
-    {
-      if (cursor >= limit) return false;
-      char ch = current[cursor];
-      if (ch > max || ch < min) {
-          cursor++;
-          return true;
-      }
-      ch -= min;
-      if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) {
-          cursor ++;
-          return true;
-      }
-      return false;
-    }
+  protected boolean in_grouping(char [] s, int min, int max)
+  {
+    if (cursor >= limit) return false;
+    char ch = current[cursor];
+    if (ch > max || ch < min) return false;
+    ch -= min;
+    if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false;
+    cursor++;
+    return true;
+  }
 
-    protected boolean out_grouping_b(char [] s, int min, int max)
-    {
-      if (cursor <= limit_backward) return false;
-      char ch = current[cursor - 1];
-      if (ch > max || ch < min) {
-          cursor--;
-          return true;
-      }
-      ch -= min;
-      if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) {
-          cursor--;
-          return true;
-      }
-      return false;
-    }
+  protected boolean in_grouping_b(char [] s, int min, int max)
+  {
+    if (cursor <= limit_backward) return false;
+    char ch = current[cursor - 1];
+    if (ch > max || ch < min) return false;
+    ch -= min;
+    if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return false;
+    cursor--;
+    return true;
+  }
 
-    protected boolean in_range(int min, int max)
-    {
-      if (cursor >= limit) return false;
-      char ch = current[cursor];
-      if (ch > max || ch < min) return false;
+  protected boolean out_grouping(char [] s, int min, int max)
+  {
+    if (cursor >= limit) return false;
+    char ch = current[cursor];
+    if (ch > max || ch < min) {
       cursor++;
       return true;
     }
-
-    protected boolean in_range_b(int min, int max)
-    {
-      if (cursor <= limit_backward) return false;
-      char ch = current[cursor - 1];
-      if (ch > max || ch < min) return false;
-      cursor--;
-      return true;
-    }
-
-    protected boolean out_range(int min, int max)
-    {
-      if (cursor >= limit) return false;
-      char ch = current[cursor];
-      if (!(ch > max || ch < min)) return false;
+    ch -= min;
+    if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) {
       cursor++;
       return true;
     }
+    return false;
+  }
 
-    protected boolean out_range_b(int min, int max)
-    {
-      if (cursor <= limit_backward) return false;
-      char ch = current[cursor - 1];
-      if(!(ch > max || ch < min)) return false;
+  protected boolean out_grouping_b(char [] s, int min, int max)
+  {
+    if (cursor <= limit_backward) return false;
+    char ch = current[cursor - 1];
+    if (ch > max || ch < min) {
       cursor--;
       return true;
     }
-
-    protected boolean eq_s(int s_size, CharSequence s)
-    {
-      if (limit - cursor < s_size) return false;
-      int i;
-      for (i = 0; i != s_size; i++) {
-          if (current[cursor + i] != s.charAt(i)) return false;
-      }
-      cursor += s_size;
-      return true;
-    }
-
-    protected boolean eq_s_b(int s_size, CharSequence s)
-    {
-      if (cursor - limit_backward < s_size) return false;
-      int i;
-      for (i = 0; i != s_size; i++) {
-          if (current[cursor - s_size + i] != s.charAt(i)) return false;
-      }
-      cursor -= s_size;
+    ch -= min;
+    if ((s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) {
+      cursor--;
       return true;
     }
+    return false;
+  }
 
-    protected boolean eq_v(CharSequence s)
-    {
-      return eq_s(s.length(), s);
+  protected boolean eq_s(CharSequence s)
+  {
+    if (limit - cursor < s.length()) return false;
+    int i;
+    for (i = 0; i != s.length(); i++) {
+      if (current[cursor + i] != s.charAt(i)) return false;
     }
+    cursor += s.length();
+    return true;
+  }
 
-    protected boolean eq_v_b(CharSequence s)
-    {
-      return eq_s_b(s.length(), s);
+  protected boolean eq_s_b(CharSequence s)
+  {
+    if (cursor - limit_backward < s.length()) return false;
+    int i;
+    for (i = 0; i != s.length(); i++) {
+      if (current[cursor - s.length() + i] != s.charAt(i)) return false;
     }
+    cursor -= s.length();
+    return true;
+  }
 
-    protected int find_among(Among v[], int v_size)
-    {
-      int i = 0;
-      int j = v_size;
-
-      int c = cursor;
-      int l = limit;
-
-      int common_i = 0;
-      int common_j = 0;
-
-      boolean first_key_inspected = false;
-
-      while (true) {
-        int k = i + ((j - i) >> 1);
-        int diff = 0;
-        int common = common_i < common_j ? common_i : common_j; // smaller
-        Among w = v[k];
-        int i2;
-        for (i2 = common; i2 < w.s_size; i2++) {
-          if (c + common == l) {
-            diff = -1;
-            break;
-          }
-          diff = current[c + common] - w.s[i2];
-          if (diff != 0) break;
-          common++;
-        }
-        if (diff < 0) {
-          j = k;
-          common_j = common;
-        } else {
-          i = k;
-          common_i = common;
+  protected int find_among(Among v[])
+  {
+    int i = 0;
+    int j = v.length;
+
+    int c = cursor;
+    int l = limit;
+
+    int common_i = 0;
+    int common_j = 0;
+
+    boolean first_key_inspected = false;
+
+    while (true) {
+      int k = i + ((j - i) >> 1);
+      int diff = 0;
+      int common = common_i < common_j ? common_i : common_j; // smaller
+      Among w = v[k];
+      int i2;
+      for (i2 = common; i2 < w.s.length; i2++) {
+        if (c + common == l) {
+          diff = -1;
+          break;
         }
-        if (j - i <= 1) {
-          if (i > 0) break; // v->s has been inspected
-          if (j == i) break; // only one item in v
+        diff = current[c + common] - w.s[i2];
+        if (diff != 0) break;
+        common++;
+      }
+      if (diff < 0) {
+        j = k;
+        common_j = common;
+      } else {
+        i = k;
+        common_i = common;
+      }
+      if (j - i <= 1) {
+        if (i > 0) break; // v->s has been inspected
+        if (j == i) break; // only one item in v
 
-          // - but now we need to go round once more to get
-          // v->s inspected. This looks messy, but is actually
-          // the optimal approach.
+        // - but now we need to go round once more to get
+        // v->s inspected. This looks messy, but is actually
+        // the optimal approach.
 
-          if (first_key_inspected) break;
-          first_key_inspected = true;
-        }
+        if (first_key_inspected) break;
+        first_key_inspected = true;
       }
-      while (true) {
-        Among w = v[i];
-        if (common_i >= w.s_size) {
-          cursor = c + w.s_size;
-          if (w.method == null) return w.result;
-          boolean res = false;
-          try {
-            res = (boolean) w.method.invokeExact(this);
-          } catch (Error | RuntimeException e) {
-            throw e;
-          } catch (Throwable e) {
-            throw new UndeclaredThrowableException(e);
-          }
-          cursor = c + w.s_size;
-          if (res) return w.result;
+    }
+    while (true) {
+      Among w = v[i];
+      if (common_i >= w.s.length) {
+        cursor = c + w.s.length;
+        if (w.method == null) return w.result;
+        boolean res = false;
+        try {
+          res = (boolean) w.method.invokeExact(this);
+        } catch (Error | RuntimeException e) {
+          throw e;
+        } catch (Throwable e) {
+          throw new UndeclaredThrowableException(e);
         }
-        i = w.substring_i;
-        if (i < 0) return 0;
+        cursor = c + w.s.length;
+        if (res) return w.result;
       }
+      i = w.substring_i;
+      if (i < 0) return 0;
     }
+  }
 
   // find_among_b is for backwards processing. Same comments apply
-    protected int find_among_b(Among v[], int v_size)
-    {
-  int i = 0;
-  int j = v_size;
-
-  int c = cursor;
-  int lb = limit_backward;
-
-  int common_i = 0;
-  int common_j = 0;
-
-  boolean first_key_inspected = false;
-
-      while (true) {
-        int k = i + ((j - i) >> 1);
-        int diff = 0;
-        int common = common_i < common_j ? common_i : common_j;
-        Among w = v[k];
-        int i2;
-        for (i2 = w.s_size - 1 - common; i2 >= 0; i2--) {
-          if (c - common == lb) {
-            diff = -1;
-            break;
-          }
-          diff = current[c - 1 - common] - w.s[i2];
-          if (diff != 0) break;
-          common++;
-        }
-        if (diff < 0) {
-          j = k;
-          common_j = common;
-        } else {
-          i = k;
-          common_i = common;
-        }
-        if (j - i <= 1) {
-          if (i > 0) break;
-          if (j == i) break;
-          if (first_key_inspected) break;
-          first_key_inspected = true;
+  protected int find_among_b(Among v[])
+  {
+    int i = 0;
+    int j = v.length;
+
+    int c = cursor;
+    int lb = limit_backward;
+
+    int common_i = 0;
+    int common_j = 0;
+
+    boolean first_key_inspected = false;
+
+    while (true) {
+      int k = i + ((j - i) >> 1);
+      int diff = 0;
+      int common = common_i < common_j ? common_i : common_j;
+      Among w = v[k];
+      int i2;
+      for (i2 = w.s.length - 1 - common; i2 >= 0; i2--) {
+        if (c - common == lb) {
+          diff = -1;
+          break;
         }
+        diff = current[c - 1 - common] - w.s[i2];
+        if (diff != 0) break;
+        common++;
       }
-      while (true) {
-        Among w = v[i];
-        if (common_i >= w.s_size) {
-          cursor = c - w.s_size;
-          if (w.method == null) return w.result;
-
-          boolean res = false;
-          try {
-            res = (boolean) w.method.invokeExact(this);
-          } catch (Error | RuntimeException e) {
-            throw e;
-          } catch (Throwable e) {
-            throw new UndeclaredThrowableException(e);
-          }
-          cursor = c - w.s_size;
-          if (res) return w.result;
+      if (diff < 0) {
+        j = k;
+        common_j = common;
+      } else {
+        i = k;
+        common_i = common;
+      }
+      if (j - i <= 1) {
+        if (i > 0) break;
+        if (j == i) break;
+        if (first_key_inspected) break;
+        first_key_inspected = true;
+      }
+    }
+    while (true) {
+      Among w = v[i];
+      if (common_i >= w.s.length) {
+        cursor = c - w.s.length;
+        if (w.method == null) return w.result;
+
+        boolean res = false;
+        try {
+          res = (boolean) w.method.invokeExact(this);
+        } catch (Error | RuntimeException e) {
+          throw e;
+        } catch (Throwable e) {
+          throw new UndeclaredThrowableException(e);
         }
-        i = w.substring_i;
-        if (i < 0) return 0;
+        cursor = c - w.s.length;
+        if (res) return w.result;
       }
+      i = w.substring_i;
+      if (i < 0) return 0;
     }
+  }
+
+  // mini version of ArrayUtil.oversize from lucene, specialized to chars
+  static int oversize(int minTargetSize) {
+    int extra = minTargetSize >> 3;
+    if (extra < 3) {
+      extra = 3;
+    }
+    int newSize = minTargetSize + extra;
+    return (newSize + 3) & 0x7ffffffc;
+  }
 
   /* to replace chars between c_bra and c_ket in current by the
-     * chars in s.
-     */
-  protected int replace_s(int c_bra, int c_ket, CharSequence s) {
+   * chars in s.
+   */
+  protected int replace_s(int c_bra, int c_ket, CharSequence s)
+  {
     final int adjustment = s.length() - (c_ket - c_bra);
     final int newLength = limit + adjustment;
     //resize if necessary
     if (newLength > current.length) {
-      char newBuffer[] = new char[ArrayUtil.oversize(newLength, Character.BYTES)];
+      char newBuffer[] = new char[oversize(newLength)];
       System.arraycopy(current, 0, newBuffer, 0, limit);
       current = newBuffer;
     }
@@ -423,73 +386,69 @@ public abstract class SnowballProgram {
     return adjustment;
   }
 
-  protected void slice_check() {
+  protected void slice_check()
+  {
     if (bra < 0 ||
         bra > ket ||
-        ket > limit) {
+        ket > limit)
+    {
       throw new IllegalArgumentException("faulty slice operation: bra=" + bra + ",ket=" + ket + ",limit=" + limit);
-      // FIXME: report error somehow.
-      /*
-      fprintf(stderr, "faulty slice operation:\n");
-      debug(z, -1, 0);
-      exit(1);
-      */
     }
   }
 
-  protected void slice_from(CharSequence s) {
+  protected void slice_from(CharSequence s)
+  {
     slice_check();
     replace_s(bra, ket, s);
   }
 
-  protected void slice_del() {
-    slice_from((CharSequence) "");
+  protected void slice_del()
+  {
+    slice_from("");
   }
 
   protected void insert(int c_bra, int c_ket, CharSequence s)
-    {
-      int adjustment = replace_s(c_bra, c_ket, s);
-      if (c_bra <= bra) bra += adjustment;
-      if (c_bra <= ket) ket += adjustment;
-    }
+  {
+    int adjustment = replace_s(c_bra, c_ket, s);
+    if (c_bra <= bra) bra += adjustment;
+    if (c_bra <= ket) ket += adjustment;
+  }
 
-    /* Copy the slice into the supplied StringBuffer */
-    protected StringBuilder slice_to(StringBuilder s)
-    {
-      slice_check();
-      int len = ket - bra;
-      s.setLength(0);
-      s.append(current, bra, len);
-      return s;
-    }
+  /* Copy the slice into the supplied StringBuilder */
+  protected void slice_to(StringBuilder s)
+  {
+    slice_check();
+    int len = ket - bra;
+    s.setLength(0);
+    s.append(current, bra, len);
+  }
 
-    protected StringBuilder assign_to(StringBuilder s)
-    {
-      s.setLength(0);
-      s.append(current, 0, limit);
-      return s;
-    }
+  protected void assign_to(StringBuilder s)
+  {
+    s.setLength(0);
+    s.append(current, 0, limit);
+  }
 
-/*
-extern void debug(struct SN_env * z, int number, int line_count)
-{   int i;
-    int limit = SIZE(z->p);
-    //if (number >= 0) printf("%3d (line %4d): '", number, line_count);
-    if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit);
-    for (i = 0; i <= limit; i++)
-    {   if (z->lb == i) printf("{");
-        if (z->bra == i) printf("[");
-        if (z->c == i) printf("|");
-        if (z->ket == i) printf("]");
-        if (z->l == i) printf("}");
-        if (i < limit)
-        {   int ch = z->p[i];
-            if (ch == 0) ch = '#';
-            printf("%c", ch);
-        }
-    }
-    printf("'\n");
-}
-*/
-};
+  /*
+     extern void debug(struct SN_env * z, int number, int line_count)
+     {   int i;
+     int limit = SIZE(z->p);
+  //if (number >= 0) printf("%3d (line %4d): '", number, line_count);
+  if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit);
+  for (i = 0; i <= limit; i++)
+  {   if (z->lb == i) printf("{");
+  if (z->bra == i) printf("[");
+  if (z->c == i) printf("|");
+  if (z->ket == i) printf("]");
+  if (z->l == i) printf("}");
+  if (i < limit)
+  {   int ch = z->p[i];
+  if (ch == 0) ch = '#';
+  printf("%c", ch);
+  }
+  }
+  printf("'\n");
+     }
+     */
 
+};
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballStemmer.java
new file mode 100644
index 0000000..9c91b1d
--- /dev/null
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/SnowballStemmer.java
@@ -0,0 +1,42 @@
+/*
+   Copyright (c) 2001, Dr Martin Porter
+   Copyright (c) 2004,2005, Richard Boulton
+   Copyright (c) 2013, Yoshiki Shibukawa
+   Copyright (c) 2006,2007,2009,2010,2011,2014-2019, Olly Betts
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+   2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+   3. Neither the name of the Snowball project nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+   */
+
+package org.tartarus.snowball;
+
+/**
+ * Parent class of all snowball stemmers, which must implement <code>stem</code>
+ */
+public abstract class SnowballStemmer extends SnowballProgram {
+  public abstract boolean stem();
+
+  static final long serialVersionUID = 2016072500L;
+};
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java
index 2b907b2..03be077 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArabicStemmer.java
@@ -1,1912 +1,1363 @@
-// This file was generated automatically by the Snowball to Java compiler
-// http://snowballstem.org/
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
 
 /**
- * This class was automatically generated by a Snowball to Java compiler
- * It implements the stemming algorithm defined by a snowball script.
+ * 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 {
 
-@SuppressWarnings("unused") public class ArabicStemmer extends org.tartarus.snowball.SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-    private static final long serialVersionUID = 1L; 
+  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)
+  };
 
- /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  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_0[] = {
-        new Among("\u0640", -1, 2, "", methodObject),
-        new Among("\u064B", -1, 1, "", methodObject),
-        new Among("\u064C", -1, 1, "", methodObject),
-        new Among("\u064D", -1, 1, "", methodObject),
-        new Among("\u064E", -1, 1, "", methodObject),
-        new Among("\u064F", -1, 1, "", methodObject),
-        new Among("\u0650", -1, 1, "", methodObject),
-        new Among("\u0651", -1, 1, "", methodObject),
-        new Among("\u0652", -1, 1, "", methodObject),
-        new Among("\u0660", -1, 3, "", methodObject),
-        new Among("\u0661", -1, 4, "", methodObject),
-        new Among("\u0662", -1, 5, "", methodObject),
-        new Among("\u0663", -1, 6, "", methodObject),
-        new Among("\u0664", -1, 7, "", methodObject),
-        new Among("\u0665", -1, 8, "", methodObject),
-        new Among("\u0666", -1, 9, "", methodObject),
-        new Among("\u0667", -1, 10, "", methodObject),
-        new Among("\u0668", -1, 11, "", methodObject),
-        new Among("\u0669", -1, 12, "", methodObject),
-        new Among("\uFE80", -1, 13, "", methodObject),
-        new Among("\uFE81", -1, 17, "", methodObject),
-        new Among("\uFE82", -1, 17, "", methodObject),
-        new Among("\uFE83", -1, 14, "", methodObject),
-        new Among("\uFE84", -1, 14, "", methodObject),
-        new Among("\uFE85", -1, 18, "", methodObject),
-        new Among("\uFE86", -1, 18, "", methodObject),
-        new Among("\uFE87", -1, 15, "", methodObject),
-        new Among("\uFE88", -1, 15, "", methodObject),
-        new Among("\uFE89", -1, 16, "", methodObject),
-        new Among("\uFE8A", -1, 16, "", methodObject),
-        new Among("\uFE8B", -1, 16, "", methodObject),
-        new Among("\uFE8C", -1, 16, "", methodObject),
-        new Among("\uFE8D", -1, 19, "", methodObject),
-        new Among("\uFE8E", -1, 19, "", methodObject),
-        new Among("\uFE8F", -1, 20, "", methodObject),
-        new Among("\uFE90", -1, 20, "", methodObject),
-        new Among("\uFE91", -1, 20, "", methodObject),
-        new Among("\uFE92", -1, 20, "", methodObject),
-        new Among("\uFE93", -1, 21, "", methodObject),
-        new Among("\uFE94", -1, 21, "", methodObject),
-        new Among("\uFE95", -1, 22, "", methodObject),
-        new Among("\uFE96", -1, 22, "", methodObject),
-        new Among("\uFE97", -1, 22, "", methodObject),
-        new Among("\uFE98", -1, 22, "", methodObject),
-        new Among("\uFE99", -1, 23, "", methodObject),
-        new Among("\uFE9A", -1, 23, "", methodObject),
-        new Among("\uFE9B", -1, 23, "", methodObject),
-        new Among("\uFE9C", -1, 23, "", methodObject),
-        new Among("\uFE9D", -1, 24, "", methodObject),
-        new Among("\uFE9E", -1, 24, "", methodObject),
-        new Among("\uFE9F", -1, 24, "", methodObject),
-        new Among("\uFEA0", -1, 24, "", methodObject),
-        new Among("\uFEA1", -1, 25, "", methodObject),
-        new Among("\uFEA2", -1, 25, "", methodObject),
-        new Among("\uFEA3", -1, 25, "", methodObject),
-        new Among("\uFEA4", -1, 25, "", methodObject),
-        new Among("\uFEA5", -1, 26, "", methodObject),
-        new Among("\uFEA6", -1, 26, "", methodObject),
-        new Among("\uFEA7", -1, 26, "", methodObject),
-        new Among("\uFEA8", -1, 26, "", methodObject),
-        new Among("\uFEA9", -1, 27, "", methodObject),
-        new Among("\uFEAA", -1, 27, "", methodObject),
-        new Among("\uFEAB", -1, 28, "", methodObject),
-        new Among("\uFEAC", -1, 28, "", methodObject),
-        new Among("\uFEAD", -1, 29, "", methodObject),
-        new Among("\uFEAE", -1, 29, "", methodObject),
-        new Among("\uFEAF", -1, 30, "", methodObject),
-        new Among("\uFEB0", -1, 30, "", methodObject),
-        new Among("\uFEB1", -1, 31, "", methodObject),
-        new Among("\uFEB2", -1, 31, "", methodObject),
-        new Among("\uFEB3", -1, 31, "", methodObject),
-        new Among("\uFEB4", -1, 31, "", methodObject),
-        new Among("\uFEB5", -1, 32, "", methodObject),
-        new Among("\uFEB6", -1, 32, "", methodObject),
-        new Among("\uFEB7", -1, 32, "", methodObject),
-        new Among("\uFEB8", -1, 32, "", methodObject),
-        new Among("\uFEB9", -1, 33, "", methodObject),
-        new Among("\uFEBA", -1, 33, "", methodObject),
-        new Among("\uFEBB", -1, 33, "", methodObject),
-        new Among("\uFEBC", -1, 33, "", methodObject),
-        new Among("\uFEBD", -1, 34, "", methodObject),
-        new Among("\uFEBE", -1, 34, "", methodObject),
-        new Among("\uFEBF", -1, 34, "", methodObject),
-        new Among("\uFEC0", -1, 34, "", methodObject),
-        new Among("\uFEC1", -1, 35, "", methodObject),
-        new Among("\uFEC2", -1, 35, "", methodObject),
-        new Among("\uFEC3", -1, 35, "", methodObject),
-        new Among("\uFEC4", -1, 35, "", methodObject),
-        new Among("\uFEC5", -1, 36, "", methodObject),
-        new Among("\uFEC6", -1, 36, "", methodObject),
-        new Among("\uFEC7", -1, 36, "", methodObject),
-        new Among("\uFEC8", -1, 36, "", methodObject),
-        new Among("\uFEC9", -1, 37, "", methodObject),
-        new Among("\uFECA", -1, 37, "", methodObject),
-        new Among("\uFECB", -1, 37, "", methodObject),
-        new Among("\uFECC", -1, 37, "", methodObject),
-        new Among("\uFECD", -1, 38, "", methodObject),
-        new Among("\uFECE", -1, 38, "", methodObject),
-        new Among("\uFECF", -1, 38, "", methodObject),
-        new Among("\uFED0", -1, 38, "", methodObject),
-        new Among("\uFED1", -1, 39, "", methodObject),
-        new Among("\uFED2", -1, 39, "", methodObject),
-        new Among("\uFED3", -1, 39, "", methodObject),
-        new Among("\uFED4", -1, 39, "", methodObject),
-        new Among("\uFED5", -1, 40, "", methodObject),
-        new Among("\uFED6", -1, 40, "", methodObject),
-        new Among("\uFED7", -1, 40, "", methodObject),
-        new Among("\uFED8", -1, 40, "", methodObject),
-        new Among("\uFED9", -1, 41, "", methodObject),
-        new Among("\uFEDA", -1, 41, "", methodObject),
-        new Among("\uFEDB", -1, 41, "", methodObject),
-        new Among("\uFEDC", -1, 41, "", methodObject),
-        new Among("\uFEDD", -1, 42, "", methodObject),
-        new Among("\uFEDE", -1, 42, "", methodObject),
-        new Among("\uFEDF", -1, 42, "", methodObject),
-        new Among("\uFEE0", -1, 42, "", methodObject),
-        new Among("\uFEE1", -1, 43, "", methodObject),
-        new Among("\uFEE2", -1, 43, "", methodObject),
-        new Among("\uFEE3", -1, 43, "", methodObject),
-        new Among("\uFEE4", -1, 43, "", methodObject),
-        new Among("\uFEE5", -1, 44, "", methodObject),
-        new Among("\uFEE6", -1, 44, "", methodObject),
-        new Among("\uFEE7", -1, 44, "", methodObject),
-        new Among("\uFEE8", -1, 44, "", methodObject),
-        new Among("\uFEE9", -1, 45, "", methodObject),
-        new Among("\uFEEA", -1, 45, "", methodObject),
-        new Among("\uFEEB", -1, 45, "", methodObject),
-        new Among("\uFEEC", -1, 45, "", methodObject),
-        new Among("\uFEED", -1, 46, "", methodObject),
-        new Among("\uFEEE", -1, 46, "", methodObject),
-        new Among("\uFEEF", -1, 47, "", methodObject),
-        new Among("\uFEF0", -1, 47, "", methodObject),
-        new Among("\uFEF1", -1, 48, "", methodObject),
-        new Among("\uFEF2", -1, 48, "", methodObject),
-        new Among("\uFEF3", -1, 48, "", methodObject),
-        new Among("\uFEF4", -1, 48, "", methodObject),
-        new Among("\uFEF5", -1, 52, "", methodObject),
-        new Among("\uFEF6", -1, 52, "", methodObject),
-        new Among("\uFEF7", -1, 50, "", methodObject),
-        new Among("\uFEF8", -1, 50, "", methodObject),
-        new Among("\uFEF9", -1, 51, "", methodObject),
-        new Among("\uFEFA", -1, 51, "", methodObject),
-        new Among("\uFEFB", -1, 49, "", methodObject),
-        new Among("\uFEFC", -1, 49, "", methodObject)
-    };
+  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_1[] = {
-        new Among("\u0622", -1, 1, "", methodObject),
-        new Among("\u0623", -1, 1, "", methodObject),
-        new Among("\u0624", -1, 2, "", methodObject),
-        new Among("\u0625", -1, 1, "", methodObject),
-        new Among("\u0626", -1, 3, "", methodObject)
-    };
+  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_2[] = {
-        new Among("\u0622", -1, 1, "", methodObject),
-        new Among("\u0623", -1, 1, "", methodObject),
-        new Among("\u0624", -1, 2, "", methodObject),
-        new Among("\u0625", -1, 1, "", methodObject),
-        new Among("\u0626", -1, 3, "", methodObject)
-    };
+  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_3[] = {
-        new Among("\u0627\u0644", -1, 2, "", methodObject),
-        new Among("\u0628\u0627\u0644", -1, 1, "", methodObject),
-        new Among("\u0643\u0627\u0644", -1, 1, "", methodObject),
-        new Among("\u0644\u0644", -1, 2, "", methodObject)
-    };
+  private final static Among a_5[] = {
+    new Among("\u0641", -1, 1),
+    new Among("\u0648", -1, 1)
+  };
 
-    private final static Among a_4[] = {
-        new Among("\u0623\u0622", -1, 2, "", methodObject),
-        new Among("\u0623\u0623", -1, 1, "", methodObject),
-        new Among("\u0623\u0624", -1, 3, "", methodObject),
-        new Among("\u0623\u0625", -1, 5, "", methodObject),
-        new Among("\u0623\u0627", -1, 4, "", methodObject)
-    };
+  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_5[] = {
-        new Among("\u0641", -1, 1, "", methodObject),
-        new Among("\u0648", -1, 2, "", methodObject)
-    };
+  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_6[] = {
-        new Among("\u0627\u0644", -1, 2, "", methodObject),
-        new Among("\u0628\u0627\u0644", -1, 1, "", methodObject),
-        new Among("\u0643\u0627\u0644", -1, 1, "", methodObject),
-        new Among("\u0644\u0644", -1, 2, "", methodObject)
-    };
+  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_7[] = {
-        new Among("\u0628", -1, 1, "", methodObject),
-        new Among("\u0628\u0628", 0, 2, "", methodObject),
-        new Among("\u0643\u0643", -1, 3, "", methodObject)
-    };
+  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_8[] = {
-        new Among("\u0633\u0623", -1, 4, "", methodObject),
-        new Among("\u0633\u062A", -1, 2, "", methodObject),
-        new Among("\u0633\u0646", -1, 3, "", methodObject),
-        new Among("\u0633\u064A", -1, 1, "", methodObject)
-    };
+  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_9[] = {
-        new Among("\u062A\u0633\u062A", -1, 1, "", methodObject),
-        new Among("\u0646\u0633\u062A", -1, 1, "", methodObject),
-        new Among("\u064A\u0633\u062A", -1, 1, "", methodObject)
-    };
+  private final static Among a_11[] = {
+    new Among("\u0646", -1, 1)
+  };
 
-    private final static Among a_10[] = {
-        new Among("\u0643\u0645\u0627", -1, 3, "", methodObject),
-        new Among("\u0647\u0645\u0627", -1, 3, "", methodObject),
-        new Among("\u0646\u0627", -1, 2, "", methodObject),
-        new Among("\u0647\u0627", -1, 2, "", methodObject),
-        new Among("\u0643", -1, 1, "", methodObject),
-        new Among("\u0643\u0645", -1, 2, "", methodObject),
-        new Among("\u0647\u0645", -1, 2, "", methodObject),
-        new Among("\u0647\u0646", -1, 2, "", methodObject),
-        new Among("\u0647", -1, 1, "", methodObject),
-        new Among("\u064A", -1, 1, "", methodObject)
-    };
+  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_11[] = {
-        new Among("\u0646", -1, 1, "", methodObject)
-    };
+  private final static Among a_13[] = {
+    new Among("\u0627\u062A", -1, 1)
+  };
 
-    private final static Among a_12[] = {
-        new Among("\u0627", -1, 1, "", methodObject),
-        new Among("\u0648", -1, 1, "", methodObject),
-        new Among("\u064A", -1, 1, "", methodObject)
-    };
+  private final static Among a_14[] = {
+    new Among("\u062A", -1, 1)
+  };
 
-    private final static Among a_13[] = {
-        new Among("\u0627\u062A", -1, 1, "", methodObject)
-    };
+  private final static Among a_15[] = {
+    new Among("\u0629", -1, 1)
+  };
 
-    private final static Among a_14[] = {
-        new Among("\u062A", -1, 1, "", methodObject)
-    };
+  private final static Among a_16[] = {
+    new Among("\u064A", -1, 1)
+  };
 
-    private final static Among a_15[] = {
-        new Among("\u0629", -1, 1, "", methodObject)
-    };
+  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_16[] = {
-        new Among("\u064A", -1, 1, "", methodObject)
-    };
+  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_17[] = {
-        new Among("\u0643\u0645\u0627", -1, 3, "", methodObject),
-        new Among("\u0647\u0645\u0627", -1, 3, "", methodObject),
-        new Among("\u0646\u0627", -1, 2, "", methodObject),
-        new Among("\u0647\u0627", -1, 2, "", methodObject),
-        new Among("\u0643", -1, 1, "", methodObject),
-        new Among("\u0643\u0645", -1, 2, "", methodObject),
-        new Among("\u0647\u0645", -1, 2, "", methodObject),
-        new Among("\u0643\u0646", -1, 2, "", methodObject),
-        new Among("\u0647\u0646", -1, 2, "", methodObject),
-        new Among("\u0647", -1, 1, "", methodObject),
-        new Among("\u0643\u0645\u0648", -1, 3, "", methodObject),
-        new Among("\u0646\u064A", -1, 2, "", methodObject)
-    };
+  private final static Among a_19[] = {
+    new Among("\u0648\u0627", -1, 1),
+    new Among("\u062A\u0645", -1, 1)
+  };
 
-    private final static Among a_18[] = {
-        new Among("\u0627", -1, 2, "", methodObject),
-        new Among("\u062A\u0627", 0, 3, "", methodObject),
-        new Among("\u062A\u0645\u0627", 0, 5, "", methodObject),
-        new Among("\u0646\u0627", 0, 3, "", methodObject),
-        new Among("\u062A", -1, 1, "", methodObject),
-        new Among("\u0646", -1, 2, "", methodObject),
-        new Among("\u0627\u0646", 5, 4, "", methodObject),
-        new Among("\u062A\u0646", 5, 3, "", methodObject),
-        new Among("\u0648\u0646", 5, 4, "", methodObject),
-        new Among("\u064A\u0646", 5, 4, "", methodObject),
-        new Among("\u064A", -1, 2, "", methodObject)
-    };
+  private final static Among a_20[] = {
+    new Among("\u0648", -1, 1),
+    new Among("\u062A\u0645\u0648", 0, 2)
+  };
 
-    private final static Among a_19[] = {
-        new Among("\u0648\u0627", -1, 1, "", methodObject),
-        new Among("\u062A\u0645", -1, 1, "", methodObject)
-    };
+  private final static Among a_21[] = {
+    new Among("\u0649", -1, 1)
+  };
 
-    private final static Among a_20[] = {
-        new Among("\u0648", -1, 1, "", methodObject),
-        new Among("\u062A\u0645\u0648", 0, 2, "", methodObject)
-    };
+  private boolean B_is_defined;
+  private boolean B_is_verb;
+  private boolean B_is_noun;
 
-    private final static Among a_21[] = {
-        new Among("\u0649", -1, 1, "", methodObject)
-    };
 
-    private boolean B_is_defined;
-    private boolean B_is_verb;
-    private boolean B_is_noun;
-    private int I_word_len;
-
-
-    private boolean r_Normalize_pre() {
-        int among_var;
-        // (, line 251
-        // loop, line 252
-        for (int v_1 = getCurrent().length(); v_1 > 0; v_1--)
+  private boolean r_Normalize_pre() {
+    int among_var;
+    int v_1 = cursor;
+lab0: {
+        while(true)
         {
-            // (, line 252
-            // or, line 316
-            lab0: do {
-                int v_2 = cursor;
-                lab1: do {
-                    // (, line 253
-                    // [, line 254
-                    bra = cursor;
-                    // substring, line 254
-                    among_var = find_among(a_0, a_0.length);
-                    if (among_var == 0)
-                    {
-                        break lab1;
-                    }
-                    // ], line 254
-                    ket = cursor;
-                    switch (among_var) {
-                        case 0:
-                            break lab1;
-                        case 1:
-                            // (, line 255
-                            // delete, line 255
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 256
-                            // delete, line 256
-                            slice_del();
-                            break;
-                        case 3:
-                            // (, line 259
-                            // <-, line 259
-                            slice_from("0");
-                            break;
-                        case 4:
-                            // (, line 260
-                            // <-, line 260
-                            slice_from("1");
-                            break;
-                        case 5:
-                            // (, line 261
-                            // <-, line 261
-                            slice_from("2");
-                            break;
-                        case 6:
-                            // (, line 262
-                            // <-, line 262
-                            slice_from("3");
-                            break;
-                        case 7:
-                            // (, line 263
-                            // <-, line 263
-                            slice_from("4");
-                            break;
-                        case 8:
-                            // (, line 264
-                            // <-, line 264
-                            slice_from("5");
-                            break;
-                        case 9:
-                            // (, line 265
-                            // <-, line 265
-                            slice_from("6");
-                            break;
-                        case 10:
-                            // (, line 266
-                            // <-, line 266
-                            slice_from("7");
-                            break;
-                        case 11:
-                            // (, line 267
-                            // <-, line 267
-                            slice_from("8");
-                            break;
-                        case 12:
-                            // (, line 268
-                            // <-, line 268
-                            slice_from("9");
-                            break;
-                        case 13:
-                            // (, line 271
-                            // <-, line 271
-                            slice_from("\u0621");
-                            break;
-                        case 14:
-                            // (, line 272
-                            // <-, line 272
-                            slice_from("\u0623");
-                            break;
-                        case 15:
-                            // (, line 273
-                            // <-, line 273
-                            slice_from("\u0625");
-                            break;
-                        case 16:
-                            // (, line 274
-                            // <-, line 274
-                            slice_from("\u0626");
-                            break;
-                        case 17:
-                            // (, line 275
-                            // <-, line 275
-                            slice_from("\u0622");
-                            break;
-                        case 18:
-                            // (, line 276
-                            // <-, line 276
-                            slice_from("\u0624");
-                            break;
-                        case 19:
-                            // (, line 277
-                            // <-, line 277
-                            slice_from("\u0627");
-                            break;
-                        case 20:
-                            // (, line 278
-                            // <-, line 278
-                            slice_from("\u0628");
-                            break;
-                        case 21:
-                            // (, line 279
-                            // <-, line 279
-                            slice_from("\u0629");
-                            break;
-                        case 22:
-                            // (, line 280
-                            // <-, line 280
-                            slice_from("\u062A");
-                            break;
-                        case 23:
-                            // (, line 281
-                            // <-, line 281
-                            slice_from("\u062B");
-                            break;
-                        case 24:
-                            // (, line 282
-                            // <-, line 282
-                            slice_from("\u062C");
-                            break;
-                        case 25:
-                            // (, line 283
-                            // <-, line 283
-                            slice_from("\u062D");
-                            break;
-                        case 26:
-                            // (, line 284
-                            // <-, line 284
-                            slice_from("\u062E");
-                            break;
-                        case 27:
-                            // (, line 285
-                            // <-, line 285
-                            slice_from("\u062F");
-                            break;
-                        case 28:
-                            // (, line 286
-                            // <-, line 286
-                            slice_from("\u0630");
-                            break;
-                        case 29:
-                            // (, line 287
-                            // <-, line 287
-                            slice_from("\u0631");
-                            break;
-                        case 30:
-                            // (, line 288
-                            // <-, line 288
-                            slice_from("\u0632");
-                            break;
-                        case 31:
-                            // (, line 289
-                            // <-, line 289
-                            slice_from("\u0633");
-                            break;
-                        case 32:
-                            // (, line 290
-                            // <-, line 290
-                            slice_from("\u0634");
-                            break;
-                        case 33:
-                            // (, line 291
-                            // <-, line 291
-                            slice_from("\u0635");
-                            break;
-                        case 34:
-                            // (, line 292
-                            // <-, line 292
-                            slice_from("\u0636");
-                            break;
-                        case 35:
-                            // (, line 293
-                            // <-, line 293
-                            slice_from("\u0637");
-                            break;
-                        case 36:
-                            // (, line 294
-                            // <-, line 294
-                            slice_from("\u0638");
-                            break;
-                        case 37:
-                            // (, line 295
-                            // <-, line 295
-                            slice_from("\u0639");
-                            break;
-                        case 38:
-                            // (, line 296
-                            // <-, line 296
-                            slice_from("\u063A");
-                            break;
-                        case 39:
-                            // (, line 297
-                            // <-, line 297
-                            slice_from("\u0641");
-                            break;
-                        case 40:
-                            // (, line 298
-                            // <-, line 298
-                            slice_from("\u0642");
-                            break;
-                        case 41:
-                            // (, line 299
-                            // <-, line 299
-                            slice_from("\u0643");
-                            break;
-                        case 42:
-                            // (, line 300
-                            // <-, line 300
-                            slice_from("\u0644");
-                            break;
-                        case 43:
-                            // (, line 301
-                            // <-, line 301
-                            slice_from("\u0645");
-                            break;
-                        case 44:
-                            // (, line 302
-                            // <-, line 302
-                            slice_from("\u0646");
-                            break;
-                        case 45:
-                            // (, line 303
-                            // <-, line 303
-                            slice_from("\u0647");
-                            break;
-                        case 46:
-                            // (, line 304
-                            // <-, line 304
-                            slice_from("\u0648");
-                            break;
-                        case 47:
-                            // (, line 305
-                            // <-, line 305
-                            slice_from("\u0649");
-                            break;
-                        case 48:
-                            // (, line 306
-                            // <-, line 306
-                            slice_from("\u064A");
-                            break;
-                        case 49:
-                            // (, line 309
-                            // <-, line 309
-                            slice_from("\u0644\u0627");
-                            break;
-                        case 50:
-                            // (, line 310
-                            // <-, line 310
-                            slice_from("\u0644\u0623");
-                            break;
-                        case 51:
-                            // (, line 311
-                            // <-, line 311
-                            slice_from("\u0644\u0625");
-                            break;
-                        case 52:
-                            // (, line 312
-                            // <-, line 312
-                            slice_from("\u0644\u0622");
-                            break;
-                    }
-                    break lab0;
-                } while (false);
-                cursor = v_2;
-                // next, line 317
-                if (cursor >= limit)
-                {
-                    return false;
-                }
-                cursor++;
-            } while (false);
-        }
-        return true;
-    }
-
-    private boolean r_Normalize_post() {
-        int among_var;
-        // (, line 321
-        // do, line 323
-        int v_1 = cursor;
-        lab0: do {
-            // (, line 323
-            // backwards, line 325
-            limit_backward = cursor;
-            cursor = limit;
-            // (, line 325
-            // [, line 326
-            ket = cursor;
-            // substring, line 326
-            among_var = find_among_b(a_1, a_1.length);
-            if (among_var == 0)
-            {
-                break lab0;
-            }
-            // ], line 326
-            bra = cursor;
-            switch (among_var) {
-                case 0:
-                    break lab0;
-                case 1:
-                    // (, line 327
-                    // <-, line 327
-                    slice_from("\u0621");
-                    break;
-                case 2:
-                    // (, line 328
-                    // <-, line 328
-                    slice_from("\u0621");
-                    break;
-                case 3:
-                    // (, line 329
-                    // <-, line 329
-                    slice_from("\u0621");
-                    break;
-            }
-            cursor = limit_backward;
-        } while (false);
-        cursor = v_1;
-        // do, line 334
-        int v_2 = cursor;
-        lab1: do {
-            // loop, line 334
-            for (int v_3 = I_word_len; v_3 > 0; v_3--)
-            {
-                // (, line 334
-                // or, line 343
-                lab2: do {
-                    int v_4 = cursor;
-                    lab3: do {
-                        // (, line 335
-                        // [, line 337
-                        bra = cursor;
-                        // substring, line 337
-                        among_var = find_among(a_2, a_2.length);
-                        if (among_var == 0)
-                        {
-                            break lab3;
-                        }
-                        // ], line 337
-                        ket = cursor;
-                        switch (among_var) {
-                            case 0:
-                                break lab3;
-                            case 1:
-                                // (, line 338
-                                // <-, line 338
-                                slice_from("\u0627");
-                                break;
-                            case 2:
-                                // (, line 339
-                                // <-, line 339
-                                slice_from("\u0648");
-                                break;
-                            case 3:
-                                // (, line 340
-                                // <-, line 340
-                                slice_from("\u064A");
-                                break;
-                        }
-                        break lab2;
-                    } while (false);
-                    cursor = v_4;
-                    // next, line 344
-                    if (cursor >= limit)
-                    {
-                        break lab1;
-                    }
-                    cursor++;
-                } while (false);
-            }
-        } while (false);
-        cursor = v_2;
-        return true;
-    }
-
-    private boolean r_Checks1() {
-        int among_var;
-        // (, line 349
-        I_word_len = getCurrent().length();
-        // [, line 351
+          int v_2 = cursor;
+lab1: {
+lab2: {
+        int v_3 = cursor;
+lab3: {
         bra = cursor;
-        // substring, line 351
-        among_var = find_among(a_3, a_3.length);
+        among_var = find_among(a_0);
         if (among_var == 0)
         {
-            return false;
+          break lab3;
         }
-        // ], line 351
         ket = cursor;
         switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 352
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // set is_noun, line 352
-                B_is_noun = true;
-                // unset is_verb, line 352
-                B_is_verb = false;
-                // set is_defined, line 352
-                B_is_defined = true;
-                break;
-            case 2:
-                // (, line 353
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // set is_noun, line 353
-                B_is_noun = true;
-                // unset is_verb, line 353
-                B_is_verb = false;
-                // set is_defined, line 353
-                B_is_defined = true;
-                break;
-        }
-        return true;
-    }
-
-    private boolean r_Prefix_Step1() {
-        int among_var;
-        // (, line 359
-        I_word_len = getCurrent().length();
-        // [, line 361
-        bra = cursor;
-        // substring, line 361
-        among_var = find_among(a_4, a_4.length);
-        if (among_var == 0)
-        {
-            return false;
+          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;
         }
-        // ], line 361
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 362
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 362
-                slice_from("\u0623");
-                break;
-            case 2:
-                // (, line 363
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 363
-                slice_from("\u0622");
-                break;
-            case 3:
-                // (, line 364
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 364
-                slice_from("\u0623");
-                break;
-            case 4:
-                // (, line 365
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 365
-                slice_from("\u0627");
-                break;
-            case 5:
-                // (, line 366
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 366
-                slice_from("\u0625");
-                break;
+        break lab2;
+}
+cursor = v_3;
+if (cursor >= limit)
+{
+  break lab1;
+}
+cursor++;
+}
+continue;
+}
+cursor = v_2;
+break;
         }
-        return true;
-    }
+}
+cursor = v_1;
+return true;
+  }
 
-    private boolean r_Prefix_Step2() {
-        int among_var;
-        // (, line 371
-        I_word_len = getCurrent().length();
-        // not, line 373
-        {
-            int v_1 = cursor;
-            lab0: do {
-                // literal, line 373
-                if (!(eq_s("\u0641\u0627".length(),"\u0641\u0627")))
-                {
-                    break lab0;
-                }
-                return false;
-            } while (false);
-            cursor = v_1;
-        }
-        // not, line 374
+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)
         {
-            int v_2 = cursor;
-            lab1: do {
-                // literal, line 374
-                if (!(eq_s("\u0648\u0627".length(),"\u0648\u0627")))
-                {
-                    break lab1;
-                }
-                return false;
-            } while (false);
-            cursor = v_2;
+          break lab0;
         }
-        // [, line 375
         bra = cursor;
-        // substring, line 375
-        among_var = find_among(a_5, a_5.length);
-        if (among_var == 0)
+        slice_from("\u0621");
+        cursor = limit_backward;
+}
+cursor = v_1;
+int v_2 = cursor;
+lab1: {
+        while(true)
         {
-            return false;
-        }
-        // ], line 375
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 376
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // delete, line 376
-                slice_del();
-                break;
-            case 2:
-                // (, line 377
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // delete, line 377
-                slice_del();
-                break;
-        }
-        return true;
-    }
-
-    private boolean r_Prefix_Step3a_Noun() {
-        int among_var;
-        // (, line 381
-        I_word_len = getCurrent().length();
-        // [, line 383
+          int v_3 = cursor;
+lab2: {
+lab3: {
+        int v_4 = cursor;
+lab4: {
         bra = cursor;
-        // substring, line 383
-        among_var = find_among(a_6, a_6.length);
+        among_var = find_among(a_2);
         if (among_var == 0)
         {
-            return false;
+          break lab4;
         }
-        // ], line 383
         ket = cursor;
         switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 384
-                if (!(I_word_len > 5))
-                {
-                    return false;
-                }
-                // delete, line 384
-                slice_del();
-                break;
-            case 2:
-                // (, line 385
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // delete, line 385
-                slice_del();
-                break;
+          case 1:
+            slice_from("\u0627");
+            break;
+          case 2:
+            slice_from("\u0648");
+            break;
+          case 3:
+            slice_from("\u064A");
+            break;
         }
-        return true;
-    }
+        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_Step3b_Noun() {
-        int among_var;
-        // (, line 389
-        I_word_len = getCurrent().length();
-        // not, line 391
+private boolean r_Prefix_Step2() {
+  {
+    int v_1 = cursor;
+lab0: {
+        if (!(eq_s("\u0641\u0627")))
         {
-            int v_1 = cursor;
-            lab0: do {
-                // literal, line 391
-                if (!(eq_s("\u0628\u0627".length(),"\u0628\u0627")))
-                {
-                    break lab0;
-                }
-                return false;
-            } while (false);
-            cursor = v_1;
+          break lab0;
         }
-        // [, line 392
-        bra = cursor;
-        // substring, line 392
-        among_var = find_among(a_7, a_7.length);
-        if (among_var == 0)
+        return false;
+}
+cursor = v_1;
+  }
+{
+  int v_2 = cursor;
+lab1: {
+        if (!(eq_s("\u0648\u0627")))
         {
-            return false;
-        }
-        // ], line 392
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 393
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // delete, line 393
-                slice_del();
-                break;
-            case 2:
-                // (, line 395
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 395
-                slice_from("\u0628");
-                break;
-            case 3:
-                // (, line 396
-                if (!(I_word_len > 3))
-                {
-                    return false;
-                }
-                // <-, line 396
-                slice_from("\u0643");
-                break;
+          break lab1;
         }
-        return true;
-    }
+        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_Step3_Verb() {
-        int among_var;
-        // (, line 401
-        I_word_len = getCurrent().length();
-        // [, line 403
-        bra = cursor;
-        // substring, line 403
-        among_var = find_among(a_8, a_8.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 403
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 405
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // <-, line 405
-                slice_from("\u064A");
-                break;
-            case 2:
-                // (, line 406
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // <-, line 406
-                slice_from("\u062A");
-                break;
-            case 3:
-                // (, line 407
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // <-, line 407
-                slice_from("\u0646");
-                break;
-            case 4:
-                // (, line 408
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // <-, line 408
-                slice_from("\u0623");
-                break;
-        }
-        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_Step4_Verb() {
-        int among_var;
-        // (, line 412
-        I_word_len = getCurrent().length();
-        // [, line 414
-        bra = cursor;
-        // substring, line 414
-        among_var = find_among(a_9, a_9.length);
-        if (among_var == 0)
+private boolean r_Prefix_Step3b_Noun() {
+  int among_var;
+  {
+    int v_1 = cursor;
+lab0: {
+        if (!(eq_s("\u0628\u0627")))
         {
-            return false;
+          break lab0;
         }
-        // ], line 414
-        ket = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 415
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // set is_verb, line 415
-                B_is_verb = true;
-                // unset is_noun, line 415
-                B_is_noun = false;
-                // <-, line 415
-                slice_from("\u0627\u0633\u062A");
-                break;
-        }
-        return true;
+        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;
     }
-
-    private boolean r_Suffix_Noun_Step1a() {
-        int among_var;
-        // (, line 422
-        I_word_len = getCurrent().length();
-        // [, line 424
-        ket = cursor;
-        // substring, line 424
-        among_var = find_among_b(a_10, a_10.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 424
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 425
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 425
-                slice_del();
-                break;
-            case 2:
-                // (, line 426
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 426
-                slice_del();
-                break;
-            case 3:
-                // (, line 427
-                if (!(I_word_len >= 6))
-                {
-                    return false;
-                }
-                // delete, line 427
-                slice_del();
-                break;
-        }
-        return true;
+    slice_del();
+    break;
+  case 2:
+    if (!(limit > 3))
+    {
+      return false;
     }
-
-    private boolean r_Suffix_Noun_Step1b() {
-        int among_var;
-        // (, line 430
-        I_word_len = getCurrent().length();
-        // [, line 432
-        ket = cursor;
-        // substring, line 432
-        among_var = find_among_b(a_11, a_11.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 432
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 433
-                if (!(I_word_len > 5))
-                {
-                    return false;
-                }
-                // delete, line 433
-                slice_del();
-                break;
-        }
-        return true;
+    slice_from("\u0628");
+    break;
+  case 3:
+    if (!(limit > 3))
+    {
+      return false;
     }
+    slice_from("\u0643");
+    break;
+}
+return true;
+}
 
-    private boolean r_Suffix_Noun_Step2a() {
-        int among_var;
-        // (, line 437
-        I_word_len = getCurrent().length();
-        // [, line 439
-        ket = cursor;
-        // substring, line 439
-        among_var = find_among_b(a_12, a_12.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 439
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 440
-                if (!(I_word_len > 4))
-                {
-                    return false;
-                }
-                // delete, line 440
-                slice_del();
-                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_Suffix_Noun_Step2b() {
-        int among_var;
-        // (, line 444
-        I_word_len = getCurrent().length();
-        // [, line 446
-        ket = cursor;
-        // substring, line 446
-        among_var = find_among_b(a_13, a_13.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 446
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 447
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 447
-                slice_del();
-                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_Step2c1() {
-        int among_var;
-        // (, line 451
-        I_word_len = getCurrent().length();
-        // [, line 453
-        ket = cursor;
-        // substring, line 453
-        among_var = find_among_b(a_14, a_14.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 453
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 454
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 454
-                slice_del();
-                break;
-        }
-        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_Step2c2() {
-        int among_var;
-        // (, line 457
-        I_word_len = getCurrent().length();
-        // [, line 459
-        ket = cursor;
-        // substring, line 459
-        among_var = find_among_b(a_15, a_15.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 459
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 460
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 460
-                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_Step3() {
-        int among_var;
-        // (, line 463
-        I_word_len = getCurrent().length();
-        // [, line 465
-        ket = cursor;
-        // substring, line 465
-        among_var = find_among_b(a_16, a_16.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 465
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 466
-                if (!(I_word_len >= 3))
-                {
-                    return false;
-                }
-                // delete, line 466
-                slice_del();
-                break;
-        }
-        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_Verb_Step1() {
-        int among_var;
-        // (, line 470
-        I_word_len = getCurrent().length();
-        // [, line 472
-        ket = cursor;
-        // substring, line 472
-        among_var = find_among_b(a_17, a_17.length);
-        if (among_var == 0)
-        {
-            return false;
-        }
-        // ], line 472
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 473
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 473
-                slice_del();
-                break;
-            case 2:
-                // (, line 474
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 474
-                slice_del();
-                break;
-            case 3:
-                // (, line 475
-                if (!(I_word_len >= 6))
-                {
-                    return false;
-                }
-                // delete, line 475
-                slice_del();
-                break;
-        }
-        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_Verb_Step2a() {
-        int among_var;
-        // (, line 478
-        I_word_len = getCurrent().length();
-        // [, line 480
-        ket = cursor;
-        // substring, line 480
-        among_var = find_among_b(a_18, a_18.length);
-        if (among_var == 0)
+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))
         {
-            return false;
-        }
-        // ], line 480
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 481
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 481
-                slice_del();
-                break;
-            case 2:
-                // (, line 482
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 482
-                slice_del();
-                break;
-            case 3:
-                // (, line 483
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 483
-                slice_del();
-                break;
-            case 4:
-                // (, line 484
-                if (!(I_word_len > 5))
-                {
-                    return false;
-                }
-                // delete, line 484
-                slice_del();
-                break;
-            case 5:
-                // (, line 485
-                if (!(I_word_len >= 6))
-                {
-                    return false;
-                }
-                // delete, line 485
-                slice_del();
-                break;
+          break lab2;
         }
-        return true;
-    }
-
-    private boolean r_Suffix_Verb_Step2b() {
-        int among_var;
-        // (, line 489
-        I_word_len = getCurrent().length();
-        // [, line 491
-        ket = cursor;
-        // substring, line 491
-        among_var = find_among_b(a_19, a_19.length);
-        if (among_var == 0)
+lab3: {
+        int v_5 = limit - cursor;
+lab4: {
         {
-            return false;
+          int v_6 = 1;
+          while(true)
+          {
+            int v_7 = limit - cursor;
+lab5: {
+        if (!r_Suffix_Verb_Step1())
+        {
+          break lab5;
         }
-        // ], line 491
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 492
-                if (!(I_word_len >= 5))
-                {
-                    return false;
-                }
-                // delete, line 492
-                slice_del();
-                break;
+        v_6--;
+        continue;
+}
+cursor = limit - v_7;
+break;
+          }
+if (v_6 > 0)
+{
+  break lab4;
+}
         }
-        return true;
-    }
-
-    private boolean r_Suffix_Verb_Step2c() {
-        int among_var;
-        // (, line 497
-        I_word_len = getCurrent().length();
-        // [, line 499
-        ket = cursor;
-        // substring, line 499
-        among_var = find_among_b(a_20, a_20.length);
-        if (among_var == 0)
+lab6: {
+        int v_8 = limit - cursor;
+lab7: {
+        if (!r_Suffix_Verb_Step2a())
         {
-            return false;
+          break lab7;
         }
-        // ], line 499
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 500
-                if (!(I_word_len >= 4))
-                {
-                    return false;
-                }
-                // delete, line 500
-                slice_del();
-                break;
-            case 2:
-                // (, line 501
-                if (!(I_word_len >= 6))
-                {
-                    return false;
-                }
-                // delete, line 501
-                slice_del();
-                break;
-        }
-        return true;
-    }
-
-    private boolean r_Suffix_All_alef_maqsura() {
-        int among_var;
-        // (, line 505
-        I_word_len = getCurrent().length();
-        // [, line 507
-        ket = cursor;
-        // substring, line 507
-        among_var = find_among_b(a_21, a_21.length);
-        if (among_var == 0)
+        break lab6;
+}
+cursor = limit - v_8;
+lab8: {
+        if (!r_Suffix_Verb_Step2c())
         {
-            return false;
+          break lab8;
         }
-        // ], line 507
-        bra = cursor;
-        switch (among_var) {
-            case 0:
-                return false;
-            case 1:
-                // (, line 508
-                // <-, line 508
-                slice_from("\u064A");
-                break;
+        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;
         }
-        return true;
-    }
-
-    public boolean stem() {
-        // (, line 515
-        // set is_noun, line 517
-        B_is_noun = true;
-        // set is_verb, line 518
-        B_is_verb = true;
-        // unset is_defined, line 519
-        B_is_defined = false;
-        // do, line 522
-        int v_1 = cursor;
-        lab0: do {
-            // call Checks1, line 522
-            if (!r_Checks1())
-            {
-                break lab0;
-            }
-        } while (false);
-        cursor = v_1;
-        // do, line 525
-        int v_2 = cursor;
-        lab1: do {
-            // call Normalize_pre, line 525
-            if (!r_Normalize_pre())
-            {
-                break lab1;
-            }
-        } while (false);
-        cursor = v_2;
-        // backwards, line 528
-        limit_backward = cursor;
-        cursor = limit;
-        // (, line 528
-        // do, line 530
-        int v_3 = limit - cursor;
-        lab2: do {
-            // (, line 530
-            // or, line 544
-            lab3: do {
-                int v_4 = limit - cursor;
-                lab4: do {
-                    // (, line 532
-                    // Boolean test is_verb, line 533
-                    if (!(B_is_verb))
-                    {
-                        break lab4;
-                    }
-                    // (, line 534
-                    // or, line 539
-                    lab5: do {
-                        int v_5 = limit - cursor;
-                        lab6: do {
-                            // (, line 535
-                            // (, line 536
-                            // atleast, line 536
-                            {
-                                int v_6 = 1;
-                                // atleast, line 536
-                                replab7: while(true)
-                                {
-                                    int v_7 = limit - cursor;
-                                    lab8: do {
-                                        // call Suffix_Verb_Step1, line 536
-                                        if (!r_Suffix_Verb_Step1())
-                                        {
-                                            break lab8;
-                                        }
-                                        v_6--;
-                                        continue replab7;
-                                    } while (false);
-                                    cursor = limit - v_7;
-                                    break replab7;
-                                }
-                                if (v_6 > 0)
-                                {
-                                    break lab6;
-                                }
-                            }
-                            // (, line 537
-                            // or, line 537
-                            lab9: do {
-                                int v_8 = limit - cursor;
-                                lab10: do {
-                                    // call Suffix_Verb_Step2a, line 537
-                                    if (!r_Suffix_Verb_Step2a())
-                                    {
-                                        break lab10;
-                                    }
-                                    break lab9;
-                                } while (false);
-                                cursor = limit - v_8;
-                                lab11: do {
-                                    // call Suffix_Verb_Step2c, line 537
-                                    if (!r_Suffix_Verb_Step2c())
-                                    {
-                                        break lab11;
-                                    }
-                                    break lab9;
-                                } while (false);
-                                cursor = limit - v_8;
-                                // next, line 537
-                                if (cursor <= limit_backward)
-                                {
-                                    break lab6;
-                                }
-                                cursor--;
-                            } while (false);
-                            break lab5;
-                        } while (false);
-                        cursor = limit - v_5;
-                        lab12: do {
-                            // call Suffix_Verb_Step2b, line 539
-                            if (!r_Suffix_Verb_Step2b())
-                            {
-                                break lab12;
-                            }
-                            break lab5;
-                        } while (false);
-                        cursor = limit - v_5;
-                        // call Suffix_Verb_Step2a, line 540
-                        if (!r_Suffix_Verb_Step2a())
-                        {
-                            break lab4;
-                        }
-                    } while (false);
-                    break lab3;
-                } while (false);
-                cursor = limit - v_4;
-                lab13: do {
-                    // (, line 544
-                    // Boolean test is_noun, line 545
-                    if (!(B_is_noun))
-                    {
-                        break lab13;
-                    }
-                    // (, line 546
-                    // try, line 548
-                    int v_9 = limit - cursor;
-                    lab14: do {
-                        // (, line 548
-                        // or, line 550
-                        lab15: do {
-                            int v_10 = limit - cursor;
-                            lab16: do {
-                                // call Suffix_Noun_Step2c2, line 549
-                                if (!r_Suffix_Noun_Step2c2())
-                                {
-                                    break lab16;
-                                }
-                                break lab15;
-                            } while (false);
-                            cursor = limit - v_10;
-                            lab17: do {
-                                // (, line 550
-                                // not, line 550
-                                lab18: do {
-                                    // Boolean test is_defined, line 550
-                                    if (!(B_is_defined))
-                                    {
-                                        break lab18;
-                                    }
-                                    break lab17;
-                                } while (false);
-                                // call Suffix_Noun_Step1a, line 550
-                                if (!r_Suffix_Noun_Step1a())
-                                {
-                                    break lab17;
-                                }
-                                // (, line 550
-                                // or, line 552
-                                lab19: do {
-                                    int v_12 = limit - cursor;
-                                    lab20: do {
-                                        // call Suffix_Noun_Step2a, line 551
-                                        if (!r_Suffix_Noun_Step2a())
-                                        {
-                                            break lab20;
-                                        }
-                                        break lab19;
-                                    } while (false);
-                                    cursor = limit - v_12;
-                                    lab21: do {
-                                        // call Suffix_Noun_Step2b, line 552
-                                        if (!r_Suffix_Noun_Step2b())
-                                        {
-                                            break lab21;
-                                        }
-                                        break lab19;
-                                    } while (false);
-                                    cursor = limit - v_12;
-                                    lab22: do {
-                                        // call Suffix_Noun_Step2c1, line 553
-                                        if (!r_Suffix_Noun_Step2c1())
-                                        {
-                                            break lab22;
-                                        }
-                                        break lab19;
-                                    } while (false);
-                                    cursor = limit - v_12;
-                                    // next, line 554
-                                    if (cursor <= limit_backward)
-                                    {
-                                        break lab17;
-                                    }
-                                    cursor--;
-                                } while (false);
-                                break lab15;
-                            } while (false);
-                            cursor = limit - v_10;
-                            lab23: do {
-                                // (, line 555
-                                // call Suffix_Noun_Step1b, line 555
-                                if (!r_Suffix_Noun_Step1b())
-                                {
-                                    break lab23;
-                                }
-                                // (, line 555
-                                // or, line 557
-                                lab24: do {
-                                    int v_13 = limit - cursor;
-                                    lab25: do {
-                                        // call Suffix_Noun_Step2a, line 556
-                                        if (!r_Suffix_Noun_Step2a())
-                                        {
-                                            break lab25;
-                                        }
-                                        break lab24;
-                                    } while (false);
-                                    cursor = limit - v_13;
-                                    lab26: do {
-                                        // call Suffix_Noun_Step2b, line 557
-                                        if (!r_Suffix_Noun_Step2b())
-                                        {
-                                            break lab26;
-                                        }
-                                        break lab24;
-                                    } while (false);
-                                    cursor = limit - v_13;
-                                    // call Suffix_Noun_Step2c1, line 558
-                                    if (!r_Suffix_Noun_Step2c1())
-                                    {
-                                        break lab23;
-                                    }
-                                } while (false);
-                                break lab15;
-                            } while (false);
-                            cursor = limit - v_10;
-                            lab27: do {
-                                // (, line 559
-                                // not, line 559
-                                lab28: do {
-                                    // Boolean test is_defined, line 559
-                                    if (!(B_is_defined))
-                                    {
-                                        break lab28;
-                                    }
-                                    break lab27;
-                                } while (false);
-                                // call Suffix_Noun_Step2a, line 559
-                                if (!r_Suffix_Noun_Step2a())
-                                {
-                                    break lab27;
-                                }
-                                break lab15;
-                            } while (false);
-                            cursor = limit - v_10;
-                            // (, line 560
-                            // call Suffix_Noun_Step2b, line 560
-                            if (!r_Suffix_Noun_Step2b())
-                            {
-                                cursor = limit - v_9;
-                                break lab14;
-                            }
-                        } while (false);
-                    } while (false);
-                    // call Suffix_Noun_Step3, line 562
-                    if (!r_Suffix_Noun_Step3())
-                    {
-                        break lab13;
-                    }
-                    break lab3;
-                } while (false);
-                cursor = limit - v_4;
-                // call Suffix_All_alef_maqsura, line 568
-                if (!r_Suffix_All_alef_maqsura())
-                {
-                    break lab2;
-                }
-            } while (false);
-        } while (false);
-        cursor = limit - v_3;
-        cursor = limit_backward;
-        // do, line 573
-        int v_15 = cursor;
-        lab29: do {
-            // (, line 573
-            // try, line 574
-            int v_16 = cursor;
-            lab30: do {
-                // call Prefix_Step1, line 574
-                if (!r_Prefix_Step1())
-                {
-                    cursor = v_16;
-                    break lab30;
-                }
-            } while (false);
-            // try, line 575
-            int v_17 = cursor;
-            lab31: do {
-                // call Prefix_Step2, line 575
-                if (!r_Prefix_Step2())
-                {
-                    cursor = v_17;
-                    break lab31;
-                }
-            } while (false);
-            // (, line 576
-            // or, line 577
-            lab32: do {
-                int v_18 = cursor;
-                lab33: do {
-                    // call Prefix_Step3a_Noun, line 576
-                    if (!r_Prefix_Step3a_Noun())
-                    {
-                        break lab33;
-                    }
-                    break lab32;
-                } while (false);
-                cursor = v_18;
-                lab34: do {
-                    // (, line 577
-                    // Boolean test is_noun, line 577
-                    if (!(B_is_noun))
-                    {
-                        break lab34;
-                    }
-                    // call Prefix_Step3b_Noun, line 577
-                    if (!r_Prefix_Step3b_Noun())
-                    {
-                        break lab34;
-                    }
-                    break lab32;
-                } while (false);
-                cursor = v_18;
-                // (, line 578
-                // Boolean test is_verb, line 578
-                if (!(B_is_verb))
-                {
-                    break lab29;
-                }
-                // try, line 578
-                int v_19 = cursor;
-                lab35: do {
-                    // call Prefix_Step3_Verb, line 578
-                    if (!r_Prefix_Step3_Verb())
-                    {
-                        cursor = v_19;
-                        break lab35;
-                    }
-                } while (false);
-                // call Prefix_Step4_Verb, line 578
-                if (!r_Prefix_Step4_Verb())
-                {
-                    break lab29;
-                }
-            } while (false);
-        } while (false);
-        cursor = v_15;
-        // do, line 583
-        int v_20 = cursor;
-        lab36: do {
-            // call Normalize_post, line 583
-            if (!r_Normalize_post())
-            {
-                break lab36;
-            }
-        } while (false);
-        cursor = v_20;
-        return true;
-    }
+        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;
+}
 
-    public boolean equals( Object o ) {
-        return o instanceof ArabicStemmer;
-    }
+@Override
+public boolean equals( Object o ) {
+  return o instanceof ArabicStemmer;
+}
 
-    public int hashCode() {
-        return ArabicStemmer.class.getName().hashCode();
-    }
+@Override
+public int hashCode() {
+  return ArabicStemmer.class.getName().hashCode();
+}
 
 
 
 }
+
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArmenianStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArmenianStemmer.java
index d11d859..552a980 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArmenianStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/ArmenianStemmer.java
@@ -1,517 +1,394 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
+/**
+ * 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 ArmenianStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class ArmenianStemmer extends SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-private static final long serialVersionUID = 1L;
+  private final static Among a_0[] = {
+    new Among("\u0580\u0578\u0580\u0564", -1, 1),
+    new Among("\u0565\u0580\u0578\u0580\u0564", 0, 1),
+    new Among("\u0561\u056C\u056B", -1, 1),
+    new Among("\u0561\u056F\u056B", -1, 1),
+    new Among("\u0578\u0580\u0561\u056F", -1, 1),
+    new Among("\u0565\u0572", -1, 1),
+    new Among("\u0561\u056F\u0561\u0576", -1, 1),
+    new Among("\u0561\u0580\u0561\u0576", -1, 1),
+    new Among("\u0565\u0576", -1, 1),
+    new Among("\u0565\u056F\u0565\u0576", 8, 1),
+    new Among("\u0565\u0580\u0565\u0576", 8, 1),
+    new Among("\u0578\u0580\u0567\u0576", -1, 1),
+    new Among("\u056B\u0576", -1, 1),
+    new Among("\u0563\u056B\u0576", 12, 1),
+    new Among("\u0578\u057E\u056B\u0576", 12, 1),
+    new Among("\u056C\u0561\u0575\u0576", -1, 1),
+    new Among("\u057E\u0578\u0582\u0576", -1, 1),
+    new Among("\u057A\u0565\u057D", -1, 1),
+    new Among("\u056B\u057E", -1, 1),
+    new Among("\u0561\u057F", -1, 1),
+    new Among("\u0561\u057E\u0565\u057F", -1, 1),
+    new Among("\u056F\u0578\u057F", -1, 1),
+    new Among("\u0562\u0561\u0580", -1, 1)
+  };
 
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("\u0561", -1, 1),
+    new Among("\u0561\u0581\u0561", 0, 1),
+    new Among("\u0565\u0581\u0561", 0, 1),
+    new Among("\u057E\u0565", -1, 1),
+    new Among("\u0561\u0581\u0580\u056B", -1, 1),
+    new Among("\u0561\u0581\u056B", -1, 1),
+    new Among("\u0565\u0581\u056B", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B", 6, 1),
+    new Among("\u0561\u056C", -1, 1),
+    new Among("\u0568\u0561\u056C", 8, 1),
+    new Among("\u0561\u0576\u0561\u056C", 8, 1),
+    new Among("\u0565\u0576\u0561\u056C", 8, 1),
+    new Among("\u0561\u0581\u0576\u0561\u056C", 8, 1),
+    new Among("\u0565\u056C", -1, 1),
+    new Among("\u0568\u0565\u056C", 13, 1),
+    new Among("\u0576\u0565\u056C", 13, 1),
+    new Among("\u0581\u0576\u0565\u056C", 15, 1),
+    new Among("\u0565\u0581\u0576\u0565\u056C", 16, 1),
+    new Among("\u0579\u0565\u056C", 13, 1),
+    new Among("\u057E\u0565\u056C", 13, 1),
+    new Among("\u0561\u0581\u057E\u0565\u056C", 19, 1),
+    new Among("\u0565\u0581\u057E\u0565\u056C", 19, 1),
+    new Among("\u057F\u0565\u056C", 13, 1),
+    new Among("\u0561\u057F\u0565\u056C", 22, 1),
+    new Among("\u0578\u057F\u0565\u056C", 22, 1),
+    new Among("\u056F\u0578\u057F\u0565\u056C", 24, 1),
+    new Among("\u057E\u0561\u056E", -1, 1),
+    new Among("\u0578\u0582\u0574", -1, 1),
+    new Among("\u057E\u0578\u0582\u0574", 27, 1),
+    new Among("\u0561\u0576", -1, 1),
+    new Among("\u0581\u0561\u0576", 29, 1),
+    new Among("\u0561\u0581\u0561\u0576", 30, 1),
+    new Among("\u0561\u0581\u0580\u056B\u0576", -1, 1),
+    new Among("\u0561\u0581\u056B\u0576", -1, 1),
+    new Among("\u0565\u0581\u056B\u0576", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B\u0576", 34, 1),
+    new Among("\u0561\u056C\u056B\u057D", -1, 1),
+    new Among("\u0565\u056C\u056B\u057D", -1, 1),
+    new Among("\u0561\u057E", -1, 1),
+    new Among("\u0561\u0581\u0561\u057E", 38, 1),
+    new Among("\u0565\u0581\u0561\u057E", 38, 1),
+    new Among("\u0561\u056C\u0578\u057E", -1, 1),
+    new Among("\u0565\u056C\u0578\u057E", -1, 1),
+    new Among("\u0561\u0580", -1, 1),
+    new Among("\u0561\u0581\u0561\u0580", 43, 1),
+    new Among("\u0565\u0581\u0561\u0580", 43, 1),
+    new Among("\u0561\u0581\u0580\u056B\u0580", -1, 1),
+    new Among("\u0561\u0581\u056B\u0580", -1, 1),
+    new Among("\u0565\u0581\u056B\u0580", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B\u0580", 48, 1),
+    new Among("\u0561\u0581", -1, 1),
+    new Among("\u0565\u0581", -1, 1),
+    new Among("\u0561\u0581\u0580\u0565\u0581", 51, 1),
+    new Among("\u0561\u056C\u0578\u0582\u0581", -1, 1),
+    new Among("\u0565\u056C\u0578\u0582\u0581", -1, 1),
+    new Among("\u0561\u056C\u0578\u0582", -1, 1),
+    new Among("\u0565\u056C\u0578\u0582", -1, 1),
+    new Among("\u0561\u0584", -1, 1),
+    new Among("\u0581\u0561\u0584", 57, 1),
+    new Among("\u0561\u0581\u0561\u0584", 58, 1),
+    new Among("\u0561\u0581\u0580\u056B\u0584", -1, 1),
+    new Among("\u0561\u0581\u056B\u0584", -1, 1),
+    new Among("\u0565\u0581\u056B\u0584", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B\u0584", 62, 1),
+    new Among("\u0561\u0576\u0584", -1, 1),
+    new Among("\u0581\u0561\u0576\u0584", 64, 1),
+    new Among("\u0561\u0581\u0561\u0576\u0584", 65, 1),
+    new Among("\u0561\u0581\u0580\u056B\u0576\u0584", -1, 1),
+    new Among("\u0561\u0581\u056B\u0576\u0584", -1, 1),
+    new Among("\u0565\u0581\u056B\u0576\u0584", -1, 1),
+    new Among("\u057E\u0565\u0581\u056B\u0576\u0584", 69, 1)
+  };
 
-                private final static Among a_0[] = {
-                    new Among ( "\u0580\u0578\u0580\u0564", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0578\u0580\u0564", 0, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u056F\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0580\u0561\u056F", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0572", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u056F\u0561\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0580\u0561\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056F\u0565\u0576", 8, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0565\u0576", 8, 1, "", methodObject ),
-                    new Among ( "\u0578\u0580\u0567\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0563\u056B\u0576", 12, 1, "", methodObject ),
-                    new Among ( "\u0578\u057E\u056B\u0576", 12, 1, "", methodObject ),
-                    new Among ( "\u056C\u0561\u0575\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0578\u0582\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u057A\u0565\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u057F", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u057E\u0565\u057F", -1, 1, "", methodObject ),
-                    new Among ( "\u056F\u0578\u057F", -1, 1, "", methodObject ),
-                    new Among ( "\u0562\u0561\u0580", -1, 1, "", methodObject )
-                };
+  private final static Among a_2[] = {
+    new Among("\u0578\u0580\u0564", -1, 1),
+    new Among("\u0578\u0582\u0575\u0569", -1, 1),
+    new Among("\u0578\u0582\u0570\u056B", -1, 1),
+    new Among("\u0581\u056B", -1, 1),
+    new Among("\u056B\u056C", -1, 1),
+    new Among("\u0561\u056F", -1, 1),
+    new Among("\u0575\u0561\u056F", 5, 1),
+    new Among("\u0561\u0576\u0561\u056F", 5, 1),
+    new Among("\u056B\u056F", -1, 1),
+    new Among("\u0578\u0582\u056F", -1, 1),
+    new Among("\u0561\u0576", -1, 1),
+    new Among("\u057A\u0561\u0576", 10, 1),
+    new Among("\u057D\u057F\u0561\u0576", 10, 1),
+    new Among("\u0561\u0580\u0561\u0576", 10, 1),
+    new Among("\u0565\u0572\u0567\u0576", -1, 1),
+    new Among("\u0575\u0578\u0582\u0576", -1, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0578\u0582\u0576", 15, 1),
+    new Among("\u0561\u056E\u0578", -1, 1),
+    new Among("\u056B\u0579", -1, 1),
+    new Among("\u0578\u0582\u057D", -1, 1),
+    new Among("\u0578\u0582\u057D\u057F", -1, 1),
+    new Among("\u0563\u0561\u0580", -1, 1),
+    new Among("\u057E\u0578\u0580", -1, 1),
+    new Among("\u0561\u057E\u0578\u0580", 22, 1),
+    new Among("\u0578\u0581", -1, 1),
+    new Among("\u0561\u0576\u0585\u0581", -1, 1),
+    new Among("\u0578\u0582", -1, 1),
+    new Among("\u0584", -1, 1),
+    new Among("\u0579\u0565\u0584", 27, 1),
+    new Among("\u056B\u0584", 27, 1),
+    new Among("\u0561\u056C\u056B\u0584", 29, 1),
+    new Among("\u0561\u0576\u056B\u0584", 29, 1),
+    new Among("\u057E\u0561\u056E\u0584", 27, 1),
+    new Among("\u0578\u0582\u0575\u0584", 27, 1),
+    new Among("\u0565\u0576\u0584", 27, 1),
+    new Among("\u0578\u0576\u0584", 27, 1),
+    new Among("\u0578\u0582\u0576\u0584", 27, 1),
+    new Among("\u0574\u0578\u0582\u0576\u0584", 36, 1),
+    new Among("\u056B\u0579\u0584", 27, 1),
+    new Among("\u0561\u0580\u0584", 27, 1)
+  };
 
-                private final static Among a_1[] = {
-                    new Among ( "\u0561", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561", 0, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u0561", 0, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B", 6, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C", -1, 1, "", methodObject ),
-                    new Among ( "\u0568\u0561\u056C", 8, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0561\u056C", 8, 1, "", methodObject ),
-                    new Among ( "\u0565\u0576\u0561\u056C", 8, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0576\u0561\u056C", 8, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C", -1, 1, "", methodObject ),
-                    new Among ( "\u0568\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u0581\u0576\u0565\u056C", 15, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u0576\u0565\u056C", 16, 1, "", methodObject ),
-                    new Among ( "\u0579\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u057E\u0565\u056C", 19, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u057E\u0565\u056C", 19, 1, "", methodObject ),
-                    new Among ( "\u057F\u0565\u056C", 13, 1, "", methodObject ),
-                    new Among ( "\u0561\u057F\u0565\u056C", 22, 1, "", methodObject ),
-                    new Among ( "\u0578\u057F\u0565\u056C", 22, 1, "", methodObject ),
-                    new Among ( "\u056F\u0578\u057F\u0565\u056C", 24, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u056E", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0574", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0578\u0582\u0574", 27, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0581\u0561\u0576", 29, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u0576", 30, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B\u0576", 34, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u056B\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C\u056B\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u057E", 38, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u0561\u057E", 38, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u0578\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C\u0578\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u0580", 43, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u0561\u0580", 43, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B\u0580", 48, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u0565\u0581", 51, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u0578\u0582\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C\u0578\u0582\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u0578\u0582", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u056C\u0578\u0582", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0581\u0561\u0584", 57, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u0584", 58, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B\u0584", 62, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0581\u0561\u0576\u0584", 64, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0561\u0576\u0584", 65, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u0580\u056B\u0576\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0581\u056B\u0576\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0581\u056B\u0576\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0565\u0581\u056B\u0576\u0584", 69, 1, "", methodObject )
-                };
+  private final static Among a_3[] = {
+    new Among("\u057D\u0561", -1, 1),
+    new Among("\u057E\u0561", -1, 1),
+    new Among("\u0561\u0574\u0562", -1, 1),
+    new Among("\u0564", -1, 1),
+    new Among("\u0561\u0576\u0564", 3, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576\u0564", 4, 1),
+    new Among("\u057E\u0561\u0576\u0564", 4, 1),
+    new Among("\u0578\u057B\u0564", 3, 1),
+    new Among("\u0565\u0580\u0564", 3, 1),
+    new Among("\u0576\u0565\u0580\u0564", 8, 1),
+    new Among("\u0578\u0582\u0564", 3, 1),
+    new Among("\u0568", -1, 1),
+    new Among("\u0561\u0576\u0568", 11, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576\u0568", 12, 1),
+    new Among("\u057E\u0561\u0576\u0568", 12, 1),
+    new Among("\u0578\u057B\u0568", 11, 1),
+    new Among("\u0565\u0580\u0568", 11, 1),
+    new Among("\u0576\u0565\u0580\u0568", 16, 1),
+    new Among("\u056B", -1, 1),
+    new Among("\u057E\u056B", 18, 1),
+    new Among("\u0565\u0580\u056B", 18, 1),
+    new Among("\u0576\u0565\u0580\u056B", 20, 1),
+    new Among("\u0561\u0576\u0578\u0582\u0574", -1, 1),
+    new Among("\u0565\u0580\u0578\u0582\u0574", -1, 1),
+    new Among("\u0576\u0565\u0580\u0578\u0582\u0574", 23, 1),
+    new Among("\u0576", -1, 1),
+    new Among("\u0561\u0576", 25, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576", 26, 1),
+    new Among("\u057E\u0561\u0576", 26, 1),
+    new Among("\u056B\u0576", 25, 1),
+    new Among("\u0565\u0580\u056B\u0576", 29, 1),
+    new Among("\u0576\u0565\u0580\u056B\u0576", 30, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576\u0576", 25, 1),
+    new Among("\u0565\u0580\u0576", 25, 1),
+    new Among("\u0576\u0565\u0580\u0576", 33, 1),
+    new Among("\u0578\u0582\u0576", 25, 1),
+    new Among("\u0578\u057B", -1, 1),
+    new Among("\u0578\u0582\u0569\u0575\u0561\u0576\u057D", -1, 1),
+    new Among("\u057E\u0561\u0576\u057D", -1, 1),
+    new Among("\u0578\u057B\u057D", -1, 1),
+    new Among("\u0578\u057E", -1, 1),
+    new Among("\u0561\u0576\u0578\u057E", 40, 1),
+    new Among("\u057E\u0578\u057E", 40, 1),
+    new Among("\u0565\u0580\u0578\u057E", 40, 1),
+    new Among("\u0576\u0565\u0580\u0578\u057E", 43, 1),
+    new Among("\u0565\u0580", -1, 1),
+    new Among("\u0576\u0565\u0580", 45, 1),
+    new Among("\u0581", -1, 1),
+    new Among("\u056B\u0581", 47, 1),
+    new Among("\u057E\u0561\u0576\u056B\u0581", 48, 1),
+    new Among("\u0578\u057B\u056B\u0581", 48, 1),
+    new Among("\u057E\u056B\u0581", 48, 1),
+    new Among("\u0565\u0580\u056B\u0581", 48, 1),
+    new Among("\u0576\u0565\u0580\u056B\u0581", 52, 1),
+    new Among("\u0581\u056B\u0581", 48, 1),
+    new Among("\u0578\u0581", 47, 1),
+    new Among("\u0578\u0582\u0581", 47, 1)
+  };
 
-                private final static Among a_2[] = {
-                    new Among ( "\u0578\u0580\u0564", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0575\u0569", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0570\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u0581\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u056C", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u056F", -1, 1, "", methodObject ),
-                    new Among ( "\u0575\u0561\u056F", 5, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0561\u056F", 5, 1, "", methodObject ),
-                    new Among ( "\u056B\u056F", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u056F", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u057A\u0561\u0576", 10, 1, "", methodObject ),
-                    new Among ( "\u057D\u057F\u0561\u0576", 10, 1, "", methodObject ),
-                    new Among ( "\u0561\u0580\u0561\u0576", 10, 1, "", methodObject ),
-                    new Among ( "\u0565\u0572\u0567\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0575\u0578\u0582\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0578\u0582\u0576", 15, 1, "", methodObject ),
-                    new Among ( "\u0561\u056E\u0578", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u0579", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u057D\u057F", -1, 1, "", methodObject ),
-                    new Among ( "\u0563\u0561\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0578\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u057E\u0578\u0580", 22, 1, "", methodObject ),
-                    new Among ( "\u0578\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0585\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582", -1, 1, "", methodObject ),
-                    new Among ( "\u0584", -1, 1, "", methodObject ),
-                    new Among ( "\u0579\u0565\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u056B\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0561\u056C\u056B\u0584", 29, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u056B\u0584", 29, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u056E\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0575\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0565\u0576\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0578\u0576\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0576\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0574\u0578\u0582\u0576\u0584", 36, 1, "", methodObject ),
-                    new Among ( "\u056B\u0579\u0584", 27, 1, "", methodObject ),
-                    new Among ( "\u0561\u0580\u0584", 27, 1, "", methodObject )
-                };
+  private static final char g_v[] = {209, 4, 128, 0, 18 };
 
-                private final static Among a_3[] = {
-                    new Among ( "\u057D\u0561", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0574\u0562", -1, 1, "", methodObject ),
-                    new Among ( "\u0564", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0564", 3, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576\u0564", 4, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576\u0564", 4, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B\u0564", 3, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0564", 3, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0564", 8, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0564", 3, 1, "", methodObject ),
-                    new Among ( "\u0568", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0568", 11, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576\u0568", 12, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576\u0568", 12, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B\u0568", 11, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0568", 11, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0568", 16, 1, "", methodObject ),
-                    new Among ( "\u056B", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u056B", 18, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u056B", 18, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u056B", 20, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0578\u0582\u0574", -1, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0578\u0582\u0574", -1, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0578\u0582\u0574", 23, 1, "", methodObject ),
-                    new Among ( "\u0576", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576", 26, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576", 26, 1, "", methodObject ),
-                    new Among ( "\u056B\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u056B\u0576", 29, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u056B\u0576", 30, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0576", 33, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0576", 25, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0569\u0575\u0561\u0576\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B\u057D", -1, 1, "", methodObject ),
-                    new Among ( "\u0578\u057E", -1, 1, "", methodObject ),
-                    new Among ( "\u0561\u0576\u0578\u057E", 40, 1, "", methodObject ),
-                    new Among ( "\u057E\u0578\u057E", 40, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u0578\u057E", 40, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u0578\u057E", 43, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580", -1, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580", 45, 1, "", methodObject ),
-                    new Among ( "\u0581", -1, 1, "", methodObject ),
-                    new Among ( "\u056B\u0581", 47, 1, "", methodObject ),
-                    new Among ( "\u057E\u0561\u0576\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u0578\u057B\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u057E\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u0565\u0580\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u0576\u0565\u0580\u056B\u0581", 52, 1, "", methodObject ),
-                    new Among ( "\u0581\u056B\u0581", 48, 1, "", methodObject ),
-                    new Among ( "\u0578\u0581", 47, 1, "", methodObject ),
-                    new Among ( "\u0578\u0582\u0581", 47, 1, "", methodObject )
-                };
+  private int I_p2;
+  private int I_pV;
 
-                private static final char g_v[] = {209, 4, 128, 0, 18 };
 
-        private int I_p2;
-        private int I_pV;
-
-                private void copy_from(ArmenianStemmer other) {
-                    I_p2 = other.I_p2;
-                    I_pV = other.I_pV;
-                    super.copy_from(other);
-                }
-
-                private boolean r_mark_regions() {
-            int v_1;
-                    // (, line 58
-                    I_pV = limit;
-                    I_p2 = limit;
-                    // do, line 62
-                    v_1 = cursor;
-                    lab0: do {
-                        // (, line 62
-                        // gopast, line 63
-                        golab1: while(true)
-                        {
-                            lab2: do {
-                                if (!(in_grouping(g_v, 1377, 1413)))
-                                {
-                                    break lab2;
-                                }
-                                break golab1;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // setmark pV, line 63
-                        I_pV = cursor;
-                        // gopast, line 63
-                        golab3: while(true)
-                        {
-                            lab4: do {
-                                if (!(out_grouping(g_v, 1377, 1413)))
-                                {
-                                    break lab4;
-                                }
-                                break golab3;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 64
-                        golab5: while(true)
-                        {
-                            lab6: do {
-                                if (!(in_grouping(g_v, 1377, 1413)))
-                                {
-                                    break lab6;
-                                }
-                                break golab5;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 64
-                        golab7: while(true)
-                        {
-                            lab8: do {
-                                if (!(out_grouping(g_v, 1377, 1413)))
-                                {
-                                    break lab8;
-                                }
-                                break golab7;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // setmark p2, line 64
-                        I_p2 = cursor;
-                    } while (false);
-                    cursor = v_1;
-                    return true;
-                }
+  private boolean r_mark_regions() {
+    I_pV = limit;
+    I_p2 = limit;
+    int v_1 = cursor;
+lab0: {
+golab1: while(true)
+        {
+lab2: {
+        if (!(in_grouping(g_v, 1377, 1413)))
+        {
+          break lab2;
+        }
+        break golab1;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+        }
+I_pV = cursor;
+golab3: while(true)
+{
+lab4: {
+        if (!(out_grouping(g_v, 1377, 1413)))
+        {
+          break lab4;
+        }
+        break golab3;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+golab5: while(true)
+{
+lab6: {
+        if (!(in_grouping(g_v, 1377, 1413)))
+        {
+          break lab6;
+        }
+        break golab5;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+golab7: while(true)
+{
+lab8: {
+        if (!(out_grouping(g_v, 1377, 1413)))
+        {
+          break lab8;
+        }
+        break golab7;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+I_p2 = cursor;
+}
+cursor = v_1;
+return true;
+  }
 
-                private boolean r_R2() {
-                    if (!(I_p2 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_R2() {
+  if (!(I_p2 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_adjective() {
-            int among_var;
-                    // (, line 72
-                    // [, line 73
-                    ket = cursor;
-                    // substring, line 73
-                    among_var = find_among_b(a_0, 23);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 73
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 98
-                            // delete, line 98
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_adjective() {
+  ket = cursor;
+  if (find_among_b(a_0) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  slice_del();
+  return true;
+}
 
-                private boolean r_verb() {
-            int among_var;
-                    // (, line 102
-                    // [, line 103
-                    ket = cursor;
-                    // substring, line 103
-                    among_var = find_among_b(a_1, 71);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 103
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 176
-                            // delete, line 176
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_verb() {
+  ket = cursor;
+  if (find_among_b(a_1) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  slice_del();
+  return true;
+}
 
-                private boolean r_noun() {
-            int among_var;
-                    // (, line 180
-                    // [, line 181
-                    ket = cursor;
-                    // substring, line 181
-                    among_var = find_among_b(a_2, 40);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 181
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 223
-                            // delete, line 223
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_noun() {
+  ket = cursor;
+  if (find_among_b(a_2) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  slice_del();
+  return true;
+}
 
-                private boolean r_ending() {
-            int among_var;
-                    // (, line 227
-                    // [, line 228
-                    ket = cursor;
-                    // substring, line 228
-                    among_var = find_among_b(a_3, 57);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 228
-                    bra = cursor;
-                    // call R2, line 228
-                    if (!r_R2())
-                    {
-                        return false;
-                    }
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 287
-                            // delete, line 287
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_ending() {
+  ket = cursor;
+  if (find_among_b(a_3) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!r_R2())
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-                @Override
-                public boolean stem() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-            int v_5;
-            int v_6;
-            int v_7;
-                    // (, line 292
-                    // do, line 294
-                    v_1 = cursor;
-                    lab0: do {
-                        // call mark_regions, line 294
-                        if (!r_mark_regions())
-                        {
-                            break lab0;
-                        }
-                    } while (false);
-                    cursor = v_1;
-                    // backwards, line 295
-                    limit_backward = cursor; cursor = limit;
-                    // setlimit, line 295
-                    v_2 = limit - cursor;
-                    // tomark, line 295
-                    if (cursor < I_pV)
-                    {
-                        return false;
-                    }
-                    cursor = I_pV;
-                    v_3 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_2;
-                    // (, line 295
-                    // do, line 296
-                    v_4 = limit - cursor;
-                    lab1: do {
-                        // call ending, line 296
-                        if (!r_ending())
-                        {
-                            break lab1;
-                        }
-                    } while (false);
-                    cursor = limit - v_4;
-                    // do, line 297
-                    v_5 = limit - cursor;
-                    lab2: do {
-                        // call verb, line 297
-                        if (!r_verb())
-                        {
-                            break lab2;
-                        }
-                    } while (false);
-                    cursor = limit - v_5;
-                    // do, line 298
-                    v_6 = limit - cursor;
-                    lab3: do {
-                        // call adjective, line 298
-                        if (!r_adjective())
-                        {
-                            break lab3;
-                        }
-                    } while (false);
-                    cursor = limit - v_6;
-                    // do, line 299
-                    v_7 = limit - cursor;
-                    lab4: do {
-                        // call noun, line 299
-                        if (!r_noun())
-                        {
-                            break lab4;
-                        }
-                    } while (false);
-                    cursor = limit - v_7;
-                    limit_backward = v_3;
-                    cursor = limit_backward;                    return true;
-                }
+public boolean stem() {
+  r_mark_regions();
+  limit_backward = cursor;
+  cursor = limit;
+  if (cursor < I_pV)
+  {
+    return false;
+  }
+  int v_3 = limit_backward;
+  limit_backward = I_pV;
+  int v_4 = limit - cursor;
+  r_ending();
+  cursor = limit - v_4;
+  int v_5 = limit - cursor;
+  r_verb();
+  cursor = limit - v_5;
+  int v_6 = limit - cursor;
+  r_adjective();
+  cursor = limit - v_6;
+  int v_7 = limit - cursor;
+  r_noun();
+  cursor = limit - v_7;
+  limit_backward = v_3;
+  cursor = limit_backward;
+  return true;
+}
 
-        @Override
-        public boolean equals( Object o ) {
-            return o instanceof ArmenianStemmer;
-        }
+@Override
+public boolean equals( Object o ) {
+  return o instanceof ArmenianStemmer;
+}
 
-        @Override
-        public int hashCode() {
-            return ArmenianStemmer.class.getName().hashCode();
-        }
+@Override
+public int hashCode() {
+  return ArmenianStemmer.class.getName().hashCode();
+}
 
 
 
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/BasqueStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/BasqueStemmer.java
index ce6927d..2152128 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/BasqueStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/BasqueStemmer.java
@@ -1,940 +1,820 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
+/**
+ * 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 BasqueStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class BasqueStemmer extends SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-private static final long serialVersionUID = 1L;
+  private final static Among a_0[] = {
+    new Among("idea", -1, 1),
+    new Among("bidea", 0, 1),
+    new Among("kidea", 0, 1),
+    new Among("pidea", 0, 1),
+    new Among("kundea", -1, 1),
+    new Among("galea", -1, 1),
+    new Among("tailea", -1, 1),
+    new Among("tzailea", -1, 1),
+    new Among("gunea", -1, 1),
+    new Among("kunea", -1, 1),
+    new Among("tzaga", -1, 1),
+    new Among("gaia", -1, 1),
+    new Among("aldia", -1, 1),
+    new Among("taldia", 12, 1),
+    new Among("karia", -1, 1),
+    new Among("garria", -1, 2),
+    new Among("karria", -1, 1),
+    new Among("ka", -1, 1),
+    new Among("tzaka", 17, 1),
+    new Among("la", -1, 1),
+    new Among("mena", -1, 1),
+    new Among("pena", -1, 1),
+    new Among("kina", -1, 1),
+    new Among("ezina", -1, 1),
+    new Among("tezina", 23, 1),
+    new Among("kuna", -1, 1),
+    new Among("tuna", -1, 1),
+    new Among("kizuna", -1, 1),
+    new Among("era", -1, 1),
+    new Among("bera", 28, 1),
+    new Among("arabera", 29, 4),
+    new Among("kera", 28, 1),
+    new Among("pera", 28, 1),
+    new Among("orra", -1, 1),
+    new Among("korra", 33, 1),
+    new Among("dura", -1, 1),
+    new Among("gura", -1, 1),
+    new Among("kura", -1, 1),
+    new Among("tura", -1, 1),
+    new Among("eta", -1, 1),
+    new Among("keta", 39, 1),
+    new Among("gailua", -1, 1),
+    new Among("eza", -1, 1),
+    new Among("erreza", 42, 1),
+    new Among("tza", -1, 2),
+    new Among("gaitza", 44, 1),
+    new Among("kaitza", 44, 1),
+    new Among("kuntza", 44, 1),
+    new Among("ide", -1, 1),
+    new Among("bide", 48, 1),
+    new Among("kide", 48, 1),
+    new Among("pide", 48, 1),
+    new Among("kunde", -1, 1),
+    new Among("tzake", -1, 1),
+    new Among("tzeke", -1, 1),
+    new Among("le", -1, 1),
+    new Among("gale", 55, 1),
+    new Among("taile", 55, 1),
+    new Among("tzaile", 55, 1),
+    new Among("gune", -1, 1),
+    new Among("kune", -1, 1),
+    new Among("tze", -1, 1),
+    new Among("atze", 61, 1),
+    new Among("gai", -1, 1),
+    new Among("aldi", -1, 1),
+    new Among("taldi", 64, 1),
+    new Among("ki", -1, 1),
+    new Among("ari", -1, 1),
+    new Among("kari", 67, 1),
+    new Among("lari", 67, 1),
+    new Among("tari", 67, 1),
+    new Among("etari", 70, 1),
+    new Among("garri", -1, 2),
+    new Among("karri", -1, 1),
+    new Among("arazi", -1, 1),
+    new Among("tarazi", 74, 1),
+    new Among("an", -1, 1),
+    new Among("ean", 76, 1),
+    new Among("rean", 77, 1),
+    new Among("kan", 76, 1),
+    new Among("etan", 76, 1),
+    new Among("atseden", -1, 3),
+    new Among("men", -1, 1),
+    new Among("pen", -1, 1),
+    new Among("kin", -1, 1),
+    new Among("rekin", 84, 1),
+    new Among("ezin", -1, 1),
+    new Among("tezin", 86, 1),
+    new Among("tun", -1, 1),
+    new Among("kizun", -1, 1),
+    new Among("go", -1, 1),
+    new Among("ago", 90, 1),
+    new Among("tio", -1, 1),
+    new Among("dako", -1, 1),
+    new Among("or", -1, 1),
+    new Among("kor", 94, 1),
+    new Among("tzat", -1, 1),
+    new Among("du", -1, 1),
+    new Among("gailu", -1, 1),
+    new Among("tu", -1, 1),
+    new Among("atu", 99, 1),
+    new Among("aldatu", 100, 1),
+    new Among("tatu", 100, 1),
+    new Among("baditu", 99, 5),
+    new Among("ez", -1, 1),
+    new Among("errez", 104, 1),
+    new Among("tzez", 104, 1),
+    new Among("gaitz", -1, 1),
+    new Among("kaitz", -1, 1)
+  };
 
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("ada", -1, 1),
+    new Among("kada", 0, 1),
+    new Among("anda", -1, 1),
+    new Among("denda", -1, 1),
+    new Among("gabea", -1, 1),
+    new Among("kabea", -1, 1),
+    new Among("aldea", -1, 1),
+    new Among("kaldea", 6, 1),
+    new Among("taldea", 6, 1),
+    new Among("ordea", -1, 1),
+    new Among("zalea", -1, 1),
+    new Among("tzalea", 10, 1),
+    new Among("gilea", -1, 1),
+    new Among("emea", -1, 1),
+    new Among("kumea", -1, 1),
+    new Among("nea", -1, 1),
+    new Among("enea", 15, 1),
+    new Among("zionea", 15, 1),
+    new Among("unea", 15, 1),
+    new Among("gunea", 18, 1),
+    new Among("pea", -1, 1),
+    new Among("aurrea", -1, 1),
+    new Among("tea", -1, 1),
+    new Among("kotea", 22, 1),
+    new Among("artea", 22, 1),
+    new Among("ostea", 22, 1),
+    new Among("etxea", -1, 1),
+    new Among("ga", -1, 1),
+    new Among("anga", 27, 1),
+    new Among("gaia", -1, 1),
+    new Among("aldia", -1, 1),
+    new Among("taldia", 30, 1),
+    new Among("handia", -1, 1),
+    new Among("mendia", -1, 1),
+    new Among("geia", -1, 1),
+    new Among("egia", -1, 1),
+    new Among("degia", 35, 1),
+    new Among("tegia", 35, 1),
+    new Among("nahia", -1, 1),
+    new Among("ohia", -1, 1),
+    new Among("kia", -1, 1),
+    new Among("tokia", 40, 1),
+    new Among("oia", -1, 1),
+    new Among("koia", 42, 1),
+    new Among("aria", -1, 1),
+    new Among("karia", 44, 1),
+    new Among("laria", 44, 1),
+    new Among("taria", 44, 1),
+    new Among("eria", -1, 1),
+    new Among("keria", 48, 1),
+    new Among("teria", 48, 1),
+    new Among("garria", -1, 2),
+    new Among("larria", -1, 1),
+    new Among("kirria", -1, 1),
+    new Among("duria", -1, 1),
+    new Among("asia", -1, 1),
+    new Among("tia", -1, 1),
+    new Among("ezia", -1, 1),
+    new Among("bizia", -1, 1),
+    new Among("ontzia", -1, 1),
+    new Among("ka", -1, 1),
+    new Among("joka", 60, 3),
+    new Among("aurka", 60, 10),
+    new Among("ska", 60, 1),
+    new Among("xka", 60, 1),
+    new Among("zka", 60, 1),
+    new Among("gibela", -1, 1),
+    new Among("gela", -1, 1),
+    new Among("kaila", -1, 1),
+    new Among("skila", -1, 1),
+    new Among("tila", -1, 1),
+    new Among("ola", -1, 1),
+    new Among("na", -1, 1),
+    new Among("kana", 72, 1),
+    new Among("ena", 72, 1),
+    new Among("garrena", 74, 1),
+    new Among("gerrena", 74, 1),
+    new Among("urrena", 74, 1),
+    new Among("zaina", 72, 1),
+    new Among("tzaina", 78, 1),
+    new Among("kina", 72, 1),
+    new Among("mina", 72, 1),
+    new Among("garna", 72, 1),
+    new Among("una", 72, 1),
+    new Among("duna", 83, 1),
+    new Among("asuna", 83, 1),
+    new Among("tasuna", 85, 1),
+    new Among("ondoa", -1, 1),
+    new Among("kondoa", 87, 1),
+    new Among("ngoa", -1, 1),
+    new Among("zioa", -1, 1),
+    new Among("koa", -1, 1),
+    new Among("takoa", 91, 1),
+    new Among("zkoa", 91, 1),
+    new Among("noa", -1, 1),
+    new Among("zinoa", 94, 1),
+    new Among("aroa", -1, 1),
+    new Among("taroa", 96, 1),
+    new Among("zaroa", 96, 1),
+    new Among("eroa", -1, 1),
+    new Among("oroa", -1, 1),
+    new Among("osoa", -1, 1),
+    new Among("toa", -1, 1),
+    new Among("ttoa", 102, 1),
+    new Among("ztoa", 102, 1),
+    new Among("txoa", -1, 1),
+    new Among("tzoa", -1, 1),
+    new Among("\u00F1oa", -1, 1),
+    new Among("ra", -1, 1),
+    new Among("ara", 108, 1),
+    new Among("dara", 109, 1),
+    new Among("liara", 109, 1),
+    new Among("tiara", 109, 1),
+    new Among("tara", 109, 1),
+    new Among("etara", 113, 1),
+    new Among("tzara", 109, 1),
+    new Among("bera", 108, 1),
+    new Among("kera", 108, 1),
+    new Among("pera", 108, 1),
+    new Among("ora", 108, 2),
+    new Among("tzarra", 108, 1),
+    new Among("korra", 108, 1),
+    new Among("tra", 108, 1),
+    new Among("sa", -1, 1),
+    new Among("osa", 123, 1),
+    new Among("ta", -1, 1),
+    new Among("eta", 125, 1),
+    new Among("keta", 126, 1),
+    new Among("sta", 125, 1),
+    new Among("dua", -1, 1),
+    new Among("mendua", 129, 1),
+    new Among("ordua", 129, 1),
+    new Among("lekua", -1, 1),
+    new Among("burua", -1, 1),
+    new Among("durua", -1, 1),
+    new Among("tsua", -1, 1),
+    new Among("tua", -1, 1),
+    new Among("mentua", 136, 1),
+    new Among("estua", 136, 1),
+    new Among("txua", -1, 1),
+    new Among("zua", -1, 1),
+    new Among("tzua", 140, 1),
+    new Among("za", -1, 1),
+    new Among("eza", 142, 1),
+    new Among("eroza", 142, 1),
+    new Among("tza", 142, 2),
+    new Among("koitza", 145, 1),
+    new Among("antza", 145, 1),
+    new Among("gintza", 145, 1),
+    new Among("kintza", 145, 1),
+    new Among("kuntza", 145, 1),
+    new Among("gabe", -1, 1),
+    new Among("kabe", -1, 1),
+    new Among("kide", -1, 1),
+    new Among("alde", -1, 1),
+    new Among("kalde", 154, 1),
+    new Among("talde", 154, 1),
+    new Among("orde", -1, 1),
+    new Among("ge", -1, 1),
+    new Among("zale", -1, 1),
+    new Among("tzale", 159, 1),
+    new Among("gile", -1, 1),
+    new Among("eme", -1, 1),
+    new Among("kume", -1, 1),
+    new Among("ne", -1, 1),
+    new Among("zione", 164, 1),
+    new Among("une", 164, 1),
+    new Among("gune", 166, 1),
+    new Among("pe", -1, 1),
+    new Among("aurre", -1, 1),
+    new Among("te", -1, 1),
+    new Among("kote", 170, 1),
+    new Among("arte", 170, 1),
+    new Among("oste", 170, 1),
+    new Among("etxe", -1, 1),
+    new Among("gai", -1, 1),
+    new Among("di", -1, 1),
+    new Among("aldi", 176, 1),
+    new Among("taldi", 177, 1),
+    new Among("geldi", 176, 8),
+    new Among("handi", 176, 1),
+    new Among("mendi", 176, 1),
+    new Among("gei", -1, 1),
+    new Among("egi", -1, 1),
+    new Among("degi", 183, 1),
+    new Among("tegi", 183, 1),
+    new Among("nahi", -1, 1),
+    new Among("ohi", -1, 1),
+    new Among("ki", -1, 1),
+    new Among("toki", 188, 1),
+    new Among("oi", -1, 1),
+    new Among("goi", 190, 1),
+    new Among("koi", 190, 1),
+    new Among("ari", -1, 1),
+    new Among("kari", 193, 1),
+    new Among("lari", 193, 1),
+    new Among("tari", 193, 1),
+    new Among("garri", -1, 2),
+    new Among("larri", -1, 1),
+    new Among("kirri", -1, 1),
+    new Among("duri", -1, 1),
+    new Among("asi", -1, 1),
+    new Among("ti", -1, 1),
+    new Among("ontzi", -1, 1),
+    new Among("\u00F1i", -1, 1),
+    new Among("ak", -1, 1),
+    new Among("ek", -1, 1),
+    new Among("tarik", -1, 1),
+    new Among("gibel", -1, 1),
+    new Among("ail", -1, 1),
+    new Among("kail", 209, 1),
+    new Among("kan", -1, 1),
+    new Among("tan", -1, 1),
+    new Among("etan", 212, 1),
+    new Among("en", -1, 4),
+    new Among("ren", 214, 2),
+    new Among("garren", 215, 1),
+    new Among("gerren", 215, 1),
+    new Among("urren", 215, 1),
+    new Among("ten", 214, 4),
+    new Among("tzen", 214, 4),
+    new Among("zain", -1, 1),
+    new Among("tzain", 221, 1),
+    new Among("kin", -1, 1),
+    new Among("min", -1, 1),
+    new Among("dun", -1, 1),
+    new Among("asun", -1, 1),
+    new Among("tasun", 226, 1),
+    new Among("aizun", -1, 1),
+    new Among("ondo", -1, 1),
+    new Among("kondo", 229, 1),
+    new Among("go", -1, 1),
+    new Among("ngo", 231, 1),
+    new Among("zio", -1, 1),
+    new Among("ko", -1, 1),
+    new Among("trako", 234, 5),
+    new Among("tako", 234, 1),
+    new Among("etako", 236, 1),
+    new Among("eko", 234, 1),
+    new Among("tariko", 234, 1),
+    new Among("sko", 234, 1),
+    new Among("tuko", 234, 1),
+    new Among("minutuko", 241, 6),
+    new Among("zko", 234, 1),
+    new Among("no", -1, 1),
+    new Among("zino", 244, 1),
+    new Among("ro", -1, 1),
+    new Among("aro", 246, 1),
+    new Among("igaro", 247, 9),
+    new Among("taro", 247, 1),
+    new Among("zaro", 247, 1),
+    new Among("ero", 246, 1),
+    new Among("giro", 246, 1),
+    new Among("oro", 246, 1),
+    new Among("oso", -1, 1),
+    new Among("to", -1, 1),
+    new Among("tto", 255, 1),
+    new Among("zto", 255, 1),
+    new Among("txo", -1, 1),
+    new Among("tzo", -1, 1),
+    new Among("gintzo", 259, 1),
+    new Among("\u00F1o", -1, 1),
+    new Among("zp", -1, 1),
+    new Among("ar", -1, 1),
+    new Among("dar", 263, 1),
+    new Among("behar", 263, 1),
+    new Among("zehar", 263, 7),
+    new Among("liar", 263, 1),
+    new Among("tiar", 263, 1),
+    new Among("tar", 263, 1),
+    new Among("tzar", 263, 1),
+    new Among("or", -1, 2),
+    new Among("kor", 271, 1),
+    new Among("os", -1, 1),
+    new Among("ket", -1, 1),
+    new Among("du", -1, 1),
+    new Among("mendu", 275, 1),
+    new Among("ordu", 275, 1),
+    new Among("leku", -1, 1),
+    new Among("buru", -1, 2),
+    new Among("duru", -1, 1),
+    new Among("tsu", -1, 1),
+    new Among("tu", -1, 1),
+    new Among("tatu", 282, 4),
+    new Among("mentu", 282, 1),
+    new Among("estu", 282, 1),
+    new Among("txu", -1, 1),
+    new Among("zu", -1, 1),
+    new Among("tzu", 287, 1),
+    new Among("gintzu", 288, 1),
+    new Among("z", -1, 1),
+    new Among("ez", 290, 1),
+    new Among("eroz", 290, 1),
+    new Among("tz", 290, 1),
+    new Among("koitz", 293, 1)
+  };
 
-                private final static Among a_0[] = {
-                    new Among ( "idea", -1, 1, "", methodObject ),
-                    new Among ( "bidea", 0, 1, "", methodObject ),
-                    new Among ( "kidea", 0, 1, "", methodObject ),
-                    new Among ( "pidea", 0, 1, "", methodObject ),
-                    new Among ( "kundea", -1, 1, "", methodObject ),
-                    new Among ( "galea", -1, 1, "", methodObject ),
-                    new Among ( "tailea", -1, 1, "", methodObject ),
-                    new Among ( "tzailea", -1, 1, "", methodObject ),
-                    new Among ( "gunea", -1, 1, "", methodObject ),
-                    new Among ( "kunea", -1, 1, "", methodObject ),
-                    new Among ( "tzaga", -1, 1, "", methodObject ),
-                    new Among ( "gaia", -1, 1, "", methodObject ),
-                    new Among ( "aldia", -1, 1, "", methodObject ),
-                    new Among ( "taldia", 12, 1, "", methodObject ),
-                    new Among ( "karia", -1, 1, "", methodObject ),
-                    new Among ( "garria", -1, 2, "", methodObject ),
-                    new Among ( "karria", -1, 1, "", methodObject ),
-                    new Among ( "ka", -1, 1, "", methodObject ),
-                    new Among ( "tzaka", 17, 1, "", methodObject ),
-                    new Among ( "la", -1, 1, "", methodObject ),
-                    new Among ( "mena", -1, 1, "", methodObject ),
-                    new Among ( "pena", -1, 1, "", methodObject ),
-                    new Among ( "kina", -1, 1, "", methodObject ),
-                    new Among ( "ezina", -1, 1, "", methodObject ),
-                    new Among ( "tezina", 23, 1, "", methodObject ),
-                    new Among ( "kuna", -1, 1, "", methodObject ),
-                    new Among ( "tuna", -1, 1, "", methodObject ),
-                    new Among ( "kizuna", -1, 1, "", methodObject ),
-                    new Among ( "era", -1, 1, "", methodObject ),
-                    new Among ( "bera", 28, 1, "", methodObject ),
-                    new Among ( "arabera", 29, 4, "", methodObject ),
-                    new Among ( "kera", 28, 1, "", methodObject ),
-                    new Among ( "pera", 28, 1, "", methodObject ),
-                    new Among ( "orra", -1, 1, "", methodObject ),
-                    new Among ( "korra", 33, 1, "", methodObject ),
-                    new Among ( "dura", -1, 1, "", methodObject ),
-                    new Among ( "gura", -1, 1, "", methodObject ),
-                    new Among ( "kura", -1, 1, "", methodObject ),
-                    new Among ( "tura", -1, 1, "", methodObject ),
-                    new Among ( "eta", -1, 1, "", methodObject ),
-                    new Among ( "keta", 39, 1, "", methodObject ),
-                    new Among ( "gailua", -1, 1, "", methodObject ),
-                    new Among ( "eza", -1, 1, "", methodObject ),
-                    new Among ( "erreza", 42, 1, "", methodObject ),
-                    new Among ( "tza", -1, 2, "", methodObject ),
-                    new Among ( "gaitza", 44, 1, "", methodObject ),
-                    new Among ( "kaitza", 44, 1, "", methodObject ),
-                    new Among ( "kuntza", 44, 1, "", methodObject ),
-                    new Among ( "ide", -1, 1, "", methodObject ),
-                    new Among ( "bide", 48, 1, "", methodObject ),
-                    new Among ( "kide", 48, 1, "", methodObject ),
-                    new Among ( "pide", 48, 1, "", methodObject ),
-                    new Among ( "kunde", -1, 1, "", methodObject ),
-                    new Among ( "tzake", -1, 1, "", methodObject ),
-                    new Among ( "tzeke", -1, 1, "", methodObject ),
-                    new Among ( "le", -1, 1, "", methodObject ),
-                    new Among ( "gale", 55, 1, "", methodObject ),
-                    new Among ( "taile", 55, 1, "", methodObject ),
-                    new Among ( "tzaile", 55, 1, "", methodObject ),
-                    new Among ( "gune", -1, 1, "", methodObject ),
-                    new Among ( "kune", -1, 1, "", methodObject ),
-                    new Among ( "tze", -1, 1, "", methodObject ),
-                    new Among ( "atze", 61, 1, "", methodObject ),
-                    new Among ( "gai", -1, 1, "", methodObject ),
-                    new Among ( "aldi", -1, 1, "", methodObject ),
-                    new Among ( "taldi", 64, 1, "", methodObject ),
-                    new Among ( "ki", -1, 1, "", methodObject ),
-                    new Among ( "ari", -1, 1, "", methodObject ),
-                    new Among ( "kari", 67, 1, "", methodObject ),
-                    new Among ( "lari", 67, 1, "", methodObject ),
-                    new Among ( "tari", 67, 1, "", methodObject ),
-                    new Among ( "etari", 70, 1, "", methodObject ),
-                    new Among ( "garri", -1, 2, "", methodObject ),
-                    new Among ( "karri", -1, 1, "", methodObject ),
-                    new Among ( "arazi", -1, 1, "", methodObject ),
-                    new Among ( "tarazi", 74, 1, "", methodObject ),
-                    new Among ( "an", -1, 1, "", methodObject ),
-                    new Among ( "ean", 76, 1, "", methodObject ),
-                    new Among ( "rean", 77, 1, "", methodObject ),
-                    new Among ( "kan", 76, 1, "", methodObject ),
-                    new Among ( "etan", 76, 1, "", methodObject ),
-                    new Among ( "atseden", -1, 3, "", methodObject ),
-                    new Among ( "men", -1, 1, "", methodObject ),
-                    new Among ( "pen", -1, 1, "", methodObject ),
-                    new Among ( "kin", -1, 1, "", methodObject ),
-                    new Among ( "rekin", 84, 1, "", methodObject ),
-                    new Among ( "ezin", -1, 1, "", methodObject ),
-                    new Among ( "tezin", 86, 1, "", methodObject ),
-                    new Among ( "tun", -1, 1, "", methodObject ),
-                    new Among ( "kizun", -1, 1, "", methodObject ),
-                    new Among ( "go", -1, 1, "", methodObject ),
-                    new Among ( "ago", 90, 1, "", methodObject ),
-                    new Among ( "tio", -1, 1, "", methodObject ),
-                    new Among ( "dako", -1, 1, "", methodObject ),
-                    new Among ( "or", -1, 1, "", methodObject ),
-                    new Among ( "kor", 94, 1, "", methodObject ),
-                    new Among ( "tzat", -1, 1, "", methodObject ),
-                    new Among ( "du", -1, 1, "", methodObject ),
-                    new Among ( "gailu", -1, 1, "", methodObject ),
-                    new Among ( "tu", -1, 1, "", methodObject ),
-                    new Among ( "atu", 99, 1, "", methodObject ),
-                    new Among ( "aldatu", 100, 1, "", methodObject ),
-                    new Among ( "tatu", 100, 1, "", methodObject ),
-                    new Among ( "baditu", 99, 5, "", methodObject ),
-                    new Among ( "ez", -1, 1, "", methodObject ),
-                    new Among ( "errez", 104, 1, "", methodObject ),
-                    new Among ( "tzez", 104, 1, "", methodObject ),
-                    new Among ( "gaitz", -1, 1, "", methodObject ),
-                    new Among ( "kaitz", -1, 1, "", methodObject )
-                };
+  private final static Among a_2[] = {
+    new Among("zlea", -1, 2),
+    new Among("keria", -1, 1),
+    new Among("la", -1, 1),
+    new Among("era", -1, 1),
+    new Among("dade", -1, 1),
+    new Among("tade", -1, 1),
+    new Among("date", -1, 1),
+    new Among("tate", -1, 1),
+    new Among("gi", -1, 1),
+    new Among("ki", -1, 1),
+    new Among("ik", -1, 1),
+    new Among("lanik", 10, 1),
+    new Among("rik", 10, 1),
+    new Among("larik", 12, 1),
+    new Among("ztik", 10, 1),
+    new Among("go", -1, 1),
+    new Among("ro", -1, 1),
+    new Among("ero", 16, 1),
+    new Among("to", -1, 1)
+  };
 
-                private final static Among a_1[] = {
-                    new Among ( "ada", -1, 1, "", methodObject ),
-                    new Among ( "kada", 0, 1, "", methodObject ),
-                    new Among ( "anda", -1, 1, "", methodObject ),
-                    new Among ( "denda", -1, 1, "", methodObject ),
-                    new Among ( "gabea", -1, 1, "", methodObject ),
-                    new Among ( "kabea", -1, 1, "", methodObject ),
-                    new Among ( "aldea", -1, 1, "", methodObject ),
-                    new Among ( "kaldea", 6, 1, "", methodObject ),
-                    new Among ( "taldea", 6, 1, "", methodObject ),
-                    new Among ( "ordea", -1, 1, "", methodObject ),
-                    new Among ( "zalea", -1, 1, "", methodObject ),
-                    new Among ( "tzalea", 10, 1, "", methodObject ),
-                    new Among ( "gilea", -1, 1, "", methodObject ),
-                    new Among ( "emea", -1, 1, "", methodObject ),
-                    new Among ( "kumea", -1, 1, "", methodObject ),
-                    new Among ( "nea", -1, 1, "", methodObject ),
-                    new Among ( "enea", 15, 1, "", methodObject ),
-                    new Among ( "zionea", 15, 1, "", methodObject ),
-                    new Among ( "unea", 15, 1, "", methodObject ),
-                    new Among ( "gunea", 18, 1, "", methodObject ),
-                    new Among ( "pea", -1, 1, "", methodObject ),
-                    new Among ( "aurrea", -1, 1, "", methodObject ),
-                    new Among ( "tea", -1, 1, "", methodObject ),
-                    new Among ( "kotea", 22, 1, "", methodObject ),
-                    new Among ( "artea", 22, 1, "", methodObject ),
-                    new Among ( "ostea", 22, 1, "", methodObject ),
-                    new Among ( "etxea", -1, 1, "", methodObject ),
-                    new Among ( "ga", -1, 1, "", methodObject ),
-                    new Among ( "anga", 27, 1, "", methodObject ),
-                    new Among ( "gaia", -1, 1, "", methodObject ),
-                    new Among ( "aldia", -1, 1, "", methodObject ),
-                    new Among ( "taldia", 30, 1, "", methodObject ),
-                    new Among ( "handia", -1, 1, "", methodObject ),
-                    new Among ( "mendia", -1, 1, "", methodObject ),
-                    new Among ( "geia", -1, 1, "", methodObject ),
-                    new Among ( "egia", -1, 1, "", methodObject ),
-                    new Among ( "degia", 35, 1, "", methodObject ),
-                    new Among ( "tegia", 35, 1, "", methodObject ),
-                    new Among ( "nahia", -1, 1, "", methodObject ),
-                    new Among ( "ohia", -1, 1, "", methodObject ),
-                    new Among ( "kia", -1, 1, "", methodObject ),
-                    new Among ( "tokia", 40, 1, "", methodObject ),
-                    new Among ( "oia", -1, 1, "", methodObject ),
-                    new Among ( "koia", 42, 1, "", methodObject ),
-                    new Among ( "aria", -1, 1, "", methodObject ),
-                    new Among ( "karia", 44, 1, "", methodObject ),
-                    new Among ( "laria", 44, 1, "", methodObject ),
-                    new Among ( "taria", 44, 1, "", methodObject ),
-                    new Among ( "eria", -1, 1, "", methodObject ),
-                    new Among ( "keria", 48, 1, "", methodObject ),
-                    new Among ( "teria", 48, 1, "", methodObject ),
-                    new Among ( "garria", -1, 2, "", methodObject ),
-                    new Among ( "larria", -1, 1, "", methodObject ),
-                    new Among ( "kirria", -1, 1, "", methodObject ),
-                    new Among ( "duria", -1, 1, "", methodObject ),
-                    new Among ( "asia", -1, 1, "", methodObject ),
-                    new Among ( "tia", -1, 1, "", methodObject ),
-                    new Among ( "ezia", -1, 1, "", methodObject ),
-                    new Among ( "bizia", -1, 1, "", methodObject ),
-                    new Among ( "ontzia", -1, 1, "", methodObject ),
-                    new Among ( "ka", -1, 1, "", methodObject ),
-                    new Among ( "joka", 60, 3, "", methodObject ),
-                    new Among ( "aurka", 60, 10, "", methodObject ),
-                    new Among ( "ska", 60, 1, "", methodObject ),
-                    new Among ( "xka", 60, 1, "", methodObject ),
-                    new Among ( "zka", 60, 1, "", methodObject ),
-                    new Among ( "gibela", -1, 1, "", methodObject ),
-                    new Among ( "gela", -1, 1, "", methodObject ),
-                    new Among ( "kaila", -1, 1, "", methodObject ),
-                    new Among ( "skila", -1, 1, "", methodObject ),
-                    new Among ( "tila", -1, 1, "", methodObject ),
-                    new Among ( "ola", -1, 1, "", methodObject ),
-                    new Among ( "na", -1, 1, "", methodObject ),
-                    new Among ( "kana", 72, 1, "", methodObject ),
-                    new Among ( "ena", 72, 1, "", methodObject ),
-                    new Among ( "garrena", 74, 1, "", methodObject ),
-                    new Among ( "gerrena", 74, 1, "", methodObject ),
-                    new Among ( "urrena", 74, 1, "", methodObject ),
-                    new Among ( "zaina", 72, 1, "", methodObject ),
-                    new Among ( "tzaina", 78, 1, "", methodObject ),
-                    new Among ( "kina", 72, 1, "", methodObject ),
-                    new Among ( "mina", 72, 1, "", methodObject ),
-                    new Among ( "garna", 72, 1, "", methodObject ),
-                    new Among ( "una", 72, 1, "", methodObject ),
-                    new Among ( "duna", 83, 1, "", methodObject ),
-                    new Among ( "asuna", 83, 1, "", methodObject ),
-                    new Among ( "tasuna", 85, 1, "", methodObject ),
-                    new Among ( "ondoa", -1, 1, "", methodObject ),
-                    new Among ( "kondoa", 87, 1, "", methodObject ),
-                    new Among ( "ngoa", -1, 1, "", methodObject ),
-                    new Among ( "zioa", -1, 1, "", methodObject ),
-                    new Among ( "koa", -1, 1, "", methodObject ),
-                    new Among ( "takoa", 91, 1, "", methodObject ),
-                    new Among ( "zkoa", 91, 1, "", methodObject ),
-                    new Among ( "noa", -1, 1, "", methodObject ),
-                    new Among ( "zinoa", 94, 1, "", methodObject ),
-                    new Among ( "aroa", -1, 1, "", methodObject ),
-                    new Among ( "taroa", 96, 1, "", methodObject ),
-                    new Among ( "zaroa", 96, 1, "", methodObject ),
-                    new Among ( "eroa", -1, 1, "", methodObject ),
-                    new Among ( "oroa", -1, 1, "", methodObject ),
-                    new Among ( "osoa", -1, 1, "", methodObject ),
-                    new Among ( "toa", -1, 1, "", methodObject ),
-                    new Among ( "ttoa", 102, 1, "", methodObject ),
-                    new Among ( "ztoa", 102, 1, "", methodObject ),
-                    new Among ( "txoa", -1, 1, "", methodObject ),
-                    new Among ( "tzoa", -1, 1, "", methodObject ),
-                    new Among ( "\u00F1oa", -1, 1, "", methodObject ),
-                    new Among ( "ra", -1, 1, "", methodObject ),
-                    new Among ( "ara", 108, 1, "", methodObject ),
-                    new Among ( "dara", 109, 1, "", methodObject ),
-                    new Among ( "liara", 109, 1, "", methodObject ),
-                    new Among ( "tiara", 109, 1, "", methodObject ),
-                    new Among ( "tara", 109, 1, "", methodObject ),
-                    new Among ( "etara", 113, 1, "", methodObject ),
-                    new Among ( "tzara", 109, 1, "", methodObject ),
-                    new Among ( "bera", 108, 1, "", methodObject ),
-                    new Among ( "kera", 108, 1, "", methodObject ),
-                    new Among ( "pera", 108, 1, "", methodObject ),
-                    new Among ( "ora", 108, 2, "", methodObject ),
-                    new Among ( "tzarra", 108, 1, "", methodObject ),
-                    new Among ( "korra", 108, 1, "", methodObject ),
-                    new Among ( "tra", 108, 1, "", methodObject ),
-                    new Among ( "sa", -1, 1, "", methodObject ),
-                    new Among ( "osa", 123, 1, "", methodObject ),
-                    new Among ( "ta", -1, 1, "", methodObject ),
-                    new Among ( "eta", 125, 1, "", methodObject ),
-                    new Among ( "keta", 126, 1, "", methodObject ),
-                    new Among ( "sta", 125, 1, "", methodObject ),
-                    new Among ( "dua", -1, 1, "", methodObject ),
-                    new Among ( "mendua", 129, 1, "", methodObject ),
-                    new Among ( "ordua", 129, 1, "", methodObject ),
-                    new Among ( "lekua", -1, 1, "", methodObject ),
-                    new Among ( "burua", -1, 1, "", methodObject ),
-                    new Among ( "durua", -1, 1, "", methodObject ),
-                    new Among ( "tsua", -1, 1, "", methodObject ),
-                    new Among ( "tua", -1, 1, "", methodObject ),
-                    new Among ( "mentua", 136, 1, "", methodObject ),
-                    new Among ( "estua", 136, 1, "", methodObject ),
-                    new Among ( "txua", -1, 1, "", methodObject ),
-                    new Among ( "zua", -1, 1, "", methodObject ),
-                    new Among ( "tzua", 140, 1, "", methodObject ),
-                    new Among ( "za", -1, 1, "", methodObject ),
-                    new Among ( "eza", 142, 1, "", methodObject ),
-                    new Among ( "eroza", 142, 1, "", methodObject ),
-                    new Among ( "tza", 142, 2, "", methodObject ),
-                    new Among ( "koitza", 145, 1, "", methodObject ),
-                    new Among ( "antza", 145, 1, "", methodObject ),
-                    new Among ( "gintza", 145, 1, "", methodObject ),
-                    new Among ( "kintza", 145, 1, "", methodObject ),
-                    new Among ( "kuntza", 145, 1, "", methodObject ),
-                    new Among ( "gabe", -1, 1, "", methodObject ),
-                    new Among ( "kabe", -1, 1, "", methodObject ),
-                    new Among ( "kide", -1, 1, "", methodObject ),
-                    new Among ( "alde", -1, 1, "", methodObject ),
-                    new Among ( "kalde", 154, 1, "", methodObject ),
-                    new Among ( "talde", 154, 1, "", methodObject ),
-                    new Among ( "orde", -1, 1, "", methodObject ),
-                    new Among ( "ge", -1, 1, "", methodObject ),
-                    new Among ( "zale", -1, 1, "", methodObject ),
-                    new Among ( "tzale", 159, 1, "", methodObject ),
-                    new Among ( "gile", -1, 1, "", methodObject ),
-                    new Among ( "eme", -1, 1, "", methodObject ),
-                    new Among ( "kume", -1, 1, "", methodObject ),
-                    new Among ( "ne", -1, 1, "", methodObject ),
-                    new Among ( "zione", 164, 1, "", methodObject ),
-                    new Among ( "une", 164, 1, "", methodObject ),
-                    new Among ( "gune", 166, 1, "", methodObject ),
-                    new Among ( "pe", -1, 1, "", methodObject ),
-                    new Among ( "aurre", -1, 1, "", methodObject ),
-                    new Among ( "te", -1, 1, "", methodObject ),
-                    new Among ( "kote", 170, 1, "", methodObject ),
-                    new Among ( "arte", 170, 1, "", methodObject ),
-                    new Among ( "oste", 170, 1, "", methodObject ),
-                    new Among ( "etxe", -1, 1, "", methodObject ),
-                    new Among ( "gai", -1, 1, "", methodObject ),
-                    new Among ( "di", -1, 1, "", methodObject ),
-                    new Among ( "aldi", 176, 1, "", methodObject ),
-                    new Among ( "taldi", 177, 1, "", methodObject ),
-                    new Among ( "geldi", 176, 8, "", methodObject ),
-                    new Among ( "handi", 176, 1, "", methodObject ),
-                    new Among ( "mendi", 176, 1, "", methodObject ),
-                    new Among ( "gei", -1, 1, "", methodObject ),
-                    new Among ( "egi", -1, 1, "", methodObject ),
-                    new Among ( "degi", 183, 1, "", methodObject ),
-                    new Among ( "tegi", 183, 1, "", methodObject ),
-                    new Among ( "nahi", -1, 1, "", methodObject ),
-                    new Among ( "ohi", -1, 1, "", methodObject ),
-                    new Among ( "ki", -1, 1, "", methodObject ),
-                    new Among ( "toki", 188, 1, "", methodObject ),
-                    new Among ( "oi", -1, 1, "", methodObject ),
-                    new Among ( "goi", 190, 1, "", methodObject ),
-                    new Among ( "koi", 190, 1, "", methodObject ),
-                    new Among ( "ari", -1, 1, "", methodObject ),
-                    new Among ( "kari", 193, 1, "", methodObject ),
-                    new Among ( "lari", 193, 1, "", methodObject ),
-                    new Among ( "tari", 193, 1, "", methodObject ),
-                    new Among ( "garri", -1, 2, "", methodObject ),
-                    new Among ( "larri", -1, 1, "", methodObject ),
-                    new Among ( "kirri", -1, 1, "", methodObject ),
-                    new Among ( "duri", -1, 1, "", methodObject ),
-                    new Among ( "asi", -1, 1, "", methodObject ),
-                    new Among ( "ti", -1, 1, "", methodObject ),
-                    new Among ( "ontzi", -1, 1, "", methodObject ),
-                    new Among ( "\u00F1i", -1, 1, "", methodObject ),
-                    new Among ( "ak", -1, 1, "", methodObject ),
-                    new Among ( "ek", -1, 1, "", methodObject ),
-                    new Among ( "tarik", -1, 1, "", methodObject ),
-                    new Among ( "gibel", -1, 1, "", methodObject ),
-                    new Among ( "ail", -1, 1, "", methodObject ),
-                    new Among ( "kail", 209, 1, "", methodObject ),
-                    new Among ( "kan", -1, 1, "", methodObject ),
-                    new Among ( "tan", -1, 1, "", methodObject ),
-                    new Among ( "etan", 212, 1, "", methodObject ),
-                    new Among ( "en", -1, 4, "", methodObject ),
-                    new Among ( "ren", 214, 2, "", methodObject ),
-                    new Among ( "garren", 215, 1, "", methodObject ),
-                    new Among ( "gerren", 215, 1, "", methodObject ),
-                    new Among ( "urren", 215, 1, "", methodObject ),
-                    new Among ( "ten", 214, 4, "", methodObject ),
-                    new Among ( "tzen", 214, 4, "", methodObject ),
-                    new Among ( "zain", -1, 1, "", methodObject ),
-                    new Among ( "tzain", 221, 1, "", methodObject ),
-                    new Among ( "kin", -1, 1, "", methodObject ),
-                    new Among ( "min", -1, 1, "", methodObject ),
-                    new Among ( "dun", -1, 1, "", methodObject ),
-                    new Among ( "asun", -1, 1, "", methodObject ),
-                    new Among ( "tasun", 226, 1, "", methodObject ),
-                    new Among ( "aizun", -1, 1, "", methodObject ),
-                    new Among ( "ondo", -1, 1, "", methodObject ),
-                    new Among ( "kondo", 229, 1, "", methodObject ),
-                    new Among ( "go", -1, 1, "", methodObject ),
-                    new Among ( "ngo", 231, 1, "", methodObject ),
-                    new Among ( "zio", -1, 1, "", methodObject ),
-                    new Among ( "ko", -1, 1, "", methodObject ),
-                    new Among ( "trako", 234, 5, "", methodObject ),
-                    new Among ( "tako", 234, 1, "", methodObject ),
-                    new Among ( "etako", 236, 1, "", methodObject ),
-                    new Among ( "eko", 234, 1, "", methodObject ),
-                    new Among ( "tariko", 234, 1, "", methodObject ),
-                    new Among ( "sko", 234, 1, "", methodObject ),
-                    new Among ( "tuko", 234, 1, "", methodObject ),
-                    new Among ( "minutuko", 241, 6, "", methodObject ),
-                    new Among ( "zko", 234, 1, "", methodObject ),
-                    new Among ( "no", -1, 1, "", methodObject ),
-                    new Among ( "zino", 244, 1, "", methodObject ),
-                    new Among ( "ro", -1, 1, "", methodObject ),
-                    new Among ( "aro", 246, 1, "", methodObject ),
-                    new Among ( "igaro", 247, 9, "", methodObject ),
-                    new Among ( "taro", 247, 1, "", methodObject ),
-                    new Among ( "zaro", 247, 1, "", methodObject ),
-                    new Among ( "ero", 246, 1, "", methodObject ),
-                    new Among ( "giro", 246, 1, "", methodObject ),
-                    new Among ( "oro", 246, 1, "", methodObject ),
-                    new Among ( "oso", -1, 1, "", methodObject ),
-                    new Among ( "to", -1, 1, "", methodObject ),
-                    new Among ( "tto", 255, 1, "", methodObject ),
-                    new Among ( "zto", 255, 1, "", methodObject ),
-                    new Among ( "txo", -1, 1, "", methodObject ),
-                    new Among ( "tzo", -1, 1, "", methodObject ),
-                    new Among ( "gintzo", 259, 1, "", methodObject ),
-                    new Among ( "\u00F1o", -1, 1, "", methodObject ),
-                    new Among ( "zp", -1, 1, "", methodObject ),
-                    new Among ( "ar", -1, 1, "", methodObject ),
-                    new Among ( "dar", 263, 1, "", methodObject ),
-                    new Among ( "behar", 263, 1, "", methodObject ),
-                    new Among ( "zehar", 263, 7, "", methodObject ),
-                    new Among ( "liar", 263, 1, "", methodObject ),
-                    new Among ( "tiar", 263, 1, "", methodObject ),
-                    new Among ( "tar", 263, 1, "", methodObject ),
-                    new Among ( "tzar", 263, 1, "", methodObject ),
-                    new Among ( "or", -1, 2, "", methodObject ),
-                    new Among ( "kor", 271, 1, "", methodObject ),
-                    new Among ( "os", -1, 1, "", methodObject ),
-                    new Among ( "ket", -1, 1, "", methodObject ),
-                    new Among ( "du", -1, 1, "", methodObject ),
-                    new Among ( "mendu", 275, 1, "", methodObject ),
-                    new Among ( "ordu", 275, 1, "", methodObject ),
-                    new Among ( "leku", -1, 1, "", methodObject ),
-                    new Among ( "buru", -1, 2, "", methodObject ),
-                    new Among ( "duru", -1, 1, "", methodObject ),
-                    new Among ( "tsu", -1, 1, "", methodObject ),
-                    new Among ( "tu", -1, 1, "", methodObject ),
-                    new Among ( "tatu", 282, 4, "", methodObject ),
-                    new Among ( "mentu", 282, 1, "", methodObject ),
-                    new Among ( "estu", 282, 1, "", methodObject ),
-                    new Among ( "txu", -1, 1, "", methodObject ),
-                    new Among ( "zu", -1, 1, "", methodObject ),
-                    new Among ( "tzu", 287, 1, "", methodObject ),
-                    new Among ( "gintzu", 288, 1, "", methodObject ),
-                    new Among ( "z", -1, 1, "", methodObject ),
-                    new Among ( "ez", 290, 1, "", methodObject ),
-                    new Among ( "eroz", 290, 1, "", methodObject ),
-                    new Among ( "tz", 290, 1, "", methodObject ),
-                    new Among ( "koitz", 293, 1, "", methodObject )
-                };
+  private static final char g_v[] = {17, 65, 16 };
 
-                private final static Among a_2[] = {
-                    new Among ( "zlea", -1, 2, "", methodObject ),
-                    new Among ( "keria", -1, 1, "", methodObject ),
-                    new Among ( "la", -1, 1, "", methodObject ),
-                    new Among ( "era", -1, 1, "", methodObject ),
-                    new Among ( "dade", -1, 1, "", methodObject ),
-                    new Among ( "tade", -1, 1, "", methodObject ),
-                    new Among ( "date", -1, 1, "", methodObject ),
-                    new Among ( "tate", -1, 1, "", methodObject ),
-                    new Among ( "gi", -1, 1, "", methodObject ),
-                    new Among ( "ki", -1, 1, "", methodObject ),
-                    new Among ( "ik", -1, 1, "", methodObject ),
-                    new Among ( "lanik", 10, 1, "", methodObject ),
-                    new Among ( "rik", 10, 1, "", methodObject ),
-                    new Among ( "larik", 12, 1, "", methodObject ),
-                    new Among ( "ztik", 10, 1, "", methodObject ),
-                    new Among ( "go", -1, 1, "", methodObject ),
-                    new Among ( "ro", -1, 1, "", methodObject ),
-                    new Among ( "ero", 16, 1, "", methodObject ),
-                    new Among ( "to", -1, 1, "", methodObject )
-                };
+  private int I_p2;
+  private int I_p1;
+  private int I_pV;
 
-                private static final char g_v[] = {17, 65, 16 };
 
-        private int I_p2;
-        private int I_p1;
-        private int I_pV;
-
-                private void copy_from(BasqueStemmer other) {
-                    I_p2 = other.I_p2;
-                    I_p1 = other.I_p1;
-                    I_pV = other.I_pV;
-                    super.copy_from(other);
-                }
-
-                private boolean r_mark_regions() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_6;
-            int v_8;
-                    // (, line 25
-                    I_pV = limit;
-                    I_p1 = limit;
-                    I_p2 = limit;
-                    // do, line 31
-                    v_1 = cursor;
-                    lab0: do {
-                        // (, line 31
-                        // or, line 33
-                        lab1: do {
-                            v_2 = cursor;
-                            lab2: do {
-                                // (, line 32
-                                if (!(in_grouping(g_v, 97, 117)))
-                                {
-                                    break lab2;
-                                }
-                                // or, line 32
-                                lab3: do {
-                                    v_3 = cursor;
-                                    lab4: do {
-                                        // (, line 32
-                                        if (!(out_grouping(g_v, 97, 117)))
-                                        {
-                                            break lab4;
-                                        }
-                                        // gopast, line 32
-                                        golab5: while(true)
-                                        {
-                                            lab6: do {
-                                                if (!(in_grouping(g_v, 97, 117)))
-                                                {
-                                                    break lab6;
-                                                }
-                                                break golab5;
-                                            } while (false);
-                                            if (cursor >= limit)
-                                            {
-                                                break lab4;
-                                            }
-                                            cursor++;
-                                        }
-                                        break lab3;
-                                    } while (false);
-                                    cursor = v_3;
-                                    // (, line 32
-                                    if (!(in_grouping(g_v, 97, 117)))
-                                    {
-                                        break lab2;
-                                    }
-                                    // gopast, line 32
-                                    golab7: while(true)
-                                    {
-                                        lab8: do {
-                                            if (!(out_grouping(g_v, 97, 117)))
-                                            {
-                                                break lab8;
-                                            }
-                                            break golab7;
-                                        } while (false);
-                                        if (cursor >= limit)
-                                        {
-                                            break lab2;
-                                        }
-                                        cursor++;
-                                    }
-                                } while (false);
-                                break lab1;
-                            } while (false);
-                            cursor = v_2;
-                            // (, line 34
-                            if (!(out_grouping(g_v, 97, 117)))
-                            {
-                                break lab0;
-                            }
-                            // or, line 34
-                            lab9: do {
-                                v_6 = cursor;
-                                lab10: do {
-                                    // (, line 34
-                                    if (!(out_grouping(g_v, 97, 117)))
-                                    {
-                                        break lab10;
-                                    }
-                                    // gopast, line 34
-                                    golab11: while(true)
-                                    {
-                                        lab12: do {
-                                            if (!(in_grouping(g_v, 97, 117)))
-                                            {
-                                                break lab12;
-                                            }
-                                            break golab11;
-                                        } while (false);
-                                        if (cursor >= limit)
-                                        {
-                                            break lab10;
-                                        }
-                                        cursor++;
-                                    }
-                                    break lab9;
-                                } while (false);
-                                cursor = v_6;
-                                // (, line 34
-                                if (!(in_grouping(g_v, 97, 117)))
-                                {
-                                    break lab0;
-                                }
-                                // next, line 34
-                                if (cursor >= limit)
-                                {
-                                    break lab0;
-                                }
-                                cursor++;
-                            } while (false);
-                        } while (false);
-                        // setmark pV, line 35
-                        I_pV = cursor;
-                    } while (false);
-                    cursor = v_1;
-                    // do, line 37
-                    v_8 = cursor;
-                    lab13: do {
-                        // (, line 37
-                        // gopast, line 38
-                        golab14: while(true)
-                        {
-                            lab15: do {
-                                if (!(in_grouping(g_v, 97, 117)))
-                                {
-                                    break lab15;
-                                }
-                                break golab14;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab13;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 38
-                        golab16: while(true)
-                        {
-                            lab17: do {
-                                if (!(out_grouping(g_v, 97, 117)))
-                                {
-                                    break lab17;
-                                }
-                                break golab16;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab13;
-                            }
-                            cursor++;
-                        }
-                        // setmark p1, line 38
-                        I_p1 = cursor;
-                        // gopast, line 39
-                        golab18: while(true)
-                        {
-                            lab19: do {
-                                if (!(in_grouping(g_v, 97, 117)))
-                                {
-                                    break lab19;
-                                }
-                                break golab18;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab13;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 39
-                        golab20: while(true)
-                        {
-                            lab21: do {
-                                if (!(out_grouping(g_v, 97, 117)))
-                                {
-                                    break lab21;
-                                }
-                                break golab20;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab13;
-                            }
-                            cursor++;
-                        }
-                        // setmark p2, line 39
-                        I_p2 = cursor;
-                    } while (false);
-                    cursor = v_8;
-                    return true;
-                }
-
-                private boolean r_RV() {
-                    if (!(I_pV <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+  private boolean r_mark_regions() {
+    I_pV = limit;
+    I_p1 = limit;
+    I_p2 = limit;
+    int v_1 = cursor;
+lab0: {
+lab1: {
+        int v_2 = cursor;
+lab2: {
+        if (!(in_grouping(g_v, 97, 117)))
+        {
+          break lab2;
+        }
+lab3: {
+        int v_3 = cursor;
+lab4: {
+        if (!(out_grouping(g_v, 97, 117)))
+        {
+          break lab4;
+        }
+golab5: while(true)
+        {
+lab6: {
+        if (!(in_grouping(g_v, 97, 117)))
+        {
+          break lab6;
+        }
+        break golab5;
+}
+if (cursor >= limit)
+{
+  break lab4;
+}
+cursor++;
+        }
+break lab3;
+}
+cursor = v_3;
+if (!(in_grouping(g_v, 97, 117)))
+{
+  break lab2;
+}
+golab7: while(true)
+{
+lab8: {
+        if (!(out_grouping(g_v, 97, 117)))
+        {
+          break lab8;
+        }
+        break golab7;
+}
+if (cursor >= limit)
+{
+  break lab2;
+}
+cursor++;
+}
+}
+break lab1;
+}
+cursor = v_2;
+if (!(out_grouping(g_v, 97, 117)))
+{
+  break lab0;
+}
+lab9: {
+        int v_6 = cursor;
+lab10: {
+         if (!(out_grouping(g_v, 97, 117)))
+         {
+           break lab10;
+         }
+golab11: while(true)
+         {
+lab12: {
+         if (!(in_grouping(g_v, 97, 117)))
+         {
+           break lab12;
+         }
+         break golab11;
+}
+if (cursor >= limit)
+{
+  break lab10;
+}
+cursor++;
+         }
+break lab9;
+}
+cursor = v_6;
+if (!(in_grouping(g_v, 97, 117)))
+{
+  break lab0;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+}
+I_pV = cursor;
+}
+cursor = v_1;
+int v_8 = cursor;
+lab13: {
+golab14: while(true)
+         {
+lab15: {
+         if (!(in_grouping(g_v, 97, 117)))
+         {
+           break lab15;
+         }
+         break golab14;
+}
+if (cursor >= limit)
+{
+  break lab13;
+}
+cursor++;
+         }
+golab16: while(true)
+{
+lab17: {
+         if (!(out_grouping(g_v, 97, 117)))
+         {
+           break lab17;
+         }
+         break golab16;
+}
+if (cursor >= limit)
+{
+  break lab13;
+}
+cursor++;
+}
+I_p1 = cursor;
+golab18: while(true)
+{
+lab19: {
+         if (!(in_grouping(g_v, 97, 117)))
+         {
+           break lab19;
+         }
+         break golab18;
+}
+if (cursor >= limit)
+{
+  break lab13;
+}
+cursor++;
+}
+golab20: while(true)
+{
+lab21: {
+         if (!(out_grouping(g_v, 97, 117)))
+         {
+           break lab21;
+         }
+         break golab20;
+}
+if (cursor >= limit)
+{
+  break lab13;
+}
+cursor++;
+}
+I_p2 = cursor;
+}
+cursor = v_8;
+return true;
+  }
 
-                private boolean r_R2() {
-                    if (!(I_p2 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_RV() {
+  if (!(I_pV <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_R1() {
-                    if (!(I_p1 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_R2() {
+  if (!(I_p2 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_aditzak() {
-            int among_var;
-                    // (, line 49
-                    // [, line 50
-                    ket = cursor;
-                    // substring, line 50
-                    among_var = find_among_b(a_0, 109);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 50
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 61
-                            // call RV, line 61
-                            if (!r_RV())
-                            {
-                                return false;
-                            }
-                            // delete, line 61
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 63
-                            // call R2, line 63
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // delete, line 63
-                            slice_del();
-                            break;
-                        case 3:
-                            // (, line 65
-                            // <-, line 65
-                            slice_from("atseden");
-                            break;
-                        case 4:
-                            // (, line 67
-                            // <-, line 67
-                            slice_from("arabera");
-                            break;
-                        case 5:
-                            // (, line 69
-                            // <-, line 69
-                            slice_from("baditu");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_R1() {
+  if (!(I_p1 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_izenak() {
-            int among_var;
-                    // (, line 74
-                    // [, line 75
-                    ket = cursor;
-                    // substring, line 75
-                    among_var = find_among_b(a_1, 295);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 75
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 105
-                            // call RV, line 105
-                            if (!r_RV())
-                            {
-                                return false;
-                            }
-                            // delete, line 105
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 107
-                            // call R2, line 107
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // delete, line 107
-                            slice_del();
-                            break;
-                        case 3:
-                            // (, line 109
-                            // <-, line 109
-                            slice_from("jok");
-                            break;
-                        case 4:
-                            // (, line 111
-                            // call R1, line 111
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 111
-                            slice_del();
-                            break;
-                        case 5:
-                            // (, line 113
-                            // <-, line 113
-                            slice_from("tra");
-                            break;
-                        case 6:
-                            // (, line 115
-                            // <-, line 115
-                            slice_from("minutu");
-                            break;
-                        case 7:
-                            // (, line 117
-                            // <-, line 117
-                            slice_from("zehar");
-                            break;
-                        case 8:
-                            // (, line 119
-                            // <-, line 119
-                            slice_from("geldi");
-                            break;
-                        case 9:
-                            // (, line 121
-                            // <-, line 121
-                            slice_from("igaro");
-                            break;
-                        case 10:
-                            // (, line 123
-                            // <-, line 123
-                            slice_from("aurka");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_aditzak() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_0);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_RV())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      slice_from("atseden");
+      break;
+    case 4:
+      slice_from("arabera");
+      break;
+    case 5:
+      slice_from("baditu");
+      break;
+  }
+  return true;
+}
 
-                private boolean r_adjetiboak() {
-            int among_var;
-                    // (, line 127
-                    // [, line 128
-                    ket = cursor;
-                    // substring, line 128
-                    among_var = find_among_b(a_2, 19);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 128
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 131
-                            // call RV, line 131
-                            if (!r_RV())
-                            {
-                                return false;
-                            }
-                            // delete, line 131
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 133
-                            // <-, line 133
-                            slice_from("z");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_izenak() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_1);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_RV())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      slice_from("jok");
+      break;
+    case 4:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 5:
+      slice_from("tra");
+      break;
+    case 6:
+      slice_from("minutu");
+      break;
+    case 7:
+      slice_from("zehar");
+      break;
+    case 8:
+      slice_from("geldi");
+      break;
+    case 9:
+      slice_from("igaro");
+      break;
+    case 10:
+      slice_from("aurka");
+      break;
+  }
+  return true;
+}
 
-                @Override
-                public boolean stem() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-                    // (, line 139
-                    // do, line 140
-                    v_1 = cursor;
-                    lab0: do {
-                        // call mark_regions, line 140
-                        if (!r_mark_regions())
-                        {
-                            break lab0;
-                        }
-                    } while (false);
-                    cursor = v_1;
-                    // backwards, line 141
-                    limit_backward = cursor; cursor = limit;
-                    // (, line 141
-                    // repeat, line 142
-                    replab1: while(true)
-                    {
-                        v_2 = limit - cursor;
-                        lab2: do {
-                            // call aditzak, line 142
-                            if (!r_aditzak())
-                            {
-                                break lab2;
-                            }
-                            continue replab1;
-                        } while (false);
-                        cursor = limit - v_2;
-                        break replab1;
-                    }
-                    // repeat, line 143
-                    replab3: while(true)
-                    {
-                        v_3 = limit - cursor;
-                        lab4: do {
-                            // call izenak, line 143
-                            if (!r_izenak())
-                            {
-                                break lab4;
-                            }
-                            continue replab3;
-                        } while (false);
-                        cursor = limit - v_3;
-                        break replab3;
-                    }
-                    // do, line 144
-                    v_4 = limit - cursor;
-                    lab5: do {
-                        // call adjetiboak, line 144
-                        if (!r_adjetiboak())
-                        {
-                            break lab5;
-                        }
-                    } while (false);
-                    cursor = limit - v_4;
-                    cursor = limit_backward;                    return true;
-                }
+private boolean r_adjetiboak() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_2);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_RV())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      slice_from("z");
+      break;
+  }
+  return true;
+}
 
-        @Override
-        public boolean equals( Object o ) {
-            return o instanceof BasqueStemmer;
+public boolean stem() {
+  r_mark_regions();
+  limit_backward = cursor;
+  cursor = limit;
+  while(true)
+  {
+    int v_2 = limit - cursor;
+lab0: {
+        if (!r_aditzak())
+        {
+          break lab0;
         }
-
-        @Override
-        public int hashCode() {
-            return BasqueStemmer.class.getName().hashCode();
+        continue;
+}
+cursor = limit - v_2;
+break;
+  }
+while(true)
+{
+  int v_3 = limit - cursor;
+lab1: {
+        if (!r_izenak())
+        {
+          break lab1;
         }
+        continue;
+}
+cursor = limit - v_3;
+break;
+}
+int v_4 = limit - cursor;
+r_adjetiboak();
+cursor = limit - v_4;
+cursor = limit_backward;
+return true;
+}
+
+@Override
+public boolean equals( Object o ) {
+  return o instanceof BasqueStemmer;
+}
+
+@Override
+public int hashCode() {
+  return BasqueStemmer.class.getName().hashCode();
+}
 
 
 
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/CatalanStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/CatalanStemmer.java
index d812ea9..19da21e 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/CatalanStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/CatalanStemmer.java
@@ -1,1070 +1,900 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
+/**
+ * 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 CatalanStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class CatalanStemmer extends SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-private static final long serialVersionUID = 1L;
+  private final static Among a_0[] = {
+    new Among("", -1, 7),
+    new Among("\u00B7", 0, 6),
+    new Among("\u00E0", 0, 1),
+    new Among("\u00E1", 0, 1),
+    new Among("\u00E8", 0, 2),
+    new Among("\u00E9", 0, 2),
+    new Among("\u00EC", 0, 3),
+    new Among("\u00ED", 0, 3),
+    new Among("\u00EF", 0, 3),
+    new Among("\u00F2", 0, 4),
+    new Among("\u00F3", 0, 4),
+    new Among("\u00FA", 0, 5),
+    new Among("\u00FC", 0, 5)
+  };
 
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("la", -1, 1),
+    new Among("-la", 0, 1),
+    new Among("sela", 0, 1),
+    new Among("le", -1, 1),
+    new Among("me", -1, 1),
+    new Among("-me", 4, 1),
+    new Among("se", -1, 1),
+    new Among("-te", -1, 1),
+    new Among("hi", -1, 1),
+    new Among("'hi", 8, 1),
+    new Among("li", -1, 1),
+    new Among("-li", 10, 1),
+    new Among("'l", -1, 1),
+    new Among("'m", -1, 1),
+    new Among("-m", -1, 1),
+    new Among("'n", -1, 1),
+    new Among("-n", -1, 1),
+    new Among("ho", -1, 1),
+    new Among("'ho", 17, 1),
+    new Among("lo", -1, 1),
+    new Among("selo", 19, 1),
+    new Among("'s", -1, 1),
+    new Among("las", -1, 1),
+    new Among("selas", 22, 1),
+    new Among("les", -1, 1),
+    new Among("-les", 24, 1),
+    new Among("'ls", -1, 1),
+    new Among("-ls", -1, 1),
+    new Among("'ns", -1, 1),
+    new Among("-ns", -1, 1),
+    new Among("ens", -1, 1),
+    new Among("los", -1, 1),
+    new Among("selos", 31, 1),
+    new Among("nos", -1, 1),
+    new Among("-nos", 33, 1),
+    new Among("vos", -1, 1),
+    new Among("us", -1, 1),
+    new Among("-us", 36, 1),
+    new Among("'t", -1, 1)
+  };
 
-                private final static Among a_0[] = {
-                    new Among ( "", -1, 13, "", methodObject ),
-                    new Among ( "\u00B7", 0, 12, "", methodObject ),
-                    new Among ( "\u00E0", 0, 2, "", methodObject ),
-                    new Among ( "\u00E1", 0, 1, "", methodObject ),
-                    new Among ( "\u00E8", 0, 4, "", methodObject ),
-                    new Among ( "\u00E9", 0, 3, "", methodObject ),
-                    new Among ( "\u00EC", 0, 6, "", methodObject ),
-                    new Among ( "\u00ED", 0, 5, "", methodObject ),
-                    new Among ( "\u00EF", 0, 11, "", methodObject ),
-                    new Among ( "\u00F2", 0, 8, "", methodObject ),
-                    new Among ( "\u00F3", 0, 7, "", methodObject ),
-                    new Among ( "\u00FA", 0, 9, "", methodObject ),
-                    new Among ( "\u00FC", 0, 10, "", methodObject )
-                };
+  private final static Among a_2[] = {
+    new Among("ica", -1, 4),
+    new Among("l\u00F3gica", 0, 3),
+    new Among("enca", -1, 1),
+    new Among("ada", -1, 2),
+    new Among("ancia", -1, 1),
+    new Among("encia", -1, 1),
+    new Among("\u00E8ncia", -1, 1),
+    new Among("\u00EDcia", -1, 1),
+    new Among("logia", -1, 3),
+    new Among("inia", -1, 1),
+    new Among("\u00EDinia", 9, 1),
+    new Among("eria", -1, 1),
+    new Among("\u00E0ria", -1, 1),
+    new Among("at\u00F2ria", -1, 1),
+    new Among("alla", -1, 1),
+    new Among("ella", -1, 1),
+    new Among("\u00EDvola", -1, 1),
+    new Among("ima", -1, 1),
+    new Among("\u00EDssima", 17, 1),
+    new Among("qu\u00EDssima", 18, 5),
+    new Among("ana", -1, 1),
+    new Among("ina", -1, 1),
+    new Among("era", -1, 1),
+    new Among("sfera", 22, 1),
+    new Among("ora", -1, 1),
+    new Among("dora", 24, 1),
+    new Among("adora", 25, 1),
+    new Among("adura", -1, 1),
+    new Among("esa", -1, 1),
+    new Among("osa", -1, 1),
+    new Among("assa", -1, 1),
+    new Among("essa", -1, 1),
+    new Among("issa", -1, 1),
+    new Among("eta", -1, 1),
+    new Among("ita", -1, 1),
+    new Among("ota", -1, 1),
+    new Among("ista", -1, 1),
+    new Among("ialista", 36, 1),
+    new Among("ionista", 36, 1),
+    new Among("iva", -1, 1),
+    new Among("ativa", 39, 1),
+    new Among("n\u00E7a", -1, 1),
+    new Among("log\u00EDa", -1, 3),
+    new Among("ic", -1, 4),
+    new Among("\u00EDstic", 43, 1),
+    new Among("enc", -1, 1),
+    new Among("esc", -1, 1),
+    new Among("ud", -1, 1),
+    new Among("atge", -1, 1),
+    new Among("ble", -1, 1),
+    new Among("able", 49, 1),
+    new Among("ible", 49, 1),
+    new Among("isme", -1, 1),
+    new Among("ialisme", 52, 1),
+    new Among("ionisme", 52, 1),
+    new Among("ivisme", 52, 1),
+    new Among("aire", -1, 1),
+    new Among("icte", -1, 1),
+    new Among("iste", -1, 1),
+    new Among("ici", -1, 1),
+    new Among("\u00EDci", -1, 1),
+    new Among("logi", -1, 3),
+    new Among("ari", -1, 1),
+    new Among("tori", -1, 1),
+    new Among("al", -1, 1),
+    new Among("il", -1, 1),
+    new Among("all", -1, 1),
+    new Among("ell", -1, 1),
+    new Among("\u00EDvol", -1, 1),
+    new Among("isam", -1, 1),
+    new Among("issem", -1, 1),
+    new Among("\u00ECssem", -1, 1),
+    new Among("\u00EDssem", -1, 1),
+    new Among("\u00EDssim", -1, 1),
+    new Among("qu\u00EDssim", 73, 5),
+    new Among("amen", -1, 1),
+    new Among("\u00ECssin", -1, 1),
+    new Among("ar", -1, 1),
+    new Among("ificar", 77, 1),
+    new Among("egar", 77, 1),
+    new Among("ejar", 77, 1),
+    new Among("itar", 77, 1),
+    new Among("itzar", 77, 1),
+    new Among("fer", -1, 1),
+    new Among("or", -1, 1),
+    new Among("dor", 84, 1),
+    new Among("dur", -1, 1),
+    new Among("doras", -1, 1),
+    new Among("ics", -1, 4),
+    new Among("l\u00F3gics", 88, 3),
+    new Among("uds", -1, 1),
+    new Among("nces", -1, 1),
+    new Among("ades", -1, 2),
+    new Among("ancies", -1, 1),
+    new Among("encies", -1, 1),
+    new Among("\u00E8ncies", -1, 1),
+    new Among("\u00EDcies", -1, 1),
+    new Among("logies", -1, 3),
+    new Among("inies", -1, 1),
+    new Among("\u00EDnies", -1, 1),
+    new Among("eries", -1, 1),
+    new Among("\u00E0ries", -1, 1),
+    new Among("at\u00F2ries", -1, 1),
+    new Among("bles", -1, 1),
+    new Among("ables", 103, 1),
+    new Among("ibles", 103, 1),
+    new Among("imes", -1, 1),
+    new Among("\u00EDssimes", 106, 1),
+    new Among("qu\u00EDssimes", 107, 5),
+    new Among("formes", -1, 1),
+    new Among("ismes", -1, 1),
+    new Among("ialismes", 110, 1),
+    new Among("ines", -1, 1),
+    new Among("eres", -1, 1),
+    new Among("ores", -1, 1),
+    new Among("dores", 114, 1),
+    new Among("idores", 115, 1),
+    new Among("dures", -1, 1),
+    new Among("eses", -1, 1),
+    new Among("oses", -1, 1),
+    new Among("asses", -1, 1),
+    new Among("ictes", -1, 1),
+    new Among("ites", -1, 1),
+    new Among("otes", -1, 1),
+    new Among("istes", -1, 1),
+    new Among("ialistes", 124, 1),
+    new Among("ionistes", 124, 1),
+    new Among("iques", -1, 4),
+    new Among("l\u00F3giques", 127, 3),
+    new Among("ives", -1, 1),
+    new Among("atives", 129, 1),
+    new Among("log\u00EDes", -1, 3),
+    new Among("alleng\u00FCes", -1, 1),
+    new Among("icis", -1, 1),
+    new Among("\u00EDcis", -1, 1),
+    new Among("logis", -1, 3),
+    new Among("aris", -1, 1),
+    new Among("toris", -1, 1),
+    new Among("ls", -1, 1),
+    new Among("als", 138, 1),
+    new Among("ells", 138, 1),
+    new Among("ims", -1, 1),
+    new Among("\u00EDssims", 141, 1),
+    new Among("qu\u00EDssims", 142, 5),
+    new Among("ions", -1, 1),
+    new Among("cions", 144, 1),
+    new Among("acions", 145, 2),
+    new Among("esos", -1, 1),
+    new Among("osos", -1, 1),
+    new Among("assos", -1, 1),
+    new Among("issos", -1, 1),
+    new Among("ers", -1, 1),
+    new Among("ors", -1, 1),
+    new Among("dors", 152, 1),
+    new Among("adors", 153, 1),
+    new Among("idors", 153, 1),
+    new Among("ats", -1, 1),
+    new Among("itats", 156, 1),
+    new Among("bilitats", 157, 1),
+    new Among("ivitats", 157, 1),
+    new Among("ativitats", 159, 1),
+    new Among("\u00EFtats", 156, 1),
+    new Among("ets", -1, 1),
+    new Among("ants", -1, 1),
+    new Among("ents", -1, 1),
+    new Among("ments", 164, 1),
+    new Among("aments", 165, 1),
+    new Among("ots", -1, 1),
+    new Among("uts", -1, 1),
+    new Among("ius", -1, 1),
+    new Among("trius", 169, 1),
+    new Among("atius", 169, 1),
+    new Among("\u00E8s", -1, 1),
+    new Among("\u00E9s", -1, 1),
+    new Among("\u00EDs", -1, 1),
+    new Among("d\u00EDs", 174, 1),
+    new Among("\u00F3s", -1, 1),
+    new Among("itat", -1, 1),
+    new Among("bilitat", 177, 1),
+    new Among("ivitat", 177, 1),
+    new Among("ativitat", 179, 1),
+    new Among("\u00EFtat", -1, 1),
+    new Among("et", -1, 1),
+    new Among("ant", -1, 1),
+    new Among("ent", -1, 1),
+    new Among("ient", 184, 1),
+    new Among("ment", 184, 1),
+    new Among("ament", 186, 1),
+    new Among("isament", 187, 1),
+    new Among("ot", -1, 1),
+    new Among("isseu", -1, 1),
+    new Among("\u00ECsseu", -1, 1),
+    new Among("\u00EDsseu", -1, 1),
+    new Among("triu", -1, 1),
+    new Among("\u00EDssiu", -1, 1),
+    new Among("atiu", -1, 1),
+    new Among("\u00F3", -1, 1),
+    new Among("i\u00F3", 196, 1),
+    new Among("ci\u00F3", 197, 1),
+    new Among("aci\u00F3", 198, 1)
+  };
 
-                private final static Among a_1[] = {
-                    new Among ( "la", -1, 1, "", methodObject ),
-                    new Among ( "-la", 0, 1, "", methodObject ),
-                    new Among ( "sela", 0, 1, "", methodObject ),
-                    new Among ( "le", -1, 1, "", methodObject ),
-                    new Among ( "me", -1, 1, "", methodObject ),
-                    new Among ( "-me", 4, 1, "", methodObject ),
-                    new Among ( "se", -1, 1, "", methodObject ),
-                    new Among ( "-te", -1, 1, "", methodObject ),
-                    new Among ( "hi", -1, 1, "", methodObject ),
-                    new Among ( "'hi", 8, 1, "", methodObject ),
-                    new Among ( "li", -1, 1, "", methodObject ),
-                    new Among ( "-li", 10, 1, "", methodObject ),
-                    new Among ( "'l", -1, 1, "", methodObject ),
-                    new Among ( "'m", -1, 1, "", methodObject ),
-                    new Among ( "-m", -1, 1, "", methodObject ),
-                    new Among ( "'n", -1, 1, "", methodObject ),
-                    new Among ( "-n", -1, 1, "", methodObject ),
-                    new Among ( "ho", -1, 1, "", methodObject ),
-                    new Among ( "'ho", 17, 1, "", methodObject ),
-                    new Among ( "lo", -1, 1, "", methodObject ),
-                    new Among ( "selo", 19, 1, "", methodObject ),
-                    new Among ( "'s", -1, 1, "", methodObject ),
-                    new Among ( "las", -1, 1, "", methodObject ),
-                    new Among ( "selas", 22, 1, "", methodObject ),
-                    new Among ( "les", -1, 1, "", methodObject ),
-                    new Among ( "-les", 24, 1, "", methodObject ),
-                    new Among ( "'ls", -1, 1, "", methodObject ),
-                    new Among ( "-ls", -1, 1, "", methodObject ),
-                    new Among ( "'ns", -1, 1, "", methodObject ),
-                    new Among ( "-ns", -1, 1, "", methodObject ),
-                    new Among ( "ens", -1, 1, "", methodObject ),
-                    new Among ( "los", -1, 1, "", methodObject ),
-                    new Among ( "selos", 31, 1, "", methodObject ),
-                    new Among ( "nos", -1, 1, "", methodObject ),
-                    new Among ( "-nos", 33, 1, "", methodObject ),
-                    new Among ( "vos", -1, 1, "", methodObject ),
-                    new Among ( "us", -1, 1, "", methodObject ),
-                    new Among ( "-us", 36, 1, "", methodObject ),
-                    new Among ( "'t", -1, 1, "", methodObject )
-                };
+  private final static Among a_3[] = {
+    new Among("aba", -1, 1),
+    new Among("esca", -1, 1),
+    new Among("isca", -1, 1),
+    new Among("\u00EFsca", -1, 1),
+    new Among("ada", -1, 1),
+    new Among("ida", -1, 1),
+    new Among("uda", -1, 1),
+    new Among("\u00EFda", -1, 1),
+    new Among("ia", -1, 1),
+    new Among("aria", 8, 1),
+    new Among("iria", 8, 1),
+    new Among("ara", -1, 1),
+    new Among("iera", -1, 1),
+    new Among("ira", -1, 1),
+    new Among("adora", -1, 1),
+    new Among("\u00EFra", -1, 1),
+    new Among("ava", -1, 1),
+    new Among("ixa", -1, 1),
+    new Among("itza", -1, 1),
+    new Among("\u00EDa", -1, 1),
+    new Among("ar\u00EDa", 19, 1),
+    new Among("er\u00EDa", 19, 1),
+    new Among("ir\u00EDa", 19, 1),
+    new Among("\u00EFa", -1, 1),
+    new Among("isc", -1, 1),
+    new Among("\u00EFsc", -1, 1),
+    new Among("ad", -1, 1),
+    new Among("ed", -1, 1),
+    new Among("id", -1, 1),
+    new Among("ie", -1, 1),
+    new Among("re", -1, 1),
+    new Among("dre", 30, 1),
+    new Among("ase", -1, 1),
+    new Among("iese", -1, 1),
+    new Among("aste", -1, 1),
+    new Among("iste", -1, 1),
+    new Among("ii", -1, 1),
+    new Among("ini", -1, 1),
+    new Among("esqui", -1, 1),
+    new Among("eixi", -1, 1),
+    new Among("itzi", -1, 1),
+    new Among("am", -1, 1),
+    new Among("em", -1, 1),
+    new Among("arem", 42, 1),
+    new Among("irem", 42, 1),
+    new Among("\u00E0rem", 42, 1),
+    new Among("\u00EDrem", 42, 1),
+    new Among("\u00E0ssem", 42, 1),
+    new Among("\u00E9ssem", 42, 1),
+    new Among("iguem", 42, 1),
+    new Among("\u00EFguem", 42, 1),
+    new Among("avem", 42, 1),
+    new Among("\u00E0vem", 42, 1),
+    new Among("\u00E1vem", 42, 1),
+    new Among("ir\u00ECem", 42, 1),
+    new Among("\u00EDem", 42, 1),
+    new Among("ar\u00EDem", 55, 1),
+    new Among("ir\u00EDem", 55, 1),
+    new Among("assim", -1, 1),
+    new Among("essim", -1, 1),
+    new Among("issim", -1, 1),
+    new Among("\u00E0ssim", -1, 1),
+    new Among("\u00E8ssim", -1, 1),
+    new Among("\u00E9ssim", -1, 1),
+    new Among("\u00EDssim", -1, 1),
+    new Among("\u00EFm", -1, 1),
+    new Among("an", -1, 1),
+    new Among("aban", 66, 1),
+    new Among("arian", 66, 1),
+    new Among("aran", 66, 1),
+    new Among("ieran", 66, 1),
+    new Among("iran", 66, 1),
+    new Among("\u00EDan", 66, 1),
+    new Among("ar\u00EDan", 72, 1),
+    new Among("er\u00EDan", 72, 1),
+    new Among("ir\u00EDan", 72, 1),
+    new Among("en", -1, 1),
+    new Among("ien", 76, 1),
+    new Among("arien", 77, 1),
+    new Among("irien", 77, 1),
+    new Among("aren", 76, 1),
+    new Among("eren", 76, 1),
+    new Among("iren", 76, 1),
+    new Among("\u00E0ren", 76, 1),
+    new Among("\u00EFren", 76, 1),
+    new Among("asen", 76, 1),
+    new Among("iesen", 76, 1),
+    new Among("assen", 76, 1),
+    new Among("essen", 76, 1),
+    new Among("issen", 76, 1),
+    new Among("\u00E9ssen", 76, 1),
+    new Among("\u00EFssen", 76, 1),
+    new Among("esquen", 76, 1),
+    new Among("isquen", 76, 1),
+    new Among("\u00EFsquen", 76, 1),
+    new Among("aven", 76, 1),
+    new Among("ixen", 76, 1),
+    new Among("eixen", 96, 1),
+    new Among("\u00EFxen", 76, 1),
+    new Among("\u00EFen", 76, 1),
+    new Among("in", -1, 1),
+    new Among("inin", 100, 1),
+    new Among("sin", 100, 1),
+    new Among("isin", 102, 1),
+    new Among("assin", 102, 1),
+    new Among("essin", 102, 1),
+    new Among("issin", 102, 1),
+    new Among("\u00EFssin", 102, 1),
+    new Among("esquin", 100, 1),
+    new Among("eixin", 100, 1),
+    new Among("aron", -1, 1),
+    new Among("ieron", -1, 1),
+    new Among("ar\u00E1n", -1, 1),
+    new Among("er\u00E1n", -1, 1),
+    new Among("ir\u00E1n", -1, 1),
+    new Among("i\u00EFn", -1, 1),
+    new Among("ado", -1, 1),
+    new Among("ido", -1, 1),
+    new Among("ando", -1, 2),
+    new Among("iendo", -1, 1),
+    new Among("io", -1, 1),
+    new Among("ixo", -1, 1),
+    new Among("eixo", 121, 1),
+    new Among("\u00EFxo", -1, 1),
+    new Among("itzo", -1, 1),
+    new Among("ar", -1, 1),
+    new Among("tzar", 125, 1),
+    new Among("er", -1, 1),
+    new Among("eixer", 127, 1),
+    new Among("ir", -1, 1),
+    new Among("ador", -1, 1),
+    new Among("as", -1, 1),
+    new Among("abas", 131, 1),
+    new Among("adas", 131, 1),
+    new Among("idas", 131, 1),
+    new Among("aras", 131, 1),
+    new Among("ieras", 131, 1),
+    new Among("\u00EDas", 131, 1),
+    new Among("ar\u00EDas", 137, 1),
+    new Among("er\u00EDas", 137, 1),
+    new Among("ir\u00EDas", 137, 1),
+    new Among("ids", -1, 1),
+    new Among("es", -1, 1),
+    new Among("ades", 142, 1),
+    new Among("ides", 142, 1),
+    new Among("udes", 142, 1),
+    new Among("\u00EFdes", 142, 1),
+    new Among("atges", 142, 1),
+    new Among("ies", 142, 1),
+    new Among("aries", 148, 1),
+    new Among("iries", 148, 1),
+    new Among("ares", 142, 1),
+    new Among("ires", 142, 1),
+    new Among("adores", 142, 1),
+    new Among("\u00EFres", 142, 1),
+    new Among("ases", 142, 1),
+    new Among("ieses", 142, 1),
+    new Among("asses", 142, 1),
+    new Among("esses", 142, 1),
+    new Among("isses", 142, 1),
+    new Among("\u00EFsses", 142, 1),
+    new Among("ques", 142, 1),
+    new Among("esques", 161, 1),
+    new Among("\u00EFsques", 161, 1),
+    new Among("aves", 142, 1),
+    new Among("ixes", 142, 1),
+    new Among("eixes", 165, 1),
+    new Among("\u00EFxes", 142, 1),
+    new Among("\u00EFes", 142, 1),
+    new Among("abais", -1, 1),
+    new Among("arais", -1, 1),
+    new Among("ierais", -1, 1),
+    new Among("\u00EDais", -1, 1),
+    new Among("ar\u00EDais", 172, 1),
+    new Among("er\u00EDais", 172, 1),
+    new Among("ir\u00EDais", 172, 1),
+    new Among("aseis", -1, 1),
+    new Among("ieseis", -1, 1),
+    new Among("asteis", -1, 1),
+    new Among("isteis", -1, 1),
+    new Among("inis", -1, 1),
+    new Among("sis", -1, 1),
+    new Among("isis", 181, 1),
+    new Among("assis", 181, 1),
+    new Among("essis", 181, 1),
+    new Among("issis", 181, 1),
+    new Among("\u00EFssis", 181, 1),
+    new Among("esquis", -1, 1),
+    new Among("eixis", -1, 1),
+    new Among("itzis", -1, 1),
+    new Among("\u00E1is", -1, 1),
+    new Among("ar\u00E9is", -1, 1),
+    new Among("er\u00E9is", -1, 1),
+    new Among("ir\u00E9is", -1, 1),
+    new Among("ams", -1, 1),
+    new Among("ados", -1, 1),
+    new Among("idos", -1, 1),
+    new Among("amos", -1, 1),
+    new Among("\u00E1bamos", 197, 1),
+    new Among("\u00E1ramos", 197, 1),
+    new Among("i\u00E9ramos", 197, 1),
+    new Among("\u00EDamos", 197, 1),
+    new Among("ar\u00EDamos", 201, 1),
+    new Among("er\u00EDamos", 201, 1),
+    new Among("ir\u00EDamos", 201, 1),
+    new Among("aremos", -1, 1),
+    new Among("eremos", -1, 1),
+    new Among("iremos", -1, 1),
+    new Among("\u00E1semos", -1, 1),
+    new Among("i\u00E9semos", -1, 1),
+    new Among("imos", -1, 1),
+    new Among("adors", -1, 1),
+    new Among("ass", -1, 1),
+    new Among("erass", 212, 1),
+    new Among("ess", -1, 1),
+    new Among("ats", -1, 1),
+    new Among("its", -1, 1),
+    new Among("ents", -1, 1),
+    new Among("\u00E0s", -1, 1),
+    new Among("ar\u00E0s", 218, 1),
+    new Among("ir\u00E0s", 218, 1),
+    new Among("ar\u00E1s", -1, 1),
+    new Among("er\u00E1s", -1, 1),
+    new Among("ir\u00E1s", -1, 1),
+    new Among("\u00E9s", -1, 1),
+    new Among("ar\u00E9s", 224, 1),
+    new Among("\u00EDs", -1, 1),
+    new Among("i\u00EFs", -1, 1),
+    new Among("at", -1, 1),
+    new Among("it", -1, 1),
+    new Among("ant", -1, 1),
+    new Among("ent", -1, 1),
+    new Among("int", -1, 1),
+    new Among("ut", -1, 1),
+    new Among("\u00EFt", -1, 1),
+    new Among("au", -1, 1),
+    new Among("erau", 235, 1),
+    new Among("ieu", -1, 1),
+    new Among("ineu", -1, 1),
+    new Among("areu", -1, 1),
+    new Among("ireu", -1, 1),
+    new Among("\u00E0reu", -1, 1),
+    new Among("\u00EDreu", -1, 1),
+    new Among("asseu", -1, 1),
+    new Among("esseu", -1, 1),
+    new Among("eresseu", 244, 1),
+    new Among("\u00E0sseu", -1, 1),
+    new Among("\u00E9sseu", -1, 1),
+    new Among("igueu", -1, 1),
+    new Among("\u00EFgueu", -1, 1),
+    new Among("\u00E0veu", -1, 1),
+    new Among("\u00E1veu", -1, 1),
+    new Among("itzeu", -1, 1),
+    new Among("\u00ECeu", -1, 1),
+    new Among("ir\u00ECeu", 253, 1),
+    new Among("\u00EDeu", -1, 1),
+    new Among("ar\u00EDeu", 255, 1),
+    new Among("ir\u00EDeu", 255, 1),
+    new Among("assiu", -1, 1),
+    new Among("issiu", -1, 1),
+    new Among("\u00E0ssiu", -1, 1),
+    new Among("\u00E8ssiu", -1, 1),
+    new Among("\u00E9ssiu", -1, 1),
+    new Among("\u00EDssiu", -1, 1),
+    new Among("\u00EFu", -1, 1),
+    new Among("ix", -1, 1),
+    new Among("eix", 265, 1),
+    new Among("\u00EFx", -1, 1),
+    new Among("itz", -1, 1),
+    new Among("i\u00E0", -1, 1),
+    new Among("ar\u00E0", -1, 1),
+    new Among("ir\u00E0", -1, 1),
+    new Among("itz\u00E0", -1, 1),
+    new Among("ar\u00E1", -1, 1),
+    new Among("er\u00E1", -1, 1),
+    new Among("ir\u00E1", -1, 1),
+    new Among("ir\u00E8", -1, 1),
+    new Among("ar\u00E9", -1, 1),
+    new Among("er\u00E9", -1, 1),
+    new Among("ir\u00E9", -1, 1),
+    new Among("\u00ED", -1, 1),
+    new Among("i\u00EF", -1, 1),
+    new Among("i\u00F3", -1, 1)
+  };
 
-                private final static Among a_2[] = {
-                    new Among ( "ica", -1, 4, "", methodObject ),
-                    new Among ( "l\u00F3gica", 0, 3, "", methodObject ),
-                    new Among ( "enca", -1, 1, "", methodObject ),
-                    new Among ( "ada", -1, 2, "", methodObject ),
-                    new Among ( "ancia", -1, 1, "", methodObject ),
-                    new Among ( "encia", -1, 1, "", methodObject ),
-                    new Among ( "\u00E8ncia", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDcia", -1, 1, "", methodObject ),
-                    new Among ( "logia", -1, 3, "", methodObject ),
-                    new Among ( "inia", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDinia", 9, 1, "", methodObject ),
-                    new Among ( "eria", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0ria", -1, 1, "", methodObject ),
-                    new Among ( "at\u00F2ria", -1, 1, "", methodObject ),
-                    new Among ( "alla", -1, 1, "", methodObject ),
-                    new Among ( "ella", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDvola", -1, 1, "", methodObject ),
-                    new Among ( "ima", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssima", 17, 1, "", methodObject ),
-                    new Among ( "qu\u00EDssima", 18, 5, "", methodObject ),
-                    new Among ( "ana", -1, 1, "", methodObject ),
-                    new Among ( "ina", -1, 1, "", methodObject ),
-                    new Among ( "era", -1, 1, "", methodObject ),
-                    new Among ( "sfera", 22, 1, "", methodObject ),
-                    new Among ( "ora", -1, 1, "", methodObject ),
-                    new Among ( "dora", 24, 1, "", methodObject ),
-                    new Among ( "adora", 25, 1, "", methodObject ),
-                    new Among ( "adura", -1, 1, "", methodObject ),
-                    new Among ( "esa", -1, 1, "", methodObject ),
-                    new Among ( "osa", -1, 1, "", methodObject ),
-                    new Among ( "assa", -1, 1, "", methodObject ),
-                    new Among ( "essa", -1, 1, "", methodObject ),
-                    new Among ( "issa", -1, 1, "", methodObject ),
-                    new Among ( "eta", -1, 1, "", methodObject ),
-                    new Among ( "ita", -1, 1, "", methodObject ),
-                    new Among ( "ota", -1, 1, "", methodObject ),
-                    new Among ( "ista", -1, 1, "", methodObject ),
-                    new Among ( "ialista", 36, 1, "", methodObject ),
-                    new Among ( "ionista", 36, 1, "", methodObject ),
-                    new Among ( "iva", -1, 1, "", methodObject ),
-                    new Among ( "ativa", 39, 1, "", methodObject ),
-                    new Among ( "n\u00E7a", -1, 1, "", methodObject ),
-                    new Among ( "log\u00EDa", -1, 3, "", methodObject ),
-                    new Among ( "ic", -1, 4, "", methodObject ),
-                    new Among ( "\u00EDstic", 43, 1, "", methodObject ),
-                    new Among ( "enc", -1, 1, "", methodObject ),
-                    new Among ( "esc", -1, 1, "", methodObject ),
-                    new Among ( "ud", -1, 1, "", methodObject ),
-                    new Among ( "atge", -1, 1, "", methodObject ),
-                    new Among ( "ble", -1, 1, "", methodObject ),
-                    new Among ( "able", 49, 1, "", methodObject ),
-                    new Among ( "ible", 49, 1, "", methodObject ),
-                    new Among ( "isme", -1, 1, "", methodObject ),
-                    new Among ( "ialisme", 52, 1, "", methodObject ),
-                    new Among ( "ionisme", 52, 1, "", methodObject ),
-                    new Among ( "ivisme", 52, 1, "", methodObject ),
-                    new Among ( "aire", -1, 1, "", methodObject ),
-                    new Among ( "icte", -1, 1, "", methodObject ),
-                    new Among ( "iste", -1, 1, "", methodObject ),
-                    new Among ( "ici", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDci", -1, 1, "", methodObject ),
-                    new Among ( "logi", -1, 3, "", methodObject ),
-                    new Among ( "ari", -1, 1, "", methodObject ),
-                    new Among ( "tori", -1, 1, "", methodObject ),
-                    new Among ( "al", -1, 1, "", methodObject ),
-                    new Among ( "il", -1, 1, "", methodObject ),
-                    new Among ( "all", -1, 1, "", methodObject ),
-                    new Among ( "ell", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDvol", -1, 1, "", methodObject ),
-                    new Among ( "isam", -1, 1, "", methodObject ),
-                    new Among ( "issem", -1, 1, "", methodObject ),
-                    new Among ( "\u00ECssem", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssem", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssim", -1, 1, "", methodObject ),
-                    new Among ( "qu\u00EDssim", 73, 5, "", methodObject ),
-                    new Among ( "amen", -1, 1, "", methodObject ),
-                    new Among ( "\u00ECssin", -1, 1, "", methodObject ),
-                    new Among ( "ar", -1, 1, "", methodObject ),
-                    new Among ( "ificar", 77, 1, "", methodObject ),
-                    new Among ( "egar", 77, 1, "", methodObject ),
-                    new Among ( "ejar", 77, 1, "", methodObject ),
-                    new Among ( "itar", 77, 1, "", methodObject ),
-                    new Among ( "itzar", 77, 1, "", methodObject ),
-                    new Among ( "fer", -1, 1, "", methodObject ),
-                    new Among ( "or", -1, 1, "", methodObject ),
-                    new Among ( "dor", 84, 1, "", methodObject ),
-                    new Among ( "dur", -1, 1, "", methodObject ),
-                    new Among ( "doras", -1, 1, "", methodObject ),
-                    new Among ( "ics", -1, 4, "", methodObject ),
-                    new Among ( "l\u00F3gics", 88, 3, "", methodObject ),
-                    new Among ( "uds", -1, 1, "", methodObject ),
-                    new Among ( "nces", -1, 1, "", methodObject ),
-                    new Among ( "ades", -1, 2, "", methodObject ),
-                    new Among ( "ancies", -1, 1, "", methodObject ),
-                    new Among ( "encies", -1, 1, "", methodObject ),
-                    new Among ( "\u00E8ncies", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDcies", -1, 1, "", methodObject ),
-                    new Among ( "logies", -1, 3, "", methodObject ),
-                    new Among ( "inies", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDnies", -1, 1, "", methodObject ),
-                    new Among ( "eries", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0ries", -1, 1, "", methodObject ),
-                    new Among ( "at\u00F2ries", -1, 1, "", methodObject ),
-                    new Among ( "bles", -1, 1, "", methodObject ),
-                    new Among ( "ables", 103, 1, "", methodObject ),
-                    new Among ( "ibles", 103, 1, "", methodObject ),
-                    new Among ( "imes", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssimes", 106, 1, "", methodObject ),
-                    new Among ( "qu\u00EDssimes", 107, 5, "", methodObject ),
-                    new Among ( "formes", -1, 1, "", methodObject ),
-                    new Among ( "ismes", -1, 1, "", methodObject ),
-                    new Among ( "ialismes", 110, 1, "", methodObject ),
-                    new Among ( "ines", -1, 1, "", methodObject ),
-                    new Among ( "eres", -1, 1, "", methodObject ),
-                    new Among ( "ores", -1, 1, "", methodObject ),
-                    new Among ( "dores", 114, 1, "", methodObject ),
-                    new Among ( "idores", 115, 1, "", methodObject ),
-                    new Among ( "dures", -1, 1, "", methodObject ),
-                    new Among ( "eses", -1, 1, "", methodObject ),
-                    new Among ( "oses", -1, 1, "", methodObject ),
-                    new Among ( "asses", -1, 1, "", methodObject ),
-                    new Among ( "ictes", -1, 1, "", methodObject ),
-                    new Among ( "ites", -1, 1, "", methodObject ),
-                    new Among ( "otes", -1, 1, "", methodObject ),
-                    new Among ( "istes", -1, 1, "", methodObject ),
-                    new Among ( "ialistes", 124, 1, "", methodObject ),
-                    new Among ( "ionistes", 124, 1, "", methodObject ),
-                    new Among ( "iques", -1, 4, "", methodObject ),
-                    new Among ( "l\u00F3giques", 127, 3, "", methodObject ),
-                    new Among ( "ives", -1, 1, "", methodObject ),
-                    new Among ( "atives", 129, 1, "", methodObject ),
-                    new Among ( "log\u00EDes", -1, 3, "", methodObject ),
-                    new Among ( "alleng\u00FCes", -1, 1, "", methodObject ),
-                    new Among ( "icis", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDcis", -1, 1, "", methodObject ),
-                    new Among ( "logis", -1, 3, "", methodObject ),
-                    new Among ( "aris", -1, 1, "", methodObject ),
-                    new Among ( "toris", -1, 1, "", methodObject ),
-                    new Among ( "ls", -1, 1, "", methodObject ),
-                    new Among ( "als", 138, 1, "", methodObject ),
-                    new Among ( "ells", 138, 1, "", methodObject ),
-                    new Among ( "ims", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssims", 141, 1, "", methodObject ),
-                    new Among ( "qu\u00EDssims", 142, 5, "", methodObject ),
-                    new Among ( "ions", -1, 1, "", methodObject ),
-                    new Among ( "cions", 144, 1, "", methodObject ),
-                    new Among ( "acions", 145, 2, "", methodObject ),
-                    new Among ( "esos", -1, 1, "", methodObject ),
-                    new Among ( "osos", -1, 1, "", methodObject ),
-                    new Among ( "assos", -1, 1, "", methodObject ),
-                    new Among ( "issos", -1, 1, "", methodObject ),
-                    new Among ( "ers", -1, 1, "", methodObject ),
-                    new Among ( "ors", -1, 1, "", methodObject ),
-                    new Among ( "dors", 152, 1, "", methodObject ),
-                    new Among ( "adors", 153, 1, "", methodObject ),
-                    new Among ( "idors", 153, 1, "", methodObject ),
-                    new Among ( "ats", -1, 1, "", methodObject ),
-                    new Among ( "itats", 156, 1, "", methodObject ),
-                    new Among ( "bilitats", 157, 1, "", methodObject ),
-                    new Among ( "ivitats", 157, 1, "", methodObject ),
-                    new Among ( "ativitats", 159, 1, "", methodObject ),
-                    new Among ( "\u00EFtats", 156, 1, "", methodObject ),
-                    new Among ( "ets", -1, 1, "", methodObject ),
-                    new Among ( "ants", -1, 1, "", methodObject ),
-                    new Among ( "ents", -1, 1, "", methodObject ),
-                    new Among ( "ments", 164, 1, "", methodObject ),
-                    new Among ( "aments", 165, 1, "", methodObject ),
-                    new Among ( "ots", -1, 1, "", methodObject ),
-                    new Among ( "uts", -1, 1, "", methodObject ),
-                    new Among ( "ius", -1, 1, "", methodObject ),
-                    new Among ( "trius", 169, 1, "", methodObject ),
-                    new Among ( "atius", 169, 1, "", methodObject ),
-                    new Among ( "\u00E8s", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9s", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDs", -1, 1, "", methodObject ),
-                    new Among ( "d\u00EDs", 174, 1, "", methodObject ),
-                    new Among ( "\u00F3s", -1, 1, "", methodObject ),
-                    new Among ( "itat", -1, 1, "", methodObject ),
-                    new Among ( "bilitat", 177, 1, "", methodObject ),
-                    new Among ( "ivitat", 177, 1, "", methodObject ),
-                    new Among ( "ativitat", 179, 1, "", methodObject ),
-                    new Among ( "\u00EFtat", -1, 1, "", methodObject ),
-                    new Among ( "et", -1, 1, "", methodObject ),
-                    new Among ( "ant", -1, 1, "", methodObject ),
-                    new Among ( "ent", -1, 1, "", methodObject ),
-                    new Among ( "ient", 184, 1, "", methodObject ),
-                    new Among ( "ment", 184, 1, "", methodObject ),
-                    new Among ( "ament", 186, 1, "", methodObject ),
-                    new Among ( "isament", 187, 1, "", methodObject ),
-                    new Among ( "ot", -1, 1, "", methodObject ),
-                    new Among ( "isseu", -1, 1, "", methodObject ),
-                    new Among ( "\u00ECsseu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDsseu", -1, 1, "", methodObject ),
-                    new Among ( "triu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssiu", -1, 1, "", methodObject ),
-                    new Among ( "atiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00F3", -1, 1, "", methodObject ),
-                    new Among ( "i\u00F3", 196, 1, "", methodObject ),
-                    new Among ( "ci\u00F3", 197, 1, "", methodObject ),
-                    new Among ( "aci\u00F3", 198, 1, "", methodObject )
-                };
+  private final static Among a_4[] = {
+    new Among("a", -1, 1),
+    new Among("e", -1, 1),
+    new Among("i", -1, 1),
+    new Among("\u00EFn", -1, 1),
+    new Among("o", -1, 1),
+    new Among("ir", -1, 1),
+    new Among("s", -1, 1),
+    new Among("is", 6, 1),
+    new Among("os", 6, 1),
+    new Among("\u00EFs", 6, 1),
+    new Among("it", -1, 1),
+    new Among("eu", -1, 1),
+    new Among("iu", -1, 1),
+    new Among("iqu", -1, 2),
+    new Among("itz", -1, 1),
+    new Among("\u00E0", -1, 1),
+    new Among("\u00E1", -1, 1),
+    new Among("\u00E9", -1, 1),
+    new Among("\u00EC", -1, 1),
+    new Among("\u00ED", -1, 1),
+    new Among("\u00EF", -1, 1),
+    new Among("\u00F3", -1, 1)
+  };
 
-                private final static Among a_3[] = {
-                    new Among ( "aba", -1, 1, "", methodObject ),
-                    new Among ( "esca", -1, 1, "", methodObject ),
-                    new Among ( "isca", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFsca", -1, 1, "", methodObject ),
-                    new Among ( "ada", -1, 1, "", methodObject ),
-                    new Among ( "ida", -1, 1, "", methodObject ),
-                    new Among ( "uda", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFda", -1, 1, "", methodObject ),
-                    new Among ( "ia", -1, 1, "", methodObject ),
-                    new Among ( "aria", 8, 1, "", methodObject ),
-                    new Among ( "iria", 8, 1, "", methodObject ),
-                    new Among ( "ara", -1, 1, "", methodObject ),
-                    new Among ( "iera", -1, 1, "", methodObject ),
-                    new Among ( "ira", -1, 1, "", methodObject ),
-                    new Among ( "adora", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFra", -1, 1, "", methodObject ),
-                    new Among ( "ava", -1, 1, "", methodObject ),
-                    new Among ( "ixa", -1, 1, "", methodObject ),
-                    new Among ( "itza", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDa", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00EDa", 19, 1, "", methodObject ),
-                    new Among ( "er\u00EDa", 19, 1, "", methodObject ),
-                    new Among ( "ir\u00EDa", 19, 1, "", methodObject ),
-                    new Among ( "\u00EFa", -1, 1, "", methodObject ),
-                    new Among ( "isc", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFsc", -1, 1, "", methodObject ),
-                    new Among ( "ad", -1, 1, "", methodObject ),
-                    new Among ( "ed", -1, 1, "", methodObject ),
-                    new Among ( "id", -1, 1, "", methodObject ),
-                    new Among ( "ie", -1, 1, "", methodObject ),
-                    new Among ( "re", -1, 1, "", methodObject ),
-                    new Among ( "dre", 30, 1, "", methodObject ),
-                    new Among ( "ase", -1, 1, "", methodObject ),
-                    new Among ( "iese", -1, 1, "", methodObject ),
-                    new Among ( "aste", -1, 1, "", methodObject ),
-                    new Among ( "iste", -1, 1, "", methodObject ),
-                    new Among ( "ii", -1, 1, "", methodObject ),
-                    new Among ( "ini", -1, 1, "", methodObject ),
-                    new Among ( "esqui", -1, 1, "", methodObject ),
-                    new Among ( "eixi", -1, 1, "", methodObject ),
-                    new Among ( "itzi", -1, 1, "", methodObject ),
-                    new Among ( "am", -1, 1, "", methodObject ),
-                    new Among ( "em", -1, 1, "", methodObject ),
-                    new Among ( "arem", 42, 1, "", methodObject ),
-                    new Among ( "irem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E0rem", 42, 1, "", methodObject ),
-                    new Among ( "\u00EDrem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E0ssem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E9ssem", 42, 1, "", methodObject ),
-                    new Among ( "iguem", 42, 1, "", methodObject ),
-                    new Among ( "\u00EFguem", 42, 1, "", methodObject ),
-                    new Among ( "avem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E0vem", 42, 1, "", methodObject ),
-                    new Among ( "\u00E1vem", 42, 1, "", methodObject ),
-                    new Among ( "ir\u00ECem", 42, 1, "", methodObject ),
-                    new Among ( "\u00EDem", 42, 1, "", methodObject ),
-                    new Among ( "ar\u00EDem", 55, 1, "", methodObject ),
-                    new Among ( "ir\u00EDem", 55, 1, "", methodObject ),
-                    new Among ( "assim", -1, 1, "", methodObject ),
-                    new Among ( "essim", -1, 1, "", methodObject ),
-                    new Among ( "issim", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0ssim", -1, 1, "", methodObject ),
-                    new Among ( "\u00E8ssim", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9ssim", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssim", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFm", -1, 1, "", methodObject ),
-                    new Among ( "an", -1, 1, "", methodObject ),
-                    new Among ( "aban", 66, 1, "", methodObject ),
-                    new Among ( "arian", 66, 1, "", methodObject ),
-                    new Among ( "aran", 66, 1, "", methodObject ),
-                    new Among ( "ieran", 66, 1, "", methodObject ),
-                    new Among ( "iran", 66, 1, "", methodObject ),
-                    new Among ( "\u00EDan", 66, 1, "", methodObject ),
-                    new Among ( "ar\u00EDan", 72, 1, "", methodObject ),
-                    new Among ( "er\u00EDan", 72, 1, "", methodObject ),
-                    new Among ( "ir\u00EDan", 72, 1, "", methodObject ),
-                    new Among ( "en", -1, 1, "", methodObject ),
-                    new Among ( "ien", 76, 1, "", methodObject ),
-                    new Among ( "arien", 77, 1, "", methodObject ),
-                    new Among ( "irien", 77, 1, "", methodObject ),
-                    new Among ( "aren", 76, 1, "", methodObject ),
-                    new Among ( "eren", 76, 1, "", methodObject ),
-                    new Among ( "iren", 76, 1, "", methodObject ),
-                    new Among ( "\u00E0ren", 76, 1, "", methodObject ),
-                    new Among ( "\u00EFren", 76, 1, "", methodObject ),
-                    new Among ( "asen", 76, 1, "", methodObject ),
-                    new Among ( "iesen", 76, 1, "", methodObject ),
-                    new Among ( "assen", 76, 1, "", methodObject ),
-                    new Among ( "essen", 76, 1, "", methodObject ),
-                    new Among ( "issen", 76, 1, "", methodObject ),
-                    new Among ( "\u00E9ssen", 76, 1, "", methodObject ),
-                    new Among ( "\u00EFssen", 76, 1, "", methodObject ),
-                    new Among ( "esquen", 76, 1, "", methodObject ),
-                    new Among ( "isquen", 76, 1, "", methodObject ),
-                    new Among ( "\u00EFsquen", 76, 1, "", methodObject ),
-                    new Among ( "aven", 76, 1, "", methodObject ),
-                    new Among ( "ixen", 76, 1, "", methodObject ),
-                    new Among ( "eixen", 96, 1, "", methodObject ),
-                    new Among ( "\u00EFxen", 76, 1, "", methodObject ),
-                    new Among ( "\u00EFen", 76, 1, "", methodObject ),
-                    new Among ( "in", -1, 1, "", methodObject ),
-                    new Among ( "inin", 100, 1, "", methodObject ),
-                    new Among ( "sin", 100, 1, "", methodObject ),
-                    new Among ( "isin", 102, 1, "", methodObject ),
-                    new Among ( "assin", 102, 1, "", methodObject ),
-                    new Among ( "essin", 102, 1, "", methodObject ),
-                    new Among ( "issin", 102, 1, "", methodObject ),
-                    new Among ( "\u00EFssin", 102, 1, "", methodObject ),
-                    new Among ( "esquin", 100, 1, "", methodObject ),
-                    new Among ( "eixin", 100, 1, "", methodObject ),
-                    new Among ( "aron", -1, 1, "", methodObject ),
-                    new Among ( "ieron", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E1n", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E1n", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E1n", -1, 1, "", methodObject ),
-                    new Among ( "i\u00EFn", -1, 1, "", methodObject ),
-                    new Among ( "ado", -1, 1, "", methodObject ),
-                    new Among ( "ido", -1, 1, "", methodObject ),
-                    new Among ( "ando", -1, 2, "", methodObject ),
-                    new Among ( "iendo", -1, 1, "", methodObject ),
-                    new Among ( "io", -1, 1, "", methodObject ),
-                    new Among ( "ixo", -1, 1, "", methodObject ),
-                    new Among ( "eixo", 121, 1, "", methodObject ),
-                    new Among ( "\u00EFxo", -1, 1, "", methodObject ),
-                    new Among ( "itzo", -1, 1, "", methodObject ),
-                    new Among ( "ar", -1, 1, "", methodObject ),
-                    new Among ( "tzar", 125, 1, "", methodObject ),
-                    new Among ( "er", -1, 1, "", methodObject ),
-                    new Among ( "eixer", 127, 1, "", methodObject ),
-                    new Among ( "ir", -1, 1, "", methodObject ),
-                    new Among ( "ador", -1, 1, "", methodObject ),
-                    new Among ( "as", -1, 1, "", methodObject ),
-                    new Among ( "abas", 131, 1, "", methodObject ),
-                    new Among ( "adas", 131, 1, "", methodObject ),
-                    new Among ( "idas", 131, 1, "", methodObject ),
-                    new Among ( "aras", 131, 1, "", methodObject ),
-                    new Among ( "ieras", 131, 1, "", methodObject ),
-                    new Among ( "\u00EDas", 131, 1, "", methodObject ),
-                    new Among ( "ar\u00EDas", 137, 1, "", methodObject ),
-                    new Among ( "er\u00EDas", 137, 1, "", methodObject ),
-                    new Among ( "ir\u00EDas", 137, 1, "", methodObject ),
-                    new Among ( "ids", -1, 1, "", methodObject ),
-                    new Among ( "es", -1, 1, "", methodObject ),
-                    new Among ( "ades", 142, 1, "", methodObject ),
-                    new Among ( "ides", 142, 1, "", methodObject ),
-                    new Among ( "udes", 142, 1, "", methodObject ),
-                    new Among ( "\u00EFdes", 142, 1, "", methodObject ),
-                    new Among ( "atges", 142, 1, "", methodObject ),
-                    new Among ( "ies", 142, 1, "", methodObject ),
-                    new Among ( "aries", 148, 1, "", methodObject ),
-                    new Among ( "iries", 148, 1, "", methodObject ),
-                    new Among ( "ares", 142, 1, "", methodObject ),
-                    new Among ( "ires", 142, 1, "", methodObject ),
-                    new Among ( "adores", 142, 1, "", methodObject ),
-                    new Among ( "\u00EFres", 142, 1, "", methodObject ),
-                    new Among ( "ases", 142, 1, "", methodObject ),
-                    new Among ( "ieses", 142, 1, "", methodObject ),
-                    new Among ( "asses", 142, 1, "", methodObject ),
-                    new Among ( "esses", 142, 1, "", methodObject ),
-                    new Among ( "isses", 142, 1, "", methodObject ),
-                    new Among ( "\u00EFsses", 142, 1, "", methodObject ),
-                    new Among ( "ques", 142, 1, "", methodObject ),
-                    new Among ( "esques", 161, 1, "", methodObject ),
-                    new Among ( "\u00EFsques", 161, 1, "", methodObject ),
-                    new Among ( "aves", 142, 1, "", methodObject ),
-                    new Among ( "ixes", 142, 1, "", methodObject ),
-                    new Among ( "eixes", 165, 1, "", methodObject ),
-                    new Among ( "\u00EFxes", 142, 1, "", methodObject ),
-                    new Among ( "\u00EFes", 142, 1, "", methodObject ),
-                    new Among ( "abais", -1, 1, "", methodObject ),
-                    new Among ( "arais", -1, 1, "", methodObject ),
-                    new Among ( "ierais", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDais", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00EDais", 172, 1, "", methodObject ),
-                    new Among ( "er\u00EDais", 172, 1, "", methodObject ),
-                    new Among ( "ir\u00EDais", 172, 1, "", methodObject ),
-                    new Among ( "aseis", -1, 1, "", methodObject ),
-                    new Among ( "ieseis", -1, 1, "", methodObject ),
-                    new Among ( "asteis", -1, 1, "", methodObject ),
-                    new Among ( "isteis", -1, 1, "", methodObject ),
-                    new Among ( "inis", -1, 1, "", methodObject ),
-                    new Among ( "sis", -1, 1, "", methodObject ),
-                    new Among ( "isis", 181, 1, "", methodObject ),
-                    new Among ( "assis", 181, 1, "", methodObject ),
-                    new Among ( "essis", 181, 1, "", methodObject ),
-                    new Among ( "issis", 181, 1, "", methodObject ),
-                    new Among ( "\u00EFssis", 181, 1, "", methodObject ),
-                    new Among ( "esquis", -1, 1, "", methodObject ),
-                    new Among ( "eixis", -1, 1, "", methodObject ),
-                    new Among ( "itzis", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1is", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E9is", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E9is", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E9is", -1, 1, "", methodObject ),
-                    new Among ( "ams", -1, 1, "", methodObject ),
-                    new Among ( "ados", -1, 1, "", methodObject ),
-                    new Among ( "idos", -1, 1, "", methodObject ),
-                    new Among ( "amos", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1bamos", 197, 1, "", methodObject ),
-                    new Among ( "\u00E1ramos", 197, 1, "", methodObject ),
-                    new Among ( "i\u00E9ramos", 197, 1, "", methodObject ),
-                    new Among ( "\u00EDamos", 197, 1, "", methodObject ),
-                    new Among ( "ar\u00EDamos", 201, 1, "", methodObject ),
-                    new Among ( "er\u00EDamos", 201, 1, "", methodObject ),
-                    new Among ( "ir\u00EDamos", 201, 1, "", methodObject ),
-                    new Among ( "aremos", -1, 1, "", methodObject ),
-                    new Among ( "eremos", -1, 1, "", methodObject ),
-                    new Among ( "iremos", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1semos", -1, 1, "", methodObject ),
-                    new Among ( "i\u00E9semos", -1, 1, "", methodObject ),
-                    new Among ( "imos", -1, 1, "", methodObject ),
-                    new Among ( "adors", -1, 1, "", methodObject ),
-                    new Among ( "ass", -1, 1, "", methodObject ),
-                    new Among ( "erass", 212, 1, "", methodObject ),
-                    new Among ( "ess", -1, 1, "", methodObject ),
-                    new Among ( "ats", -1, 1, "", methodObject ),
-                    new Among ( "its", -1, 1, "", methodObject ),
-                    new Among ( "ents", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0s", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E0s", 218, 1, "", methodObject ),
-                    new Among ( "ir\u00E0s", 218, 1, "", methodObject ),
-                    new Among ( "ar\u00E1s", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E1s", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E1s", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9s", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E9s", 224, 1, "", methodObject ),
-                    new Among ( "\u00EDs", -1, 1, "", methodObject ),
-                    new Among ( "i\u00EFs", -1, 1, "", methodObject ),
-                    new Among ( "at", -1, 1, "", methodObject ),
-                    new Among ( "it", -1, 1, "", methodObject ),
-                    new Among ( "ant", -1, 1, "", methodObject ),
-                    new Among ( "ent", -1, 1, "", methodObject ),
-                    new Among ( "int", -1, 1, "", methodObject ),
-                    new Among ( "ut", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFt", -1, 1, "", methodObject ),
-                    new Among ( "au", -1, 1, "", methodObject ),
-                    new Among ( "erau", 235, 1, "", methodObject ),
-                    new Among ( "ieu", -1, 1, "", methodObject ),
-                    new Among ( "ineu", -1, 1, "", methodObject ),
-                    new Among ( "areu", -1, 1, "", methodObject ),
-                    new Among ( "ireu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0reu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDreu", -1, 1, "", methodObject ),
-                    new Among ( "asseu", -1, 1, "", methodObject ),
-                    new Among ( "esseu", -1, 1, "", methodObject ),
-                    new Among ( "eresseu", 244, 1, "", methodObject ),
-                    new Among ( "\u00E0sseu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9sseu", -1, 1, "", methodObject ),
-                    new Among ( "igueu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFgueu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0veu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1veu", -1, 1, "", methodObject ),
-                    new Among ( "itzeu", -1, 1, "", methodObject ),
-                    new Among ( "\u00ECeu", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00ECeu", 253, 1, "", methodObject ),
-                    new Among ( "\u00EDeu", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00EDeu", 255, 1, "", methodObject ),
-                    new Among ( "ir\u00EDeu", 255, 1, "", methodObject ),
-                    new Among ( "assiu", -1, 1, "", methodObject ),
-                    new Among ( "issiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0ssiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E8ssiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9ssiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EDssiu", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFu", -1, 1, "", methodObject ),
-                    new Among ( "ix", -1, 1, "", methodObject ),
-                    new Among ( "eix", 265, 1, "", methodObject ),
-                    new Among ( "\u00EFx", -1, 1, "", methodObject ),
-                    new Among ( "itz", -1, 1, "", methodObject ),
-                    new Among ( "i\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "itz\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E1", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E1", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E1", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E8", -1, 1, "", methodObject ),
-                    new Among ( "ar\u00E9", -1, 1, "", methodObject ),
-                    new Among ( "er\u00E9", -1, 1, "", methodObject ),
-                    new Among ( "ir\u00E9", -1, 1, "", methodObject ),
-                    new Among ( "\u00ED", -1, 1, "", methodObject ),
-                    new Among ( "i\u00EF", -1, 1, "", methodObject ),
-                    new Among ( "i\u00F3", -1, 1, "", methodObject )
-                };
+  private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 129, 81, 6, 10 };
 
-                private final static Among a_4[] = {
-                    new Among ( "a", -1, 1, "", methodObject ),
-                    new Among ( "e", -1, 1, "", methodObject ),
-                    new Among ( "i", -1, 1, "", methodObject ),
-                    new Among ( "\u00EFn", -1, 1, "", methodObject ),
-                    new Among ( "o", -1, 1, "", methodObject ),
-                    new Among ( "ir", -1, 1, "", methodObject ),
-                    new Among ( "s", -1, 1, "", methodObject ),
-                    new Among ( "is", 6, 1, "", methodObject ),
-                    new Among ( "os", 6, 1, "", methodObject ),
-                    new Among ( "\u00EFs", 6, 1, "", methodObject ),
-                    new Among ( "it", -1, 1, "", methodObject ),
-                    new Among ( "eu", -1, 1, "", methodObject ),
-                    new Among ( "iu", -1, 1, "", methodObject ),
-                    new Among ( "iqu", -1, 2, "", methodObject ),
-                    new Among ( "itz", -1, 1, "", methodObject ),
-                    new Among ( "\u00E0", -1, 1, "", methodObject ),
-                    new Among ( "\u00E1", -1, 1, "", methodObject ),
-                    new Among ( "\u00E9", -1, 1, "", methodObject ),
-                    new Among ( "\u00EC", -1, 1, "", methodObject ),
-                    new Among ( "\u00ED", -1, 1, "", methodObject ),
-                    new Among ( "\u00EF", -1, 1, "", methodObject ),
-                    new Among ( "\u00F3", -1, 1, "", methodObject )
-                };
+  private int I_p2;
+  private int I_p1;
 
-                private static final char g_v[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 129, 81, 6, 10 };
 
-        private int I_p2;
-        private int I_p1;
-
-                private void copy_from(CatalanStemmer other) {
-                    I_p2 = other.I_p2;
-                    I_p1 = other.I_p1;
-                    super.copy_from(other);
-                }
-
-                private boolean r_mark_regions() {
-            int v_1;
-                    // (, line 41
-                    I_p1 = limit;
-                    I_p2 = limit;
-                    // do, line 46
-                    v_1 = cursor;
-                    lab0: do {
-                        // (, line 46
-                        // gopast, line 47
-                        golab1: while(true)
-                        {
-                            lab2: do {
-                                if (!(in_grouping(g_v, 97, 252)))
-                                {
-                                    break lab2;
-                                }
-                                break golab1;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 47
-                        golab3: while(true)
-                        {
-                            lab4: do {
-                                if (!(out_grouping(g_v, 97, 252)))
-                                {
-                                    break lab4;
-                                }
-                                break golab3;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // setmark p1, line 47
-                        I_p1 = cursor;
-                        // gopast, line 48
-                        golab5: while(true)
-                        {
-                            lab6: do {
-                                if (!(in_grouping(g_v, 97, 252)))
-                                {
-                                    break lab6;
-                                }
-                                break golab5;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // gopast, line 48
-                        golab7: while(true)
-                        {
-                            lab8: do {
-                                if (!(out_grouping(g_v, 97, 252)))
-                                {
-                                    break lab8;
-                                }
-                                break golab7;
-                            } while (false);
-                            if (cursor >= limit)
-                            {
-                                break lab0;
-                            }
-                            cursor++;
-                        }
-                        // setmark p2, line 48
-                        I_p2 = cursor;
-                    } while (false);
-                    cursor = v_1;
-                    return true;
-                }
-
-                private boolean r_cleaning() {
-            int among_var;
-            int v_1;
-                    // repeat, line 52
-                    replab0: while(true)
-                    {
-                        v_1 = cursor;
-                        lab1: do {
-                            // (, line 52
-                            // [, line 53
-                            bra = cursor;
-                            // substring, line 53
-                            among_var = find_among(a_0, 13);
-                            if (among_var == 0)
-                            {
-                                break lab1;
-                            }
-                            // ], line 53
-                            ket = cursor;
-                            switch(among_var) {
-                                case 0:
-                                    break lab1;
-                                case 1:
-                                    // (, line 54
-                                    // <-, line 54
-                                    slice_from("a");
-                                    break;
-                                case 2:
-                                    // (, line 55
-                                    // <-, line 55
-                                    slice_from("a");
-                                    break;
-                                case 3:
-                                    // (, line 56
-                                    // <-, line 56
-                                    slice_from("e");
-                                    break;
-                                case 4:
-                                    // (, line 57
-                                    // <-, line 57
-                                    slice_from("e");
-                                    break;
-                                case 5:
-                                    // (, line 58
-                                    // <-, line 58
-                                    slice_from("i");
-                                    break;
-                                case 6:
-                                    // (, line 59
-                                    // <-, line 59
-                                    slice_from("i");
-                                    break;
-                                case 7:
-                                    // (, line 60
-                                    // <-, line 60
-                                    slice_from("o");
-                                    break;
-                                case 8:
-                                    // (, line 61
-                                    // <-, line 61
-                                    slice_from("o");
-                                    break;
-                                case 9:
-                                    // (, line 62
-                                    // <-, line 62
-                                    slice_from("u");
-                                    break;
-                                case 10:
-                                    // (, line 63
-                                    // <-, line 63
-                                    slice_from("u");
-                                    break;
-                                case 11:
-                                    // (, line 64
-                                    // <-, line 64
-                                    slice_from("i");
-                                    break;
-                                case 12:
-                                    // (, line 65
-                                    // <-, line 65
-                                    slice_from(".");
-                                    break;
-                                case 13:
-                                    // (, line 66
-                                    // next, line 66
-                                    if (cursor >= limit)
-                                    {
-                                        break lab1;
-                                    }
-                                    cursor++;
-                                    break;
-                            }
-                            continue replab0;
-                        } while (false);
-                        cursor = v_1;
-                        break replab0;
-                    }
-                    return true;
-                }
+  private boolean r_mark_regions() {
+    I_p1 = limit;
+    I_p2 = limit;
+    int v_1 = cursor;
+lab0: {
+golab1: while(true)
+        {
+lab2: {
+        if (!(in_grouping(g_v, 97, 252)))
+        {
+          break lab2;
+        }
+        break golab1;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+        }
+golab3: while(true)
+{
+lab4: {
+        if (!(out_grouping(g_v, 97, 252)))
+        {
+          break lab4;
+        }
+        break golab3;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+I_p1 = cursor;
+golab5: while(true)
+{
+lab6: {
+        if (!(in_grouping(g_v, 97, 252)))
+        {
+          break lab6;
+        }
+        break golab5;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+golab7: while(true)
+{
+lab8: {
+        if (!(out_grouping(g_v, 97, 252)))
+        {
+          break lab8;
+        }
+        break golab7;
+}
+if (cursor >= limit)
+{
+  break lab0;
+}
+cursor++;
+}
+I_p2 = cursor;
+}
+cursor = v_1;
+return true;
+  }
 
-                private boolean r_R1() {
-                    if (!(I_p1 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_cleaning() {
+  int among_var;
+  while(true)
+  {
+    int v_1 = cursor;
+lab0: {
+        bra = cursor;
+        among_var = find_among(a_0);
+        if (among_var == 0)
+        {
+          break lab0;
+        }
+        ket = cursor;
+        switch (among_var) {
+          case 1:
+            slice_from("a");
+            break;
+          case 2:
+            slice_from("e");
+            break;
+          case 3:
+            slice_from("i");
+            break;
+          case 4:
+            slice_from("o");
+            break;
+          case 5:
+            slice_from("u");
+            break;
+          case 6:
+            slice_from(".");
+            break;
+          case 7:
+            if (cursor >= limit)
+            {
+              break lab0;
+            }
+            cursor++;
+            break;
+        }
+        continue;
+}
+cursor = v_1;
+break;
+  }
+return true;
+}
 
-                private boolean r_R2() {
-                    if (!(I_p2 <= cursor))
-                    {
-                        return false;
-                    }
-                    return true;
-                }
+private boolean r_R1() {
+  if (!(I_p1 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_attached_pronoun() {
-            int among_var;
-                    // (, line 75
-                    // [, line 76
-                    ket = cursor;
-                    // substring, line 76
-                    among_var = find_among_b(a_1, 39);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 76
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 86
-                            // call R1, line 86
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 86
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_R2() {
+  if (!(I_p2 <= cursor))
+  {
+    return false;
+  }
+  return true;
+}
 
-                private boolean r_standard_suffix() {
-            int among_var;
-                    // (, line 90
-                    // [, line 91
-                    ket = cursor;
-                    // substring, line 91
-                    among_var = find_among_b(a_2, 200);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 91
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 115
-                            // call R1, line 115
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 115
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 117
-                            // call R2, line 117
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // delete, line 117
-                            slice_del();
-                            break;
-                        case 3:
-                            // (, line 119
-                            // call R2, line 119
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // <-, line 119
-                            slice_from("log");
-                            break;
-                        case 4:
-                            // (, line 121
-                            // call R2, line 121
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // <-, line 121
-                            slice_from("ic");
-                            break;
-                        case 5:
-                            // (, line 123
-                            // call R1, line 123
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // <-, line 123
-                            slice_from("c");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_attached_pronoun() {
+  ket = cursor;
+  if (find_among_b(a_1) == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  if (!r_R1())
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-                private boolean r_verb_suffix() {
-            int among_var;
-                    // (, line 127
-                    // [, line 128
-                    ket = cursor;
-                    // substring, line 128
-                    among_var = find_among_b(a_3, 283);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 128
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 173
-                            // call R1, line 173
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 173
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 175
-                            // call R2, line 175
-                            if (!r_R2())
-                            {
-                                return false;
-                            }
-                            // delete, line 175
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_standard_suffix() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_2);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 3:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_from("log");
+      break;
+    case 4:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_from("ic");
+      break;
+    case 5:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_from("c");
+      break;
+  }
+  return true;
+}
 
-                private boolean r_residual_suffix() {
-            int among_var;
-                    // (, line 179
-                    // [, line 180
-                    ket = cursor;
-                    // substring, line 180
-                    among_var = find_among_b(a_4, 22);
-                    if (among_var == 0)
-                    {
-                        return false;
-                    }
-                    // ], line 180
-                    bra = cursor;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 183
-                            // call R1, line 183
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // delete, line 183
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 185
-                            // call R1, line 185
-                            if (!r_R1())
-                            {
-                                return false;
-                            }
-                            // <-, line 185
-                            slice_from("ic");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_verb_suffix() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_3);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R2())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
 
-                @Override
-                public boolean stem() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-            int v_5;
-            int v_6;
-                    // (, line 190
-                    // do, line 191
-                    v_1 = cursor;
-                    lab0: do {
-                        // call mark_regions, line 191
-                        if (!r_mark_regions())
-                        {
-                            break lab0;
-                        }
-                    } while (false);
-                    cursor = v_1;
-                    // backwards, line 192
-                    limit_backward = cursor; cursor = limit;
-                    // (, line 192
-                    // do, line 193
-                    v_2 = limit - cursor;
-                    lab1: do {
-                        // call attached_pronoun, line 193
-                        if (!r_attached_pronoun())
-                        {
-                            break lab1;
-                        }
-                    } while (false);
-                    cursor = limit - v_2;
-                    // do, line 194
-                    v_3 = limit - cursor;
-                    lab2: do {
-                        // (, line 194
-                        // or, line 194
-                        lab3: do {
-                            v_4 = limit - cursor;
-                            lab4: do {
-                                // call standard_suffix, line 194
-                                if (!r_standard_suffix())
-                                {
-                                    break lab4;
-                                }
-                                break lab3;
-                            } while (false);
-                            cursor = limit - v_4;
-                            // call verb_suffix, line 195
-                            if (!r_verb_suffix())
-                            {
-                                break lab2;
-                            }
-                        } while (false);
-                    } while (false);
-                    cursor = limit - v_3;
-                    // do, line 197
-                    v_5 = limit - cursor;
-                    lab5: do {
-                        // call residual_suffix, line 197
-                        if (!r_residual_suffix())
-                        {
-                            break lab5;
-                        }
-                    } while (false);
-                    cursor = limit - v_5;
-                    cursor = limit_backward;                    // do, line 199
-                    v_6 = cursor;
-                    lab6: do {
-                        // call cleaning, line 199
-                        if (!r_cleaning())
-                        {
-                            break lab6;
-                        }
-                    } while (false);
-                    cursor = v_6;
-                    return true;
-                }
+private boolean r_residual_suffix() {
+  int among_var;
+  ket = cursor;
+  among_var = find_among_b(a_4);
+  if (among_var == 0)
+  {
+    return false;
+  }
+  bra = cursor;
+  switch (among_var) {
+    case 1:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_del();
+      break;
+    case 2:
+      if (!r_R1())
+      {
+        return false;
+      }
+      slice_from("ic");
+      break;
+  }
+  return true;
+}
 
-        @Override
-        public boolean equals( Object o ) {
-            return o instanceof CatalanStemmer;
+public boolean stem() {
+  r_mark_regions();
+  limit_backward = cursor;
+  cursor = limit;
+  int v_2 = limit - cursor;
+  r_attached_pronoun();
+  cursor = limit - v_2;
+  int v_3 = limit - cursor;
+lab0: {
+lab1: {
+        int v_4 = limit - cursor;
+lab2: {
+        if (!r_standard_suffix())
+        {
+          break lab2;
         }
+        break lab1;
+}
+cursor = limit - v_4;
+if (!r_verb_suffix())
+{
+  break lab0;
+}
+}
+}
+cursor = limit - v_3;
+int v_5 = limit - cursor;
+r_residual_suffix();
+cursor = limit - v_5;
+cursor = limit_backward;
+int v_6 = cursor;
+r_cleaning();
+cursor = v_6;
+return true;
+}
 
-        @Override
-        public int hashCode() {
-            return CatalanStemmer.class.getName().hashCode();
-        }
+@Override
+public boolean equals( Object o ) {
+  return o instanceof CatalanStemmer;
+}
+
+@Override
+public int hashCode() {
+  return CatalanStemmer.class.getName().hashCode();
+}
 
 
 
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DanishStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DanishStemmer.java
index 8917b5e..b8679b3 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DanishStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DanishStemmer.java
@@ -1,442 +1,301 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
+/**
+ * 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 DanishStemmer extends org.tartarus.snowball.SnowballStemmer {
 
-@SuppressWarnings("unused") public class DanishStemmer extends SnowballProgram {
+  private static final long serialVersionUID = 1L;
+  private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
 
-private static final long serialVersionUID = 1L;
+  private final static Among a_0[] = {
+    new Among("hed", -1, 1),
+    new Among("ethed", 0, 1),
+    new Among("ered", -1, 1),
+    new Among("e", -1, 1),
+    new Among("erede", 3, 1),
+    new Among("ende", 3, 1),
+    new Among("erende", 5, 1),
+    new Among("ene", 3, 1),
+    new Among("erne", 3, 1),
+    new Among("ere", 3, 1),
+    new Among("en", -1, 1),
+    new Among("heden", 10, 1),
+    new Among("eren", 10, 1),
+    new Among("er", -1, 1),
+    new Among("heder", 13, 1),
+    new Among("erer", 13, 1),
+    new Among("s", -1, 2),
+    new Among("heds", 16, 1),
+    new Among("es", 16, 1),
+    new Among("endes", 18, 1),
+    new Among("erendes", 19, 1),
+    new Among("enes", 18, 1),
+    new Among("ernes", 18, 1),
+    new Among("eres", 18, 1),
+    new Among("ens", 16, 1),
+    new Among("hedens", 24, 1),
+    new Among("erens", 24, 1),
+    new Among("ers", 16, 1),
+    new Among("ets", 16, 1),
+    new Among("erets", 28, 1),
+    new Among("et", -1, 1),
+    new Among("eret", 30, 1)
+  };
 
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
+  private final static Among a_1[] = {
+    new Among("gd", -1, -1),
+    new Among("dt", -1, -1),
+    new Among("gt", -1, -1),
+    new Among("kt", -1, -1)
+  };
 
-                private final static Among a_0[] = {
-                    new Among ( "hed", -1, 1, "", methodObject ),
-                    new Among ( "ethed", 0, 1, "", methodObject ),
-                    new Among ( "ered", -1, 1, "", methodObject ),
-                    new Among ( "e", -1, 1, "", methodObject ),
-                    new Among ( "erede", 3, 1, "", methodObject ),
-                    new Among ( "ende", 3, 1, "", methodObject ),
-                    new Among ( "erende", 5, 1, "", methodObject ),
-                    new Among ( "ene", 3, 1, "", methodObject ),
-                    new Among ( "erne", 3, 1, "", methodObject ),
-                    new Among ( "ere", 3, 1, "", methodObject ),
-                    new Among ( "en", -1, 1, "", methodObject ),
-                    new Among ( "heden", 10, 1, "", methodObject ),
-                    new Among ( "eren", 10, 1, "", methodObject ),
-                    new Among ( "er", -1, 1, "", methodObject ),
-                    new Among ( "heder", 13, 1, "", methodObject ),
-                    new Among ( "erer", 13, 1, "", methodObject ),
-                    new Among ( "s", -1, 2, "", methodObject ),
-                    new Among ( "heds", 16, 1, "", methodObject ),
-                    new Among ( "es", 16, 1, "", methodObject ),
-                    new Among ( "endes", 18, 1, "", methodObject ),
-                    new Among ( "erendes", 19, 1, "", methodObject ),
-                    new Among ( "enes", 18, 1, "", methodObject ),
-                    new Among ( "ernes", 18, 1, "", methodObject ),
-                    new Among ( "eres", 18, 1, "", methodObject ),
-                    new Among ( "ens", 16, 1, "", methodObject ),
-                    new Among ( "hedens", 24, 1, "", methodObject ),
-                    new Among ( "erens", 24, 1, "", methodObject ),
-                    new Among ( "ers", 16, 1, "", methodObject ),
-                    new Among ( "ets", 16, 1, "", methodObject ),
-                    new Among ( "erets", 28, 1, "", methodObject ),
-                    new Among ( "et", -1, 1, "", methodObject ),
-                    new Among ( "eret", 30, 1, "", methodObject )
-                };
+  private final static Among a_2[] = {
+    new Among("ig", -1, 1),
+    new Among("lig", 0, 1),
+    new Among("elig", 1, 1),
+    new Among("els", -1, 1),
+    new Among("l\u00F8st", -1, 2)
+  };
 
-                private final static Among a_1[] = {
-                    new Among ( "gd", -1, -1, "", methodObject ),
-                    new Among ( "dt", -1, -1, "", methodObject ),
-                    new Among ( "gt", -1, -1, "", methodObject ),
-                    new Among ( "kt", -1, -1, "", methodObject )
-                };
+  private static final char g_c[] = {119, 223, 119, 1 };
 
-                private final static Among a_2[] = {
-                    new Among ( "ig", -1, 1, "", methodObject ),
-                    new Among ( "lig", 0, 1, "", methodObject ),
-                    new Among ( "elig", 1, 1, "", methodObject ),
-                    new Among ( "els", -1, 1, "", methodObject ),
-                    new Among ( "l\u00F8st", -1, 2, "", methodObject )
-                };
+  private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
 
-                private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 };
+  private static final char g_s_ending[] = {239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 };
 
-                private static final char g_s_ending[] = {239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 };
+  private int I_x;
+  private int I_p1;
+  private java.lang.StringBuilder S_ch = new java.lang.StringBuilder();
 
-        private int I_x;
-        private int I_p1;
-        private java.lang.StringBuilder S_ch = new java.lang.StringBuilder();
 
-                private void copy_from(DanishStemmer other) {
-                    I_x = other.I_x;
-                    I_p1 = other.I_p1;
-                    S_ch = other.S_ch;
-                    super.copy_from(other);
-                }
-
-                private boolean r_mark_regions() {
-            int v_1;
-            int v_2;
-                    // (, line 29
-                    I_p1 = limit;
-                    // test, line 33
-                    v_1 = cursor;
-                    // (, line 33
-                    // hop, line 33
-                    {
-                        int c = cursor + 3;
-                        if (0 > c || c > limit)
-                        {
-                            return false;
-                        }
-                        cursor = c;
-                    }
-                    // setmark x, line 33
-                    I_x = cursor;
-                    cursor = v_1;
-                    // goto, line 34
-                    golab0: while(true)
-                    {
-                        v_2 = cursor;
-                        lab1: do {
-                            if (!(in_grouping(g_v, 97, 248)))
-                            {
-                                break lab1;
-                            }
-                            cursor = v_2;
-                            break golab0;
-                        } while (false);
-                        cursor = v_2;
-                        if (cursor >= limit)
-                        {
-                            return false;
-                        }
-                        cursor++;
-                    }
-                    // gopast, line 34
-                    golab2: while(true)
-                    {
-                        lab3: do {
-                            if (!(out_grouping(g_v, 97, 248)))
-                            {
-                                break lab3;
-                            }
-                            break golab2;
-                        } while (false);
-                        if (cursor >= limit)
-                        {
-                            return false;
-                        }
-                        cursor++;
-                    }
-                    // setmark p1, line 34
-                    I_p1 = cursor;
-                    // try, line 35
-                    lab4: do {
-                        // (, line 35
-                        if (!(I_p1 < I_x))
-                        {
-                            break lab4;
-                        }
-                        I_p1 = I_x;
-                    } while (false);
-                    return true;
-                }
+  private boolean r_mark_regions() {
+    I_p1 = limit;
+    int v_1 = cursor;
+    {
+      int c = cursor + 3;
+      if (0 > c || c > limit)
+      {
+        return false;
+      }
+      cursor = c;
+    }
+    I_x = cursor;
+    cursor = v_1;
+golab0: while(true)
+        {
+          int v_2 = cursor;
+lab1: {
+        if (!(in_grouping(g_v, 97, 248)))
+        {
+          break lab1;
+        }
+        cursor = v_2;
+        break golab0;
+}
+cursor = v_2;
+if (cursor >= limit)
+{
+  return false;
+}
+cursor++;
+        }
+golab2: while(true)
+{
+lab3: {
+        if (!(out_grouping(g_v, 97, 248)))
+        {
+          break lab3;
+        }
+        break golab2;
+}
+if (cursor >= limit)
+{
+  return false;
+}
+cursor++;
+}
+I_p1 = cursor;
+lab4: {
+        if (!(I_p1 < I_x))
+        {
+          break lab4;
+        }
+        I_p1 = I_x;
+}
+return true;
+  }
 
-                private boolean r_main_suffix() {
-            int among_var;
-            int v_1;
-            int v_2;
-                    // (, line 40
-                    // setlimit, line 41
-                    v_1 = limit - cursor;
-                    // tomark, line 41
-                    if (cursor < I_p1)
-                    {
-                        return false;
-                    }
-                    cursor = I_p1;
-                    v_2 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_1;
-                    // (, line 41
-                    // [, line 41
-                    ket = cursor;
-                    // substring, line 41
-                    among_var = find_among_b(a_0, 32);
-                    if (among_var == 0)
-                    {
-                        limit_backward = v_2;
-                        return false;
-                    }
-                    // ], line 41
-                    bra = cursor;
-                    limit_backward = v_2;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 48
-                            // delete, line 48
-                            slice_del();
-                            break;
-                        case 2:
-                            // (, line 50
-                            if (!(in_grouping_b(g_s_ending, 97, 229)))
-                            {
-                                return false;
-                            }
-                            // delete, line 50
-                            slice_del();
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_main_suffix() {
+  int among_var;
+  if (cursor < I_p1)
+  {
+    return false;
+  }
+  int v_2 = limit_backward;
+  limit_backward = I_p1;
+  ket = cursor;
+  among_var = find_among_b(a_0);
+  if (among_var == 0)
+  {
+    limit_backward = v_2;
+    return false;
+  }
+  bra = cursor;
+  limit_backward = v_2;
+  switch (among_var) {
+    case 1:
+      slice_del();
+      break;
+    case 2:
+      if (!(in_grouping_b(g_s_ending, 97, 229)))
+      {
+        return false;
+      }
+      slice_del();
+      break;
+  }
+  return true;
+}
 
-                private boolean r_consonant_pair() {
-            int v_1;
-            int v_2;
-            int v_3;
-                    // (, line 54
-                    // test, line 55
-                    v_1 = limit - cursor;
-                    // (, line 55
-                    // setlimit, line 56
-                    v_2 = limit - cursor;
-                    // tomark, line 56
-                    if (cursor < I_p1)
-                    {
-                        return false;
-                    }
-                    cursor = I_p1;
-                    v_3 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_2;
-                    // (, line 56
-                    // [, line 56
-                    ket = cursor;
-                    // substring, line 56
-                    if (find_among_b(a_1, 4) == 0)
-                    {
-                        limit_backward = v_3;
-                        return false;
-                    }
-                    // ], line 56
-                    bra = cursor;
-                    limit_backward = v_3;
-                    cursor = limit - v_1;
-                    // next, line 62
-                    if (cursor <= limit_backward)
-                    {
-                        return false;
-                    }
-                    cursor--;
-                    // ], line 62
-                    bra = cursor;
-                    // delete, line 62
-                    slice_del();
-                    return true;
-                }
+private boolean r_consonant_pair() {
+  int v_1 = limit - cursor;
+  if (cursor < I_p1)
+  {
+    return false;
+  }
+  int v_3 = limit_backward;
+  limit_backward = I_p1;
+  ket = cursor;
+  if (find_among_b(a_1) == 0)
+  {
+    limit_backward = v_3;
+    return false;
+  }
+  bra = cursor;
+  limit_backward = v_3;
+  cursor = limit - v_1;
+  if (cursor <= limit_backward)
+  {
+    return false;
+  }
+  cursor--;
+  bra = cursor;
+  slice_del();
+  return true;
+}
 
-                private boolean r_other_suffix() {
-            int among_var;
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-                    // (, line 65
-                    // do, line 66
-                    v_1 = limit - cursor;
-                    lab0: do {
-                        // (, line 66
-                        // [, line 66
-                        ket = cursor;
-                        // literal, line 66
-                        if (!(eq_s_b(2, "st")))
-                        {
-                            break lab0;
-                        }
-                        // ], line 66
-                        bra = cursor;
-                        // literal, line 66
-                        if (!(eq_s_b(2, "ig")))
-                        {
-                            break lab0;
-                        }
-                        // delete, line 66
-                        slice_del();
-                    } while (false);
-                    cursor = limit - v_1;
-                    // setlimit, line 67
-                    v_2 = limit - cursor;
-                    // tomark, line 67
-                    if (cursor < I_p1)
-                    {
-                        return false;
-                    }
-                    cursor = I_p1;
-                    v_3 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_2;
-                    // (, line 67
-                    // [, line 67
-                    ket = cursor;
-                    // substring, line 67
-                    among_var = find_among_b(a_2, 5);
-                    if (among_var == 0)
-                    {
-                        limit_backward = v_3;
-                        return false;
-                    }
-                    // ], line 67
-                    bra = cursor;
-                    limit_backward = v_3;
-                    switch(among_var) {
-                        case 0:
-                            return false;
-                        case 1:
-                            // (, line 70
-                            // delete, line 70
-                            slice_del();
-                            // do, line 70
-                            v_4 = limit - cursor;
-                            lab1: do {
-                                // call consonant_pair, line 70
-                                if (!r_consonant_pair())
-                                {
-                                    break lab1;
-                                }
-                            } while (false);
-                            cursor = limit - v_4;
-                            break;
-                        case 2:
-                            // (, line 72
-                            // <-, line 72
-                            slice_from("l\u00F8s");
-                            break;
-                    }
-                    return true;
-                }
+private boolean r_other_suffix() {
+  int among_var;
+  int v_1 = limit - cursor;
+lab0: {
+        ket = cursor;
+        if (!(eq_s_b("st")))
+        {
+          break lab0;
+        }
+        bra = cursor;
+        if (!(eq_s_b("ig")))
+        {
+          break lab0;
+        }
+        slice_del();
+}
+cursor = limit - v_1;
+if (cursor < I_p1)
+{
+  return false;
+}
+int v_3 = limit_backward;
+limit_backward = I_p1;
+ket = cursor;
+among_var = find_among_b(a_2);
+if (among_var == 0)
+{
+  limit_backward = v_3;
+  return false;
+}
+bra = cursor;
+limit_backward = v_3;
+switch (among_var) {
+  case 1:
+    slice_del();
+    int v_4 = limit - cursor;
+    r_consonant_pair();
+    cursor = limit - v_4;
+    break;
+  case 2:
+    slice_from("l\u00F8s");
+    break;
+}
+return true;
+}
 
-                private boolean r_undouble() {
-            int v_1;
-            int v_2;
-                    // (, line 75
-                    // setlimit, line 76
-                    v_1 = limit - cursor;
-                    // tomark, line 76
-                    if (cursor < I_p1)
-                    {
-                        return false;
-                    }
-                    cursor = I_p1;
-                    v_2 = limit_backward;
-                    limit_backward = cursor;
-                    cursor = limit - v_1;
-                    // (, line 76
-                    // [, line 76
-                    ket = cursor;
-                    if (!(out_grouping_b(g_v, 97, 248)))
-                    {
-                        limit_backward = v_2;
-                        return false;
-                    }
-                    // ], line 76
-                    bra = cursor;
-                    // -> ch, line 76
-                    S_ch = slice_to(S_ch);
-                    limit_backward = v_2;
-                    // name ch, line 77
-                    if (!(eq_v_b(S_ch)))
-                    {
-                        return false;
-                    }
-                    // delete, line 78
-                    slice_del();
-                    return true;
-                }
+private boolean r_undouble() {
+  if (cursor < I_p1)
+  {
+    return false;
+  }
+  int v_2 = limit_backward;
+  limit_backward = I_p1;
+  ket = cursor;
+  if (!(in_grouping_b(g_c, 98, 122)))
+  {
+    limit_backward = v_2;
+    return false;
+  }
+  bra = cursor;
+  slice_to(S_ch);
+  limit_backward = v_2;
+  if (!(eq_s_b(S_ch)))
+  {
+    return false;
+  }
+  slice_del();
+  return true;
+}
 
-                @Override
-                public boolean stem() {
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-            int v_5;
-                    // (, line 82
-                    // do, line 84
-                    v_1 = cursor;
-                    lab0: do {
-                        // call mark_regions, line 84
-                        if (!r_mark_regions())
-                        {
-                            break lab0;
-                        }
-                    } while (false);
-                    cursor = v_1;
-                    // backwards, line 85
-                    limit_backward = cursor; cursor = limit;
-                    // (, line 85
-                    // do, line 86
-                    v_2 = limit - cursor;
-                    lab1: do {
-                        // call main_suffix, line 86
-                        if (!r_main_suffix())
-                        {
-                            break lab1;
-                        }
-                    } while (false);
-                    cursor = limit - v_2;
-                    // do, line 87
-                    v_3 = limit - cursor;
-                    lab2: do {
-                        // call consonant_pair, line 87
-                        if (!r_consonant_pair())
-                        {
-                            break lab2;
-                        }
-                    } while (false);
-                    cursor = limit - v_3;
-                    // do, line 88
-                    v_4 = limit - cursor;
-                    lab3: do {
-                        // call other_suffix, line 88
-                        if (!r_other_suffix())
-                        {
-                            break lab3;
-                        }
-                    } while (false);
-                    cursor = limit - v_4;
-                    // do, line 89
-                    v_5 = limit - cursor;
-                    lab4: do {
-                        // call undouble, line 89
-                        if (!r_undouble())
-                        {
-                            break lab4;
-                        }
-                    } while (false);
-                    cursor = limit - v_5;
-                    cursor = limit_backward;                    return true;
-                }
+public boolean stem() {
+  int v_1 = cursor;
+  r_mark_regions();
+  cursor = v_1;
+  limit_backward = cursor;
+  cursor = limit;
+  int v_2 = limit - cursor;
+  r_main_suffix();
+  cursor = limit - v_2;
+  int v_3 = limit - cursor;
+  r_consonant_pair();
+  cursor = limit - v_3;
+  int v_4 = limit - cursor;
+  r_other_suffix();
+  cursor = limit - v_4;
+  int v_5 = limit - cursor;
+  r_undouble();
+  cursor = limit - v_5;
+  cursor = limit_backward;
+  return true;
+}
 
-        @Override
-        public boolean equals( Object o ) {
-            return o instanceof DanishStemmer;
-        }
+@Override
+public boolean equals( Object o ) {
+  return o instanceof DanishStemmer;
+}
 
-        @Override
-        public int hashCode() {
-            return DanishStemmer.class.getName().hashCode();
-        }
+@Override
+public int hashCode() {
+  return DanishStemmer.class.getName().hashCode();
+}
 
 
 
 }
+
diff --git a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DutchStemmer.java b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DutchStemmer.java
index 6f89850..9e7eded 100644
--- a/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DutchStemmer.java
+++ b/lucene/analysis/common/src/java/org/tartarus/snowball/ext/DutchStemmer.java
@@ -1,855 +1,626 @@
-// This file was generated automatically by the Snowball to Java compiler
+// Generated by Snowball 2.0.0 - https://snowballstem.org/
 
 package org.tartarus.snowball.ext;
 
 import org.tartarus.snowball.Among;
-import org.tartarus.snowball.SnowballProgram;
 
- /**
-  * This class was automatically generated by a Snowball to Java compiler 
-  * It implements the stemming algorithm defined by a snowball script.
-  */
-
-@SuppressWarnings("unused") public class DutchStemmer extends SnowballProgram {
-
-private static final long serialVersionUID = 1L;
-
-        /* patched */ private static final java.lang.invoke.MethodHandles.Lookup methodObject = java.lang.invoke.MethodHandles.lookup();
-
-                private final static Among a_0[] = {
-                    new Among ( "", -1, 6, "", methodObject ),
-                    new Among ( "\u00E1", 0, 1, "", methodObject ),
-                    new Among ( "\u00E4", 0, 1, "", methodObject ),
-                    new Among ( "\u00E9", 0, 2, "", methodObject ),
-                    new Among ( "\u00EB", 0, 2, "", methodObject ),
-                    new Among ( "\u00ED", 0, 3, "", methodObject ),
-                    new Among ( "\u00EF", 0, 3, "", methodObject ),
-                    new Among ( "\u00F3", 0, 4, "", methodObject ),
-                    new Among ( "\u00F6", 0, 4, "", methodObject ),
-                    new Among ( "\u00FA", 0, 5, "", methodObject ),
-                    new Among ( "\u00FC", 0, 5, "", methodObject )
-                };
-
-                private final static Among a_1[] = {
-                    new Among ( "", -1, 3, "", methodObject ),
-                    new Among ( "I", 0, 2, "", methodObject ),
-                    new Among ( "Y", 0, 1, "", methodObject )
-                };
-
-                private final static Among a_2[] = {
-                    new Among ( "dd", -1, -1, "", methodObject ),
-                    new Among ( "kk", -1, -1, "", methodObject ),
-                    new Among ( "tt", -1, -1, "", methodObject )
-                };
-
-                private final static Among a_3[] = {
-                    new Among ( "ene", -1, 2, "", methodObject ),
-                    new Among ( "se", -1, 3, "", methodObject ),
-                    new Among ( "en", -1, 2, "", methodObject ),
-                    new Among ( "heden", 2, 1, "", methodObject ),
-                    new Among ( "s", -1, 3, "", methodObject )
-                };
-
-                private final static Among a_4[] = {
-                    new Among ( "end", -1, 1, "", methodObject ),
-                    new Among ( "ig", -1, 2, "", methodObject ),
-                    new Among ( "ing", -1, 1, "", methodObject ),
-                    new Among ( "lijk", -1, 3, "", methodObject ),
-                    new Among ( "baar", -1, 4, "", methodObject ),
-                    new Among ( "bar", -1, 5, "", methodObject )
-                };
-
-                private final static Among a_5[] = {
-                    new Among ( "aa", -1, -1, "", methodObject ),
-                    new Among ( "ee", -1, -1, "", methodObject ),
-                    new Among ( "oo", -1, -1, "", methodObject ),
-                    new Among ( "uu", -1, -1, "", methodObject )
-                };
-
-                private static final char g_v[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-                private static final char g_v_I[] = {1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-                private static final char g_v_j[] = {17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 };
-
-        private int I_p2;
-        private int I_p1;
-        private boolean B_e_found;
-
-                private void copy_from(DutchStemmer other) {
-                    I_p2 = other.I_p2;
-                    I_p1 = other.I_p1;
-                    B_e_found = other.B_e_found;
-                    super.copy_from(other);
-                }
-
-                private boolean r_prelude() {
-            int among_var;
-            int v_1;
-            int v_2;
-            int v_3;
-            int v_4;
-            int v_5;
-            int v_6;
-                    // (, line 41
-                    // test, line 42
-                    v_1 = cursor;
-                    // repeat, line 42
-                    replab0: while(true)
-                    {
-                        v_2 = cursor;
-                        lab1: do {
-                            // (, line 42
-                            // [, line 43
-                            bra = cursor;
-                            // substring, line 43
-                            among_var = find_among(a_0, 11);
-                            if (among_var == 0)
-                            {
-                                break lab1;
-                            }
-                            // ], line 43
-                            ket = cursor;
-                            switch(among_var) {
-                                case 0:
-                                    break lab1;
-                                case 1:
-                                    // (, line 45
-                                    // <-, line 45
-                                    slice_from("a");
-                                    break;
-                                case 2:
-                                    // (, line 47
-                                    // <-, line 47
-                                    slice_from("e");
-                                    break;
-                                case 3:
-                                    // (, line 49
-                                    // <-, line 49
-                                    slice_from("i");
-                                    break;
-                                case 4:
-                                    // (, line 51
-                                    // <-, line 51
-                                    slice_from("o");
-                                    break;
-                                case 5:
-                                    // (, line 53
-                                    // <-, line 53
-                                    slice_from("u");
-                                    break;
-                                case 6:
-                                    // (, line 54
-                                    // next, line 54
-                                    if (cursor >= limit)
-                                    {
-                                        break lab1;
-                                    }
-                                    cursor++;
-                                    break;
-                            }
-                            continue replab0;
-                        } while (false);
-                        cursor = v_2;
-                        break replab0;
-                    }
-                    cursor = v_1;
-                    // try, line 57
-                    v_3 = cursor;
-                    lab2: do {
-                        // (, line 57
-                        // [, line 57
-                        bra = cursor;
-                        // literal, line 57
-                        if (!(eq_s(1, "y")))
-                        {
-                            cursor = v_3;
-                            break lab2;
-                        }
-                        // ], line 57
-                        ket = cursor;
-                        // <-, line 57
-                        slice_from("Y");
-                    } while (false);
-                    // repeat, line 58
-                    replab3: while(true)
-                    {
-                        v_4 = cursor;
-                        lab4: do {
-                            // goto, line 58
-                            golab5: while(true)
-                            {
-                                v_5 = cursor;
-                                lab6: do {
-                                    // (, line 58
-                                    if (!(in_grouping(g_v, 97, 232)))
-                                    {
-                                        break lab6;
-                                    }
-                                    // [, line 59
-                                    bra = cursor;
-                                    // or, line 59
-                                    lab7: do {
-                                        v_6 = cursor;
-                                        lab8: do {
-                                            // (, line 59
-                                            // literal, line 59
-                                            if (!(eq_s(1, "i")))
-                                            {
-                                                break lab8;
-                                            }
-                                            // ], line 59
-                                            ket = cursor;
-                                            if (!(in_grouping(g_v, 97, 232)))
-                                            {
-                                                break lab8;
-                                            }
-                                            // <-, line 59
-                                            slice_from("I");
-                                            break lab7;
-                                        } while (false);
-                                        cursor = v_6;
-                                        // (, line 60
-                                        // literal, line 60
-                                        if (!(eq_s(1, "y")))
-                                        {
-                                            break lab6;
-                                        }
-                                        // ], line 60
-                                        ket = cursor;
-                                        // <-, line 60
-                                        slice_from("Y");
-                                    } while (false);
-                                    cursor = v_5;
-                                    break golab5;
-                                } while (false);
-                                cursor = v_5;
-                                if (cursor >= limit)
-                                {
-                                    break lab4;
-                                }
-                                cursor++;
-                            }
-                            continue replab3;
-                        } while (false);
-                        cursor = v_4;
-                        break replab3;
-                    }
-                    return true;
-                }
-
-                private boolean r_mark_regions() {
-                    // (, line 64
-                    I_p1 = limit;
-                    I_p2 = limit;
-                    // gopast, line 69
-                    golab0: while(true)
-                    {
-                        lab1: do {
-                            if (!(in_grouping(g_v, 97, 232)))
-                            {
-                                break lab1;
-                            }
-                            break golab0;
-                        } while (false);
-                        if (cursor >= limit)
-                        {
-                            return false;
-                        }
-                        cursor++;
-                    }
-                    // gopast, line 69
-                    golab2: while(true)
-                    {
-                        lab3: do {
-                            if (!(out_grouping(g_v, 97, 232)))
-                            {
-                                break lab3;
-                            }
-                            break golab2;
-                        } while (false);
-                        if (cursor >= limit)
-                        {
... 51338 lines suppressed ...