Index: src/test/org/apache/lucene/util/automaton/TestLevenshteinAutomata.java =================================================================== --- src/test/org/apache/lucene/util/automaton/TestLevenshteinAutomata.java (revision 0) +++ src/test/org/apache/lucene/util/automaton/TestLevenshteinAutomata.java (revision 0) @@ -0,0 +1,179 @@ +package org.apache.lucene.util.automaton; + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import org.apache.lucene.util.LuceneTestCase; +import org.apache.lucene.util.automaton.Automaton; +import org.apache.lucene.util.automaton.BasicAutomata; +import org.apache.lucene.util.automaton.BasicOperations; +import org.apache.lucene.util.automaton.MinimizationOperations; + +public class TestLevenshteinAutomata extends LuceneTestCase { + private Random random; + + /** + * Some simple tests for Distance 1. + * We exercise all possible 3-profiles. + */ + public void testLev1() throws Exception { + assertLev1("otter"); + assertLev1("atlas"); + assertLev1("aaabbb"); + assertLev1("aaabb"); + assertLev1("aaab"); + assertLev1("aabb"); + assertLev1("abab"); + assertLev1("b"); + assertLev1(""); + } + + /** + * Some random tests for Distance 1. + * Generate random strings (from doubles) and ensure the automaton is correct. + */ + public void testLev1Random() throws Exception { + random = newRandom(System.nanoTime()); + for (int i = 0; i < 25; i++) { + assertLev1("" + random.nextDouble()); + } + } + + /** + * for now, simply test the Lev 1 is a subset of Lev 2 + */ + public void testLev2() throws Exception { + assertSubsetOf("otter", 1, 2); + assertSubsetOf("atlas", 1, 2); + assertSubsetOf("aaabbb", 1, 2); + assertSubsetOf("aaabb", 1, 2); + assertSubsetOf("aaab", 1, 2); + assertSubsetOf("aabb", 1, 2); + assertSubsetOf("abab", 1, 2); + assertSubsetOf("b", 1, 2); + assertSubsetOf("", 1, 2); + } + + /** + * Test that the language accepted for Lev(s) is a subset of + * the language accepted for Lev(s), where n2 > n1 + */ + private void assertSubsetOf(String s, int n1, int n2) { + Automaton a1 = LevAutomatonFast(s, n1); + Automaton a2 = LevAutomatonFast(s, n2); + assertTrue(a1.subsetOf(a2)); + assertNotSame(a1, a2); // shows that a2.subSetOf(a1) is false, too + } + + /** + * Test that the DFA generated for degree 1 matches one generated with the naive algorithm. + */ + private void assertLev1(String s) { + Automaton a1 = Lev1AutomatonSlow(s); + Automaton a2 = LevAutomatonFast(s, 1); + // Automaton .equals() means they accept the same language. + assertEquals(a1, a2); + } + + /** + * Return an automata that accepts all strings within an edit distance of n from s. + */ + private Automaton LevAutomatonFast(String s, int n) { + LevenshteinAutomata a = new LevenshteinAutomata(s); + return a.toAutomaton(n); + } + + /** + * Return an automaton that accepts all 1-character insertions, deletions, and + * substitutions of s. + */ + private Automaton Lev1AutomatonSlow(String s) { + Automaton a = BasicAutomata.makeString(s); + a = BasicOperations.union(a, insertionsOf(s)); + MinimizationOperations.minimize(a); + a = BasicOperations.union(a, deletionsOf(s)); + MinimizationOperations.minimize(a); + a = BasicOperations.union(a, substitutionsOf(s)); + MinimizationOperations.minimize(a); + + return a; + } + + /** + * Return an automaton that accepts all 1-character insertions of s (inserting + * one character) + */ + private Automaton insertionsOf(String s) { + List list = new ArrayList(); + + for (int i = 0; i <= s.length(); i++) { + Automaton a = BasicAutomata.makeString(s.substring(0, i)); + a = BasicOperations.concatenate(a, BasicAutomata.makeAnyChar()); + a = BasicOperations.concatenate(a, BasicAutomata.makeString(s + .substring(i))); + list.add(a); + } + + Automaton a = BasicOperations.union(list); + MinimizationOperations.minimize(a); + return a; + } + + /** + * Return an automaton that accepts all 1-character deletions of s (deleting + * one character). + */ + private Automaton deletionsOf(String s) { + List list = new ArrayList(); + + for (int i = 0; i < s.length(); i++) { + Automaton a = BasicAutomata.makeString(s.substring(0, i)); + a = BasicOperations.concatenate(a, BasicAutomata.makeString(s + .substring(i + 1))); + a.expandSingleton(); + list.add(a); + } + + Automaton a = BasicOperations.union(list); + MinimizationOperations.minimize(a); + return a; + } + + /** + * Return an automaton that accepts all 1-character substitutions of s + * (replacing one character) + */ + private Automaton substitutionsOf(String s) { + List list = new ArrayList(); + + for (int i = 0; i < s.length(); i++) { + Automaton a = BasicAutomata.makeString(s.substring(0, i)); + a = BasicOperations.concatenate(a, BasicAutomata.makeAnyChar()); + a = BasicOperations.concatenate(a, BasicAutomata.makeString(s + .substring(i + 1))); + list.add(a); + } + + Automaton a = BasicOperations.union(list); + MinimizationOperations.minimize(a); + return a; + } +} Property changes on: src/test/org/apache/lucene/util/automaton/TestLevenshteinAutomata.java ___________________________________________________________________ Added: svn:eol-style + native Index: src/java/org/apache/lucene/search/FuzzyTermsEnum.java =================================================================== --- src/java/org/apache/lucene/search/FuzzyTermsEnum.java (revision 916941) +++ src/java/org/apache/lucene/search/FuzzyTermsEnum.java (working copy) @@ -17,22 +17,262 @@ * limitations under the License. */ +import org.apache.lucene.index.DocsAndPositionsEnum; +import org.apache.lucene.index.DocsEnum; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; +import org.apache.lucene.index.TermsEnum; +import org.apache.lucene.util.Bits; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.UnicodeUtil; +import org.apache.lucene.util.BytesRef.Comparator; +import org.apache.lucene.util.automaton.Automaton; +import org.apache.lucene.util.automaton.BasicAutomata; +import org.apache.lucene.util.automaton.BasicOperations; +import org.apache.lucene.util.automaton.LevenshteinAutomata; +import org.apache.lucene.util.automaton.RunAutomaton; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; -/** Subclass of FilteredTermEnum for enumerating all terms that are similar +/** Subclass of TermsEnum for enumerating all terms that are similar * to the specified filter term. * *

Term enumerations are always ordered by * {@link #getTermComparator}. Each term in the enumeration is * greater than all that precede it.

*/ -public final class FuzzyTermsEnum extends FilteredTermsEnum { +public final class FuzzyTermsEnum extends TermsEnum { + private TermsEnum actualEnum; + private MultiTermQuery.BoostAttribute actualBoostAtt; + + private final MultiTermQuery.BoostAttribute boostAtt = + attributes().addAttribute(MultiTermQuery.BoostAttribute.class); + // nocommit bad variable naming, its the max nonLowerBound... + private float lowerBound = boostAtt.getMaxNonCompetitiveBoost(); + + private final float minSimilarity; + private final float scale_factor; + + private final int termLength; + + private int maxEdits; + private List automata; + private List runAutomata; + + private final IndexReader reader; + private final Term term; + private final int realPrefixLength; + + public FuzzyTermsEnum(IndexReader reader, Term term, + final float minSimilarity, final int prefixLength) throws IOException { + this.reader = reader; + this.term = term; + //The prefix could be longer than the word. + //It's kind of silly though. It means we must match the entire word. + this.termLength = term.text().length(); + this.realPrefixLength = prefixLength > termLength ? termLength : prefixLength; + this.minSimilarity = minSimilarity; + this.scale_factor = 1.0f / (1.0f - minSimilarity); + + // calculate the maximum k edits for this similarity, and build automata for 0..n, where n<=k + maxEdits = initialMaxDistance(minSimilarity, termLength); + // constant prefix + Automaton prefix = BasicAutomata.makeString(term.text().substring(0, realPrefixLength)); + String text = term.text().substring(realPrefixLength); + LevenshteinAutomata la = new LevenshteinAutomata(text); + automata = new ArrayList(maxEdits); + runAutomata = new ArrayList(maxEdits); + for (int i = 0; i <= maxEdits; i++) { + Automaton a = la.toAutomaton(i); + if (a == null) + break; + a = BasicOperations.concatenate(prefix, a); + automata.add(a); + runAutomata.add(new RunAutomaton(a)); + } + TermsEnum subEnum = getActualEnum(maxEdits, null); + setEnum(subEnum != null ? subEnum : + new LinearFuzzyTermsEnum(reader, term, minSimilarity, prefixLength)); + } + + private TermsEnum getActualEnum(int editDistance, BytesRef lastTerm) throws IOException { + if (editDistance < automata.size()) { + return new AutomatonFuzzyTermsEnum(automata.get(editDistance), term, reader, + minSimilarity, + runAutomata.subList(0, editDistance + 1).toArray(new RunAutomaton[0]), lastTerm); + } else { + return null; + } + } + + void setEnum(TermsEnum actualEnum) { + this.actualEnum = actualEnum; + this.actualBoostAtt = actualEnum.attributes().addAttribute(MultiTermQuery.BoostAttribute.class); + } + + /** fired when the max non-competitive boost has changed. + * this is the hook to swap in a smarter actualEnum + */ + void minBoostChanged(float boostValue, BytesRef lastTerm) throws IOException { + int oldMaxEdits = maxEdits; + + // as long as the max non-competitive boost is >= the max boost for some edit distance, + // keep dropping the max edit distance. + while (maxEdits > 0 && boostValue >= calculateMaxBoost(maxEdits)) + maxEdits--; + + if (oldMaxEdits != maxEdits) { // the maximum n has changed + TermsEnum newEnum = getActualEnum(maxEdits, lastTerm); + if (newEnum != null) { + setEnum(newEnum); + } + } + // TODO, besides changing linear -> automaton, and swapping in a smaller automaton, + // we can also use this information to optimize the linear case itself: + // re-init maxDistances so the fast-fail happens for more terms due to the now + // stricter constraints. + } + + // for some raw minimum similarity and input term length, what is the maximum # of edits? + static int initialMaxDistance(float minimumSimilarity, int termLen) { + return (int) ((1-minimumSimilarity) * termLen); + } + + // for some number of edits, what is the maximum possible scaled boost? + float calculateMaxBoost(int nEdits) { + final float similarity = 1.0f - ((float) nEdits / (float) (termLength)); + return (similarity - minSimilarity) * scale_factor; + } + @Override + public BytesRef next() throws IOException { + BytesRef term = actualEnum.next(); + boostAtt.setBoost(actualBoostAtt.getBoost()); + + final float lowerBound = boostAtt.getMaxNonCompetitiveBoost(); + if (lowerBound != this.lowerBound) { + this.lowerBound = lowerBound; + // clone the term before potentially doing something with it + minBoostChanged(lowerBound, term == null ? null : (BytesRef) term.clone()); + } + + return term; + } + + // proxy all other enum calls to the actual enum + @Override + public int docFreq() { + return actualEnum.docFreq(); + } + + @Override + public DocsEnum docs(Bits skipDocs, DocsEnum reuse) throws IOException { + return actualEnum.docs(skipDocs, reuse); + } + + @Override + public DocsAndPositionsEnum docsAndPositions(Bits skipDocs, + DocsAndPositionsEnum reuse) throws IOException { + return actualEnum.docsAndPositions(skipDocs, reuse); + } + + @Override + public Comparator getComparator() throws IOException { + return actualEnum.getComparator(); + } + + @Override + public long ord() throws IOException { + return actualEnum.ord(); + } + + @Override + public SeekStatus seek(BytesRef text) throws IOException { + return actualEnum.seek(text); + } + + @Override + public SeekStatus seek(long ord) throws IOException { + return actualEnum.seek(ord); + } + + @Override + public BytesRef term() throws IOException { + return actualEnum.term(); + } +} + +/** + * Implement fuzzy enumeration with automaton. + *

+ * This is the fastest method as opposed to LinearFuzzyTermsEnum: + * as enumeration is logarithmic to the number of terms (instead of linear) + * and comparison is linear to length of the term (rather than quadratic) + */ +final class AutomatonFuzzyTermsEnum extends AutomatonTermsEnum { + private final RunAutomaton matchers[]; + // used for unicode conversion from BytesRef byte[] to char[] + private final UnicodeUtil.UTF16Result utf16 = new UnicodeUtil.UTF16Result(); + + private final float minimumSimilarity; + private final float scale_factor; + + private final int fullSearchTermLength; + private final BytesRef termRef; + + private final BytesRef lastTerm; + private final MultiTermQuery.BoostAttribute boostAtt = + attributes().addAttribute(MultiTermQuery.BoostAttribute.class); + + public AutomatonFuzzyTermsEnum(Automaton automaton, Term queryTerm, + IndexReader reader, float minSimilarity, RunAutomaton matchers[], BytesRef lastTerm) throws IOException { + super(automaton, queryTerm, reader, false); + this.minimumSimilarity = minSimilarity; + this.scale_factor = 1.0f / (1.0f - minimumSimilarity); + this.matchers = matchers; + this.lastTerm = lastTerm; + termRef = new BytesRef(queryTerm.text()); + fullSearchTermLength = queryTerm.text().length(); + } + + @Override + protected AcceptStatus accept(BytesRef term) { + if (term.equals(termRef)) { // ed = 0 + boostAtt.setBoost(1.0F); + return AcceptStatus.YES_AND_SEEK; + } + + UnicodeUtil.UTF8toUTF16(term.bytes, term.offset, term.length, utf16); + + for (int i = 1; i < matchers.length; i++) + if (matchers[i].run(utf16.result, 0, utf16.length)) { + final float similarity = 1.0f - ((float) i / (float) + (Math.min(utf16.length, fullSearchTermLength))); + if (similarity > minimumSimilarity) { + boostAtt.setBoost((float) ((similarity - minimumSimilarity) * scale_factor)); + return AcceptStatus.YES_AND_SEEK; + } else { + // TODO: optimize and intersect automata with length restrictions up + // front so this can't happen. + return AcceptStatus.NO_AND_SEEK; + } + } + + return AcceptStatus.NO_AND_SEEK; + } + + @Override + protected BytesRef nextSeekTerm(BytesRef term) throws IOException { + if (term == null) + term = lastTerm; + return super.nextSeekTerm(term); + } +} + +final class LinearFuzzyTermsEnum extends FilteredTermsEnum { + /* This should be somewhere around the average long word. * If it is longer, we waste time and space. If it is shorter, we waste a * little bit of time growing the array as we encounter longer words. @@ -68,7 +308,7 @@ * @param prefixLength Length of required common prefix. Default value is 0. * @throws IOException */ - public FuzzyTermsEnum(IndexReader reader, Term term, final float minSimilarity, final int prefixLength) throws IOException { + public LinearFuzzyTermsEnum(IndexReader reader, Term term, final float minSimilarity, final int prefixLength) throws IOException { super(reader, term.field()); if (minSimilarity >= 1.0f) Index: src/java/org/apache/lucene/util/automaton/LevenshteinAutomata.java =================================================================== --- src/java/org/apache/lucene/util/automaton/LevenshteinAutomata.java (revision 0) +++ src/java/org/apache/lucene/util/automaton/LevenshteinAutomata.java (revision 0) @@ -0,0 +1,231 @@ +package org.apache.lucene.util.automaton; + +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.util.BitSet; +import java.util.Iterator; +import java.util.SortedSet; +import java.util.TreeSet; + +import org.apache.lucene.util.automaton.Automaton; +import org.apache.lucene.util.automaton.BasicAutomata; +import org.apache.lucene.util.automaton.State; +import org.apache.lucene.util.automaton.Transition; + +/** + * Class to construct DFAs that match a word within some edit distance. + *

+ * Implements the algorithm described in: + * Schulz and Mihov: Fast String Correction with Levenshtein Automata + *

+ * @lucene.experimental + */ +public class LevenshteinAutomata { + /* input word */ + final String input; + final char word[]; + /* the automata alphabet. */ + final char alphabet[]; + /* X(x, V) for all x in alphabet */ + final BitSet charvectors[]; + + /* the unicode ranges outside of alphabet */ + final char rangeLower[]; + final char rangeUpper[]; + int numRanges = 0; + + ParametricDescription descriptions[]; + + /** + * Create a new LevenshteinAutomata for some input String. + */ + public LevenshteinAutomata(String input) { + this.input = input; + this.word = input.toCharArray(); + + // calculate the alphabet + SortedSet set = new TreeSet(); + for (int i = 0; i < word.length; i++) + set.add(word[i]); + alphabet = new char[set.size()]; + Iterator iterator = set.iterator(); + for (int i = 0; i < alphabet.length; i++) + alphabet[i] = iterator.next(); + + // calculate all characteristic vectors + charvectors = new BitSet[Character.MAX_VALUE]; + for (char c : set) + charvectors[c] = calcFullVector(c, word); + + rangeLower = new char[alphabet.length + 2]; + rangeUpper = new char[alphabet.length + 2]; + // calculate the unicode range intervals that exclude the alphabet + // these are the ranges for all unicode characters not in the alphabet + int lower = 0; + for (int i = 0; i < alphabet.length; i++) { + char higher = alphabet[i]; + if (higher > lower) { + rangeLower[numRanges] = (char) lower; + rangeUpper[numRanges] = (char) (higher - 1); + numRanges++; + } + lower = higher + 1; + } + /* add the final endpoint */ + if (lower <= 0xFFFF) { + rangeLower[numRanges] = (char) lower; + rangeUpper[numRanges] = '\uFFFF'; + numRanges++; + } + + descriptions = new ParametricDescription[] { + null, /* for n=0, we do not need to go through the trouble */ + new Lev1ParametricDescription(input.length()), + new Lev2ParametricDescription(input.length()) + }; + } + + /** + * Compute a DFA that accepts all strings within an edit distance of n. + *

+ * All automata have the following properties: + *

    + *
  • They are deterministic (DFA). + *
  • There are no transitions to dead states. + *
  • They are not minimal (some transitions could be combined). + *
+ *

+ */ + public Automaton toAutomaton(int n) { + if (n == 0) + return BasicAutomata.makeString(input); + + if (n >= descriptions.length) + return null; + + final int range = 2*n+1; + ParametricDescription description = descriptions[n]; + // the number of states is based on the length of the word and n + State states[] = new State[description.size()]; + // create all states, and mark as accept states if appropriate + for (int i = 0; i < states.length; i++) { + states[i] = new State(); + states[i].setAccept(description.isAccept(i)); + } + // create transitions from state to state + for (int k = 0; k < states.length; k++) { + final int xpos = description.getPosition(k); + if (xpos < 0) + continue; + final int end = xpos + Math.min(word.length - xpos, range); + + for (int x = 0; x < alphabet.length; x++) { + final char ch = alphabet[x]; + // get the characteristic vector at this position wrt ch + final int cvec = getVector(ch, xpos, end); + int dest = description.transition(k, xpos, cvec); + if (dest >= 0) + states[k].addTransition(new Transition(ch, states[dest])); + } + // add transitions for all other chars in unicode + // by definition, their characteristic vectors are always 0, + // because they do not exist in the input string. + int dest = description.transition(k, xpos, 0); // by definition + if (dest >= 0) + for (int r = 0; r < numRanges; r++) + states[k].addTransition(new Transition(rangeLower[r], rangeUpper[r], states[dest])); + } + + Automaton a = new Automaton(); + a.setInitialState(states[0]); + a.setDeterministic(true); + // we should not need to trim transitions to dead states, we do not create these? + // + //a.restoreInvariant(); + return a; + } + + /** + * Get the characteristic vector X(x, V) + * where V is substring(pos, end) + */ + int getVector(char x, int pos, int end) { + int vector = 0; + for (int i = pos; i < end; i++) { + vector <<= 1; + if (word[i] == x) + vector |= 1; + } + return vector; + } + + /** + * Precompute all characteristic vectors X(x, V) + * for some x where V is the entire word. + * This makes retrieving the vectors for some k-profile sequence + * at any position in {@link #getVector(char, int, int)} + * simply a bit substring operation. + */ + static BitSet calcFullVector(char x, char word[]) { + BitSet charvector = new BitSet(word.length); + for (int i = 0; i < word.length; i++) + charvector.set(i, word[i] == x); + return charvector; + } + + /** + * A ParametricDescription describes the structure of a Levenshtein DFA for some degree n. + *

+ * There are four components of a parametric description, all parameterized on the length + * of the word w: + *

    + *
  1. The number of states: {@link #size()} + *
  2. The set of final states: {@link #isAccept(int)} + *
  3. The transition function: {@link #transition(int, int, int)} + *
  4. Minimal boundary function: {@link #getPosition(int)} + *
+ */ + static abstract class ParametricDescription { + protected int w; + + ParametricDescription(int w) { + this.w = w; + } + + /** + * Return the number of states needed to compute a Levenshtein DFA + */ + abstract int size(); + /** + * Returns true if the state in any Levenshtein DFA is an accept state (final state). + */ + abstract boolean isAccept(int state); + /** + * Returns the position in the input word for a given state. + * This is the minimal boundary for the state. + */ + abstract int getPosition(int state); + + /** + * Returns the state number for a transition from the given state, + * assuming position and characteristic vector vector + */ + abstract int transition(int state, int position, int vector); + } + +} Property changes on: src/java/org/apache/lucene/util/automaton/LevenshteinAutomata.java ___________________________________________________________________ Added: svn:eol-style + native Index: src/java/org/apache/lucene/util/automaton/Lev1ParametricDescription.java =================================================================== --- src/java/org/apache/lucene/util/automaton/Lev1ParametricDescription.java (revision 0) +++ src/java/org/apache/lucene/util/automaton/Lev1ParametricDescription.java (revision 0) @@ -0,0 +1,135 @@ +package org.apache.lucene.util.automaton; + +// The following code was generated with the moman/finenight pkg +// This package is available under the MIT License, see NOTICE +// for more details. + +import org.apache.lucene.util.automaton.LevenshteinAutomata.ParametricDescription; + +class Lev1ParametricDescription extends ParametricDescription { + + @Override + int transition(int absState, int position, int vector) { + + // decode absState -> state, offset + int state = absToState[absState]; + int offset = absState - stateToAbs[state]; + assert offset >= 0; + + // null state should never be passed in + assert state != -1; + if (position == w) { + if (state < 2) { + final int loc = vector * 2 + state; + offset += unpack(offsetIncrs0, loc, 1); + state = unpack(toStates0, loc, 2)-1; + } + } else if (position == w-1) { + if (state < 3) { + final int loc = vector * 3 + state; + offset += unpack(offsetIncrs1, loc, 1); + state = unpack(toStates1, loc, 2)-1; + } + } else if (position == w-2) { + if (state < 5) { + final int loc = vector * 5 + state; + offset += unpack(offsetIncrs2, loc, 2); + state = unpack(toStates2, loc, 3)-1; + } + } else { + if (state < 5) { + final int loc = vector * 5 + state; + offset += unpack(offsetIncrs3, loc, 2); + state = unpack(toStates3, loc, 3)-1; + } + } + + if (state == -1) { + // null state + return -1; + } else { + // translate back to abs + return stateToAbs[state] + offset; + } + } + + // 1 vectors; 2 states per vector; array length = 2 + private final static long[] toStates0 = new long[] {0x2}; // 2 bits per value + private final static long[] offsetIncrs0 = new long[] {0x0}; // 1 bits per value + + // 2 vectors; 3 states per vector; array length = 6 + private final static long[] toStates1 = new long[] {0xa43}; // 2 bits per value + private final static long[] offsetIncrs1 = new long[] {0x38}; // 1 bits per value + + // 4 vectors; 5 states per vector; array length = 20 + private final static long[] toStates2 = new long[] {0x4da292442420003L}; // 3 bits per value + private final static long[] offsetIncrs2 = new long[] {0x5555528000L}; // 2 bits per value + + // 8 vectors; 5 states per vector; array length = 40 + private final static long[] toStates3 = new long[] {0x14d0812112018003L,0xb1a29b46d48a49L}; // 3 bits per value + private final static long[] offsetIncrs3 = new long[] {0x555555e80a0f0000L,0x5555}; // 2 bits per value + + // state map + // 0 -> [(0, 0)] + // 1 -> [(0, 1)] + // 2 -> [(0, 1), (1, 1)] + // 3 -> [(0, 1), (1, 1), (2, 1)] + // 4 -> [(0, 1), (2, 1)] + + private final static int[] stateSizes = new int[] {1,1,2,3,2}; + private final static int[] minErrors = new int[] {0,1,0,-1,-1}; + private final int[] stateToAbs; + private final int[] absToState; + + public Lev1ParametricDescription(int w) { + super(w); + stateToAbs = new int[5]; + absToState = new int[(w+1)*9]; + int upto = 0; + for(int i=0;i state, offset + int state = absToState[absState]; + int offset = absState - stateToAbs[state]; + assert offset >= 0; + return w - offset + minErrors[state] <= 1; + } + + private final static long[] MASKS = new long[] {0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff,0x1ff,0x3ff,0x7ff,0xfff,0x1fff,0x3fff,0x7fff,0xffff,0x1ffff,0x3ffff,0x7ffff,0xfffff,0x1fffff,0x3fffff,0x7fffff,0xffffff,0x1ffffff,0x3ffffff,0x7ffffff,0xfffffff,0x1fffffff,0x3fffffff,0x7fffffffL,0xffffffffL,0x1ffffffffL,0x3ffffffffL,0x7ffffffffL,0xfffffffffL,0x1fffffffffL,0x3fffffffffL,0x7fffffffffL,0xffffffffffL,0x1ffffffffffL,0x3ffffffffffL,0x7ffffffffffL,0xfffffffffffL,0x1fffffffffffL,0x3fffffffffffL,0x7fffffffffffL,0xffffffffffffL,0x1ffffffffffffL,0x3ffffffffffffL,0x7ffffffffffffL,0xfffffffffffffL,0x1fffffffffffffL,0x3fffffffffffffL,0x7fffffffffffffL,0xffffffffffffffL,0x1ffffffffffffffL,0x3ffffffffffffffL,0x7ffffffffffffffL,0xfffffffffffffffL,0x1fffffffffffffffL,0x3fffffffffffffffL,0x7fffffffffffffffL}; + + private int unpack(long[] data, int index, int bitsPerValue) { + final long bitLoc = bitsPerValue * index; + final int dataLoc = (int) (bitLoc >> 6); + final int bitStart = (int) (bitLoc & 63); + //System.out.println("index=" + index + " dataLoc=" + dataLoc + " bitStart=" + bitStart + " bitsPerV=" + bitsPerValue); + if (bitStart + bitsPerValue <= 64) { + // not split + return (int) ((data[dataLoc] >> bitStart) & MASKS[bitsPerValue-1]); + } else { + // split + final int part = 64-bitStart; + return (int) (((data[dataLoc] >> bitStart) & MASKS[part-1]) + + ((data[1+dataLoc] & MASKS[bitsPerValue-part-1]) << part)); + } + } +} Property changes on: src/java/org/apache/lucene/util/automaton/Lev1ParametricDescription.java ___________________________________________________________________ Added: svn:eol-style + native Index: src/java/org/apache/lucene/util/automaton/Lev2ParametricDescription.java =================================================================== --- src/java/org/apache/lucene/util/automaton/Lev2ParametricDescription.java (revision 0) +++ src/java/org/apache/lucene/util/automaton/Lev2ParametricDescription.java (revision 0) @@ -0,0 +1,180 @@ +package org.apache.lucene.util.automaton; + +// The following code was generated with the moman/finenight pkg +// This package is available under the MIT License, see NOTICE +// for more details. + +import org.apache.lucene.util.automaton.LevenshteinAutomata.ParametricDescription; + +class Lev2ParametricDescription extends ParametricDescription { + + @Override + int transition(int absState, int position, int vector) { + + // decode absState -> state, offset + int state = absToState[absState]; + int offset = absState - stateToAbs[state]; + assert offset >= 0; + + // null state should never be passed in + assert state != -1; + if (position == w) { + if (state < 3) { + final int loc = vector * 3 + state; + offset += unpack(offsetIncrs0, loc, 1); + state = unpack(toStates0, loc, 2)-1; + } + } else if (position == w-1) { + if (state < 5) { + final int loc = vector * 5 + state; + offset += unpack(offsetIncrs1, loc, 1); + state = unpack(toStates1, loc, 3)-1; + } + } else if (position == w-2) { + if (state < 11) { + final int loc = vector * 11 + state; + offset += unpack(offsetIncrs2, loc, 2); + state = unpack(toStates2, loc, 4)-1; + } + } else if (position == w-3) { + if (state < 21) { + final int loc = vector * 21 + state; + offset += unpack(offsetIncrs3, loc, 2); + state = unpack(toStates3, loc, 5)-1; + } + } else if (position == w-4) { + if (state < 30) { + final int loc = vector * 30 + state; + offset += unpack(offsetIncrs4, loc, 3); + state = unpack(toStates4, loc, 5)-1; + } + } else { + if (state < 30) { + final int loc = vector * 30 + state; + offset += unpack(offsetIncrs5, loc, 3); + state = unpack(toStates5, loc, 5)-1; + } + } + + if (state == -1) { + // null state + return -1; + } else { + // translate back to abs + return stateToAbs[state] + offset; + } + } + + // 1 vectors; 3 states per vector; array length = 3 + private final static long[] toStates0 = new long[] {0x23}; // 2 bits per value + private final static long[] offsetIncrs0 = new long[] {0x0}; // 1 bits per value + + // 2 vectors; 5 states per vector; array length = 10 + private final static long[] toStates1 = new long[] {0x1a68c105}; // 3 bits per value + private final static long[] offsetIncrs1 = new long[] {0x3e0}; // 1 bits per value + + // 4 vectors; 11 states per vector; array length = 44 + private final static long[] toStates2 = new long[] {0x6280b80804280405L,0x2323432321608282L,0x523434543213L}; // 4 bits per value + private final static long[] offsetIncrs2 = new long[] {0x5555502220000800L,0x555555}; // 2 bits per value + + // 8 vectors; 21 states per vector; array length = 168 + private final static long[] toStates3 = new long[] {0x40300c0108801005L,0x202a8208801000L,0x4021006280a0288dL,0x30482184802d0414L,0x5990240880010460L,0x191a28118330900L,0x310c413204c1104L,0x8625084811c4710dL,0xa92a39862188231aL,0x1046351c4a508ca4L,0x21208511c8341483L,0xe6290620946a1910L,0xd47221423216a4a0L,0x28}; // 5 bits per value + private final static long[] offsetIncrs3 = new long[] {0x33300030c2000800L,0x32828088800c3cfL,0x5555550cace32320L,0x5555555555555555L,0x5555555555555555L,0x5555}; // 2 bits per value + + // 16 vectors; 30 states per vector; array length = 480 + private final static long[] toStates4 = new long[] {0x80300c0108801005L,0x88210802000L,0x42200401400000L,0x7ae3b88621184c03L,0x101500042100402L,0x208031405014468L,0x4010042000682122L,0x490140511a004054L,0x8401fae3c086411L,0x120861200b100822L,0x641102400081180cL,0x4802c40100001088L,0x8c21194603048218L,0x1421014225bc3f2L,0x23450230661200b1L,0x2108664118240803L,0x8c1984802c802004L,0xbc3e28c41150d140L,0xc4120102209421dL,0x7884c11c4710d031L,0x210842109031bc62L,0xc711c4340c431044L,0x9c245293a3a6e741L,0x1cc310c41109ce70L,0x1bce27a846525495L,0x3105425094a108c3L,0x6f735e95254730c4L,0x9ee7a9c23529393aL,0x144720d0520c4150L,0x211051bc646084c2L,0x3414831048220842L,0x93a460e7422511c8L,0xc4120a2e70a24456L,0x284642d4941cc520L,0x4094a210c51bce46L,0xb525073148310502L,0x24356939460f7358L,0x4098e7aa}; // 5 bits per value + private final static long[] offsetIncrs4 = new long[] {0xc0602000010000L,0xa000040000000001L,0x248204041248L,0xb0180c06c3618618L,0x238d861860001861L,0x41040061c6e06041L,0x4004900c2402400L,0x409489001041001L,0x4184184004148124L,0x1041b4980c24c3L,0xd26040938d061061L,0x2492492492494146L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x24924924}; // 3 bits per value + + // 32 vectors; 30 states per vector; array length = 960 + private final static long[] toStates5 = new long[] {0x80300c0108801005L,0x88210802000L,0x42200401400000L,0xa084200800200c03L,0x100510842108428L,0x2188461300c01088L,0x108401009eb8eeL,0x84c0300422004014L,0x8828fae3b886211L,0x1446801015108842L,0x8212202080314050L,0x405440100420006L,0x8200c50140511a0L,0x942528423a08488L,0x2405014468010155L,0x21007eb8f0219045L,0x511a004054402088L,0xae3c086411490140L,0x200b50904428823fL,0x400081180c120861L,0x100001088641102L,0x46030482184802c4L,0x9ce8990440900020L,0x20861200b709c210L,0xf0fca308465180c1L,0x802c405084050896L,0xc211946030482184L,0x9e4209ee8dbc3f28L,0x3450230661200b70L,0x1086641182408032L,0xc1984802c8020042L,0x46090200c8d1408L,0xb88a22529ce399L,0x1045434502306612L,0x4088250876f0f8a3L,0xd1408c1984802c80L,0xee3dbc3e28c41150L,0xd0310c4188984429L,0xbc627884c11c4710L,0x1044210842109031L,0x21304711c4340c43L,0xbdef7bdf0c6f189eL,0xc4710d0310c41ef7L,0x914a4e8e9b9d071L,0x40c4310442739c27L,0x3a3a6e741c711c43L,0x41ef77bdf77df529L,0x8465254951cc310cL,0x94a108c31bce27aL,0x5254730c43105425L,0xdb0c6f389ea11949L,0xc310c41cf73dce7bL,0xe4e9bdcd7a54951cL,0x5427b9ea708d4a4L,0x735e95254730c431L,0xbd677db529393a6fL,0x4720d0520c41cf75L,0x1051bc646084c214L,0x1483104822084221L,0x191821308511c834L,0x1bf6fdef6f7f146fL,0xd08944720d0520c4L,0x9c289115a4e91839L,0x1c8341483104828bL,0xf5693a460e742251L,0x520c41bf71bdf717L,0xe46284642d4941ccL,0x5024094a210c51bcL,0x190b525073148310L,0xce6f7b146f3918a1L,0x941cc520c41f77ddL,0xd5a4e5183dcd62d4L,0x48310502639ea890L,0x460f7358b5250731L,0xf779bd6717b56939L}; // 5 bits per value + private final static long[] offsetIncrs5 = new long[] {0xc0602000010000L,0x8000040000000001L,0xb6db6d4030180L,0x810104922800010L,0x248a000040000092L,0x618000b649654041L,0x861b0180c06c3618L,0x301b0d861860001L,0x61861800075d6ed6L,0x1871b8181048e3L,0xe56041238d861860L,0x40240041040075c6L,0x4100104004900c2L,0x55b5240309009001L,0x1025224004104005L,0x10410010520490L,0x55495240409489L,0x4980c24c34184184L,0x30d061061001041bL,0x184005556d260309L,0x51b4981024e34184L,0x40938d0610610010L,0x492492495546d260L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L}; // 3 bits per value + + // state map + // 0 -> [(0, 0)] + // 1 -> [(0, 2)] + // 2 -> [(0, 1)] + // 3 -> [(0, 2), (1, 2)] + // 4 -> [(0, 1), (1, 1)] + // 5 -> [(0, 2), (2, 1)] + // 6 -> [(0, 1), (2, 2)] + // 7 -> [(0, 2), (1, 2), (2, 2)] + // 8 -> [(0, 1), (2, 1)] + // 9 -> [(0, 2), (2, 2)] + // 10 -> [(0, 1), (1, 1), (2, 1)] + // 11 -> [(0, 2), (1, 2), (2, 2), (3, 2)] + // 12 -> [(0, 2), (2, 1), (3, 1)] + // 13 -> [(0, 2), (3, 2)] + // 14 -> [(0, 2), (2, 2), (3, 2)] + // 15 -> [(0, 2), (1, 2), (3, 1)] + // 16 -> [(0, 2), (1, 2), (3, 2)] + // 17 -> [(0, 1), (2, 2), (3, 2)] + // 18 -> [(0, 2), (3, 1)] + // 19 -> [(0, 1), (3, 2)] + // 20 -> [(0, 1), (1, 1), (3, 2)] + // 21 -> [(0, 2), (2, 1), (4, 2)] + // 22 -> [(0, 2), (1, 2), (4, 2)] + // 23 -> [(0, 2), (1, 2), (3, 2), (4, 2)] + // 24 -> [(0, 2), (2, 2), (4, 2)] + // 25 -> [(0, 2), (2, 2), (3, 2), (4, 2)] + // 26 -> [(0, 2), (3, 2), (4, 2)] + // 27 -> [(0, 2), (1, 2), (2, 2), (3, 2), (4, 2)] + // 28 -> [(0, 2), (4, 2)] + // 29 -> [(0, 2), (1, 2), (2, 2), (4, 2)] + + private final static int[] stateSizes = new int[] {1,1,1,2,2,2,2,3,2,2,3,4,3,2,3,3,3,3,2,2,3,3,3,4,3,4,3,5,2,4}; + private final static int[] minErrors = new int[] {0,2,1,1,0,-1,0,0,-1,0,-1,-1,-2,-1,-1,-2,-1,-1,-2,-1,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2}; + private final int[] stateToAbs; + private final int[] absToState; + + public Lev2ParametricDescription(int w) { + super(w); + stateToAbs = new int[30]; + absToState = new int[(w+1)*80]; + int upto = 0; + for(int i=0;i state, offset + int state = absToState[absState]; + int offset = absState - stateToAbs[state]; + assert offset >= 0; + return w - offset + minErrors[state] <= 2; + } + + private final static long[] MASKS = new long[] {0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff,0x1ff,0x3ff,0x7ff,0xfff,0x1fff,0x3fff,0x7fff,0xffff,0x1ffff,0x3ffff,0x7ffff,0xfffff,0x1fffff,0x3fffff,0x7fffff,0xffffff,0x1ffffff,0x3ffffff,0x7ffffff,0xfffffff,0x1fffffff,0x3fffffff,0x7fffffffL,0xffffffffL,0x1ffffffffL,0x3ffffffffL,0x7ffffffffL,0xfffffffffL,0x1fffffffffL,0x3fffffffffL,0x7fffffffffL,0xffffffffffL,0x1ffffffffffL,0x3ffffffffffL,0x7ffffffffffL,0xfffffffffffL,0x1fffffffffffL,0x3fffffffffffL,0x7fffffffffffL,0xffffffffffffL,0x1ffffffffffffL,0x3ffffffffffffL,0x7ffffffffffffL,0xfffffffffffffL,0x1fffffffffffffL,0x3fffffffffffffL,0x7fffffffffffffL,0xffffffffffffffL,0x1ffffffffffffffL,0x3ffffffffffffffL,0x7ffffffffffffffL,0xfffffffffffffffL,0x1fffffffffffffffL,0x3fffffffffffffffL,0x7fffffffffffffffL}; + + private int unpack(long[] data, int index, int bitsPerValue) { + final long bitLoc = bitsPerValue * index; + final int dataLoc = (int) (bitLoc >> 6); + final int bitStart = (int) (bitLoc & 63); + //System.out.println("index=" + index + " dataLoc=" + dataLoc + " bitStart=" + bitStart + " bitsPerV=" + bitsPerValue); + if (bitStart + bitsPerValue <= 64) { + // not split + return (int) ((data[dataLoc] >> bitStart) & MASKS[bitsPerValue-1]); + } else { + // split + final int part = 64-bitStart; + return (int) (((data[dataLoc] >> bitStart) & MASKS[part-1]) + + ((data[1+dataLoc] & MASKS[bitsPerValue-part-1]) << part)); + } + } +} Property changes on: src/java/org/apache/lucene/util/automaton/Lev2ParametricDescription.java ___________________________________________________________________ Added: svn:eol-style + native Index: src/java/org/apache/lucene/util/automaton/Lev3ParametricDescription.java =================================================================== --- src/java/org/apache/lucene/util/automaton/Lev3ParametricDescription.java (revision 0) +++ src/java/org/apache/lucene/util/automaton/Lev3ParametricDescription.java (revision 0) @@ -0,0 +1,366 @@ +package org.apache.lucene.util.automaton; + +// The following code was generated with the moman/finenight pkg +// This package is available under the MIT License, see NOTICE +// for more details. + +import org.apache.lucene.util.automaton.LevenshteinAutomata.ParametricDescription; + +class Lev3ParametricDescription extends ParametricDescription { + + @Override + int transition(int absState, int position, int vector) { + + // decode absState -> state, offset + int state = absToState[absState]; + int offset = absState - stateToAbs[state]; + assert offset >= 0; + + // null state should never be passed in + assert state != -1; + if (position == w) { + if (state < 4) { + final int loc = vector * 4 + state; + offset += unpack(offsetIncrs0, loc, 1); + state = unpack(toStates0, loc, 3)-1; + } + } else if (position == w-1) { + if (state < 7) { + final int loc = vector * 7 + state; + offset += unpack(offsetIncrs1, loc, 1); + state = unpack(toStates1, loc, 3)-1; + } + } else if (position == w-2) { + if (state < 17) { + final int loc = vector * 17 + state; + offset += unpack(offsetIncrs2, loc, 2); + state = unpack(toStates2, loc, 5)-1; + } + } else if (position == w-3) { + if (state < 39) { + final int loc = vector * 39 + state; + offset += unpack(offsetIncrs3, loc, 2); + state = unpack(toStates3, loc, 6)-1; + } + } else if (position == w-4) { + if (state < 82) { + final int loc = vector * 82 + state; + offset += unpack(offsetIncrs4, loc, 3); + state = unpack(toStates4, loc, 7)-1; + } + } else if (position == w-5) { + if (state < 145) { + final int loc = vector * 145 + state; + offset += unpack(offsetIncrs5, loc, 3); + state = unpack(toStates5, loc, 8)-1; + } + } else if (position == w-6) { + if (state < 196) { + final int loc = vector * 196 + state; + offset += unpack(offsetIncrs6, loc, 3); + state = unpack(toStates6, loc, 8)-1; + } + } else { + if (state < 196) { + final int loc = vector * 196 + state; + offset += unpack(offsetIncrs7, loc, 3); + state = unpack(toStates7, loc, 8)-1; + } + } + + if (state == -1) { + // null state + return -1; + } else { + // translate back to abs + return stateToAbs[state] + offset; + } + } + + // 1 vectors; 4 states per vector; array length = 4 + private final static long[] toStates0 = new long[] {0x41c}; // 3 bits per value + private final static long[] offsetIncrs0 = new long[] {0x0}; // 1 bits per value + + // 2 vectors; 7 states per vector; array length = 14 + private final static long[] toStates1 = new long[] {0x2351a346a37L}; // 3 bits per value + private final static long[] offsetIncrs1 = new long[] {0x3f80}; // 1 bits per value + + // 4 vectors; 17 states per vector; array length = 68 + private final static long[] toStates2 = new long[] {0x828d6603408280c7L,0x350d6d022006a1aL,0x8831040a4356d1adL,0x8c82208862886418L,0x290c5118e6290620L,0x19c44}; // 5 bits per value + private final static long[] offsetIncrs2 = new long[] {0x82200000200000L,0x5555555555555550L,0x55}; // 2 bits per value + + // 8 vectors; 39 states per vector; array length = 312 + private final static long[] toStates3 = new long[] {0x674600d008140187L,0x932004c049349350L,0xcd18601c0060c00L,0x40067d47458144e0L,0x2182209670334021L,0x7030028080e00e18L,0x893803346080703L,0xca0cb34021051652L,0x2c029348b3467480L,0x60d30080c00932c3L,0xd74d80d2dd18a20L,0x964c62832cd0084L,0x280b19d0e6821752L,0x462880834c34c300L,0x10308135636048b7L,0x93091083420c40c2L,0xc24432c908324330L,0x3c424f4440880c90L,0x11030840c2044344L,0x4f44e3ce3cc2ca25L,0x2c32512510cb3c24L,0x110a10f3093d1102L,0x834218718510308L,0x2c91461431c93051L,0xd2070881890c2443L,0x440c20443443c414L,0x3ce34c2ca2481c61L,0x12510cb3c520d450L,0xf3053481c22c625L,0x10a1}; // 6 bits per value + private final static long[] offsetIncrs3 = new long[] {0xc200cc0000200000L,0x330cc00c30000000L,0x20880000030c3L,0xc220000008280cc2L,0x5500020e33308c00L,0x5555555555555555L,0x5555555555555555L,0x5555555555555555L,0x5555555555555555L,0x555555555555L}; // 2 bits per value + + // 16 vectors; 82 states per vector; array length = 1312 + private final static long[] toStates4 = new long[] {0x8600340080a00307L,0x1600244c9132818eL,0xa40060c002ac100L,0x562c96310d1c3080L,0x2e000030052c9d8L,0x2162c0c144060674L,0xc186800a2000858L,0x2164ca020618003L,0x818084b09855cb03L,0xa1800d00202800cfL,0x36000913244ca063L,0x1c106b810308c210L,0xde2d0611414f5c2cL,0xb81830c0e0d090L,0x858c1705840819dL,0xc3061a01b8b06218L,0xc085932808182000L,0xf060212c26117305L,0xb1c0648008280031L,0xd00342810a04408L,0xa419c0c002a010L,0x1462896310c48302L,0x8029060c10052c8bL,0x2102c0c504060c5L,0x3381890328080024L,0xe020a81102061818L,0x7c30084810055c80L,0x2c701920020a000cL,0x6620d0a04281102L,0x41c10ca410308c61L,0xaca2b5611414b5c1L,0x600a4306040e0d09L,0x88840c1714840831L,0xce06240d9050609L,0x52082a0440818206L,0x100c021204011731L,0x8e88062818b1a004L,0x60d500144c90b1a1L,0x806b00080c002ac1L,0xd8d631d53b102840L,0x741c20600303591dL,0x582d62a103458822L,0x9110205001a20008L,0x8402162c68b06181L,0x4018054a898584aL,0x63a2018a062c6801L,0x5117200513242c68L,0x2c8b0070810308c1L,0x911e2cf73205af84L,0x9d07088830c4584fL,0x180b58e610d542c8L,0x644408140238b062L,0x9840858b1a2c1820L,0x410060152a261213L,0x8b130c2818b1a00L,0x1618e834c8109d24L,0x206b01930c002a0L,0xcb0d624953b10284L,0x581ac0c0c103591L,0x2402d02a10345881L,0x31126205031a0800L,0x749820a7490b0618L,0x1040300547500584L,0x22c4c30a062c680L,0x5508760d32042749L,0x4148b00cb010308cL,0xf9b1e2cb73205af8L,0x41606b0406044584L,0x988b40e610d542cL,0xc44988140e38506L,0x3b580829d242c182L,0xc1010c0151d40121L,0x8206820610182080L,0x9040cc8318246090L,0x1130664182340ce9L,0x949042a94c953494L,0x2e3419e060c40332L,0x933208c99041011aL,0x81970408203084c1L,0xc6411840242182e6L,0x30404b833c6449d3L,0x2081a08184060820L,0x6cf17360c6091824L,0x3c80b9b2e78c172cL,0xa742952273690c27L,0xb8d0678b97105cdL,0xe4cd82326cf043c6L,0x8065c102080d2a02L,0xf1b3c610090860b9L,0xc1012e0cf191258L,0x182c509223018208L,0x8f04447911c3c70fL,0x10b0664889340ceL,0x2945042a30c95343L,0xa342819922445833L,0x18b1e08799041011L,0x688971208611082cL,0x3c3c4983a3c6182eL,0x30404d033c3c79dL,0xc60b142488c06082L,0xc54f1a2a4470f1c3L,0x33c74b9b3464c172L,0xda74c952233690c2L,0x60d0a0664d1a165cL,0x2e2ca821e6cf043cL,0x98225c482184529dL,0x8f153260e8f1860bL,0x80c101340cf0f1e5L,0x508206820c1c3050L,0xe990a18a030e2460L,0x1c1130c64182340cL,0x32949042a94a1226L,0x93383431e0c0c406L,0xc1933214c9404102L,0xe6831c0408383084L,0xd3c5011840142202L,0x2030404b83285049L,0x142081a083070c14L,0x2c6ca1c440c38918L,0x1f3c80e1b2e78c17L,0xda7429522744850L,0x880e0d0c78e17107L,0x2e4cd853288f042L,0xb980c701020e0d2aL,0x58f223c610050880L,0x80c1012e0ca1412L,0xd182c509101c305L,0xce8f0a20691203c7L,0x61c10b0c64889340L,0x632945042a30a122L,0x2932628319104458L,0x2c18b1e147940410L,0x2e6841c120839108L,0x9d3c344983a34620L,0x42030404d0328347L,0xc3460b14244070c1L,0x72c54a13244480f1L,0x1f3c74e1b3464c1L,0x70da74c952234485L,0x288098a0c6499a16L,0x9d2e2ca851e88f04L,0xb9810704820e452L,0xe58f123260e8d188L,0x340ca0d1}; // 7 bits per value + private final static long[] offsetIncrs4 = new long[] {0x8000000080000000L,0x1000000060200061L,0x820000038000L,0x200030044048c4L,0x2480400000200000L,0x245000000200a08L,0x4100002880000120L,0x80010011012L,0x186180c30000c06L,0x36006d8000000603L,0x48dc0030c300000L,0x180000180030046L,0xe06248030c0003L,0x11801b70000002L,0x1181247000c38c00L,0x80410000600100L,0x40240061808000L,0x24104120000L,0x30044028d2000082L,0x201040002000L,0x100908248020L,0x2880000090414480L,0x1001100a448000L,0x830000c04100008L,0xa000000403418618L,0x30c30000024104dL,0x180030046028d20L,0x48020c0003010400L,0x136800000100d062L,0x4800c38c00000904L,0x92496001001180a4L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x24924924}; // 3 bits per value + + // 32 vectors; 145 states per vector; array length = 4640 + private final static long[] toStates5 = new long[] {0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,0x64323b0531322c31L,0x672006f00000600L,0x5f085f5f06050808L,0x6060d0005130013L,0x1d13140506080006L,0x605f130d6f5f0605L,0x306060608000600L,0x60000080303L,0x1c030800130306L,0x50029082c002c06L,0x8080613030806L,0x1300060600031313L,0x606060600130600L,0x1306032c0800001dL,0xd00080500060708L,0x13121314061d0600L,0x52c08002c0012L,0x4706080029000606L,0x323b0531322c3106L,0x63035803031c0359L,0x847b7b6b76840b02L,0x6b9003762003207bL,0x5c8c04020b03026bL,0x7b5c0a587b6b0416L,0x6b06068400020366L,0x30600000b030303L,0x1c03080313030203L,0x329842c002c1c00L,0xb086b5c03086b05L,0x6b020003135c03L,0x606020020060320L,0x6032c0803031d02L,0x80500063e0813L,0x121314061d06000dL,0x430420330001213L,0x2e0b0341032e0203L,0x483745503045024fL,0x6f030306034150L,0x5f302e0542020672L,0xd00370b03133008L,0x1405060200060606L,0x13046f302e051d13L,0x20608000600605fL,0x2e0303020606032eL,0x302030b03060003L,0x414230003006031cL,0x80613030b060400L,0x2e06030613130302L,0x2e06001302000b00L,0x6304203001d0606L,0x80500063e021306L,0x1314061d06000d00L,0x3042033000121312L,0xb0341032e020304L,0x3745503045024f2eL,0x5806061c06615048L,0x886f766005026303L,0x3541d062088847bL,0x4020503026b6b90L,0x758886f04165c8cL,0x684000203667b5cL,0x303050606036f02L,0x2060b030203062eL,0x603000301c031c03L,0x6b5c030b6b040341L,0x20306135c060508L,0x2002002031d006fL,0x304206031d02062eL,0x1400061f02130606L,0x2202161c03120008L,0x803200321202120L,0x29031c06000520L,0x31222c3106120602L,0x303020064321614L,0x614080808160064L,0x140900095608565fL,0x60803061c061203L,0x6f561c050d202205L,0x80308006056200dL,0x30803030306061cL,0x9110603030600L,0x20002c0203091108L,0x2003020605002908L,0x1120200308081cL,0x309060309001c06L,0x800001608021c08L,0x61f0820061120L,0x2161c0312000814L,0x320032120212022L,0x29031c0600052008L,0x222c310612060200L,0x1109035932161431L,0x8c840b0b70035911L,0xf030f9184917b6bL,0xb11027c6b8d118cL,0x917c040a566a0402L,0x30b036691560a58L,0xb0303036b061c84L,0x911021111060003L,0x2c090309110803L,0x3026b0503298420L,0x112056110b087c56L,0xf06110f007c0200L,0x303160b021c0b03L,0x61f082006112008L,0x161c031200081400L,0x3103212021202202L,0x629020304314206L,0x3045024b2e050341L,0x20341504d324535L,0x4202081600640606L,0x309310856302e14L,0x3061c0612033205L,0x29050d2022050602L,0x800605620046f31L,0x606032e021c0803L,0x110603062e030602L,0x3002060911020305L,0x506040041423100L,0x20200602081c2003L,0x203050029060308L,0x16080229080309L,0x1f02200608314203L,0x1c03120008140006L,0x321202120220216L,0x2902030431420631L,0x45024b2e05034106L,0x661504d32453530L,0x50b700359080809L,0xf5b8491886f8c60L,0x27c6b8d116d0d06L,0x40a566a04020511L,0x366915607585b64L,0x6036f021c84030bL,0x211082e03060506L,0x906091102060511L,0x6b04034160310030L,0x560805087c560305L,0x110d006402030820L,0x160b02290b030f02L,0x220060831420603L,0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,0x5f473b0d31472a3bL,0x1a72036003000603L,0x5f0b5f69080d0b13L,0x8080a000d130013L,0x1d0b0d1d0608031aL,0x6969130d60690805L,0x170808080b000600L,0x303080003130317L,0x1c17080313031aL,0x5032c0b2c032a06L,0x80b080b030808L,0x1300080603171313L,0x1a06080603130600L,0xb08032a0b00001dL,0xa030b0d00081013L,0x13120b0d061d0803L,0x52c0b032a000aL,0xa0808032c000806L,0x473b0d31472a3b08L,0x63176617031c177bL,0x877b678490872018L,0x848903902003207bL,0x879016020b171884L,0x675c0a6667840416L,0x8408088700020367L,0x1708000320031717L,0x1c17081713031817L,0x172c872c032a1c00L,0xb0b848703088405L,0x84020317135c03L,0x608020320060320L,0x8032a0b03031d18L,0x30b0d000810130bL,0x120b0d061d08030aL,0x4302a1139000a13L,0x420b113003420203L,0x4847454f39480b2fL,0x36011030611304fL,0x5f39420d2a0b1a72L,0xa00470b0313300bL,0xd1d0602031a0808L,0x1304603942051d0bL,0xb080b0006006969L,0x4203110b061a1742L,0x1702110b031a0311L,0x302a30033906031cL,0xb080b030b080403L,0x4206111a13130302L,0x4206031302000b00L,0x6392a03001d1a06L,0xb0d0008100b0b08L,0xb0d061d08030a03L,0x302a1139000a1312L,0xb11300342020304L,0x47454f39480b2f42L,0x661a061c1a884f48L,0x836090691d186317L,0x3741d062088877bL,0x1602051718848489L,0x766836004168790L,0x88700020367675cL,0x3111d061a17600bL,0x21a0b0318171a42L,0x693003391c031c17L,0x8487030b84041730L,0x2111a135c06050bL,0x2032002031d0060L,0x392a06031d180642L,0xd0008100b0b0806L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306000520L,0x31122a3b080a0802L,0x60302035f47160dL,0x80d0b131316035fL,0xd090009560b5669L,0x608061a13080a03L,0x607213050d1d121dL,0xb0308006972200dL,0x613031717080813L,0x309111a06060800L,0x20032a0203091c08L,0x1d03020805032c0bL,0x31c202003080b13L,0x609060309001306L,0xb00001613021308L,0x810131d08111dL,0x21613060a030b0dL,0x61d032620211d12L,0x2c0313060005200bL,0x122a3b080a080203L,0x1109177b47160d31L,0x9087202070177b1cL,0xf030f9187916784L,0xb1c185c84891190L,0x635c040a728d1602L,0x30b036763560a66L,0x2003171784081387L,0x911181c1c080006L,0x32a0903091c0817L,0x3028405172c8720L,0x1c2056110b0b5c72L,0xf06110f005c0203L,0x303162002130b06L,0x810131d08111d0bL,0x1613060a030b0d00L,0x3b032620211d1202L,0x62c020304312a08L,0x39480b2f42051130L,0x211304f4d47454bL,0x2a0b1316035f0806L,0x309310b5639420dL,0x61a13080a034705L,0x2c050d1d121d0602L,0x80069722004603bL,0x61a17420b130b03L,0x111a06084203080bL,0x390206091c021105L,0x5080403302a3103L,0x202006020b131d03L,0x20305002c061113L,0x1613022c080609L,0x100b1d08083b2a03L,0x13060a030b0d0008L,0x32620211d120216L,0x2c020304312a083bL,0x480b2f4205113006L,0x1a884f4d47454b39L,0x1d2070177b130809L,0xf5b879183609069L,0x185c848911740d06L,0x40a728d1602051cL,0x36763560766805fL,0x1a17600b1387030bL,0x181c134203081d06L,0x906091c021a0511L,0x8404173069310339L,0x5608050b5c720305L,0x110d005f02111320L,0x1620022c0b060f02L,0xb1d08083b2a0603L,0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,0x4a25120415251915L,0x3a47033403030803L,0x4a024a4a0204022bL,0x2020403042c032cL,0x310904433a2b033aL,0x344a093b344a0243L,0x51021a0202033a03L,0x3030203032b5151L,0x342512b032c513aL,0x1d03190219031908L,0x32b020209511302L,0x2c03023a03510909L,0x3a08023a032c1a03L,0x90251190203030dL,0x40302040302012bL,0x90c0904080d0203L,0x31d19020319030cL,0x250213031903021aL,0x251204152519151aL,0x4f514c515142512dL,0x3f2d2d3f333f5244L,0x3f3351333051302dL,0x403349445251443fL,0x2d40484c2d3f4945L,0x3f1a023f0344514cL,0x5102030352515151L,0x42512b512c514451L,0x51193f1903194203L,0x52023f4051133f1dL,0x33f440351094051L,0x8024403301a5130L,0x251190251510d44L,0x302040302012b09L,0xc0904080d020304L,0x161b1e171b030c09L,0x1e20171b171e1817L,0x212524271b241827L,0x334171708171b27L,0x4a1b1e041e183a47L,0x4032520172c1b02L,0x4433a18033a0202L,0x916341b1e433109L,0x180202033a03344aL,0x1e1717183a3a511eL,0x51181720513a0317L,0x1b1e1b031b081742L,0x202095120021603L,0x1e3a173a09091718L,0x1e3a032c18032003L,0x3a1b1e17030d3a08L,0x204030201180902L,0x904080d02030403L,0x1b1e171b030c090cL,0x20171b171e181716L,0x2524271b2418271eL,0x4c3a3a423a282721L,0x2834333443444f51L,0x513c313a30283f2dL,0x49444351443f3f33L,0x4d4c283449454033L,0x23f0344514c2d40L,0x1717433a3a513418L,0x183a205144513a1eL,0x341b031b42174251L,0x3f4051203f16511bL,0x44173a09403a4302L,0x4403301851310334L,0x1b1e3a510d44081eL,0x40302011809023aL,0xc0b0a09110c0302L,0x2110f110e0f0e0fL,0x31911091a031d0fL,0x150c19151a0c020bL,0x11110b034a250a04L,0x204022b2b0a034aL,0x42a032a4e024e4aL,0x3a2b113a09020c11L,0x344e09433b0f0c43L,0x2112b03344e0f3bL,0x112b515151021a09L,0x32a3d3a11110203L,0xf03190b112a3d2bL,0xf510b021d031902L,0x33d0f0f112b0209L,0x112a1a112a03093aL,0x203030a2b0b092bL,0x302012b0f023d0fL,0xb0a09110c030204L,0x110f110e0f0e0f0cL,0x1911091a031d0f02L,0xc19151a0c020b03L,0x3d2a512d250a0415L,0x333f52522f512d3dL,0x395139363f362d3fL,0x523d44403f463d33L,0x364049484e464944L,0x1152514c364e484cL,0x525151513f1a093fL,0x2a3d443d3d020311L,0x3192a112a3d2b51L,0x510b3f1d51193f0fL,0x3d0f4e3d5202404eL,0x391a3d3903404403L,0x51510a520b095211L,0x2012b0f023d0f02L,0xa09110c03020403L,0x15110e0f0e0f0c0bL,0x1a19181716151e1aL,0x1b2418231e1d171bL,0xb171b2726252423L,0x1e182b0a034a1a1aL,0x172a15024e1b1e04L,0x113a09020c11251dL,0x19433b0f0c433a18L,0x2b03344e0f163415L,0x3a3a511e18090211L,0x3d3a111a1e171a18L,0x1b0b1a2a3d18171dL,0x1d0216031b1e1503L,0xf0f1a1802090f51L,0x18111d03193a172bL,0x30a2b0b192b112aL,0x1180f022b151e17L,0x9110c0302040302L,0x110e0f0e0f0c0b0aL,0x19181716151e1a15L,0x2418231e1d171b1aL,0x3a2827262524231bL,0x43522f512d2b2b2aL,0x39383f3628343334L,0x44403f463d3c3b3aL,0x49484e464944433dL,0x514c364e4d4c384aL,0x3a513418093f1152L,0x443d2b1e171a433aL,0x2a1a2a3d183a1d3dL,0x3f16511b3415031bL,0x4e2b4302404e511dL,0x3d3b034a44172b0fL,0xa520b1952113918L,0x180f022b151e3a51L,0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,0x4a25120415251412L,0x2947063406030806L,0x4a054a320204052cL,0x2020703042c032cL,0x310504313a2b0629L,0x3232093b34320243L,0x2e02130205033a03L,0x6060203062c512eL,0x3422e2b062c5129L,0x1d06190519061408L,0x32b050205511302L,0x2c03023a062e0909L,0x2908023a062c1a03L,0x50251140503030dL,0x70605040302012cL,0x90c0504080d0206L,0x31d190506140307L,0x70213061903021aL,0x2512041525141213L,0x4f2e4c2e51422e2dL,0x372d503f33373041L,0x3f3e51333051302dL,0x37334544522e413fL,0x5040484c503f4945L,0x3f13023703445150L,0x2e02030630512e2eL,0x422e2b2e2c51412eL,0x2e19371906144203L,0x52053f3751133f1dL,0x33f44062e094051L,0x8024406301a5130L,0x251140551510d41L,0x605040302012c05L,0xc0504080d020607L,0x161b141c22030709L,0x1e201c1b171e1817L,0x212524272221201fL,0x6341c17081c1b27L,0x4a221e0414202947L,0x7032520172c1b05L,0x4313a1806290202L,0x91634221e433105L,0x200205033a033232L,0x1e171c203a292e1eL,0x2e181c205129061cL,0x1b141b0622081742L,0x502055120021606L,0x1e3a1c2909091718L,0x1e3a062c18032003L,0x3a221417030d2908L,0x504030201200502L,0x504080d02060706L,0x1b141c220307090cL,0x201c1b171e181716L,0x2524272221201f1eL,0x4c293a4229282721L,0x3534333231414f2eL,0x513c313a3028372dL,0x4544432e413f3f3eL,0x4d4c353449453733L,0x237034451505040L,0x171c313a292e3420L,0x18292051412e291eL,0x321b06224217422eL,0x3f3751203f162e1bL,0x441c2909403a4305L,0x4406301851310334L,0x22143a510d41081eL,0x40302012005023aL,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,0x150c14121307020bL,0x8110b064a250a04L,0x204052c2c0a064aL,0x42a032a4e054e32L,0x3a2b082909020711L,0x344709433b0d0c31L,0x5112b0332470f3bL,0x82c512e2e021309L,0x62a3d2908080203L,0xf06140b112a422bL,0xd510b021d061905L,0x6420f0f112b0509L,0x82a1a112a03093aL,0x503030a2c0b092bL,0x302012c0d023d0dL,0xb0a090807060504L,0x80d11100f0e0d0cL,0x1911091a031d0f05L,0xc14121307020b06L,0x3d2a2e2d250a0415L,0x333730302f2e2d42L,0x395139363736503fL,0x524241403f3e3d33L,0x4f40494847464544L,0x115251504f4e484cL,0x30512e2e3f130937L,0x2a3d414242020308L,0x6142a112a422b2eL,0x510b3f1d2e19370fL,0x420f4e3d52054047L,0x391a3d3903404406L,0x51510a300b095208L,0x2012c0d023d0d05L,0xa09080706050403L,0x1211100f0e0d0c0bL,0x1a19181716151413L,0x2221201f1e1d1c1bL,0xb1c1b2726252423L,0x14202c0a064a131aL,0x172a15054e221e04L,0x82909020711251dL,0x19433b0d0c313a18L,0x2b0332470f163412L,0x3a292e1e20090511L,0x3d2908131e171320L,0x220b1a2a42181c1dL,0x1d0216061b141506L,0xf0f1a1805090d51L,0x18111d03193a1c2cL,0x30a2c0b192b082aL,0x1200d022b121417L,0x908070605040302L,0x11100f0e0d0c0b0aL,0x1918171615141312L,0x21201f1e1d1c1b1aL,0x2928272625242322L,0x31302f2e2d2c2b2aL,0x3938373635343332L,0x41403f3e3d3c3b3aL,0x4948474645444342L,0x51504f4e4d4c4b4aL,0x292e342009371152L,0x41422c1e1713313aL,0x2a1a2a4218291d3dL,0x3f162e1b32150622L,0x4e2b43054047511dL,0x3d3b034a441c2c0fL,0xa300b1952083918L,0x200d022b12143a51L}; // 8 bits per value + private final static long[] offsetIncrs5 = new long[] {0x8000000080000000L,0x1000000060200061L,0x820000038000L,0x80200030044048c4L,0x20ab0ac0000eda1L,0x4041400c01506000L,0x3028000884098L,0x30c000000040000L,0x145aa80000030100L,0xd76802855000001dL,0x6d0c016801802a02L,0xa0001055d56da007L,0x84ea028a05600a83L,0x18140b4542L,0xa08248040000020L,0x120024500000020L,0x1012410000288000L,0x1249288008001001L,0x54200000a2b22b04L,0x2210281012402400L,0x100000001008040L,0x100504124020000L,0x94512280000L,0x800a80b65a00a144L,0x5b60924944005a00L,0x2002a12800051591L,0x25150a14a80b201L,0x30000c0600000804L,0x6030186180cL,0xc30000036006d80L,0x80030046048dc003L,0xdb0dc6c06eda180dL,0xc06c01586000036L,0x30180006c36db604L,0xc061800060300000L,0x6e80000030180c30L,0x801875800001b143L,0xc06e801802b02d6eL,0x1b6dd6eb60376d0L,0xb028603600ac3a00L,0x180c0b4361b6dL,0x6248030c00030180L,0x801b7000000200e0L,0x247000c38c000011L,0x9288036001001181L,0xdb72371b11cL,0xdb8d812301c00562L,0xc000010060401b0L,0x703124018600018L,0x8c50db80000010L,0xac0b63a0061c6000L,0x88e494401ba00800L,0x2b1280006db91badL,0xd86dc6c0b180e00L,0x80410000803025L,0x40240061808000L,0x24104120000L,0x30044028d2000082L,0xaa4804aa41002000L,0xc01506800820934L,0x8000484498404480L,0x40208000202L,0x20120030c04L,0x8550000012082a90L,0x6801802a01569002L,0x49a5524025520801L,0xa405600a83400410L,0x10140b4242a4ea02L,0x8020000020104000L,0x4480000010090824L,0x8000288000009041L,0x4008001001100a44L,0x20a2512a92112890L,0x1011202400542200L,0x808040121128L,0x4124010000010082L,0x820a240000008048L,0x562400a144000004L,0x4482005a00800a80L,0x1001051289549089L,0xa94a80a9012002a1L,0x410000404025090L,0x34186180830000cL,0x24104da0000004L,0x46028d20030c3000L,0x804aa4100d800300L,0x1586800836d34da4L,0x4c34db6044806c0L,0x60208000201800L,0x201a0c30c04180L,0x80000120826d0000L,0x1802b01569001875L,0x6d24025520806e80L,0x3600ac340041b69aL,0xc0b4261a6db02a40L,0xc00030104000100L,0x100d0624802L,0xc38c000009041368L,0x6001001180a44800L,0xb513692112890403L,0x1201c0056220020dL,0x806040130d38d81L,0x4010600018082000L,0x9b40000008068312L,0x40061c6000004820L,0x201ba00800ac0562L,0x106da89b49089448L,0x6c0a900e002b1100L,0x924940302509869cL,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x24924924}; // 3 bits per value + + // 64 vectors; 196 states per vector; array length = 12544 + private final static long[] toStates6 = new long[] {0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,0x64323b0531322c31L,0x672006f00000600L,0x5f085f5f06050808L,0x6060d0005130013L,0x1d13140506080006L,0x605f130d6f5f0605L,0x606060608000600L,0x60000130606L,0x290613002c0608L,0x140029082c002c06L,0x13080613060806L,0x2c00060800061313L,0x8060608002c0600L,0x1306062c0800001dL,0x600000000060813L,0x80000,0x806000600000600L,0x6061300000500L,0x1300000000L,0x6000600080000L,0x500060706060600L,0x14061d06000d0008L,0x8002c0012131213L,0x2900060600052cL,0x31322c3106470608L,0x60064323b05L,0x60508080672006fL,0x51300135f085f5fL,0x608000606060d00L,0x6f5f06051d131405L,0xac030600605f130dL,0x320020202c01cc0L,0x330020b0303c003L,0xbe03be2e03410220L,0x990242c02203b7acL,0x30299990320acc0L,0x3301c033003c00bL,0xac03039b0b2ec00bL,0x306422099c002beL,0x800002e030000L,0x3001c0003030303L,0x3050308060306L,0x303030300061c13L,0x308000003000013L,0x60606000006002eL,0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,0x59323b0531322c31L,0x263035803031c03L,0x7b847b7b6b76840bL,0x6b6b900376200320L,0x165c8c04020b0302L,0x667b5c0a587b6b04L,0x66b060684000203L,0x3030600000b0606L,0x290613032c0602L,0x140329842c002c1cL,0x30b086b5c06086bL,0x20006b020006135cL,0x206060200200603L,0x1306062c0803031dL,0x600030300020813L,0x300030300080000L,0xb06030203030600L,0x31c062000000500L,0x303002003030000L,0x2031c000b0300L,0x500060706020603L,0x14061d06000d0008L,0x8002c0012131213L,0x2900060600052cL,0x31322c3106470608L,0x3031c0359323b05L,0x6b76840b02630358L,0x762003207b847b7bL,0x20b03026b6b9003L,0x587b6b04165c8c04L,0xa9030203667b5c0aL,0x31d020202ab1cc0L,0x63002050606c003L,0xbe03be2903410220L,0x970242ab2206b7a9L,0x3029997061dacabL,0x3311c063103ab05L,0xac06069b052ec005L,0x302422099c002beL,0x800002e030303L,0x6031c0006030606L,0x305030b060602L,0x6060303031c1c20L,0x30b030006030020L,0x602060300020329L,0xd00080500063eL,0x1213121314061d06L,0x203043042033000L,0x24f2e0b0341032eL,0x4150483745503045L,0x672006f03030603L,0x30085f302e054202L,0x6060d00370b0313L,0x1d13140506020006L,0x605f13046f302e05L,0x62e020608000600L,0x32e0303090808L,0x3290609032a0608L,0x400414230003006L,0x309080613060b06L,0x2a002e0803081313L,0x8062e08002c0200L,0x130608304203001dL,0x603000303060b09L,0x303030b0003L,0x202000603030203L,0x6021300000400L,0x3000b00030303L,0x6030600020003L,0x500063e02060600L,0x14061d06000d0008L,0x4203300012131213L,0x341032e02030430L,0x45503045024f2e0bL,0x303060341504837L,0x2e0542020672006fL,0x370b031330085f30L,0x602000606060d00L,0x6f302e051d131405L,0xac030600605f1304L,0x110f0b0b02ba09c0L,0x1139020b0311ba11L,0xbf03bf2e1141020fL,0x99022ac00c03a5b0L,0x110b9999110facc0L,0x33009033903ba0bL,0xb011039b0b2eba0bL,0x11062a0f99c00bbfL,0x30b00032e110003L,0x1103090303031111L,0x3040302020306L,0x311111100060913L,0x30200030303000bL,0x20606000006032eL,0xd00080500063eL,0x1213121314061d06L,0x203043042033000L,0x24f2e0b0341032eL,0x6150483745503045L,0x263035806061c06L,0x88847b886f766005L,0x6b6b9003541d0620L,0x165c8c0402050302L,0x667b5c0758886f04L,0x66f020684000203L,0x3062e0303050808L,0x3290609062a0602L,0x40341603000301cL,0x605086b5c060b6bL,0x1d006f020308135cL,0x2062e0200200203L,0x130608304206031dL,0x603030603020b09L,0x3000606030b0003L,0x502030206060203L,0x31c022000000400L,0x306001d03060303L,0x2061c00050303L,0x500063e02020603L,0x14061d06000d0008L,0x4203300012131213L,0x341032e02030430L,0x45503045024f2e0bL,0x6061c0661504837L,0x6f76600502630358L,0x541d062088847b88L,0x20503026b6b9003L,0x58886f04165c8c04L,0xa9030203667b5c07L,0x110d0b0b02a009c0L,0x83902050608ba11L,0xbf03bf291141020fL,0x97022aab0c06a5a6L,0x110b9997080dacabL,0x33109063b03a005L,0xb008069b052eba05L,0x11022a0f99c00bbfL,0x30b00032e110306L,0x806090306030808L,0x3040305020602L,0x6081111031c0920L,0x30503030606001dL,0x202060300020629L,0x31200081400061fL,0x212021202202161cL,0x600052008032003L,0x61206020029031cL,0x6432161431222c31L,0x816006403030200L,0x5608565f06140808L,0x1c06120314090009L,0xd20220506080306L,0x6056200d6f561c05L,0x606061c08030800L,0x303060003130606L,0x3191a1300191a08L,0x1400290820002c02L,0x313081c20060206L,0x19001c08001a2020L,0x13021c1303190603L,0x20061a2008000016L,0x203000303080213L,0x300020303L,0x806030603000600L,0x302060903000503L,0x300000900000000L,0x8030203080003L,0x1400061f06060203L,0x2202161c03120008L,0x803200321202120L,0x29031c06000520L,0x31222c3106120602L,0x303020064321614L,0x614080808160064L,0x140900095608565fL,0x60803061c061203L,0x6f561c050d202205L,0xac1708006056200dL,0x1720020202c01c9cL,0x31b180b1717c003L,0xc403be1e171b1820L,0xc4021ec02203b7acL,0x318c4c41720ac9cL,0x171b1c171b039c0bL,0xac0303aa201e9c20L,0x17081e20c4c018c4L,0x203031e170003L,0x17001c0003030317L,0x303051708061706L,0x303030303021c09L,0x1708000317000009L,0x60602030008031eL,0x31200081400061fL,0x212021202202161cL,0x600052008032003L,0x61206020029031cL,0x5932161431222c31L,0xb70035911110903L,0x9184917b6b8c840bL,0x7c6b8d118c0f030fL,0xa566a04020b1102L,0x6691560a58917c04L,0x66b061c84030b03L,0x11110600030b0606L,0x3191a1303191a02L,0x1403298420002c09L,0x110b087c5606026bL,0xf007c02001a2056L,0xb021c0b030f0611L,0x20061a2008030316L,0x2030311030b0213L,0x300031100020303L,0xb06110211030600L,0x1109060f03000503L,0x1103000f03030000L,0xb1109030b0303L,0x1400061f06020211L,0x2202161c03120008L,0x803200321202120L,0x29031c06000520L,0x31222c3106120602L,0x1111090359321614L,0x6b8c840b0b700359L,0x8c0f030f9184917bL,0x20b11027c6b8d11L,0x58917c040a566a04L,0xa9170b036691560aL,0x171d020202ab1c9cL,0x61b18051a1ac003L,0xc403be19171b1820L,0xae021eab2206b7a9L,0x318c4ae1a1dacb1L,0x17151c1a1503b105L,0xac0606aa1d1e9c1dL,0x170b1e20c4c018c4L,0x203031e170311L,0x1a031c000603061aL,0x30305170b061a02L,0x606030311091c0fL,0x170b03031a03000fL,0x6020211000b1119L,0x31200081400061fL,0x212021202202161cL,0x203043142063103L,0x24b2e0503410629L,0x41504d3245353045L,0x816006406060203L,0x310856302e144202L,0x1c06120332050309L,0xd20220506020306L,0x605620046f312905L,0x62e021c08030800L,0x3062e0306090808L,0x6191a0903141a08L,0x400414231003002L,0x609081c20060506L,0x1400290803132020L,0x1302291303190203L,0x2006133142030016L,0x206000606080509L,0x30603050306L,0x202030606030203L,0x302020903000403L,0x303000500030303L,0x8060203020006L,0x1400061f02060203L,0x2202161c03120008L,0x4206310321202120L,0x341062902030431L,0x45353045024b2e05L,0x606020341504d32L,0x2e14420208160064L,0x3205030931085630L,0x60203061c061203L,0x6f3129050d202205L,0xac17080060562004L,0x1c0f0b0b02ba099cL,0x1122180b171cba11L,0xbb03bf1e1c1b180fL,0xc40214c00c03a5b0L,0x1120c4c41c0fac9cL,0x171b09172203b70bL,0xb01103aa201eb720L,0x1c08140fc4c020bbL,0x30503061e1c0006L,0x1c0309030303111cL,0x303041702021706L,0x311111103020909L,0x1702000617030005L,0x20602030008061eL,0x31200081400061fL,0x212021202202161cL,0x203043142063103L,0x24b2e0503410629L,0x61504d3245353045L,0xb70035908080906L,0x5b8491886f8c6005L,0x7c6b8d116d0d060fL,0xa566a0402051102L,0x66915607585b6404L,0x66f021c84030b03L,0x11082e0306050808L,0x6191a0906141a02L,0x403416031003009L,0x805087c5606056bL,0xd00640203132056L,0xb02290b030f0211L,0x2006133142060316L,0x2060308060b0509L,0x300060803050306L,0x502110208060203L,0x1109020f03000403L,0x1106000d03060303L,0xb080903050306L,0x1400061f02020211L,0x2202161c03120008L,0x4206310321202120L,0x341062902030431L,0x45353045024b2e05L,0x808090661504d32L,0x6f8c60050b700359L,0x6d0d060f5b849188L,0x20511027c6b8d11L,0x585b64040a566a04L,0xa9170b0366915607L,0x1c0d0b0b02a0099cL,0x82218051a13ba11L,0xbb03bf191c1b180fL,0xae0214ab0c06a5a6L,0x1120c4ae130dacb1L,0x1715091a12039e05L,0xb00806aa1d1eb71dL,0x1c0b140fc4c020bbL,0x30503061e1c0308L,0x1306090306030813L,0x303041705021a02L,0x60811111109090fL,0x170503061a06000dL,0x2020211000b0819L,0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,0x5f473b0d31472a3bL,0x1a72036003000603L,0x5f0b5f69080d0b13L,0x8080a000d130013L,0x1d0b0d1d0608031aL,0x6969130d60690805L,0x3a0808080b000600L,0x3030800032c063aL,0x293a13032c062bL,0x14032c0b2c032a06L,0x130b080b060808L,0x2c000808033a1313L,0x2b060808032c0600L,0xb08062a0b00001dL,0x60300000006082cL,0x300030003080003L,0x806031a03000600L,0x306081303030503L,0x3001300000003L,0x31a030600130300L,0xd00081008060600L,0xd061d08030a030bL,0xb032a000a13120bL,0x32c00080600052cL,0x31472a3b080a0808L,0x30006035f473b0dL,0x80d0b131a720360L,0xd1300135f0b5f69L,0x608031a08080a00L,0x606908051d0b0d1dL,0xc20306006969130dL,0x5130024444ac42acL,0x513002525151ac03L,0xbe51af2e03414420L,0xc20242ac2251bec2L,0x514499990320c2acL,0x51301c033003ac0bL,0xc203039b522eac0bL,0x3064230c2ac02afL,0x30800032e510000L,0x51001c0051035103L,0x35105510806511aL,0x303035103064213L,0x313030003030013L,0x8060600031a032eL,0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,0x7b473b0d31472a3bL,0x1863176617031c17L,0x7b877b6784908720L,0x8484890390200320L,0x16879016020b1718L,0x67675c0a66678404L,0x3a84080887000203L,0x171708000320063aL,0x293a13172c0618L,0x14172c872c032a1cL,0x30b0b8487060884L,0x20008402033a135cL,0x1806080203200603L,0xb08062a0b03031dL,0x60303030002082cL,0x1700170303080003L,0xb06171817030600L,0x171c082003030503L,0x317002003030003L,0x318171c00201700L,0xd00081008020603L,0xd061d08030a030bL,0xb032a000a13120bL,0x32c00080600052cL,0x31472a3b080a0808L,0x17031c177b473b0dL,0x8490872018631766L,0x902003207b877b67L,0x20b171884848903L,0x6667840416879016L,0x9803020367675c0aL,0x5131024444a942acL,0x3a3002433a3aac03L,0xbe51af2903414420L,0x980242a9223abe98L,0x51449997061dc2a9L,0x51311c063103a905L,0xc206069b432eac05L,0x3024230c2ac02afL,0x30800032e510303L,0x3a031c003a033a06L,0x35105510b063a18L,0x6060351171c4220L,0x320170006170020L,0x802060303181729L,0x30a030b0d000810L,0xa13120b0d061d08L,0x20304302a113900L,0xb2f420b11300342L,0x304f4847454f3948L,0x1a72036011030611L,0x300b5f39420d2a0bL,0x8080a00470b0313L,0x1d0b0d1d0602031aL,0x6969130460394205L,0x3a420b080b000600L,0x3114203112a082bL,0x3293a09112a062bL,0x403302a30033906L,0x3090b080b060b08L,0x2a004208112b1313L,0x2b064208032c0200L,0xb0808392a03001dL,0x611000303060b2aL,0x3001103110b0011L,0x202031a11030203L,0x3060b1303030403L,0x11000b00030311L,0x31a1106000b0303L,0xd0008100b060600L,0xd061d08030a030bL,0x2a1139000a13120bL,0x1130034202030430L,0x454f39480b2f420bL,0x11030611304f4847L,0x420d2a0b1a720360L,0x470b0313300b5f39L,0x602031a08080a00L,0x603942051d0b0d1dL,0xc203060069691304L,0x3d390b5244b02aacL,0x3d390252513db011L,0xbf51ad2e1141440fL,0xc2022aac0c51bfafL,0x3d529999110fc2acL,0x513009033903b00bL,0xaf11039b522eb00bL,0x11062a39c2ac0badL,0x110b00112e3d0003L,0x3d03090351033d11L,0x35104510202511aL,0x311113d03062a13L,0x30b03030311000bL,0xb060600031a112eL,0x30a030b0d000810L,0xa13120b0d061d08L,0x20304302a113900L,0xb2f420b11300342L,0x884f4847454f3948L,0x186317661a061c1aL,0x88877b836090691dL,0x84848903741d0620L,0x1687901602051718L,0x67675c0766836004L,0x3a600b0887000203L,0x171a4203111d082bL,0x3293a091a2a0618L,0x41730693003391cL,0x6050b8487060b84L,0x1d006002112b135cL,0x1806420203200203L,0xb0808392a06031dL,0x611030603020b2aL,0x17001a06110b0011L,0x50217181a060203L,0x171c0b2003030403L,0x31a001d03060311L,0x3181a1c001d1703L,0xd0008100b020603L,0xd061d08030a030bL,0x2a1139000a13120bL,0x1130034202030430L,0x454f39480b2f420bL,0x1a061c1a884f4847L,0x6090691d18631766L,0x741d062088877b83L,0x205171884848903L,0x6683600416879016L,0x9803020367675c07L,0x3d3b0b5244a62aacL,0x2b3902433a2bb011L,0xbf51ad291141440fL,0x98022aa90c3abfbdL,0x3d529997080dc2a9L,0x513109063b03a605L,0xaf08069b432eb005L,0x11022a39c2ac0badL,0x110b00112e3d0306L,0x2b0609033a032b08L,0x351045105023a18L,0x608113d171c2a20L,0x31d1703061a001dL,0xb02060303181a29L,0x60a030b0d000810L,0x2620211d12021613L,0x60005200b061d03L,0x80a0802032c0313L,0x5f47160d31122a3bL,0x1316035f06030203L,0x560b5669080d0b13L,0x13080a030d090009L,0xd1d121d0608061aL,0x6972200d60721305L,0x3a0808130b030800L,0x6060800062c063aL,0x319291303191a2bL,0x14032c0b20032a02L,0x3130b131d060208L,0x1900130803292020L,0x2c02131306190603L,0x1d081a1d0b000016L,0x20600030308022cL,0x300030303020306L,0x806061a06000600L,0x602080906030506L,0x303000900000003L,0x313060203130303L,0xd00081008060203L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306000520L,0x31122a3b080a0802L,0x60302035f47160dL,0x80d0b131316035fL,0xd090009560b5669L,0x608061a13080a03L,0x607213050d1d121dL,0xc21708006972200dL,0x2e30024444ac4299L,0x511b18522e2eac03L,0xc451af1e171b4120L,0x9b021eac2251bec2L,0x5141c4c41720c299L,0x2e1b1c171b03990bL,0xc20303aa301e9920L,0x17081e309bac189bL,0x30203061e2e0003L,0x2e001c0051035117L,0x651052e08062e1aL,0x303035106024209L,0x1713030317030009L,0x80602030313061eL,0x60a030b0d000810L,0x2620211d12021613L,0x60005200b061d03L,0x80a0802032c0313L,0x7b47160d31122a3bL,0x2070177b1c110917L,0x9187916784908720L,0x5c848911900f030fL,0xa728d16020b1c18L,0x6763560a66635c04L,0x3a84081387030b03L,0x1c1c08000620063aL,0x319291317191a18L,0x14172c8720032a09L,0x110b0b5c72060284L,0xf005c0203292056L,0x2002130b060f0611L,0x1d081a1d0b030316L,0x2060311030b022cL,0x1700171103020306L,0xb061c181c030600L,0x1c09080f06030506L,0x1117000f03030003L,0x3201c0903201703L,0xd00081008020211L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306000520L,0x31122a3b080a0802L,0x1c1109177b47160dL,0x849087202070177bL,0x900f030f91879167L,0x20b1c185c848911L,0x66635c040a728d16L,0x98170b036763560aL,0x2e31024444a94299L,0x3a1b18432929ac03L,0xc451af19171b4120L,0x92021ea9223abe98L,0x5141c4ae1a1dc297L,0x2e151c1a15039705L,0xc20606aa311e991dL,0x170b1e309bac189bL,0x30203061e2e0311L,0x29031c003a033a1aL,0x651052e0b062918L,0x60603511c09420fL,0x172017031a17000fL,0x802021103201c19L,0x60a030b0d000810L,0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,0x304f4d47454b3948L,0x1316035f08060211L,0x310b5639420d2a0bL,0x13080a0347050309L,0xd1d121d0602061aL,0x69722004603b2c05L,0x3a420b130b030800L,0x6084203082a082bL,0x619290911141a2bL,0x403302a31033902L,0x6090b131d060508L,0x14002c08112c2020L,0x2c022c1306190203L,0x1d08133b2a030016L,0x20800060608052aL,0x300110611050308L,0x202061a08030203L,0x6020b0906030406L,0x311000500030311L,0x3130802030b0306L,0xd0008100b060203L,0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,0x8060211304f4d47L,0x420d2a0b1316035fL,0x47050309310b5639L,0x602061a13080a03L,0x603b2c050d1d121dL,0xc217080069722004L,0x42390b5244b02a99L,0x3d2218522e42b011L,0xbb51ad1e1c1b410fL,0x9b0214ac0c51bfafL,0x3d30c4c41c0fc299L,0x2e1b09172203be0bL,0xaf1103aa301ebe20L,0x1c0814399bac20b5L,0x110503081e420006L,0x4203090351033d1cL,0x651042e02022e1aL,0x311113d06022a09L,0x170b030617110005L,0xb0602030313081eL,0x60a030b0d000810L,0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,0x884f4d47454b3948L,0x2070177b1308091aL,0x5b8791836090691dL,0x5c848911740d060fL,0xa728d1602051c18L,0x6763560766805f04L,0x3a600b1387030b03L,0x1c134203081d082bL,0x61929091a141a18L,0x417306931033909L,0x8050b5c72060584L,0xd005f02112c2056L,0x20022c0b060f0211L,0x1d08133b2a060316L,0x2080308060b052aL,0x17001a0811050308L,0x5021c1813060203L,0x1c090b0f06030406L,0x111a000d03060311L,0x3201309031d1706L,0xd0008100b020211L,0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,0x1308091a884f4d47L,0x6090691d2070177bL,0x740d060f5b879183L,0x2051c185c848911L,0x66805f040a728d16L,0x98170b0367635607L,0x423b0b5244a62a99L,0x2b221843292cb011L,0xbb51ad191c1b410fL,0x920214a90c3abfbdL,0x3d30c4ae130dc297L,0x2e15091a1203a405L,0xaf0806aa311ebe1dL,0x1c0b14399bac20b5L,0x110503081e420308L,0x2c0609033a032b13L,0x651042e05022918L,0x608113d1c092a0fL,0x171d17061a1a000dL,0xb02021103201319L,0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,0x4a25120415251915L,0x3a47033403030803L,0x4a024a4a0204022bL,0x2020403042c032cL,0x310904433a2b033aL,0x344a093b344a0243L,0x8a021a0202033a03L,0x303020303788a8aL,0x3608a78035f8a8bL,0x7203190219031908L,0x3780202098a1302L,0x5f03028b038a0909L,0x8b08028b035f1a03L,0x9028a190203030dL,0x8030303033a1378L,0x303030303130303L,0x2b1a033a03031a03L,0x3081a2c03031d03L,0x303032c03030303L,0x33a0308032b0303L,0x40302011a3a0803L,0x4080d0203040302L,0x20319030c090c09L,0x31903021a031d19L,0x152519151a250213L,0x30308034a251204L,0x204022b3a470334L,0x42c032c4a024a4aL,0x3a2b033a02020403L,0x344a024331090443L,0x8f7f3a03344a093bL,0x7f8e7373738f688fL,0x7f7b735a7f7f8f7fL,0x867f86847f66738eL,0x55735c8f637f868fL,0x7f7355557f8e8f8fL,0x7f7b687f7b7f8f5aL,0x8f7f7f905a848f5aL,0x7f3a5c8e558f7386L,0x3130303847f0303L,0x7f0368037f7f7f7fL,0x37f1d7f2b1a7f3aL,0x7f7f7f7f0308682cL,0x7f2b03037f03032cL,0x1a3a0803033a0384L,0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,0x2d25120415251915L,0x444f514c51514251L,0x2d3f2d2d3f333f52L,0x3f3f335133305130L,0x4540334944525144L,0x4c2d40484c2d3f49L,0x8a3f1a023f034451L,0x5151020303528a8aL,0x3608a78515f8a44L,0x7251193f19031942L,0x5152023f408a133fL,0x30033f44038a0940L,0x4408024403301a51L,0x9028a190251510dL,0x803515103441378L,0x5103515103130303L,0x521a514451511a03L,0x51421a3003031d03L,0x5151033051510303L,0x344514203525103L,0x40302011a440851L,0x4080d0203040302L,0x20319030c090c09L,0x31903021a031d19L,0x152519151a250213L,0x515142512d251204L,0x3f333f52444f514cL,0x333051302d3f2d2dL,0x445251443f3f3351L,0x4c2d3f4945403349L,0x717f44514c2d4048L,0x7f8573737371688fL,0x8a7b737d8a8a8f7fL,0x867f86607f66738eL,0x75735c71638a8671L,0x7f7355758a858f71L,0x7f88688a887f717dL,0x8f8a8a907d848f7dL,0x7f445c8e558f7386L,0x3130303847f5151L,0x8a5168038a7f8a8aL,0x37f1d7f521a8a44L,0x8a8a7f7f51426830L,0x7f5251038a510330L,0x1a44085103445160L,0x304030204030201L,0xc090c0904080d02L,0x1817161b1e171b03L,0x18271e20171b171eL,0x1b27212524271b24L,0x3a47033417170817L,0x1b024a1b1e041e18L,0x20204032520172cL,0x310904433a18033aL,0x344a0916341b1e43L,0x8a1e180202033a03L,0x3171e1717828b8bL,0x17608a8217568a8bL,0x16031b1e1b031b08L,0x17820202098a2002L,0x56031e8b178b0909L,0x8b081e8b035f1803L,0x9028b1b1e17030dL,0x8170317173a2082L,0x303171717200317L,0x1818033a17171817L,0x308182c03031603L,0x317032003171717L,0x33a170803180317L,0x4030201183a0803L,0x4080d0203040302L,0x1e171b030c090c09L,0x171b171e1817161bL,0x24271b2418271e20L,0x171708171b272125L,0x1e041e183a470334L,0x2520172c1b024a1bL,0x3a18033a02020403L,0x341b1e4331090443L,0x8f7f3a03344a0916L,0x5d655a5a735e828fL,0x5d91735a7f5d5e5dL,0x6e7f6e845d667365L,0x5573568f707f6e5eL,0x5d5a55555d658f8fL,0x7f7b827f917f5e5aL,0x5e5d7f905a845e5aL,0x5d3a5665558f5a6eL,0x17200317845d0317L,0x5d1782177f7f5d5dL,0x37f167f18187f3aL,0x7f5d5d5d0308822cL,0x7f1803177f170320L,0x183a0803033a1784L,0x304030204030201L,0xc090c0904080d02L,0x1817161b1e171b03L,0x18271e20171b171eL,0x2827212524271b24L,0x444f514c3a3a423aL,0x283f2d2834333443L,0x3f3f33513c313a30L,0x4540334944435144L,0x4c2d404d4c283449L,0x8a3418023f034451L,0x513a1e1717438b8bL,0x17608a823a568a44L,0x16511b341b031b42L,0x3a43023f408a203fL,0x31033444178b0940L,0x44081e4403301851L,0x9028b1b1e3a510dL,0x817513a17442082L,0x51033a3a17200317L,0x431851443a3a1817L,0x5142183003031603L,0x513a0331513a1717L,0x3443a4203435117L,0x403020118440851L,0x4080d0203040302L,0x1e171b030c090c09L,0x171b171e1817161bL,0x24271b2418271e20L,0x3a3a423a28272125L,0x34333443444f514cL,0x3c313a30283f2d28L,0x444351443f3f3351L,0x4c28344945403349L,0x717f44514c2d404dL,0x5d775a5a7357828fL,0x8b91737d8a8b5e5dL,0x6e7f6e605d667365L,0x75735671708a6e57L,0x5d5a55758b778f71L,0x7f88828a5b7f577dL,0x5e8b8a907d845e7dL,0x5d445665558f5a6eL,0x17200317845d513aL,0x8b3a82178a7f8b8bL,0x37f167f43188a44L,0x8a8b5d5d51428230L,0x7f4351178a3a0331L,0x1844085103443a60L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x1a031d0f02110f11L,0x1a0c020b03191109L,0x4a250a04150c1915L,0x2b0a034a11110b03L,0x4e024e4a0204022bL,0x9020c11042a032aL,0x3b0f0c433a2b113aL,0x344e0f3b344e0943L,0x8a021a0902112b03L,0x1111020311788a8aL,0x116981780369818bL,0x720319020f03190bL,0x117802090f8a0b02L,0x6903098b03810f0fL,0x780b097811691a11L,0xf02810f0203030aL,0xb110311112b0b78L,0x3030311030b1111L,0x2b1a113a11031a03L,0x110b1a2a11031d11L,0x1103032a03030303L,0x32b110b112b0311L,0x40302011a3a0b11L,0xc0b0a09110c0302L,0x2110f110e0f0e0fL,0x31911091a031d0fL,0x150c19151a0c020bL,0x11110b034a250a04L,0x204022b2b0a034aL,0x42a032a4e024e4aL,0x3a2b113a09020c11L,0x344e09433b0f0c43L,0x8f532b03344e0f3bL,0x538e7373738f6855L,0x7f67625a53538f7fL,0x7a7f86875367628eL,0x7a73878f637f868fL,0x7f627a7a538e8f55L,0x53676853677f555aL,0x8f7f7f898e87558eL,0x532b878e7a8f627aL,0x30b111187530311L,0x530368037f7f7f53L,0x117f1d532b1a533aL,0x7f7f7f7f110b682aL,0x532b03115303032aL,0x1a3a0b11032b1187L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x1a031d0f02110f11L,0x1a0c020b03191109L,0x2d250a04150c1915L,0x522f512d3d3d2a51L,0x363f362d3f333f52L,0x403f463d33395139L,0x484e464944523d44L,0x4c364e484c364049L,0x8a3f1a093f115251L,0x3d3d020311528a8aL,0x1169817851698144L,0x7251193f0f03192aL,0x3d5202404e8a0b3fL,0x3903404403810f4eL,0x520b095211391a3dL,0xf02810f0251510aL,0xb11513d11520b78L,0x5103513d030b1111L,0x521a3d443d511a03L,0x3d2a1a3911031d11L,0x3d51033951510303L,0x3523d2a11525111L,0x40302011a440b3dL,0xc0b0a09110c0302L,0x2110f110e0f0e0fL,0x31911091a031d0fL,0x150c19151a0c020bL,0x3d3d2a512d250a04L,0x3f333f52522f512dL,0x33395139363f362dL,0x44523d44403f463dL,0x4c364049484e4649L,0x715352514c364e48L,0x5385737373716855L,0x8a67627d81818f7fL,0x7a7f86695367628eL,0x79738771638a8671L,0x7f627a7981858f75L,0x53836881837f757dL,0x8f8a8a8985875585L,0x5352878e7a8f627aL,0x30b11118753513dL,0x815168038a7f8a81L,0x117f1d53521a8144L,0x8a8a7f7f3d2a6839L,0x5352511181510339L,0x1a440b3d03523d69L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x181716151e1a1511L,0x18231e1d171b1a19L,0x1b27262524231b24L,0x2b0a034a1a1a0b17L,0x15024e1b1e041e18L,0x9020c11251d172aL,0x3b0f0c433a18113aL,0x344e0f1634151943L,0x8a1e180902112b03L,0x111a1e171a828b8bL,0x1a6981821772818bL,0x16031b1e15031b0bL,0x1a8202090f8a1d02L,0x7203198b17780f0fL,0x780b197811691811L,0xf0278151e17030aL,0xb1a031a1a2b1d82L,0x303171a171d111aL,0x1818113a1a171817L,0x110b182a11031611L,0x1117031d03171717L,0x32b1a0b1118031aL,0x4030201183a0b11L,0xc0b0a09110c0302L,0x1e1a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,0x1a1a0b171b272625L,0x1e041e182b0a034aL,0x251d172a15024e1bL,0x3a18113a09020c11L,0x341519433b0f0c43L,0x8f532b03344e0f16L,0x68655a5a735e8255L,0x5d63625a53685e5dL,0x6c7f6e8768676265L,0x7a73728f707f6e5eL,0x5d8e7a7a68658f55L,0x53678253637f865aL,0x5e5d7f898e87868eL,0x682b72657a8f8e6cL,0x171d111a8768031aL,0x681782177f7f5d68L,0x117f16531818533aL,0x7f5d5d5d110b822aL,0x5318031a5317031dL,0x183a0b11032b1a87L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x181716151e1a1511L,0x18231e1d171b1a19L,0x2827262524231b24L,0x522f512d2b2b2a3aL,0x383f362834333443L,0x403f463d3c3b3a39L,0x484e464944433d44L,0x4c364e4d4c384a49L,0x8a3418093f115251L,0x3d2b1e171a438b8bL,0x1a6981823a728144L,0x16511b3415031b2aL,0x2b4302404e8a1d3fL,0x3b034a4417780f4eL,0x520b19521139183dL,0xf0278151e3a510aL,0xb1a512b1a521d82L,0x51033a2b171d111aL,0x43183d442b3a1817L,0x3d2a183911031611L,0x3d3a033b513a1717L,0x3522b2a1143511aL,0x403020118440b3dL,0xc0b0a09110c0302L,0x1e1a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,0x2b2b2a3a28272625L,0x34333443522f512dL,0x3c3b3a39383f3628L,0x44433d44403f463dL,0x4c384a49484e4649L,0x715352514c364e4dL,0x68775a5a73578255L,0x8b63627d81785e5dL,0x6c7f6e6968676265L,0x79737271708a6e57L,0x5d8e7a7978778f75L,0x53838281807f7e7dL,0x5e8b8a8985878685L,0x685272657a8f8e6cL,0x171d111a8768512bL,0x783a82178a7f8b78L,0x117f165343188144L,0x8a8b5d5d3d2a8239L,0x5343511a813a033bL,0x18440b3d03522b69L,0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,0x4a25120415251412L,0x2947063406030806L,0x4a054a320204052cL,0x2020703042c032cL,0x310504313a2b0629L,0x3232093b34320243L,0x6f02130205033a03L,0x6060203065f8a6fL,0x3606f78065f8a64L,0x7206190519061408L,0x3780502058a1302L,0x5f03028b066f0909L,0x6408028b065f1a03L,0x5028a140503030dL,0x8060303033a135fL,0x603060306130306L,0x2b1a062906031a03L,0x608132c06061d06L,0x306032c03030306L,0x6290608032c0603L,0x4030201133a0803L,0x4080d0206070605L,0x506140307090c05L,0x61903021a031d19L,0x1525141213070213L,0x60308064a251204L,0x204052c29470634L,0x42c032c4a054a32L,0x3a2b062902020703L,0x3432024331050431L,0x767f3a033232093bL,0x6b7b7358588f5c8fL,0x6b7b73596b6b8f7fL,0x866b8c847f66588eL,0x76735c8f636b8676L,0x6b5855557f8e768fL,0x6b7b687f7b7f8f5aL,0x767f7f9059848f5aL,0x7f3a5c7b768f738cL,0x6130306846b0303L,0x6b0368036b7f6b7fL,0x66b1d6b2b1a6b29L,0x7f7f7f6b06085c2cL,0x7f2c06037f06032cL,0x133a080306290684L,0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,0x2d25120415251412L,0x414f2e4c2e51422eL,0x2d372d503f333730L,0x3f3f3e5133305130L,0x4537334544522e41L,0x505040484c503f49L,0x6f3f130237034451L,0x2e2e020306308a6fL,0x3606f782e5f8a41L,0x722e193719061442L,0x5152053f378a133fL,0x30033f44066f0940L,0x4108024406301a51L,0x5028a140551510dL,0x80651510344135fL,0x2e032e5106130306L,0x521a2e412e511a03L,0x2e42133006061d06L,0x512e033051510306L,0x6412e4203302e03L,0x403020113440851L,0x4080d0206070605L,0x506140307090c05L,0x61903021a031d19L,0x1525141213070213L,0x2e51422e2d251204L,0x3f333730414f2e4cL,0x333051302d372d50L,0x44522e413f3f3e51L,0x4c503f4945373345L,0x547f445150504048L,0x6b88735858715c8fL,0x6f7b73616f6f8f7fL,0x866b8c607f66588eL,0x54735c71636f8654L,0x6b5855758a857671L,0x6b88688a887f717dL,0x768a8a9061848f7dL,0x7f445c7b768f738cL,0x6130306846b5151L,0x6f5168036f7f6f8aL,0x66b1d6b521a6f41L,0x8a8a7f6b2e425c30L,0x7f302e038a2e0330L,0x1344085106412e60L,0x607060504030201L,0x7090c0504080d02L,0x1817161b141c2203L,0x201f1e201c1b171eL,0x1b27212524272221L,0x294706341c17081cL,0x1b054a221e041420L,0x20207032520172cL,0x310504313a180629L,0x3232091634221e43L,0x6f1e200205033a03L,0x61c1e171c568b64L,0x17606f821c568a64L,0x16061b141b062208L,0x17820502058a2002L,0x56031e8b1c640909L,0x64081e8b065f1803L,0x5028b221417030dL,0x81c0317173a2056L,0x6031c171c20031cL,0x181806291c171817L,0x608202c06061606L,0x31c03200317171cL,0x6291c0803200617L,0x4030201203a0803L,0x4080d0206070605L,0x141c220307090c05L,0x1c1b171e1817161bL,0x24272221201f1e20L,0x1c17081c1b272125L,0x1e04142029470634L,0x2520172c1b054a22L,0x3a18062902020703L,0x34221e4331050431L,0x767f3a0332320916L,0x7c915a59585e568fL,0x7c9173596b7c5e5dL,0x6e6b6a845d665865L,0x7673568f706b6e8cL,0x7c5955555d65768fL,0x6b7b827f917f5e5aL,0x8c5d7f9059845e5aL,0x5d3a5691768f5a6aL,0x1c20031c847c0317L,0x7c1782176b7f7c5dL,0x66b166b18186b29L,0x7f5d5d7c0608562cL,0x7f2006177f1c0320L,0x203a080306291c84L,0x607060504030201L,0x7090c0504080d02L,0x1817161b141c2203L,0x201f1e201c1b171eL,0x2827212524272221L,0x414f2e4c293a4229L,0x28372d3534333231L,0x3f3f3e513c313a30L,0x4537334544432e41L,0x5050404d4c353449L,0x6f34200237034451L,0x2e291e171c318b64L,0x17606f8229568a41L,0x162e1b321b062242L,0x3a43053f378a203fL,0x310334441c640940L,0x41081e4406301851L,0x5028b22143a510dL,0x81c513a17442056L,0x2e03293a1c20031cL,0x43182e41293a1817L,0x2e42203006061606L,0x51290331513a171cL,0x641294203312e17L,0x403020120440851L,0x4080d0206070605L,0x141c220307090c05L,0x1c1b171e1817161bL,0x24272221201f1e20L,0x293a422928272125L,0x34333231414f2e4cL,0x3c313a3028372d35L,0x44432e413f3f3e51L,0x4c35344945373345L,0x547f44515050404dL,0x7c5b5a595857568fL,0x649173616f645e5dL,0x6e6b6a605d665865L,0x54735671706f6e6dL,0x7c5955758b777671L,0x6b88828a5b7f577dL,0x8c8b8a9061845e7dL,0x5d445691768f5a6aL,0x1c20031c847c513aL,0x643a82176f7f648bL,0x66b166b43186f41L,0x8a8b5d7c2e425630L,0x7f312e178a290331L,0x2044085106412960L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a031d0f05080d11L,0x1307020b06191109L,0x4a250a04150c1412L,0x2c0a064a08110b06L,0x4e054e320204052cL,0x9020711042a032aL,0x3b0d0c313a2b0829L,0x32470f3b34470943L,0x6f02130905112b03L,0x8080203085f8a6fL,0x1169607806698164L,0x720619050f06140bL,0x117805090d8a0b02L,0x6903098b06600f0fL,0x5f0b097808691a11L,0xd02810d0503030aL,0xb080311112b0b5fL,0x6030611060b1108L,0x2b1a082908031a03L,0x80b132a08061d08L,0x1106032a03030306L,0x62c080b112c0611L,0x4030201133a0b11L,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,0x150c14121307020bL,0x8110b064a250a04L,0x204052c2c0a064aL,0x42a032a4e054e32L,0x3a2b082909020711L,0x344709433b0d0c31L,0x76532b0332470f3bL,0x847b7358588f5c55L,0x6b67625984848f7fL,0x7a6b8c875367668eL,0x9073878f636b8676L,0x6b667a7a538e7655L,0x84676853677f555aL,0x767f7f897b87558eL,0x532b877b908f6290L,0x60b110887840311L,0x840368036b7f6b53L,0x86b1d842b1a8429L,0x7f7f7f6b080b5c2aL,0x532c06115306032aL,0x133a0b11062c0887L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a031d0f05080d11L,0x1307020b06191109L,0x2d250a04150c1412L,0x302f2e2d423d2a2eL,0x363736503f333730L,0x403f3e3d33395139L,0x4847464544524241L,0x504f4e484c4f4049L,0x6f3f130937115251L,0x4242020308308a6fL,0x116960782e698141L,0x722e19370f06142aL,0x3d520540478a0b3fL,0x3903404406600f4eL,0x300b095208391a3dL,0xd02810d0551510aL,0xb08513d11520b5fL,0x2e032e3d060b1108L,0x521a424142511a03L,0x422a133908061d08L,0x3d2e033951510306L,0x630422a11302e11L,0x403020113440b3dL,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,0x150c14121307020bL,0x423d2a2e2d250a04L,0x3f333730302f2e2dL,0x3339513936373650L,0x44524241403f3e3dL,0x4c4f404948474645L,0x54535251504f4e48L,0x8488735858715c55L,0x6f67626160608f7fL,0x7a6b8c695367668eL,0x74738771636f8654L,0x6b667a7981857675L,0x84836881837f757dL,0x768a8a8988875585L,0x5352877b908f6290L,0x60b11088784513dL,0x605168036f7f6f81L,0x86b1d84521a6041L,0x8a8a7f6b422a5c39L,0x53302e11812e0339L,0x13440b3d06304269L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,0x1b27262524232221L,0x2c0a064a131a0b1cL,0x15054e221e041420L,0x9020711251d172aL,0x3b0d0c313a180829L,0x32470f1634121943L,0x6f1e200905112b03L,0x8131e1713568b64L,0x1a6960821c728164L,0x16061b141506220bL,0x1a8205090d8a1d02L,0x7203198b1c5f0f0fL,0x5f0b197808691811L,0xd0278121417030aL,0xb13031a1a2b1d56L,0x6031c1a1c1d1113L,0x1818082913171817L,0x80b202a08061608L,0x111c031d0317171cL,0x62c130b1120061aL,0x4030201203a0b11L,0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,0x131a0b1c1b272625L,0x1e0414202c0a064aL,0x251d172a15054e22L,0x3a18082909020711L,0x341219433b0d0c31L,0x76532b0332470f16L,0x5c915a59585e5655L,0x7c636259845c5e5dL,0x6c6b6a8768676665L,0x9073728f706b6e8cL,0x7c7b7a7a68657655L,0x84678253637f865aL,0x8c5d7f897b87868eL,0x682b7291908f8e8dL,0x1c1d1113875c031aL,0x5c1782176b7f7c68L,0x86b168418188429L,0x7f5d5d7c080b562aL,0x5320061a531c031dL,0x203a0b11062c1387L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,0x2827262524232221L,0x302f2e2d2c2b2a29L,0x3837363534333231L,0x403f3e3d3c3b3a39L,0x4847464544434241L,0x504f4e4d4c4b4a49L,0x6f34200937115251L,0x422c1e1713318b64L,0x1a69608229728141L,0x162e1b321506222aL,0x2b430540478a1d3fL,0x3b034a441c5f0f4eL,0x300b19520839183dL,0xd027812143a510aL,0xb13512b1a521d56L,0x2e03292b1c1d1113L,0x431842412c3a1817L,0x422a203908061608L,0x3d29033b513a171cL,0x6302c2a11312e1aL,0x403020120440b3dL,0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,0x2c2b2a2928272625L,0x34333231302f2e2dL,0x3c3b3a3938373635L,0x44434241403f3e3dL,0x4c4b4a4948474645L,0x54535251504f4e4dL,0x5c5b5a5958575655L,0x64636261605f5e5dL,0x6c6b6a6968676665L,0x74737271706f6e6dL,0x7c7b7a7978777675L,0x84838281807f7e7dL,0x8c8b8a8988878685L,0x68527291908f8e8dL,0x1c1d1113875c512bL,0x5f3a82176f7f6478L,0x86b168443186041L,0x8a8b5d7c422a5639L,0x53312e1a8129033bL,0x20440b3d06302c69L}; // 8 bits per value + private final static long[] offsetIncrs6 = new long[] {0x8000000080000000L,0x1000000060200061L,0x820000038000L,0x80200030044048c4L,0x20ab0ac0000eda1L,0x4041400c01506000L,0x113028000884098L,0x186c401800008040L,0x1020c000200009a0L,0x80000000710L,0x60200061800L,0x820000038000100L,0x30044048c4000L,0xb3cb4d86cf6c181aL,0xd80cc0190780182cL,0x30301b0884c9e584L,0xf4c18db6080580d1L,0xcc0c02db609a19e6L,0x80000000710102L,0x60200061800000L,0x3a28b550000L,0x3005405aed0050aaL,0xadb400eda1802d00L,0xac01507400020abaL,0x8168a8509d405140L,0x58a2d08042d15302L,0xb42b40a9a0186edbL,0x75516a0e8L,0x200061800000008L,0x3a28b550000006L,0x5405aed0050aa000L,0x46cf6c181ad00300L,0x190740182cb3ab5bL,0x8a85c9d585d80ac0L,0xad0805add5303016L,0xb76a9a19e6edb58bL,0x75516ace8b42L,0x2092010000008000L,0x8009140000008028L,0x49040000a2000004L,0x24a2002000400440L,0x8000028ac8ac1049L,0x40a0404900900150L,0x8450491402010088L,0xa20209049240248L,0x910122104102124L,0x2010000008000000L,0x9140000008028209L,0x40000a2000004800L,0x201a000400440490L,0x1828b48b4d04924cL,0x6584900900190980L,0x4914020130884caL,0x1a6934924da48845L,0x122d04d02d240a2L,0x8000000091L,0x8028209201L,0x50a2000004a28914L,0x2d004005405b2d00L,0x8ac8adb04924a200L,0x5900900150940002L,0x54020128a850a540L,0x92d924a2488452c9L,0x212cb02b24aa2020L,0x8000000095516L,0x8028209201000L,0x2000004a28914000L,0x4005405b2d0050aL,0x8b5b04924c201ad0L,0x9001909401828b4L,0x20128a85ca558590L,0x924ba488452c9540L,0xcb02b24aa21a692dL,0xc0600000955162d2L,0x6030186180c30000L,0x36006d8000000L,0x46048dc0030c300L,0x6c06eda180d80030L,0x1586000036db0dcL,0x6c36db6040c06cL,0x30db6c36db0180L,0x30006db61b6dc618L,0x71b0db6c360L,0x186180c30000c06L,0x36006d8000000603L,0x48dc0030c300000L,0x6f6c180d80030046L,0x87801836dbcdc6c6L,0xc36db784cc06c019L,0xdb6c36db0181b06L,0x66db79b6dc618db3L,0x71b0db6c3603dbL,0x6180c30000c06000L,0x86dd000000603018L,0xdd0030eb00000362L,0xa180dd003005605aL,0x36dbadd6c06edL,0xdb6050c06c015874L,0x6eb6db0181686c36L,0xb61b6dd758a2b0dbL,0x5b0db6eb743b406dL,0xc30000c06000007L,0xd000000603018618L,0x30eb0000036286dL,0xdd003005605add0L,0x36dbadd6c66f6c18L,0x85cc06c019874018L,0x6db0181686c36db7L,0xb6dd758bab0db6ebL,0xdb6eb743b766db79L,0xc060000075b0L,0x8038189200c3L,0xe30000046006dc00L,0x400460491c0030L,0xc8dc6c4724a200d8L,0xc07001588000036dL,0x181006c36e36048L,0xc7240238db6c36dcL,0x37031246e362391L,0xc060000091b0db7L,0x8038189200c3000L,0x46006dc00000L,0x460491c0030e30L,0xc6c4724c200d8004L,0x1989801836dc8dL,0x1306c36e37848c07L,0x4da38db6c36dc018L,0x3d246e37a391c72L,0x60000091b0db7037L,0x38189200c30000c0L,0x46286dc00000080L,0x605b1d0030e30000L,0x4724a200dd004005L,0x589400036dc8dd6cL,0x6c36e36058c07001L,0x38db6eb6dc018128L,0x246e362391d724a2L,0x95b0db72b703bL,0x89200c30000c0600L,0x286dc00000080381L,0xb1d0030e30000046L,0x4c200dd004005605L,0x401836dc8dd6c472L,0x6e37858c07001989L,0xb6eb6dc0181286c3L,0xe37a391d724ba38dL,0x95b0db72b703b246L,0x8080000080410000L,0x1200000040240061L,0x820000024104L,0x200030044028d2L,0x820934aa4804aa41L,0x4044800c01506800L,0x112028000484498L,0x9a6d241841048248L,0x4920900820024924L,0x80410000510L,0x40240061808L,0x820000024104120L,0x30044028d2000L,0x934b24864b24101aL,0x480cc0190680082cL,0x20301b048449e584L,0xd2418596482480d1L,0xc90c82db249249a6L,0x80410000510492L,0x40240061808000L,0x24105520000L,0x3005402ad20050aaL,0xaa4804aa41002d00L,0xac01506800820934L,0x816848549d405480L,0x584154824ad15202L,0xa82b4249249a6d25L,0x410000555492090L,0x240061808000008L,0x24105520000004L,0x5402ad20050aa000L,0x864b24101ad00300L,0x190680082c934b24L,0x848549d585480ac0L,0x954824add5203016L,0xb7249249a6d25585L,0x555492c90a82L,0x2092008000008041L,0x4105120000004024L,0x29120000a2000002L,0xa241002000400440L,0x8800828944aa4844L,0x44a0404480900150L,0x8248491202010048L,0x4924a29125244144L,0x510492094082122L,0x2008000008041000L,0x5120000004024209L,0x20000a2000002410L,0x101a000400440291L,0x828944b24844a24L,0x6584480900190880L,0x849120201304844aL,0x4a29125245944824L,0x492c94c82d22492L,0x8000008041000051L,0x4024209200L,0x50a2000002410512L,0x2d004005402b1200L,0x8944aa4844a24100L,0x5480900150880082L,0x520201284854a540L,0x9125244144824ac9L,0x2094a82b224924a2L,0x8041000055549L,0x4024209200800L,0x2000002410512000L,0x4005402b120050aL,0x4b24844a24101ad0L,0x900190880082894L,0x201284854a558548L,0x5245944824ac9520L,0x4a82b224924a2912L,0xc0410000555492c9L,0x4034186180830000L,0x24104da000000L,0x46028d20030c300L,0x4804aa4100d80030L,0x1586800836d34daL,0x4c34db6044806cL,0x4134da6836da0180L,0x30024d349a6d2418L,0x1000051b49369368L,0x4186180830000c04L,0x24104da000000403L,0x28d20030c300000L,0x4b24100d80030046L,0x86800836d34da486L,0xc34db7844806c019L,0x4da6836da0181b04L,0x24d349a6d2418593L,0x51b493693683dbL,0x6180830000c04100L,0x4da000000403418L,0xd20030eb00000241L,0x4100dd003005602aL,0x836d34da4804aaL,0xdb6054806c015868L,0x6ab6da0181684c34L,0x349a6d25584134daL,0x5b493693683b424dL,0x830000c04100005L,0xa000000403418618L,0x30eb0000024104dL,0xdd003005602ad20L,0x36d34da4864b2410L,0x854806c019868008L,0x6da0181684c34db7L,0xa6d25585934da6abL,0x93693683b724d349L,0xc041000055b4L,0x403418920083L,0xe30000024104da00L,0x40046029120030L,0x44da4844a24100d8L,0x807001588800836dL,0x181004c34e36044L,0x25244134da6836daL,0x936831224d34a291L,0xc041000051b4936L,0x403418920083000L,0x24104da00000L,0x46029120030e30L,0xa4844a24100d8004L,0x1988800836d44dL,0x1304c34e37844807L,0x45934da6836da018L,0x83d224d34a291252L,0x41000051b4936936L,0x34189200830000c0L,0x24104da00000040L,0x602b120030e30000L,0x44a24100dd004005L,0x588800836d44da48L,0x4c34e36054807001L,0x34da6ab6da018128L,0x224d34a291252441L,0x55b493693683bL,0x89200830000c0410L,0x104da00000040341L,0xb120030e30000024L,0x24100dd004005602L,0x800836d44da4844aL,0x4e37854807001988L,0xa6ab6da0181284c3L,0xd34a29125245934dL,0x55b493693683b224L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L}; // 3 bits per value + + // 128 vectors; 196 states per vector; array length = 25088 + private final static long[] toStates7 = new long[] {0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,0x64323b0531322c31L,0x672006f00000600L,0x5f085f5f06050808L,0x6060d0005130013L,0x1d13140506080006L,0x605f130d6f5f0605L,0x606060608000600L,0x60000130606L,0x290613002c0608L,0x140029082c002c06L,0x13080613060806L,0x2c00060800061313L,0x8060608002c0600L,0x1306062c0800001dL,0x600000000060813L,0x80000,0x806000600000600L,0x6061300000500L,0x1300000000L,0x6000600080000L,0x500060706060600L,0x14061d06000d0008L,0x8002c0012131213L,0x2900060600052cL,0x31322c3106470608L,0x60064323b05L,0x60508080672006fL,0x51300135f085f5fL,0x608000606060d00L,0x6f5f06051d131405L,0x8000600605f130dL,0x13060606060606L,0x2c060800000600L,0x2c002c0600290613L,0x1306080614002908L,0x6131300130806L,0x2c06002c000608L,0x800001d08060608L,0x31c84131306062cL,0x38403036b030303L,0x3032e0303030303L,0x3033703422e031cL,0x3030303036b2e5cL,0x34203030303035cL,0x2e1c6b03031c036bL,0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,0x64323b0531322c31L,0x672006f00000600L,0x5f085f5f06050808L,0x6060d0005130013L,0x1d13140506080006L,0x605f130d6f5f0605L,0x2c01cc0ac030600L,0x303c00303200202L,0x34102200330020bL,0x2203b7acbe03be2eL,0x320acc0990242c0L,0x3003c00b03029999L,0xb2ec00b03301c03L,0x99c002beac03039bL,0x2e03000003064220L,0x303030300080000L,0x806030603001c00L,0x61c1300030503L,0x300001303030303L,0x6002e03080000L,0x500060706060600L,0x14061d06000d0008L,0x8002c0012131213L,0x2900060600052cL,0x31322c3106470608L,0x60064323b05L,0x60508080672006fL,0x51300135f085f5fL,0x608000606060d00L,0x6f5f06051d131405L,0xac030600605f130dL,0x320020202c01cc0L,0x330020b0303c003L,0xbe03be2e03410220L,0x990242c02203b7acL,0x30299990320acc0L,0x3301c033003c00bL,0xac03039b0b2ec00bL,0x61c602099c002beL,0x38403036f060303L,0x603290306060606L,0x3063706422e061cL,0x6060606036b295cL,0x64203030603035cL,0x2e1c6b03031c036fL,0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,0x59323b0531322c31L,0x263035803031c03L,0x7b847b7b6b76840bL,0x6b6b900376200320L,0x165c8c04020b0302L,0x667b5c0a587b6b04L,0x66b060684000203L,0x3030600000b0606L,0x290613032c0602L,0x140329842c002c1cL,0x30b086b5c06086bL,0x20006b020006135cL,0x206060200200603L,0x1306062c0803031dL,0x600030300020813L,0x300030300080000L,0xb06030203030600L,0x31c062000000500L,0x303002003030000L,0x2031c000b0300L,0x500060706020603L,0x14061d06000d0008L,0x8002c0012131213L,0x2900060600052cL,0x31322c3106470608L,0x3031c0359323b05L,0x6b76840b02630358L,0x762003207b847b7bL,0x20b03026b6b9003L,0x587b6b04165c8c04L,0x84000203667b5c0aL,0xb0606066b0606L,0x32c060203030600L,0x2c002c1c00290613L,0x5c06086b14032984L,0x6135c030b086bL,0x20060320006b02L,0x803031d02060602L,0x30984131306062cL,0x38403036b031111L,0x11112e0311031111L,0x30337032a2e1109L,0x11110303117c2e56L,0x32a110311110356L,0x2e096b110309117cL,0xd000805000607L,0x1213121314061d06L,0x600052c08002c00L,0x647060800290006L,0x59323b0531322c31L,0x263035803031c03L,0x7b847b7b6b76840bL,0x6b6b900376200320L,0x165c8c04020b0302L,0x667b5c0a587b6b04L,0x2ab1cc0a9030203L,0x606c003031d0202L,0x341022006300205L,0x2206b7a9be03be29L,0x61dacab970242abL,0x3103ab0503029997L,0x52ec00503311c06L,0x99c002beac06069bL,0x2e03030303024220L,0x603060600080000L,0xb06060206031c00L,0x31c1c2000030503L,0x603002006060303L,0x20329030b0300L,0x500060706020603L,0x14061d06000d0008L,0x8002c0012131213L,0x2900060600052cL,0x31322c3106470608L,0x3031c0359323b05L,0x6b76840b02630358L,0x762003207b847b7bL,0x20b03026b6b9003L,0x587b6b04165c8c04L,0xa9030203667b5c0aL,0x31d020202ab1cc0L,0x63002050606c003L,0xbe03be2903410220L,0x970242ab2206b7a9L,0x3029997061dacabL,0x3311c063103ab05L,0xac06069b052ec005L,0x609602099c002beL,0x38403036f061111L,0x811290308060808L,0x30637062a2e0809L,0x8080606117c2956L,0x62a110308110356L,0x2e096b1103091164L,0xd00080500063eL,0x1213121314061d06L,0x203043042033000L,0x24f2e0b0341032eL,0x4150483745503045L,0x672006f03030603L,0x30085f302e054202L,0x6060d00370b0313L,0x1d13140506020006L,0x605f13046f302e05L,0x62e020608000600L,0x32e0303090808L,0x3290609032a0608L,0x400414230003006L,0x309080613060b06L,0x2a002e0803081313L,0x8062e08002c0200L,0x130608304203001dL,0x603000303060b09L,0x303030b0003L,0x202000603030203L,0x6021300000400L,0x3000b00030303L,0x6030600020003L,0x500063e02060600L,0x14061d06000d0008L,0x4203300012131213L,0x341032e02030430L,0x45503045024f2e0bL,0x303060341504837L,0x2e0542020672006fL,0x370b031330085f30L,0x602000606060d00L,0x6f302e051d131405L,0x8000600605f1304L,0x3090808062e0206L,0x32a060800032e03L,0x3000300603290609L,0x13060b0604004142L,0x308131303090806L,0x2c02002a002e08L,0x4203001d08062e08L,0x171c870913060830L,0x178703176b170317L,0x17171e1703031717L,0x30325031e1e031cL,0x3171717036b1e5cL,0x31e031703170387L,0x1e1c6b03031c176bL,0xd00080500063eL,0x1213121314061d06L,0x203043042033000L,0x24f2e0b0341032eL,0x4150483745503045L,0x672006f03030603L,0x30085f302e054202L,0x6060d00370b0313L,0x1d13140506020006L,0x605f13046f302e05L,0x2ba09c0ac030600L,0x311ba11110f0b0bL,0x1141020f1139020bL,0xc03a5b0bf03bf2eL,0x110facc099022ac0L,0x3903ba0b110b9999L,0xb2eba0b03300903L,0x99c00bbfb011039bL,0x2e11000311062a0fL,0x3031111030b0003L,0x202030611030903L,0x6091300030403L,0x303000b03111111L,0x6032e03020003L,0x500063e02060600L,0x14061d06000d0008L,0x4203300012131213L,0x341032e02030430L,0x45503045024f2e0bL,0x303060341504837L,0x2e0542020672006fL,0x370b031330085f30L,0x602000606060d00L,0x6f302e051d131405L,0xac030600605f1304L,0x110f0b0b02ba09c0L,0x1139020b0311ba11L,0xbf03bf2e1141020fL,0x99022ac00c03a5b0L,0x110b9999110facc0L,0x33009033903ba0bL,0xb011039b0b2eba0bL,0x1a1c690f99c00bbfL,0x178703176f1a0317L,0x1a17191706061a1aL,0x30625061e1e061cL,0x61a1a1a036b195cL,0x61e031706170387L,0x1e1c6b03031c176fL,0xd00080500063eL,0x1213121314061d06L,0x203043042033000L,0x24f2e0b0341032eL,0x6150483745503045L,0x263035806061c06L,0x88847b886f766005L,0x6b6b9003541d0620L,0x165c8c0402050302L,0x667b5c0758886f04L,0x66f020684000203L,0x3062e0303050808L,0x3290609062a0602L,0x40341603000301cL,0x605086b5c060b6bL,0x1d006f020308135cL,0x2062e0200200203L,0x130608304206031dL,0x603030603020b09L,0x3000606030b0003L,0x502030206060203L,0x31c022000000400L,0x306001d03060303L,0x2061c00050303L,0x500063e02020603L,0x14061d06000d0008L,0x4203300012131213L,0x341032e02030430L,0x45503045024f2e0bL,0x6061c0661504837L,0x6f76600502630358L,0x541d062088847b88L,0x20503026b6b9003L,0x58886f04165c8c04L,0x84000203667b5c07L,0x3050808066f0206L,0x62a060203062e03L,0x3000301c03290609L,0x5c060b6b04034160L,0x308135c0605086bL,0x2002031d006f02L,0x4206031d02062e02L,0x1709870913060830L,0x178703176b17111cL,0x1c1c1e1711031c1cL,0x3032503141e1109L,0x111c1717117c1e56L,0x3141117111c0372L,0x1e096b1103091c7cL,0xd00080500063eL,0x1213121314061d06L,0x203043042033000L,0x24f2e0b0341032eL,0x6150483745503045L,0x263035806061c06L,0x88847b886f766005L,0x6b6b9003541d0620L,0x165c8c0402050302L,0x667b5c0758886f04L,0x2a009c0a9030203L,0x608ba11110d0b0bL,0x1141020f08390205L,0xc06a5a6bf03bf29L,0x80dacab97022aabL,0x3b03a005110b9997L,0x52eba0503310906L,0x99c00bbfb008069bL,0x2e11030611022a0fL,0x6030808030b0003L,0x502060208060903L,0x31c092000030403L,0x606001d06081111L,0x2062903050303L,0x500063e02020603L,0x14061d06000d0008L,0x4203300012131213L,0x341032e02030430L,0x45503045024f2e0bL,0x6061c0661504837L,0x6f76600502630358L,0x541d062088847b88L,0x20503026b6b9003L,0x58886f04165c8c04L,0xa9030203667b5c07L,0x110d0b0b02a009c0L,0x83902050608ba11L,0xbf03bf291141020fL,0x97022aab0c06a5a6L,0x110b9997080dacabL,0x33109063b03a005L,0xb008069b052eba05L,0x1a09690f99c00bbfL,0x178703176f1a111cL,0x131c191708061313L,0x3062506141e0809L,0x8131a1a117c1956L,0x6141117081c0372L,0x1e096b1103091c64L,0x31200081400061fL,0x212021202202161cL,0x600052008032003L,0x61206020029031cL,0x6432161431222c31L,0x816006403030200L,0x5608565f06140808L,0x1c06120314090009L,0xd20220506080306L,0x6056200d6f561c05L,0x606061c08030800L,0x303060003130606L,0x3191a1300191a08L,0x1400290820002c02L,0x313081c20060206L,0x19001c08001a2020L,0x13021c1303190603L,0x20061a2008000016L,0x203000303080213L,0x300020303L,0x806030603000600L,0x302060903000503L,0x300000900000000L,0x8030203080003L,0x1400061f06060203L,0x2202161c03120008L,0x803200321202120L,0x29031c06000520L,0x31222c3106120602L,0x303020064321614L,0x614080808160064L,0x140900095608565fL,0x60803061c061203L,0x6f561c050d202205L,0x80308006056200dL,0x31306060606061cL,0x191a0803030600L,0x20002c0203191a13L,0x2006020614002908L,0x1a20200313081cL,0x319060319001c08L,0x800001613021c13L,0x51423f1320061a20L,0x33f51513f510351L,0x51032e0303030351L,0x51033751422e511cL,0x3030303513f2e40L,0x5142035151030340L,0x2e1c3f510342513fL,0x31200081400061fL,0x212021202202161cL,0x600052008032003L,0x61206020029031cL,0x6432161431222c31L,0x816006403030200L,0x5608565f06140808L,0x1c06120314090009L,0xd20220506080306L,0x6056200d6f561c05L,0x2c01c9cac170800L,0x1717c00317200202L,0x171b1820031b180bL,0x2203b7acc403be1eL,0x1720ac9cc4021ec0L,0x1b039c0b0318c4c4L,0x201e9c20171b1c17L,0xc4c018c4ac0303aaL,0x1e17000317081e20L,0x303031700020303L,0x806170617001c00L,0x3021c0903030517L,0x1700000903030303L,0x8031e17080003L,0x1400061f06060203L,0x2202161c03120008L,0x803200321202120L,0x29031c06000520L,0x31222c3106120602L,0x303020064321614L,0x614080808160064L,0x140900095608565fL,0x60803061c061203L,0x6f561c050d202205L,0xac1708006056200dL,0x1720020202c01c9cL,0x31b180b1717c003L,0xc403be1e171b1820L,0xc4021ec02203b7acL,0x318c4c41720ac9cL,0x171b1c171b039c0bL,0xac0303aa201e9c20L,0x3a423420c4c018c4L,0x33f5151343a0351L,0x3a0329030606063aL,0x5106373a422e3a1cL,0x6060606513f2940L,0x3a4203513a030340L,0x2e1c3f5103425134L,0x31200081400061fL,0x212021202202161cL,0x600052008032003L,0x61206020029031cL,0x5932161431222c31L,0xb70035911110903L,0x9184917b6b8c840bL,0x7c6b8d118c0f030fL,0xa566a04020b1102L,0x6691560a58917c04L,0x66b061c84030b03L,0x11110600030b0606L,0x3191a1303191a02L,0x1403298420002c09L,0x110b087c5606026bL,0xf007c02001a2056L,0xb021c0b030f0611L,0x20061a2008030316L,0x2030311030b0213L,0x300031100020303L,0xb06110211030600L,0x1109060f03000503L,0x1103000f03030000L,0xb1109030b0303L,0x1400061f06020211L,0x2202161c03120008L,0x803200321202120L,0x29031c06000520L,0x31222c3106120602L,0x1111090359321614L,0x6b8c840b0b700359L,0x8c0f030f9184917bL,0x20b11027c6b8d11L,0x58917c040a566a04L,0x84030b036691560aL,0x30b0606066b061cL,0x3191a0211110600L,0x20002c0903191a13L,0x5606026b14032984L,0x1a2056110b087cL,0x30f06110f007c02L,0x80303160b021c0bL,0x512a3f1320061a20L,0x33f51513f51113dL,0x3d112e031103113dL,0x510337512a2e3d09L,0x111103033d402e4eL,0x512a11513d11034eL,0x2e093f3d032a3d40L,0x31200081400061fL,0x212021202202161cL,0x600052008032003L,0x61206020029031cL,0x5932161431222c31L,0xb70035911110903L,0x9184917b6b8c840bL,0x7c6b8d118c0f030fL,0xa566a04020b1102L,0x6691560a58917c04L,0x2ab1c9ca9170b03L,0x1a1ac003171d0202L,0x171b1820061b1805L,0x2206b7a9c403be19L,0x1a1dacb1ae021eabL,0x1503b1050318c4aeL,0x1d1e9c1d17151c1aL,0xc4c018c4ac0606aaL,0x1e170311170b1e20L,0x603061a00020303L,0xb061a021a031c00L,0x11091c0f03030517L,0x1a03000f06060303L,0xb1119170b0303L,0x1400061f06020211L,0x2202161c03120008L,0x803200321202120L,0x29031c06000520L,0x31222c3106120602L,0x1111090359321614L,0x6b8c840b0b700359L,0x8c0f030f9184917bL,0x20b11027c6b8d11L,0x58917c040a566a04L,0xa9170b036691560aL,0x171d020202ab1c9cL,0x61b18051a1ac003L,0xc403be19171b1820L,0xae021eab2206b7a9L,0x318c4ae1a1dacb1L,0x17151c1a1503b105L,0xac0606aa1d1e9c1dL,0x3a2a3420c4c018c4L,0x33f5151343a113dL,0x2b1129030806082bL,0x5106373a2a2e2b09L,0x80806063d40294eL,0x3a2a11512b11034eL,0x2e093f3d032a3d4aL,0x31200081400061fL,0x212021202202161cL,0x203043142063103L,0x24b2e0503410629L,0x41504d3245353045L,0x816006406060203L,0x310856302e144202L,0x1c06120332050309L,0xd20220506020306L,0x605620046f312905L,0x62e021c08030800L,0x3062e0306090808L,0x6191a0903141a08L,0x400414231003002L,0x609081c20060506L,0x1400290803132020L,0x1302291303190203L,0x2006133142030016L,0x206000606080509L,0x30603050306L,0x202030606030203L,0x302020903000403L,0x303000500030303L,0x8060203020006L,0x1400061f02060203L,0x2202161c03120008L,0x4206310321202120L,0x341062902030431L,0x45353045024b2e05L,0x606020341504d32L,0x2e14420208160064L,0x3205030931085630L,0x60203061c061203L,0x6f3129050d202205L,0x803080060562004L,0x6090808062e021cL,0x3141a0803062e03L,0x3100300206191a09L,0x2006050604004142L,0x31320200609081cL,0x319020314002908L,0x4203001613022913L,0x2e42370920061331L,0x1737512e3f2e032eL,0x2e171e170303172eL,0x510325511e1e511cL,0x3171717513f1e40L,0x511e032e51170337L,0x1e1c3f5103422e3fL,0x31200081400061fL,0x212021202202161cL,0x203043142063103L,0x24b2e0503410629L,0x41504d3245353045L,0x816006406060203L,0x310856302e144202L,0x1c06120332050309L,0xd20220506020306L,0x605620046f312905L,0x2ba099cac170800L,0x171cba111c0f0b0bL,0x1c1b180f1122180bL,0xc03a5b0bb03bf1eL,0x1c0fac9cc40214c0L,0x2203b70b1120c4c4L,0x201eb720171b0917L,0xc4c020bbb01103aaL,0x1e1c00061c08140fL,0x303111c03050306L,0x20217061c030903L,0x302090903030417L,0x1703000503111111L,0x8061e17020006L,0x1400061f02060203L,0x2202161c03120008L,0x4206310321202120L,0x341062902030431L,0x45353045024b2e05L,0x606020341504d32L,0x2e14420208160064L,0x3205030931085630L,0x60203061c061203L,0x6f3129050d202205L,0xac17080060562004L,0x1c0f0b0b02ba099cL,0x1122180b171cba11L,0xbb03bf1e1c1b180fL,0xc40214c00c03a5b0L,0x1120c4c41c0fac9cL,0x171b09172203b70bL,0xb01103aa201eb720L,0x2942320fc4c020bbL,0x1737512e3429032eL,0x2917191706061a29L,0x5106253a1e1e3a1cL,0x61a1a1a513f1940L,0x3a1e032e3a170337L,0x1e1c3f5103422e34L,0x31200081400061fL,0x212021202202161cL,0x203043142063103L,0x24b2e0503410629L,0x61504d3245353045L,0xb70035908080906L,0x5b8491886f8c6005L,0x7c6b8d116d0d060fL,0xa566a0402051102L,0x66915607585b6404L,0x66f021c84030b03L,0x11082e0306050808L,0x6191a0906141a02L,0x403416031003009L,0x805087c5606056bL,0xd00640203132056L,0xb02290b030f0211L,0x2006133142060316L,0x2060308060b0509L,0x300060803050306L,0x502110208060203L,0x1109020f03000403L,0x1106000d03060303L,0xb080903050306L,0x1400061f02020211L,0x2202161c03120008L,0x4206310321202120L,0x341062902030431L,0x45353045024b2e05L,0x808090661504d32L,0x6f8c60050b700359L,0x6d0d060f5b849188L,0x20511027c6b8d11L,0x585b64040a566a04L,0x84030b0366915607L,0x6050808066f021cL,0x6141a0211082e03L,0x3100300906191a09L,0x5606056b04034160L,0x31320560805087cL,0x30f02110d006402L,0x420603160b02290bL,0x2e2a370920061331L,0x1737512e3f2e1142L,0x421c1e1711031c42L,0x51032551141e3d09L,0x111c17173d401e4eL,0x5114112e3d1c0347L,0x1e093f3d032a4240L,0x31200081400061fL,0x212021202202161cL,0x203043142063103L,0x24b2e0503410629L,0x61504d3245353045L,0xb70035908080906L,0x5b8491886f8c6005L,0x7c6b8d116d0d060fL,0xa566a0402051102L,0x66915607585b6404L,0x2a0099ca9170b03L,0x1a13ba111c0d0b0bL,0x1c1b180f08221805L,0xc06a5a6bb03bf19L,0x130dacb1ae0214abL,0x12039e051120c4aeL,0x1d1eb71d1715091aL,0xc4c020bbb00806aaL,0x1e1c03081c0b140fL,0x603081303050306L,0x5021a0213060903L,0x1109090f03030417L,0x1a06000d06081111L,0xb081917050306L,0x1400061f02020211L,0x2202161c03120008L,0x4206310321202120L,0x341062902030431L,0x45353045024b2e05L,0x808090661504d32L,0x6f8c60050b700359L,0x6d0d060f5b849188L,0x20511027c6b8d11L,0x585b64040a566a04L,0xa9170b0366915607L,0x1c0d0b0b02a0099cL,0x82218051a13ba11L,0xbb03bf191c1b180fL,0xae0214ab0c06a5a6L,0x1120c4ae130dacb1L,0x1715091a12039e05L,0xb00806aa1d1eb71dL,0x292a320fc4c020bbL,0x1737512e34291142L,0x2c1c19170806132cL,0x5106253a141e2b09L,0x8131a1a3d40194eL,0x3a14112e2b1c0347L,0x1e093f3d032a424aL,0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,0x5f473b0d31472a3bL,0x1a72036003000603L,0x5f0b5f69080d0b13L,0x8080a000d130013L,0x1d0b0d1d0608031aL,0x6969130d60690805L,0x3a0808080b000600L,0x3030800032c063aL,0x293a13032c062bL,0x14032c0b2c032a06L,0x130b080b060808L,0x2c000808033a1313L,0x2b060808032c0600L,0xb08062a0b00001dL,0x60300000006082cL,0x300030003080003L,0x806031a03000600L,0x306081303030503L,0x3001300000003L,0x31a030600130300L,0xd00081008060600L,0xd061d08030a030bL,0xb032a000a13120bL,0x32c00080600052cL,0x31472a3b080a0808L,0x30006035f473b0dL,0x80d0b131a720360L,0xd1300135f0b5f69L,0x608031a08080a00L,0x606908051d0b0d1dL,0xb0006006969130dL,0x32c063a3a080808L,0x32c062b03030800L,0x2c032a0600293a13L,0xb06080814032c0bL,0x33a131300130b08L,0x32c06002c000808L,0xb00001d2b060808L,0x31c842c0b08062aL,0x7f84037f6b7f0303L,0x7f032e037f037f03L,0x7f7f377f422e7f68L,0x303037f7f6b845cL,0x35c7f03037f035cL,0x841c6b037f687f6bL,0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,0x5f473b0d31472a3bL,0x1a72036003000603L,0x5f0b5f69080d0b13L,0x8080a000d130013L,0x1d0b0d1d0608031aL,0x6969130d60690805L,0x44ac42acc2030600L,0x5151ac0351300244L,0x341442051300252L,0x2251bec2be51af2eL,0x320c2acc20242acL,0x3003ac0b51449999L,0x522eac0b51301c03L,0xc2ac02afc203039bL,0x2e51000003064230L,0x5103510303080003L,0x806511a51001c00L,0x306421303510551L,0x303001303030351L,0x31a032e03130300L,0xd00081008060600L,0xd061d08030a030bL,0xb032a000a13120bL,0x32c00080600052cL,0x31472a3b080a0808L,0x30006035f473b0dL,0x80d0b131a720360L,0xd1300135f0b5f69L,0x608031a08080a00L,0x606908051d0b0d1dL,0xc20306006969130dL,0x5130024444ac42acL,0x513002525151ac03L,0xbe51af2e03414420L,0xc20242ac2251bec2L,0x514499990320c2acL,0x51301c033003ac0bL,0xc203039b522eac0bL,0x61c6030c2ac02afL,0x7f84037f6f8a0303L,0x8a0329038a068a06L,0x7f8a378a422e8a68L,0x606068a7f6b605cL,0x65c7f03067f035cL,0x841c6b037f687f6fL,0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,0x7b473b0d31472a3bL,0x1863176617031c17L,0x7b877b6784908720L,0x8484890390200320L,0x16879016020b1718L,0x67675c0a66678404L,0x3a84080887000203L,0x171708000320063aL,0x293a13172c0618L,0x14172c872c032a1cL,0x30b0b8487060884L,0x20008402033a135cL,0x1806080203200603L,0xb08062a0b03031dL,0x60303030002082cL,0x1700170303080003L,0xb06171817030600L,0x171c082003030503L,0x317002003030003L,0x318171c00201700L,0xd00081008020603L,0xd061d08030a030bL,0xb032a000a13120bL,0x32c00080600052cL,0x31472a3b080a0808L,0x17031c177b473b0dL,0x8490872018631766L,0x902003207b877b67L,0x20b171884848903L,0x6667840416879016L,0x8700020367675c0aL,0x320063a3a840808L,0x172c061817170800L,0x2c032a1c00293a13L,0x8706088414172c87L,0x33a135c030b0b84L,0x320060320008402L,0xb03031d18060802L,0x309842c0b08062aL,0x7f84037f6b7f1111L,0x5d112e035d035d11L,0x7f7f377f2a2e5d82L,0x1111037f5d7c8456L,0x3565d03115d0356L,0x84096b117f825d7cL,0x30a030b0d000810L,0xa13120b0d061d08L,0x600052c0b032a00L,0x80a0808032c0008L,0x7b473b0d31472a3bL,0x1863176617031c17L,0x7b877b6784908720L,0x8484890390200320L,0x16879016020b1718L,0x67675c0a66678404L,0x44a942ac98030203L,0x3a3aac0351310244L,0x34144203a300243L,0x223abe98be51af29L,0x61dc2a9980242a9L,0x3103a90551449997L,0x432eac0551311c06L,0xc2ac02afc206069bL,0x2e51030303024230L,0x3a033a0603080003L,0xb063a183a031c00L,0x171c422003510551L,0x617002006060351L,0x318172903201700L,0xd00081008020603L,0xd061d08030a030bL,0xb032a000a13120bL,0x32c00080600052cL,0x31472a3b080a0808L,0x17031c177b473b0dL,0x8490872018631766L,0x902003207b877b67L,0x20b171884848903L,0x6667840416879016L,0x9803020367675c0aL,0x5131024444a942acL,0x3a3002433a3aac03L,0xbe51af2903414420L,0x980242a9223abe98L,0x51449997061dc2a9L,0x51311c063103a905L,0xc206069b432eac05L,0x6096030c2ac02afL,0x7f84037f6f8a1111L,0x8b1129038b068b08L,0x7f8a378a2a2e8b82L,0x808068a5d7c6056L,0x6565d03085d0356L,0x84096b117f825d64L,0x30a030b0d000810L,0xa13120b0d061d08L,0x20304302a113900L,0xb2f420b11300342L,0x304f4847454f3948L,0x1a72036011030611L,0x300b5f39420d2a0bL,0x8080a00470b0313L,0x1d0b0d1d0602031aL,0x6969130460394205L,0x3a420b080b000600L,0x3114203112a082bL,0x3293a09112a062bL,0x403302a30033906L,0x3090b080b060b08L,0x2a004208112b1313L,0x2b064208032c0200L,0xb0808392a03001dL,0x611000303060b2aL,0x3001103110b0011L,0x202031a11030203L,0x3060b1303030403L,0x11000b00030311L,0x31a1106000b0303L,0xd0008100b060600L,0xd061d08030a030bL,0x2a1139000a13120bL,0x1130034202030430L,0x454f39480b2f420bL,0x11030611304f4847L,0x420d2a0b1a720360L,0x470b0313300b5f39L,0x602031a08080a00L,0x603942051d0b0d1dL,0xb00060069691304L,0x112a082b3a420b08L,0x112a062b03114203L,0x3003390603293a09L,0xb060b080403302aL,0x112b131303090b08L,0x32c02002a004208L,0x2a03001d2b064208L,0x171c872a0b080839L,0x538703536b530317L,0x53171e177f035317L,0x7f7f257f1e1e7f68L,0x31717537f6b875cL,0x3877f1703530387L,0x871c6b037f68536bL,0x30a030b0d000810L,0xa13120b0d061d08L,0x20304302a113900L,0xb2f420b11300342L,0x304f4847454f3948L,0x1a72036011030611L,0x300b5f39420d2a0bL,0x8080a00470b0313L,0x1d0b0d1d0602031aL,0x6969130460394205L,0x44b02aacc2030600L,0x513db0113d390b52L,0x1141440f3d390252L,0xc51bfafbf51ad2eL,0x110fc2acc2022aacL,0x3903b00b3d529999L,0x522eb00b51300903L,0xc2ac0badaf11039bL,0x2e3d000311062a39L,0x51033d11110b0011L,0x202511a3d030903L,0x3062a1303510451L,0x311000b0311113dL,0x31a112e030b0303L,0xd0008100b060600L,0xd061d08030a030bL,0x2a1139000a13120bL,0x1130034202030430L,0x454f39480b2f420bL,0x11030611304f4847L,0x420d2a0b1a720360L,0x470b0313300b5f39L,0x602031a08080a00L,0x603942051d0b0d1dL,0xc203060069691304L,0x3d390b5244b02aacL,0x3d390252513db011L,0xbf51ad2e1141440fL,0xc2022aac0c51bfafL,0x3d529999110fc2acL,0x513009033903b00bL,0xaf11039b522eb00bL,0x1a1c6939c2ac0badL,0x538703536f810317L,0x811719178a06811aL,0x7f8a258a1e1e8a68L,0x61a1a817f6b695cL,0x6877f1706530387L,0x871c6b037f68536fL,0x30a030b0d000810L,0xa13120b0d061d08L,0x20304302a113900L,0xb2f420b11300342L,0x884f4847454f3948L,0x186317661a061c1aL,0x88877b836090691dL,0x84848903741d0620L,0x1687901602051718L,0x67675c0766836004L,0x3a600b0887000203L,0x171a4203111d082bL,0x3293a091a2a0618L,0x41730693003391cL,0x6050b8487060b84L,0x1d006002112b135cL,0x1806420203200203L,0xb0808392a06031dL,0x611030603020b2aL,0x17001a06110b0011L,0x50217181a060203L,0x171c0b2003030403L,0x31a001d03060311L,0x3181a1c001d1703L,0xd0008100b020603L,0xd061d08030a030bL,0x2a1139000a13120bL,0x1130034202030430L,0x454f39480b2f420bL,0x1a061c1a884f4847L,0x6090691d18631766L,0x741d062088877b83L,0x205171884848903L,0x6683600416879016L,0x8700020367675c07L,0x111d082b3a600b08L,0x1a2a0618171a4203L,0x3003391c03293a09L,0x87060b8404173069L,0x112b135c06050b84L,0x32002031d006002L,0x2a06031d18064202L,0x1709872a0b080839L,0x538703536b53111cL,0x681c1e175d03681cL,0x7f7f257f141e5d82L,0x111c17535d7c8756L,0x3725d1711680372L,0x87096b117f82687cL,0x30a030b0d000810L,0xa13120b0d061d08L,0x20304302a113900L,0xb2f420b11300342L,0x884f4847454f3948L,0x186317661a061c1aL,0x88877b836090691dL,0x84848903741d0620L,0x1687901602051718L,0x67675c0766836004L,0x44a62aac98030203L,0x3a2bb0113d3b0b52L,0x1141440f2b390243L,0xc3abfbdbf51ad29L,0x80dc2a998022aa9L,0x3b03a6053d529997L,0x432eb00551310906L,0xc2ac0badaf08069bL,0x2e3d030611022a39L,0x3a032b08110b0011L,0x5023a182b060903L,0x171c2a2003510451L,0x61a001d0608113dL,0x3181a29031d1703L,0xd0008100b020603L,0xd061d08030a030bL,0x2a1139000a13120bL,0x1130034202030430L,0x454f39480b2f420bL,0x1a061c1a884f4847L,0x6090691d18631766L,0x741d062088877b83L,0x205171884848903L,0x6683600416879016L,0x9803020367675c07L,0x3d3b0b5244a62aacL,0x2b3902433a2bb011L,0xbf51ad291141440fL,0x98022aa90c3abfbdL,0x3d529997080dc2a9L,0x513109063b03a605L,0xaf08069b432eb005L,0x1a096939c2ac0badL,0x538703536f81111cL,0x781c19178b067813L,0x7f8a258a141e8b82L,0x8131a815d7c6956L,0x6725d1708680372L,0x87096b117f826864L,0x60a030b0d000810L,0x2620211d12021613L,0x60005200b061d03L,0x80a0802032c0313L,0x5f47160d31122a3bL,0x1316035f06030203L,0x560b5669080d0b13L,0x13080a030d090009L,0xd1d121d0608061aL,0x6972200d60721305L,0x3a0808130b030800L,0x6060800062c063aL,0x319291303191a2bL,0x14032c0b20032a02L,0x3130b131d060208L,0x1900130803292020L,0x2c02131306190603L,0x1d081a1d0b000016L,0x20600030308022cL,0x300030303020306L,0x806061a06000600L,0x602080906030506L,0x303000900000003L,0x313060203130303L,0xd00081008060203L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306000520L,0x31122a3b080a0802L,0x60302035f47160dL,0x80d0b131316035fL,0xd090009560b5669L,0x608061a13080a03L,0x607213050d1d121dL,0xb0308006972200dL,0x62c063a3a080813L,0x3191a2b06060800L,0x20032a0203192913L,0x1d06020814032c0bL,0x329202003130b13L,0x619060319001308L,0xb0000162c021313L,0x51423f2c1d081a1dL,0x7f3f516b3f6b0351L,0x6b032e037f037f51L,0x6b7f376b422e6b68L,0x303037f6b3f8440L,0x515c7f51517f0340L,0x841c3f517f5c6b3fL,0x60a030b0d000810L,0x2620211d12021613L,0x60005200b061d03L,0x80a0802032c0313L,0x5f47160d31122a3bL,0x1316035f06030203L,0x560b5669080d0b13L,0x13080a030d090009L,0xd1d121d0608061aL,0x6972200d60721305L,0x44ac4299c2170800L,0x2e2eac032e300244L,0x171b4120511b1852L,0x2251bec2c451af1eL,0x1720c2999b021eacL,0x1b03990b5141c4c4L,0x301e99202e1b1c17L,0x9bac189bc20303aaL,0x1e2e000317081e30L,0x5103511703020306L,0x8062e1a2e001c00L,0x60242090651052eL,0x1703000903030351L,0x313061e17130303L,0xd00081008060203L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306000520L,0x31122a3b080a0802L,0x60302035f47160dL,0x80d0b131316035fL,0xd090009560b5669L,0x608061a13080a03L,0x607213050d1d121dL,0xc21708006972200dL,0x2e30024444ac4299L,0x511b18522e2eac03L,0xc451af1e171b4120L,0x9b021eac2251bec2L,0x5141c4c41720c299L,0x2e1b1c171b03990bL,0xc20303aa301e9920L,0x3a4234309bac189bL,0x7f3f516b346f0351L,0x6f0329038a068a3aL,0x6b8a376f422e6f68L,0x606068a6b3f6040L,0x3a5c7f513a7f0340L,0x841c3f517f5c6b34L,0x60a030b0d000810L,0x2620211d12021613L,0x60005200b061d03L,0x80a0802032c0313L,0x7b47160d31122a3bL,0x2070177b1c110917L,0x9187916784908720L,0x5c848911900f030fL,0xa728d16020b1c18L,0x6763560a66635c04L,0x3a84081387030b03L,0x1c1c08000620063aL,0x319291317191a18L,0x14172c8720032a09L,0x110b0b5c72060284L,0xf005c0203292056L,0x2002130b060f0611L,0x1d081a1d0b030316L,0x2060311030b022cL,0x1700171103020306L,0xb061c181c030600L,0x1c09080f06030506L,0x1117000f03030003L,0x3201c0903201703L,0xd00081008020211L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306000520L,0x31122a3b080a0802L,0x1c1109177b47160dL,0x849087202070177bL,0x900f030f91879167L,0x20b1c185c848911L,0x66635c040a728d16L,0x87030b036763560aL,0x620063a3a840813L,0x17191a181c1c0800L,0x20032a0903192913L,0x7206028414172c87L,0x3292056110b0b5cL,0x60f06110f005c02L,0xb0303162002130bL,0x512a3f2c1d081a1dL,0x7f3f516b3f6b113dL,0x7c112e035d035d3dL,0x6b7f376b2a2e7c82L,0x1111037f7c40844eL,0x51565d513d5d034eL,0x84093f3d7f567c40L,0x60a030b0d000810L,0x2620211d12021613L,0x60005200b061d03L,0x80a0802032c0313L,0x7b47160d31122a3bL,0x2070177b1c110917L,0x9187916784908720L,0x5c848911900f030fL,0xa728d16020b1c18L,0x6763560a66635c04L,0x44a9429998170b03L,0x2929ac032e310244L,0x171b41203a1b1843L,0x223abe98c451af19L,0x1a1dc29792021ea9L,0x150397055141c4aeL,0x311e991d2e151c1aL,0x9bac189bc20606aaL,0x1e2e0311170b1e30L,0x3a033a1a03020306L,0xb06291829031c00L,0x1c09420f0651052eL,0x1a17000f06060351L,0x3201c1917201703L,0xd00081008020211L,0x12021613060a030bL,0xb061d032620211dL,0x32c031306000520L,0x31122a3b080a0802L,0x1c1109177b47160dL,0x849087202070177bL,0x900f030f91879167L,0x20b1c185c848911L,0x66635c040a728d16L,0x98170b036763560aL,0x2e31024444a94299L,0x3a1b18432929ac03L,0xc451af19171b4120L,0x92021ea9223abe98L,0x5141c4ae1a1dc297L,0x2e151c1a15039705L,0xc20606aa311e991dL,0x3a2a34309bac189bL,0x7f3f516b346f113dL,0x641129038b068b2bL,0x6b8a376f2a2e6482L,0x808068a7c40604eL,0x3a565d512b5d034eL,0x84093f3d7f567c4aL,0x60a030b0d000810L,0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,0x304f4d47454b3948L,0x1316035f08060211L,0x310b5639420d2a0bL,0x13080a0347050309L,0xd1d121d0602061aL,0x69722004603b2c05L,0x3a420b130b030800L,0x6084203082a082bL,0x619290911141a2bL,0x403302a31033902L,0x6090b131d060508L,0x14002c08112c2020L,0x2c022c1306190203L,0x1d08133b2a030016L,0x20800060608052aL,0x300110611050308L,0x202061a08030203L,0x6020b0906030406L,0x311000500030311L,0x3130802030b0306L,0xd0008100b060203L,0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,0x8060211304f4d47L,0x420d2a0b1316035fL,0x47050309310b5639L,0x602061a13080a03L,0x603b2c050d1d121dL,0xb03080069722004L,0x82a082b3a420b13L,0x11141a2b06084203L,0x3103390206192909L,0x1d0605080403302aL,0x112c202006090b13L,0x619020314002c08L,0x2a0300162c022c13L,0x2e42372a1d08133bL,0x533751843f84032eL,0x84171e177f03532eL,0x6b7f256b1e1e6b68L,0x31717536b3f8740L,0x51877f2e51530337L,0x871c3f517f5c843fL,0x60a030b0d000810L,0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,0x304f4d47454b3948L,0x1316035f08060211L,0x310b5639420d2a0bL,0x13080a0347050309L,0xd1d121d0602061aL,0x69722004603b2c05L,0x44b02a99c2170800L,0x2e42b01142390b52L,0x1c1b410f3d221852L,0xc51bfafbb51ad1eL,0x1c0fc2999b0214acL,0x2203be0b3d30c4c4L,0x301ebe202e1b0917L,0x9bac20b5af1103aaL,0x1e4200061c081439L,0x51033d1c11050308L,0x2022e1a42030903L,0x6022a090651042eL,0x171100050311113dL,0x313081e170b0306L,0xd0008100b060203L,0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,0x8060211304f4d47L,0x420d2a0b1316035fL,0x47050309310b5639L,0x602061a13080a03L,0x603b2c050d1d121dL,0xc217080069722004L,0x42390b5244b02a99L,0x3d2218522e42b011L,0xbb51ad1e1c1b410fL,0x9b0214ac0c51bfafL,0x3d30c4c41c0fc299L,0x2e1b09172203be0bL,0xaf1103aa301ebe20L,0x294232399bac20b5L,0x533751843460032eL,0x601719178a068129L,0x6b8a256f1e1e6f68L,0x61a1a816b3f6940L,0x3a877f2e3a530337L,0x871c3f517f5c8434L,0x60a030b0d000810L,0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,0x884f4d47454b3948L,0x2070177b1308091aL,0x5b8791836090691dL,0x5c848911740d060fL,0xa728d1602051c18L,0x6763560766805f04L,0x3a600b1387030b03L,0x1c134203081d082bL,0x61929091a141a18L,0x417306931033909L,0x8050b5c72060584L,0xd005f02112c2056L,0x20022c0b060f0211L,0x1d08133b2a060316L,0x2080308060b052aL,0x17001a0811050308L,0x5021c1813060203L,0x1c090b0f06030406L,0x111a000d03060311L,0x3201309031d1706L,0xd0008100b020211L,0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,0x1308091a884f4d47L,0x6090691d2070177bL,0x740d060f5b879183L,0x2051c185c848911L,0x66805f040a728d16L,0x87030b0367635607L,0x81d082b3a600b13L,0x1a141a181c134203L,0x3103390906192909L,0x7206058404173069L,0x112c205608050b5cL,0x60f02110d005f02L,0x2a06031620022c0bL,0x2e2a372a1d08133bL,0x533751843f841142L,0x5c1c1e175d036842L,0x6b7f256b141e7c82L,0x111c17537c40874eL,0x51725d2e3d680347L,0x87093f3d7f565c40L,0x60a030b0d000810L,0x2620211d12021613L,0x20304312a083b03L,0xb2f42051130062cL,0x884f4d47454b3948L,0x2070177b1308091aL,0x5b8791836090691dL,0x5c848911740d060fL,0xa728d1602051c18L,0x6763560766805f04L,0x44a62a9998170b03L,0x292cb011423b0b52L,0x1c1b410f2b221843L,0xc3abfbdbb51ad19L,0x130dc297920214a9L,0x1203a4053d30c4aeL,0x311ebe1d2e15091aL,0x9bac20b5af0806aaL,0x1e4203081c0b1439L,0x3a032b1311050308L,0x50229182c060903L,0x1c092a0f0651042eL,0x1a1a000d0608113dL,0x3201319171d1706L,0xd0008100b020211L,0x12021613060a030bL,0x2a083b032620211dL,0x1130062c02030431L,0x454b39480b2f4205L,0x1308091a884f4d47L,0x6090691d2070177bL,0x740d060f5b879183L,0x2051c185c848911L,0x66805f040a728d16L,0x98170b0367635607L,0x423b0b5244a62a99L,0x2b221843292cb011L,0xbb51ad191c1b410fL,0x920214a90c3abfbdL,0x3d30c4ae130dc297L,0x2e15091a1203a405L,0xaf0806aa311ebe1dL,0x292a32399bac20b5L,0x5337518434601142L,0x5f1c19178b06782cL,0x6b8a256f141e6482L,0x8131a817c40694eL,0x3a725d2e2b680347L,0x87093f3d7f565c4aL,0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,0x4a25120415251915L,0x3a47033403030803L,0x4a024a4a0204022bL,0x2020403042c032cL,0x310904433a2b033aL,0x344a093b344a0243L,0x8a021a0202033a03L,0x303020303788a8aL,0x3608a78035f8a8bL,0x7203190219031908L,0x3780202098a1302L,0x5f03028b038a0909L,0x8b08028b035f1a03L,0x9028a190203030dL,0x8030303033a1378L,0x303030303130303L,0x2b1a033a03031a03L,0x3081a2c03031d03L,0x303032c03030303L,0x33a0308032b0303L,0x40302011a3a0803L,0x4080d0203040302L,0x20319030c090c09L,0x31903021a031d19L,0x152519151a250213L,0x30308034a251204L,0x204022b3a470334L,0x42c032c4a024a4aL,0x3a2b033a02020403L,0x344a024331090443L,0x2033a03344a093bL,0x3788a8a8a021a02L,0x35f8a8b03030203L,0x1903190803608a78L,0x98a130272031902L,0x38a090903780202L,0x35f1a035f03028bL,0x203030d8b08028bL,0xb6a3997809028a19L,0xb699b6b6acb6b6b6L,0xb6b6b9b6b6b6b6b6L,0xb6b69bb695b9b6a3L,0xb6b6b6b6b6acb9beL,0xb695b6b6b6b6b6beL,0xb9a3acb6b6a3b6acL,0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,0x4a25120415251915L,0x3a47033403030803L,0x4a024a4a0204022bL,0x2020403042c032cL,0x310904433a2b033aL,0x344a093b344a0243L,0x738f688f8f7f3a03L,0x7f7f8f7f7f8e7373L,0x7f66738e7f7b735aL,0x637f868f867f8684L,0x7f8e8f8f55735c8fL,0x7b7f8f5a7f735555L,0x5a848f5a7f7b687fL,0x558f73868f7f7f90L,0x847f03037f3a5c8eL,0x7f7f7f7f03130303L,0x2b1a7f3a7f036803L,0x308682c037f1d7fL,0x7f03032c7f7f7f7fL,0x33a03847f2b0303L,0x40302011a3a0803L,0x4080d0203040302L,0x20319030c090c09L,0x31903021a031d19L,0x152519151a250213L,0x30308034a251204L,0x204022b3a470334L,0x42c032c4a024a4aL,0x3a2b033a02020403L,0x344a024331090443L,0x8f7f3a03344a093bL,0x7f8e7373738f688fL,0x7f7b735a7f7f8f7fL,0x867f86847f66738eL,0x55735c8f637f868fL,0x7f7355557f8e8f8fL,0x7f7b687f7b7f8f5aL,0x8f7f7f905a848f5aL,0x9fa3978e558f7386L,0xb699b6b6a99fb6b6L,0x9fb694b69f9f9f9fL,0xb69f9b9f95b99fa3L,0x9f9f9f9fb6ac94beL,0x9f95b6b69fb6b6beL,0xb9a3acb6b6a3b6a9L,0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,0x2d25120415251915L,0x444f514c51514251L,0x2d3f2d2d3f333f52L,0x3f3f335133305130L,0x4540334944525144L,0x4c2d40484c2d3f49L,0x8a3f1a023f034451L,0x5151020303528a8aL,0x3608a78515f8a44L,0x7251193f19031942L,0x5152023f408a133fL,0x30033f44038a0940L,0x4408024403301a51L,0x9028a190251510dL,0x803515103441378L,0x5103515103130303L,0x521a514451511a03L,0x51421a3003031d03L,0x5151033051510303L,0x344514203525103L,0x40302011a440851L,0x4080d0203040302L,0x20319030c090c09L,0x31903021a031d19L,0x152519151a250213L,0x515142512d251204L,0x3f333f52444f514cL,0x333051302d3f2d2dL,0x445251443f3f3351L,0x4c2d3f4945403349L,0x3f0344514c2d4048L,0x3528a8a8a3f1a02L,0x515f8a4451510203L,0x1903194203608a78L,0x408a133f7251193fL,0x38a09405152023fL,0x3301a5130033f44L,0x251510d44080244L,0xb6c3997809028a19L,0xb699b6b6acb69696L,0x9696b9b696b69696L,0xb6b69bb693b996c3L,0x9696b6b696b0b9bfL,0xb69396b69696b6bfL,0xb9c3ac96b6c396b0L,0x304030204030201L,0xc090c0904080d02L,0x1a031d1902031903L,0x1a25021303190302L,0x2d25120415251915L,0x444f514c51514251L,0x2d3f2d2d3f333f52L,0x3f3f335133305130L,0x4540334944525144L,0x4c2d40484c2d3f49L,0x7371688f717f4451L,0x8a8a8f7f7f857373L,0x7f66738e8a7b737dL,0x638a8671867f8660L,0x8a858f7175735c71L,0x887f717d7f735575L,0x7d848f7d7f88688aL,0x558f73868f8a8a90L,0x847f51517f445c8eL,0x8a7f8a8a03130303L,0x521a8a448a516803L,0x51426830037f1d7fL,0x8a5103308a8a7f7fL,0x34451607f525103L,0x40302011a440851L,0x4080d0203040302L,0x20319030c090c09L,0x31903021a031d19L,0x152519151a250213L,0x515142512d251204L,0x3f333f52444f514cL,0x333051302d3f2d2dL,0x445251443f3f3351L,0x4c2d3f4945403349L,0x717f44514c2d4048L,0x7f8573737371688fL,0x8a7b737d8a8a8f7fL,0x867f86607f66738eL,0x75735c71638a8671L,0x7f7355758a858f71L,0x7f88688a887f717dL,0x8f8a8a907d848f7dL,0x9fc3978e558f7386L,0xb699b6b6a99f9696L,0xb49694b6b49fb4b4L,0xb69f9b9f93b9b4c3L,0xb4b49f9f96b094bfL,0x9f9396b6b496b6bfL,0xb9c3ac96b6c396a6L,0x304030204030201L,0xc090c0904080d02L,0x1817161b1e171b03L,0x18271e20171b171eL,0x1b27212524271b24L,0x3a47033417170817L,0x1b024a1b1e041e18L,0x20204032520172cL,0x310904433a18033aL,0x344a0916341b1e43L,0x8a1e180202033a03L,0x3171e1717828b8bL,0x17608a8217568a8bL,0x16031b1e1b031b08L,0x17820202098a2002L,0x56031e8b178b0909L,0x8b081e8b035f1803L,0x9028b1b1e17030dL,0x8170317173a2082L,0x303171717200317L,0x1818033a17171817L,0x308182c03031603L,0x317032003171717L,0x33a170803180317L,0x4030201183a0803L,0x4080d0203040302L,0x1e171b030c090c09L,0x171b171e1817161bL,0x24271b2418271e20L,0x171708171b272125L,0x1e041e183a470334L,0x2520172c1b024a1bL,0x3a18033a02020403L,0x341b1e4331090443L,0x2033a03344a0916L,0x17828b8b8a1e1802L,0x17568a8b03171e17L,0x1b031b0817608a82L,0x98a200216031b1eL,0x178b090917820202L,0x35f180356031e8bL,0x1e17030d8b081e8bL,0xa1a3c48209028b1bL,0xa1c4b6a1aca1b6a1L,0xa1a1a7a1b6b6a1a1L,0xb6b6aab6a7a7b6a3L,0xb6a1a1a1b6aca7beL,0xb6a7b6a1b6a1b6c4L,0xa7a3acb6b6a3a1acL,0x304030204030201L,0xc090c0904080d02L,0x1817161b1e171b03L,0x18271e20171b171eL,0x1b27212524271b24L,0x3a47033417170817L,0x1b024a1b1e041e18L,0x20204032520172cL,0x310904433a18033aL,0x344a0916341b1e43L,0x735e828f8f7f3a03L,0x7f5d5e5d5d655a5aL,0x5d6673655d91735aL,0x707f6e5e6e7f6e84L,0x5d658f8f5573568fL,0x917f5e5a5d5a5555L,0x5a845e5a7f7b827fL,0x558f5a6e5e5d7f90L,0x845d03175d3a5665L,0x7f7f5d5d17200317L,0x18187f3a5d178217L,0x308822c037f167fL,0x7f1703207f5d5d5dL,0x33a17847f180317L,0x4030201183a0803L,0x4080d0203040302L,0x1e171b030c090c09L,0x171b171e1817161bL,0x24271b2418271e20L,0x171708171b272125L,0x1e041e183a470334L,0x2520172c1b024a1bL,0x3a18033a02020403L,0x341b1e4331090443L,0x8f7f3a03344a0916L,0x5d655a5a735e828fL,0x5d91735a7f5d5e5dL,0x6e7f6e845d667365L,0x5573568f707f6e5eL,0x5d5a55555d658f8fL,0x7f7b827f917f5e5aL,0x5e5d7f905a845e5aL,0xb2a3ae65558f5a6eL,0xa1c4b6a1a9b2b6a1L,0xb2a1a2a19f9fb2b2L,0xb69faa9fa7a79fa3L,0x9fb2b2b2b6aca2beL,0x9fa7b6a19fa1b6c4L,0xa7a3acb6b6a3a1a9L,0x304030204030201L,0xc090c0904080d02L,0x1817161b1e171b03L,0x18271e20171b171eL,0x2827212524271b24L,0x444f514c3a3a423aL,0x283f2d2834333443L,0x3f3f33513c313a30L,0x4540334944435144L,0x4c2d404d4c283449L,0x8a3418023f034451L,0x513a1e1717438b8bL,0x17608a823a568a44L,0x16511b341b031b42L,0x3a43023f408a203fL,0x31033444178b0940L,0x44081e4403301851L,0x9028b1b1e3a510dL,0x817513a17442082L,0x51033a3a17200317L,0x431851443a3a1817L,0x5142183003031603L,0x513a0331513a1717L,0x3443a4203435117L,0x403020118440851L,0x4080d0203040302L,0x1e171b030c090c09L,0x171b171e1817161bL,0x24271b2418271e20L,0x3a3a423a28272125L,0x34333443444f514cL,0x3c313a30283f2d28L,0x444351443f3f3351L,0x4c28344945403349L,0x3f0344514c2d404dL,0x17438b8b8a341802L,0x3a568a44513a1e17L,0x1b031b4217608a82L,0x408a203f16511b34L,0x178b09403a43023fL,0x330185131033444L,0x1e3a510d44081e44L,0xa1c3c48209028b1bL,0xa1c4b6a1aca196a3L,0xa3a3a7a196b6a3a3L,0xb6b6aab6a8a796c3L,0x96a3a1a196b0a7bfL,0xb6a896a196a3b6bbL,0xa7c3ac96b6c3a3b0L,0x304030204030201L,0xc090c0904080d02L,0x1817161b1e171b03L,0x18271e20171b171eL,0x2827212524271b24L,0x444f514c3a3a423aL,0x283f2d2834333443L,0x3f3f33513c313a30L,0x4540334944435144L,0x4c2d404d4c283449L,0x7357828f717f4451L,0x8a8b5e5d5d775a5aL,0x5d6673658b91737dL,0x708a6e576e7f6e60L,0x8b778f7175735671L,0x5b7f577d5d5a5575L,0x7d845e7d7f88828aL,0x558f5a6e5e8b8a90L,0x845d513a5d445665L,0x8a7f8b8b17200317L,0x43188a448b3a8217L,0x51428230037f167fL,0x8a3a03318a8b5d5dL,0x3443a607f435117L,0x403020118440851L,0x4080d0203040302L,0x1e171b030c090c09L,0x171b171e1817161bL,0x24271b2418271e20L,0x3a3a423a28272125L,0x34333443444f514cL,0x3c313a30283f2d28L,0x444351443f3f3351L,0x4c28344945403349L,0x717f44514c2d404dL,0x5d775a5a7357828fL,0x8b91737d8a8b5e5dL,0x6e7f6e605d667365L,0x75735671708a6e57L,0x5d5a55758b778f71L,0x7f88828a5b7f577dL,0x5e8b8a907d845e7dL,0xb2c3ae65558f5a6eL,0xa1c4b6a1a9b296a3L,0xb3a3a2a1b49fb3b3L,0xb69faa9fa8a7b4c3L,0xb4b3b2b296b0a2bfL,0x9fa896a1b4a3b6bbL,0xa7c3ac96b6c3a3a6L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x1a031d0f02110f11L,0x1a0c020b03191109L,0x4a250a04150c1915L,0x2b0a034a11110b03L,0x4e024e4a0204022bL,0x9020c11042a032aL,0x3b0f0c433a2b113aL,0x344e0f3b344e0943L,0x8a021a0902112b03L,0x1111020311788a8aL,0x116981780369818bL,0x720319020f03190bL,0x117802090f8a0b02L,0x6903098b03810f0fL,0x780b097811691a11L,0xf02810f0203030aL,0xb110311112b0b78L,0x3030311030b1111L,0x2b1a113a11031a03L,0x110b1a2a11031d11L,0x1103032a03030303L,0x32b110b112b0311L,0x40302011a3a0b11L,0xc0b0a09110c0302L,0x2110f110e0f0e0fL,0x31911091a031d0fL,0x150c19151a0c020bL,0x11110b034a250a04L,0x204022b2b0a034aL,0x42a032a4e024e4aL,0x3a2b113a09020c11L,0x344e09433b0f0c43L,0x2112b03344e0f3bL,0x11788a8a8a021a09L,0x369818b11110203L,0xf03190b11698178L,0xf8a0b0272031902L,0x3810f0f11780209L,0x11691a116903098bL,0x203030a780b0978L,0x9a95c2780f02810fL,0xb6c29a9ac29ab69aL,0x9ab6b9b6b6b6b69aL,0x9ab69b9a95b99aa3L,0xb6b6b6b69ac2b9afL,0x9a95b69a9ab6b6afL,0xb9a3c29ab6959ac2L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x1a031d0f02110f11L,0x1a0c020b03191109L,0x4a250a04150c1915L,0x2b0a034a11110b03L,0x4e024e4a0204022bL,0x9020c11042a032aL,0x3b0f0c433a2b113aL,0x344e0f3b344e0943L,0x738f68558f532b03L,0x53538f7f538e7373L,0x5367628e7f67625aL,0x637f868f7a7f8687L,0x538e8f557a73878fL,0x677f555a7f627a7aL,0x8e87558e53676853L,0x7a8f627a8f7f7f89L,0x87530311532b878eL,0x7f7f7f53030b1111L,0x2b1a533a53036803L,0x110b682a117f1d53L,0x5303032a7f7f7f7fL,0x32b1187532b0311L,0x40302011a3a0b11L,0xc0b0a09110c0302L,0x2110f110e0f0e0fL,0x31911091a031d0fL,0x150c19151a0c020bL,0x11110b034a250a04L,0x204022b2b0a034aL,0x42a032a4e024e4aL,0x3a2b113a09020c11L,0x344e09433b0f0c43L,0x8f532b03344e0f3bL,0x538e7373738f6855L,0x7f67625a53538f7fL,0x7a7f86875367628eL,0x7a73878f637f868fL,0x7f627a7a538e8f55L,0x53676853677f555aL,0x8f7f7f898e87558eL,0xbc95988e7a8f627aL,0xb6c29a9a98bcb69aL,0xbcb694b69f9f9fbcL,0x9a9f9bbc95b9bca3L,0x9f9f9f9f9ac294afL,0xbc95b69abcb6b6afL,0xb9a3c29ab6959a98L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x1a031d0f02110f11L,0x1a0c020b03191109L,0x2d250a04150c1915L,0x522f512d3d3d2a51L,0x363f362d3f333f52L,0x403f463d33395139L,0x484e464944523d44L,0x4c364e484c364049L,0x8a3f1a093f115251L,0x3d3d020311528a8aL,0x1169817851698144L,0x7251193f0f03192aL,0x3d5202404e8a0b3fL,0x3903404403810f4eL,0x520b095211391a3dL,0xf02810f0251510aL,0xb11513d11520b78L,0x5103513d030b1111L,0x521a3d443d511a03L,0x3d2a1a3911031d11L,0x3d51033951510303L,0x3523d2a11525111L,0x40302011a440b3dL,0xc0b0a09110c0302L,0x2110f110e0f0e0fL,0x31911091a031d0fL,0x150c19151a0c020bL,0x3d3d2a512d250a04L,0x3f333f52522f512dL,0x33395139363f362dL,0x44523d44403f463dL,0x4c364049484e4649L,0x3f1152514c364e48L,0x11528a8a8a3f1a09L,0x516981443d3d0203L,0xf03192a11698178L,0x4e8a0b3f7251193fL,0x3810f4e3d520240L,0x11391a3d39034044L,0x251510a520b0952L,0x9a93c2780f02810fL,0xb6c29a9ac29a96c1L,0xc196b9b696b696c1L,0x9ab69b9a93b9c1c3L,0x9696b6b6c1afb9adL,0x9a93969ac196b6adL,0xb9c3c2c1b693c1afL,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x1a031d0f02110f11L,0x1a0c020b03191109L,0x2d250a04150c1915L,0x522f512d3d3d2a51L,0x363f362d3f333f52L,0x403f463d33395139L,0x484e464944523d44L,0x4c364e484c364049L,0x7371685571535251L,0x81818f7f53857373L,0x5367628e8a67627dL,0x638a86717a7f8669L,0x81858f7579738771L,0x837f757d7f627a79L,0x8587558553836881L,0x7a8f627a8f8a8a89L,0x8753513d5352878eL,0x8a7f8a81030b1111L,0x521a814481516803L,0x3d2a6839117f1d53L,0x815103398a8a7f7fL,0x3523d6953525111L,0x40302011a440b3dL,0xc0b0a09110c0302L,0x2110f110e0f0e0fL,0x31911091a031d0fL,0x150c19151a0c020bL,0x3d3d2a512d250a04L,0x3f333f52522f512dL,0x33395139363f362dL,0x44523d44403f463dL,0x4c364049484e4649L,0x715352514c364e48L,0x5385737373716855L,0x8a67627d81818f7fL,0x7a7f86695367628eL,0x79738771638a8671L,0x7f627a7981858f75L,0x53836881837f757dL,0x8f8a8a8985875585L,0xbc93988e7a8f627aL,0xb6c29a9a98bc96c1L,0xb89694b6b49fb4b8L,0x9a9f9bbc93b9b8c3L,0xb4b49f9fc1af94adL,0xbc93969ab896b6adL,0xb9c3c2c1b693c1bdL,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x181716151e1a1511L,0x18231e1d171b1a19L,0x1b27262524231b24L,0x2b0a034a1a1a0b17L,0x15024e1b1e041e18L,0x9020c11251d172aL,0x3b0f0c433a18113aL,0x344e0f1634151943L,0x8a1e180902112b03L,0x111a1e171a828b8bL,0x1a6981821772818bL,0x16031b1e15031b0bL,0x1a8202090f8a1d02L,0x7203198b17780f0fL,0x780b197811691811L,0xf0278151e17030aL,0xb1a031a1a2b1d82L,0x303171a171d111aL,0x1818113a1a171817L,0x110b182a11031611L,0x1117031d03171717L,0x32b1a0b1118031aL,0x4030201183a0b11L,0xc0b0a09110c0302L,0x1e1a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,0x1a1a0b171b272625L,0x1e041e182b0a034aL,0x251d172a15024e1bL,0x3a18113a09020c11L,0x341519433b0f0c43L,0x2112b03344e0f16L,0x1a828b8b8a1e1809L,0x1772818b111a1e17L,0x15031b0b1a698182L,0xf8a1d0216031b1eL,0x17780f0f1a820209L,0x116918117203198bL,0x1e17030a780b1978L,0xb9959b820f027815L,0xa19b9ab9c2b9b6b9L,0xb9a1a7a1b6b6a1b9L,0x9ab6aa9aa7a79aa3L,0xb6a1a1a19ac2a7afL,0x9aa7b6b99aa1b69bL,0xa7a3c29ab695b9c2L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x181716151e1a1511L,0x18231e1d171b1a19L,0x1b27262524231b24L,0x2b0a034a1a1a0b17L,0x15024e1b1e041e18L,0x9020c11251d172aL,0x3b0f0c433a18113aL,0x344e0f1634151943L,0x735e82558f532b03L,0x53685e5d68655a5aL,0x686762655d63625aL,0x707f6e5e6c7f6e87L,0x68658f557a73728fL,0x637f865a5d8e7a7aL,0x8e87868e53678253L,0x7a8f8e6c5e5d7f89L,0x8768031a682b7265L,0x7f7f5d68171d111aL,0x1818533a68178217L,0x110b822a117f1653L,0x5317031d7f5d5d5dL,0x32b1a875318031aL,0x4030201183a0b11L,0xc0b0a09110c0302L,0x1e1a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,0x1a1a0b171b272625L,0x1e041e182b0a034aL,0x251d172a15024e1bL,0x3a18113a09020c11L,0x341519433b0f0c43L,0x8f532b03344e0f16L,0x68655a5a735e8255L,0x5d63625a53685e5dL,0x6c7f6e8768676265L,0x7a73728f707f6e5eL,0x5d8e7a7a68658f55L,0x53678253637f865aL,0x5e5d7f898e87868eL,0x949592657a8f8e6cL,0xa19b9ab99894b6b9L,0x94a1a2a19f9fb294L,0x9a9faabca7a7bca3L,0x9fb2b2b29ac2a2afL,0xbca7b6b9bca1b69bL,0xa7a3c29ab695b998L,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x181716151e1a1511L,0x18231e1d171b1a19L,0x2827262524231b24L,0x522f512d2b2b2a3aL,0x383f362834333443L,0x403f463d3c3b3a39L,0x484e464944433d44L,0x4c364e4d4c384a49L,0x8a3418093f115251L,0x3d2b1e171a438b8bL,0x1a6981823a728144L,0x16511b3415031b2aL,0x2b4302404e8a1d3fL,0x3b034a4417780f4eL,0x520b19521139183dL,0xf0278151e3a510aL,0xb1a512b1a521d82L,0x51033a2b171d111aL,0x43183d442b3a1817L,0x3d2a183911031611L,0x3d3a033b513a1717L,0x3522b2a1143511aL,0x403020118440b3dL,0xc0b0a09110c0302L,0x1e1a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,0x2b2b2a3a28272625L,0x34333443522f512dL,0x3c3b3a39383f3628L,0x44433d44403f463dL,0x4c384a49484e4649L,0x3f1152514c364e4dL,0x1a438b8b8a341809L,0x3a7281443d2b1e17L,0x15031b2a1a698182L,0x4e8a1d3f16511b34L,0x17780f4e2b430240L,0x1139183d3b034a44L,0x1e3a510a520b1952L,0xb9939b820f027815L,0xa19b9ab9c2b99695L,0x95a3a7a196b6a395L,0x9ab6aa9aa8a7c1c3L,0x96a3a1a1c1afa7adL,0x9aa896b9c1a3b6b5L,0xa7c3c2c1b69395afL,0x110c030204030201L,0xe0f0e0f0c0b0a09L,0x181716151e1a1511L,0x18231e1d171b1a19L,0x2827262524231b24L,0x522f512d2b2b2a3aL,0x383f362834333443L,0x403f463d3c3b3a39L,0x484e464944433d44L,0x4c364e4d4c384a49L,0x7357825571535251L,0x81785e5d68775a5aL,0x686762658b63627dL,0x708a6e576c7f6e69L,0x78778f7579737271L,0x807f7e7d5d8e7a79L,0x8587868553838281L,0x7a8f8e6c5e8b8a89L,0x8768512b68527265L,0x8a7f8b78171d111aL,0x43188144783a8217L,0x3d2a8239117f1653L,0x813a033b8a8b5d5dL,0x3522b695343511aL,0x403020118440b3dL,0xc0b0a09110c0302L,0x1e1a15110e0f0e0fL,0x171b1a1918171615L,0x24231b2418231e1dL,0x2b2b2a3a28272625L,0x34333443522f512dL,0x3c3b3a39383f3628L,0x44433d44403f463dL,0x4c384a49484e4649L,0x715352514c364e4dL,0x68775a5a73578255L,0x8b63627d81785e5dL,0x6c7f6e6968676265L,0x79737271708a6e57L,0x5d8e7a7978778f75L,0x53838281807f7e7dL,0x5e8b8a8985878685L,0x949392657a8f8e6cL,0xa19b9ab998949695L,0x9da3a2a1b49fb39dL,0x9a9faabca8a7b8c3L,0xb4b3b2b2c1afa2adL,0xbca896b9b8a3b6b5L,0xa7c3c2c1b69395bdL,0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,0x4a25120415251412L,0x2947063406030806L,0x4a054a320204052cL,0x2020703042c032cL,0x310504313a2b0629L,0x3232093b34320243L,0x6f02130205033a03L,0x6060203065f8a6fL,0x3606f78065f8a64L,0x7206190519061408L,0x3780502058a1302L,0x5f03028b066f0909L,0x6408028b065f1a03L,0x5028a140503030dL,0x8060303033a135fL,0x603060306130306L,0x2b1a062906031a03L,0x608132c06061d06L,0x306032c03030306L,0x6290608032c0603L,0x4030201133a0803L,0x4080d0206070605L,0x506140307090c05L,0x61903021a031d19L,0x1525141213070213L,0x60308064a251204L,0x204052c29470634L,0x42c032c4a054a32L,0x3a2b062902020703L,0x3432024331050431L,0x5033a033232093bL,0x65f8a6f6f021302L,0x65f8a6406060203L,0x1906140803606f78L,0x58a130272061905L,0x66f090903780502L,0x65f1a035f03028bL,0x503030d6408028bL,0xb6a3995f05028a14L,0xc099b6c0acc0b6b6L,0xc0b6b9b6c0b6c0b6L,0xc0c09bc095b9c0b7L,0xb6b6b6c0c0ac99beL,0xb6bec0b6b6c0b6beL,0x99a3acb6c0b7c0acL,0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,0x4a25120415251412L,0x2947063406030806L,0x4a054a320204052cL,0x2020703042c032cL,0x310504313a2b0629L,0x3232093b34320243L,0x588f5c8f767f3a03L,0x6b6b8f7f6b7b7358L,0x7f66588e6b7b7359L,0x636b8676866b8c84L,0x7f8e768f76735c8fL,0x7b7f8f5a6b585555L,0x59848f5a6b7b687fL,0x768f738c767f7f90L,0x846b03037f3a5c7bL,0x6b7f6b7f06130306L,0x2b1a6b296b036803L,0x6085c2c066b1d6bL,0x7f06032c7f7f7f6bL,0x62906847f2c0603L,0x4030201133a0803L,0x4080d0206070605L,0x506140307090c05L,0x61903021a031d19L,0x1525141213070213L,0x60308064a251204L,0x204052c29470634L,0x42c032c4a054a32L,0x3a2b062902020703L,0x3432024331050431L,0x767f3a033232093bL,0x6b7b7358588f5c8fL,0x6b7b73596b6b8f7fL,0x866b8c847f66588eL,0x76735c8f636b8676L,0x6b5855557f8e768fL,0x6b7b687f7b7f8f5aL,0x767f7f9059848f5aL,0x9fa3977b768f738cL,0xc099b6c0a9abb6b6L,0xabb694b6ab9fab9fL,0xc0ab9bab95b9abb7L,0x9f9f9fabc0ac97beL,0x9fbec0b69fc0b6beL,0x99a3acb6c0b7c0a9L,0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,0x2d25120415251412L,0x414f2e4c2e51422eL,0x2d372d503f333730L,0x3f3f3e5133305130L,0x4537334544522e41L,0x505040484c503f49L,0x6f3f130237034451L,0x2e2e020306308a6fL,0x3606f782e5f8a41L,0x722e193719061442L,0x5152053f378a133fL,0x30033f44066f0940L,0x4108024406301a51L,0x5028a140551510dL,0x80651510344135fL,0x2e032e5106130306L,0x521a2e412e511a03L,0x2e42133006061d06L,0x512e033051510306L,0x6412e4203302e03L,0x403020113440851L,0x4080d0206070605L,0x506140307090c05L,0x61903021a031d19L,0x1525141213070213L,0x2e51422e2d251204L,0x3f333730414f2e4cL,0x333051302d372d50L,0x44522e413f3f3e51L,0x4c503f4945373345L,0x3703445150504048L,0x6308a6f6f3f1302L,0x2e5f8a412e2e0203L,0x1906144203606f78L,0x378a133f722e1937L,0x66f09405152053fL,0x6301a5130033f44L,0x551510d41080244L,0xb6c3995f05028a14L,0xc099b6c0acc09696L,0xba96b9b6bab6ba96L,0xc0c09bc093b9baa5L,0x9696b6c0bab099bfL,0xb6bfbab696bab6bfL,0x99c3ac96c0a5bab0L,0x607060504030201L,0x7090c0504080d02L,0x1a031d1905061403L,0x1307021306190302L,0x2d25120415251412L,0x414f2e4c2e51422eL,0x2d372d503f333730L,0x3f3f3e5133305130L,0x4537334544522e41L,0x505040484c503f49L,0x58715c8f547f4451L,0x6f6f8f7f6b887358L,0x7f66588e6f7b7361L,0x636f8654866b8c60L,0x8a85767154735c71L,0x887f717d6b585575L,0x61848f7d6b88688aL,0x768f738c768a8a90L,0x846b51517f445c7bL,0x6f7f6f8a06130306L,0x521a6f416f516803L,0x2e425c30066b1d6bL,0x8a2e03308a8a7f6bL,0x6412e607f302e03L,0x403020113440851L,0x4080d0206070605L,0x506140307090c05L,0x61903021a031d19L,0x1525141213070213L,0x2e51422e2d251204L,0x3f333730414f2e4cL,0x333051302d372d50L,0x44522e413f3f3e51L,0x4c503f4945373345L,0x547f445150504048L,0x6b88735858715c8fL,0x6f7b73616f6f8f7fL,0x866b8c607f66588eL,0x54735c71636f8654L,0x6b5855758a857671L,0x6b88688a887f717dL,0x768a8a9061848f7dL,0x9fc3977b768f738cL,0xc099b6c0a9ab9696L,0xa09694b6a09fa0b4L,0xc0ab9bab93b9a0a5L,0xb4b49fabbab097bfL,0x9fbfbab6b4bab6bfL,0x99c3ac96c0a5baa6L,0x607060504030201L,0x7090c0504080d02L,0x1817161b141c2203L,0x201f1e201c1b171eL,0x1b27212524272221L,0x294706341c17081cL,0x1b054a221e041420L,0x20207032520172cL,0x310504313a180629L,0x3232091634221e43L,0x6f1e200205033a03L,0x61c1e171c568b64L,0x17606f821c568a64L,0x16061b141b062208L,0x17820502058a2002L,0x56031e8b1c640909L,0x64081e8b065f1803L,0x5028b221417030dL,0x81c0317173a2056L,0x6031c171c20031cL,0x181806291c171817L,0x608202c06061606L,0x31c03200317171cL,0x6291c0803200617L,0x4030201203a0803L,0x4080d0206070605L,0x141c220307090c05L,0x1c1b171e1817161bL,0x24272221201f1e20L,0x1c17081c1b272125L,0x1e04142029470634L,0x2520172c1b054a22L,0x3a18062902020703L,0x34221e4331050431L,0x5033a0332320916L,0x1c568b646f1e2002L,0x1c568a64061c1e17L,0x1b06220817606f82L,0x58a200216061b14L,0x1c64090917820502L,0x65f180356031e8bL,0x1417030d64081e8bL,0xa1a3c45605028b22L,0x9cc4b69cac9cb6a1L,0x9ca1a7a1c0b69ca1L,0xc0c0aac0a7a7c0b7L,0xb6a1a19cc0acc4beL,0xb6c4c0a1b69cb6c4L,0xc4a3acb6c0b79cacL,0x607060504030201L,0x7090c0504080d02L,0x1817161b141c2203L,0x201f1e201c1b171eL,0x1b27212524272221L,0x294706341c17081cL,0x1b054a221e041420L,0x20207032520172cL,0x310504313a180629L,0x3232091634221e43L,0x585e568f767f3a03L,0x6b7c5e5d7c915a59L,0x5d6658657c917359L,0x706b6e8c6e6b6a84L,0x5d65768f7673568fL,0x917f5e5a7c595555L,0x59845e5a6b7b827fL,0x768f5a6a8c5d7f90L,0x847c03175d3a5691L,0x6b7f7c5d1c20031cL,0x18186b297c178217L,0x608562c066b166bL,0x7f1c03207f5d5d7cL,0x6291c847f200617L,0x4030201203a0803L,0x4080d0206070605L,0x141c220307090c05L,0x1c1b171e1817161bL,0x24272221201f1e20L,0x1c17081c1b272125L,0x1e04142029470634L,0x2520172c1b054a22L,0x3a18062902020703L,0x34221e4331050431L,0x767f3a0332320916L,0x7c915a59585e568fL,0x7c9173596b7c5e5dL,0x6e6b6a845d665865L,0x7673568f706b6e8cL,0x7c5955555d65768fL,0x6b7b827f917f5e5aL,0x8c5d7f9059845e5aL,0xb2a3ae91768f5a6aL,0x9cc4b69ca9b1b6a1L,0xb1a1a2a1ab9fb1b2L,0xc0abaaaba7a7abb7L,0x9fb2b2b1c0acaebeL,0x9fc4c0a19f9cb6c4L,0xc4a3acb6c0b79ca9L,0x607060504030201L,0x7090c0504080d02L,0x1817161b141c2203L,0x201f1e201c1b171eL,0x2827212524272221L,0x414f2e4c293a4229L,0x28372d3534333231L,0x3f3f3e513c313a30L,0x4537334544432e41L,0x5050404d4c353449L,0x6f34200237034451L,0x2e291e171c318b64L,0x17606f8229568a41L,0x162e1b321b062242L,0x3a43053f378a203fL,0x310334441c640940L,0x41081e4406301851L,0x5028b22143a510dL,0x81c513a17442056L,0x2e03293a1c20031cL,0x43182e41293a1817L,0x2e42203006061606L,0x51290331513a171cL,0x641294203312e17L,0x403020120440851L,0x4080d0206070605L,0x141c220307090c05L,0x1c1b171e1817161bL,0x24272221201f1e20L,0x293a422928272125L,0x34333231414f2e4cL,0x3c313a3028372d35L,0x44432e413f3f3e51L,0x4c35344945373345L,0x370344515050404dL,0x1c318b646f342002L,0x29568a412e291e17L,0x1b06224217606f82L,0x378a203f162e1b32L,0x1c6409403a43053fL,0x630185131033444L,0x143a510d41081e44L,0xa1c3c45605028b22L,0x9cc4b69cac9c96a3L,0xb7a3a7a1bab6b7a3L,0xc0c0aac0a8a7baa5L,0x96a3a19cbab0c4bfL,0xb6bbbaa196b7b6bbL,0xc4c3ac96c0a5b7b0L,0x607060504030201L,0x7090c0504080d02L,0x1817161b141c2203L,0x201f1e201c1b171eL,0x2827212524272221L,0x414f2e4c293a4229L,0x28372d3534333231L,0x3f3f3e513c313a30L,0x4537334544432e41L,0x5050404d4c353449L,0x5857568f547f4451L,0x6f645e5d7c5b5a59L,0x5d66586564917361L,0x706f6e6d6e6b6a60L,0x8b77767154735671L,0x5b7f577d7c595575L,0x61845e7d6b88828aL,0x768f5a6a8c8b8a90L,0x847c513a5d445691L,0x6f7f648b1c20031cL,0x43186f41643a8217L,0x2e425630066b166bL,0x8a2903318a8b5d7cL,0x64129607f312e17L,0x403020120440851L,0x4080d0206070605L,0x141c220307090c05L,0x1c1b171e1817161bL,0x24272221201f1e20L,0x293a422928272125L,0x34333231414f2e4cL,0x3c313a3028372d35L,0x44432e413f3f3e51L,0x4c35344945373345L,0x547f44515050404dL,0x7c5b5a595857568fL,0x649173616f645e5dL,0x6e6b6a605d665865L,0x54735671706f6e6dL,0x7c5955758b777671L,0x6b88828a5b7f577dL,0x8c8b8a9061845e7dL,0xb2c3ae91768f5a6aL,0x9cc4b69ca9b196a3L,0x9ea3a2a1a09f9eb3L,0xc0abaaaba8a7a0a5L,0xb4b3b2b1bab0aebfL,0x9fbbbaa1b4b7b6bbL,0xc4c3ac96c0a5b7a6L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a031d0f05080d11L,0x1307020b06191109L,0x4a250a04150c1412L,0x2c0a064a08110b06L,0x4e054e320204052cL,0x9020711042a032aL,0x3b0d0c313a2b0829L,0x32470f3b34470943L,0x6f02130905112b03L,0x8080203085f8a6fL,0x1169607806698164L,0x720619050f06140bL,0x117805090d8a0b02L,0x6903098b06600f0fL,0x5f0b097808691a11L,0xd02810d0503030aL,0xb080311112b0b5fL,0x6030611060b1108L,0x2b1a082908031a03L,0x80b132a08061d08L,0x1106032a03030306L,0x62c080b112c0611L,0x4030201133a0b11L,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,0x150c14121307020bL,0x8110b064a250a04L,0x204052c2c0a064aL,0x42a032a4e054e32L,0x3a2b082909020711L,0x344709433b0d0c31L,0x5112b0332470f3bL,0x85f8a6f6f021309L,0x669816408080203L,0xf06140b11696078L,0xd8a0b0272061905L,0x6600f0f11780509L,0x8691a116903098bL,0x503030a5f0b0978L,0x9a95c25f0d02810dL,0xc0c29aacc2acb69aL,0xacb6b9b6c0b6c09aL,0xacc09bac95b9acb7L,0xb6b6b6c0acc299afL,0x9abec09a9ac0b6afL,0x99a3c29ac0beacc2L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a031d0f05080d11L,0x1307020b06191109L,0x4a250a04150c1412L,0x2c0a064a08110b06L,0x4e054e320204052cL,0x9020711042a032aL,0x3b0d0c313a2b0829L,0x32470f3b34470943L,0x588f5c5576532b03L,0x84848f7f847b7358L,0x5367668e6b676259L,0x636b86767a6b8c87L,0x538e76559073878fL,0x677f555a6b667a7aL,0x7b87558e84676853L,0x908f6290767f7f89L,0x87840311532b877bL,0x6b7f6b53060b1108L,0x2b1a842984036803L,0x80b5c2a086b1d84L,0x5306032a7f7f7f6bL,0x62c0887532c0611L,0x4030201133a0b11L,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,0x150c14121307020bL,0x8110b064a250a04L,0x204052c2c0a064aL,0x42a032a4e054e32L,0x3a2b082909020711L,0x344709433b0d0c31L,0x76532b0332470f3bL,0x847b7358588f5c55L,0x6b67625984848f7fL,0x7a6b8c875367668eL,0x9073878f636b8676L,0x6b667a7a538e7655L,0x84676853677f555aL,0x767f7f897b87558eL,0xbc95987b908f6290L,0xc0c29aac98a9b69aL,0xa9b694b6ab9fabbcL,0xacab9ba995b9a9b7L,0x9f9f9fabacc297afL,0xbcbec09abcc0b6afL,0x99a3c29ac0beac98L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a031d0f05080d11L,0x1307020b06191109L,0x2d250a04150c1412L,0x302f2e2d423d2a2eL,0x363736503f333730L,0x403f3e3d33395139L,0x4847464544524241L,0x504f4e484c4f4049L,0x6f3f130937115251L,0x4242020308308a6fL,0x116960782e698141L,0x722e19370f06142aL,0x3d520540478a0b3fL,0x3903404406600f4eL,0x300b095208391a3dL,0xd02810d0551510aL,0xb08513d11520b5fL,0x2e032e3d060b1108L,0x521a424142511a03L,0x422a133908061d08L,0x3d2e033951510306L,0x630422a11302e11L,0x403020113440b3dL,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,0x150c14121307020bL,0x423d2a2e2d250a04L,0x3f333730302f2e2dL,0x3339513936373650L,0x44524241403f3e3dL,0x4c4f404948474645L,0x37115251504f4e48L,0x8308a6f6f3f1309L,0x2e69814142420203L,0xf06142a11696078L,0x478a0b3f722e1937L,0x6600f4e3d520540L,0x8391a3d39034044L,0x551510a300b0952L,0x9a93c25f0d02810dL,0xc0c29aacc2ac96c1L,0xb096b9b6bab6bac1L,0xacc09bac93b9b0a5L,0x9696b6c0b0af99adL,0x9abfba9ac1bab6adL,0x99c3c2c1c0bfb0afL,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1a031d0f05080d11L,0x1307020b06191109L,0x2d250a04150c1412L,0x302f2e2d423d2a2eL,0x363736503f333730L,0x403f3e3d33395139L,0x4847464544524241L,0x504f4e484c4f4049L,0x58715c5554535251L,0x60608f7f84887358L,0x5367668e6f676261L,0x636f86547a6b8c69L,0x8185767574738771L,0x837f757d6b667a79L,0x8887558584836881L,0x908f6290768a8a89L,0x8784513d5352877bL,0x6f7f6f81060b1108L,0x521a604160516803L,0x422a5c39086b1d84L,0x812e03398a8a7f6bL,0x630426953302e11L,0x403020113440b3dL,0xc0b0a0908070605L,0x5080d11100f0e0dL,0x61911091a031d0fL,0x150c14121307020bL,0x423d2a2e2d250a04L,0x3f333730302f2e2dL,0x3339513936373650L,0x44524241403f3e3dL,0x4c4f404948474645L,0x54535251504f4e48L,0x8488735858715c55L,0x6f67626160608f7fL,0x7a6b8c695367668eL,0x74738771636f8654L,0x6b667a7981857675L,0x84836881837f757dL,0x768a8a8988875585L,0xbc93987b908f6290L,0xc0c29aac98a996c1L,0xa69694b6a09fa0b8L,0xacab9ba993b9a6a5L,0xb4b49fabb0af97adL,0xbcbfba9ab8bab6adL,0x99c3c2c1c0bfb0bdL,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,0x1b27262524232221L,0x2c0a064a131a0b1cL,0x15054e221e041420L,0x9020711251d172aL,0x3b0d0c313a180829L,0x32470f1634121943L,0x6f1e200905112b03L,0x8131e1713568b64L,0x1a6960821c728164L,0x16061b141506220bL,0x1a8205090d8a1d02L,0x7203198b1c5f0f0fL,0x5f0b197808691811L,0xd0278121417030aL,0xb13031a1a2b1d56L,0x6031c1a1c1d1113L,0x1818082913171817L,0x80b202a08061608L,0x111c031d0317171cL,0x62c130b1120061aL,0x4030201203a0b11L,0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,0x131a0b1c1b272625L,0x1e0414202c0a064aL,0x251d172a15054e22L,0x3a18082909020711L,0x341219433b0d0c31L,0x5112b0332470f16L,0x13568b646f1e2009L,0x1c72816408131e17L,0x1506220b1a696082L,0xd8a1d0216061b14L,0x1c5f0f0f1a820509L,0x86918117203198bL,0x1417030a5f0b1978L,0xb9959b560d027812L,0x9c9b9a99c299b6b9L,0x99a1a7a1c0b69cb9L,0xacc0aaaca7a7acb7L,0xb6a1a19cacc2c4afL,0x9ac4c0b99a9cb69bL,0xc4a3c29ac0be99c2L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,0x1b27262524232221L,0x2c0a064a131a0b1cL,0x15054e221e041420L,0x9020711251d172aL,0x3b0d0c313a180829L,0x32470f1634121943L,0x585e565576532b03L,0x845c5e5d5c915a59L,0x686766657c636259L,0x706b6e8c6c6b6a87L,0x686576559073728fL,0x637f865a7c7b7a7aL,0x7b87868e84678253L,0x908f8e8d8c5d7f89L,0x875c031a682b7291L,0x6b7f7c681c1d1113L,0x181884295c178217L,0x80b562a086b1684L,0x531c031d7f5d5d7cL,0x62c13875320061aL,0x4030201203a0b11L,0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,0x131a0b1c1b272625L,0x1e0414202c0a064aL,0x251d172a15054e22L,0x3a18082909020711L,0x341219433b0d0c31L,0x76532b0332470f16L,0x5c915a59585e5655L,0x7c636259845c5e5dL,0x6c6b6a8768676665L,0x9073728f706b6e8cL,0x7c7b7a7a68657655L,0x84678253637f865aL,0x8c5d7f897b87868eL,0x94959291908f8e8dL,0x9c9b9a999897b6b9L,0x97a1a2a1ab9fb194L,0xacabaaa9a7a7a9b7L,0x9fb2b2b1acc2aeafL,0xbcc4c0b9bc9cb69bL,0xc4a3c29ac0be9998L,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,0x2827262524232221L,0x302f2e2d2c2b2a29L,0x3837363534333231L,0x403f3e3d3c3b3a39L,0x4847464544434241L,0x504f4e4d4c4b4a49L,0x6f34200937115251L,0x422c1e1713318b64L,0x1a69608229728141L,0x162e1b321506222aL,0x2b430540478a1d3fL,0x3b034a441c5f0f4eL,0x300b19520839183dL,0xd027812143a510aL,0xb13512b1a521d56L,0x2e03292b1c1d1113L,0x431842412c3a1817L,0x422a203908061608L,0x3d29033b513a171cL,0x6302c2a11312e1aL,0x403020120440b3dL,0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,0x2c2b2a2928272625L,0x34333231302f2e2dL,0x3c3b3a3938373635L,0x44434241403f3e3dL,0x4c4b4a4948474645L,0x37115251504f4e4dL,0x13318b646f342009L,0x29728141422c1e17L,0x1506222a1a696082L,0x478a1d3f162e1b32L,0x1c5f0f4e2b430540L,0x839183d3b034a44L,0x143a510a300b1952L,0xb9939b560d027812L,0x9c9b9a99c2999695L,0xbea3a7a1bab6b795L,0xacc0aaaca8a7b0a5L,0x96a3a19cb0afc4adL,0x9abbbab9c1b7b6b5L,0xc4c3c2c1c0bfbeafL,0x807060504030201L,0x100f0e0d0c0b0a09L,0x1817161514131211L,0x201f1e1d1c1b1a19L,0x2827262524232221L,0x302f2e2d2c2b2a29L,0x3837363534333231L,0x403f3e3d3c3b3a39L,0x4847464544434241L,0x504f4e4d4c4b4a49L,0x5857565554535251L,0x605f5e5d5c5b5a59L,0x6867666564636261L,0x706f6e6d6c6b6a69L,0x7877767574737271L,0x807f7e7d7c7b7a79L,0x8887868584838281L,0x908f8e8d8c8b8a89L,0x875c512b68527291L,0x6f7f64781c1d1113L,0x431860415f3a8217L,0x422a5639086b1684L,0x8129033b8a8b5d7cL,0x6302c6953312e1aL,0x403020120440b3dL,0xc0b0a0908070605L,0x14131211100f0e0dL,0x1c1b1a1918171615L,0x24232221201f1e1dL,0x2c2b2a2928272625L,0x34333231302f2e2dL,0x3c3b3a3938373635L,0x44434241403f3e3dL,0x4c4b4a4948474645L,0x54535251504f4e4dL,0x5c5b5a5958575655L,0x64636261605f5e5dL,0x6c6b6a6968676665L,0x74737271706f6e6dL,0x7c7b7a7978777675L,0x84838281807f7e7dL,0x8c8b8a8988878685L,0x94939291908f8e8dL,0x9c9b9a9998979695L,0xa4a3a2a1a09f9e9dL,0xacabaaa9a8a7a6a5L,0xb4b3b2b1b0afaeadL,0xbcbbbab9b8b7b6b5L,0xc4c3c2c1c0bfbebdL}; // 8 bits per value + private final static long[] offsetIncrs7 = new long[] {0x8000000080000000L,0x1000000060200061L,0x820000038000L,0x80200030044048c4L,0x20ab0ac0000eda1L,0x4041400c01506000L,0x113028000884098L,0x186c401800008040L,0x1020c000200009a0L,0x80000000710L,0x60200061800L,0x820000038000100L,0x30044048c4000L,0xab0ac0000eda1802L,0x1400c01506000020L,0x3028000884098404L,0xfcfdffffebf5fff1L,0xeffffafffe9afdf6L,0x80000000717f3aL,0x60200061800000L,0x38000100000L,0x30044048c4000082L,0xb4d86cf6c181a000L,0xcc0190780182cb3cL,0x1b0884c9e584d80L,0x18db6080580d1303L,0xc02db609a19e6f4cL,0x710102cc0L,0x200061800000008L,0x38000100000006L,0x44048c4000082000L,0x86cf6c181a000300L,0x190780182cb3cb4dL,0x884c9e584d80cc0L,0xb6ebf5bfd130301bL,0xdb6e9af9e6f4ddfdL,0x717f3acffdfaL,0x61800000008000L,0xa28b550000006020L,0x5aed0050aa000003L,0xeda1802d00300540L,0x7400020abaadb400L,0x509d405140ac0150L,0x8042d153028168a8L,0xa9a0186edb58a2d0L,0x75516a0e8b42b40L,0x1800000008000000L,0xb550000006020006L,0xd0050aa000003a28L,0x1802d003005405aeL,0x20abaadb400edaL,0xd405140ac0150740L,0xedf53028168a8509L,0xfdf6edb5fbedebf5L,0x5f6aeefb7ab7fa9aL,0x8000000075L,0x6020006180L,0x50aa000003a28b55L,0xad003005405aed00L,0xcb3ab5b46cf6c181L,0x5d80ac0190740182L,0x53030168a85c9d58L,0x6edb58bad0805addL,0xace8b42b76a9a19eL,0x8000000075516L,0x6020006180000L,0xa000003a28b55000L,0x3005405aed0050aL,0xab5b46cf6c181ad0L,0xac0190740182cb3L,0x30168a85c9d585d8L,0xb5fbadebf5add530L,0xfb7ab76a9af9e6edL,0x80000000755f6aceL,0x8028209201000000L,0x4800914000000L,0x44049040000a200L,0x104924a200200040L,0x1508000028ac8acL,0x8840a040490090L,0x248845049140201L,0x21240a2020904924L,0x91012210410L,0x8209201000000800L,0x4800914000000802L,0x49040000a200000L,0x924a200200040044L,0x8000028ac8ac104L,0x840a040490090015L,0x8bc53c9140201008L,0x4ea2fe793c924fe4L,0x917f22f3cf3af2L,0x9201000000800000L,0x914000000802820L,0x40000a200000480L,0xc201a00040044049L,0x1828b48b4d04924L,0xa658490090019098L,0x504914020130884cL,0x21a6934924da4884L,0x10122d04d02d240aL,0x1000000800000009L,0x4000000802820920L,0xa200000480091L,0x1a00040044049040L,0x28b48b4d04924c20L,0x8490090019098018L,0x914020130884ca65L,0x6934924da48bc53cL,0x22d3cd3ad24ea2faL,0x80000000917fL,0x802820920100L,0xa2000004a2891400L,0x4005405b2d0050L,0xc8adb04924a2002dL,0x9001509400028aL,0x20128a850a54059L,0xd924a2488452c954L,0x2cb02b24aa202092L,0x800000009551621L,0x802820920100000L,0x4a2891400000L,0x5405b2d0050a20L,0xdb04924a2002d004L,0x1509400028ac8aL,0x128a850a54059009L,0x4be48bc52c954020L,0x3ab24aa2fe792d92L,0x955f62f2cbL,0x2820920100000080L,0x4a2891400000080L,0x405b2d0050a20000L,0x4924c201ad004005L,0x909401828b48b5b0L,0xa85ca55859009001L,0x488452c954020128L,0x24aa21a692d924baL,0x955162d2cb02bL,0x920100000080000L,0x2891400000080282L,0xb2d0050a2000004aL,0x4c201ad004005405L,0x401828b48b5b0492L,0xca55859009001909L,0xc52c954020128a85L,0xa2fa692d924ba48bL,0x955f62d2cb3ab24aL,0x80c30000c0600000L,0xd800000060301861L,0x30c30000036006L,0x80d80030046048dcL,0x36db0dc6c06eda1L,0x6040c06c01586000L,0x36db0180006c36dbL,0x1b6dc6180030db6cL,0xdb6c36030006db6L,0x30000c060000071bL,0x6030186180cL,0xc30000036006d80L,0x80030046048dc003L,0xdb0dc6c06eda180dL,0xc06c01586000036L,0xb0180006c36db604L,0xdc7dfffbedb6fb6dL,0x6fb7fbfff6db7db6L,0xc060000071bedbL,0x6030186180c300L,0x36006d80000L,0x30046048dc0030c3L,0xdc6c66f6c180d800L,0x6c01987801836dbcL,0x81b06c36db784cc0L,0x18db30db6c36db01L,0x603db66db79b6dc6L,0x60000071b0db6c3L,0x30186180c30000cL,0x36006d80000006L,0x46048dc0030c3000L,0xc66f6c180d800300L,0x1987801836dbcdc6L,0x6c36db784cc06c0L,0xb3edb6fb6db0181bL,0xdb66db79b6dc7dfdL,0x71bedb6fb7fbL,0x186180c30000c060L,0x6286dd0000006030L,0x5add0030eb000003L,0xeda180dd00300560L,0x7400036dbadd6c06L,0x36db6050c06c0158L,0xdb6eb6db0181686cL,0x6db61b6dd758a2b0L,0x75b0db6eb743b40L,0x180c30000c060000L,0x6dd0000006030186L,0xd0030eb000003628L,0x180dd003005605adL,0x36dbadd6c06edaL,0xb6050c06c0158740L,0xeb6db0181686c36dL,0x7db6dd75fbebedb6L,0xbedb6eb77bb7f6dbL,0xc30000c060000075L,0x6030186180L,0x30eb0000036286ddL,0xdd003005605add00L,0x6dbadd6c66f6c180L,0x5cc06c0198740183L,0xdb0181686c36db78L,0x6dd758bab0db6eb6L,0xb6eb743b766db79bL,0xc060000075b0dL,0x6030186180c30L,0xb0000036286dd000L,0x3005605add0030eL,0xadd6c66f6c180dd0L,0x6c01987401836dbL,0x181686c36db785ccL,0x75fbabedb6eb6db0L,0xb77bb766db79b6ddL,0xc060000075bedb6eL,0x8038189200c30000L,0x46006dc000000L,0x460491c0030e300L,0x6c4724a200d80040L,0x1588000036dc8dcL,0x6c36e36048c070L,0x238db6c36dc0181L,0x31246e362391c724L,0x91b0db70370L,0x8189200c30000c06L,0x46006dc000000803L,0x491c0030e300000L,0x724a200d80040046L,0x88000036dc8dc6c4L,0xc36e36048c070015L,0x8db6fb6dc0181006L,0x46e37e391c724fe3L,0x91bedb73b73bf2L,0x9200c30000c06000L,0x6dc000000803818L,0x1c0030e300000460L,0xc200d80040046049L,0x1836dc8dc6c4724L,0xe37848c070019898L,0x6c36dc0181306c36L,0x37a391c724da38dbL,0x1b0db703703d246eL,0xc30000c06000009L,0xc000000803818920L,0x30e30000046006dL,0xd800400460491c0L,0x36dc8dc6c4724c20L,0x848c070019898018L,0x6dc0181306c36e37L,0x391c724da38db6fbL,0xdb73b73bd246e37aL,0xc060000091beL,0x8038189200c3L,0xe30000046286dc00L,0x4005605b1d0030L,0xc8dd6c4724a200ddL,0xc07001589400036dL,0x181286c36e36058L,0xd724a238db6eb6dcL,0x2b703b246e362391L,0xc060000095b0db7L,0x8038189200c3000L,0x46286dc00000L,0x5605b1d0030e30L,0xd6c4724a200dd004L,0x1589400036dc8dL,0x1286c36e36058c07L,0x4be38db6eb6dc018L,0x3bb246e37e391d72L,0x60000095bedb72b7L,0x38189200c30000c0L,0x46286dc00000080L,0x605b1d0030e30000L,0x4724c200dd004005L,0x989401836dc8dd6cL,0x6c36e37858c07001L,0x38db6eb6dc018128L,0x246e37a391d724baL,0x95b0db72b703bL,0x89200c30000c0600L,0x286dc00000080381L,0xb1d0030e30000046L,0x4c200dd004005605L,0x401836dc8dd6c472L,0x6e37858c07001989L,0xb6eb6dc0181286c3L,0xe37a391d724ba38dL,0x95bedb72b73bb246L,0x8080000080410000L,0x1200000040240061L,0x820000024104L,0x200030044028d2L,0x820934aa4804aa41L,0x4044800c01506800L,0x112028000484498L,0x9a6d241841048248L,0x4920900820024924L,0x80410000510L,0x40240061808L,0x820000024104120L,0x30044028d2000L,0x934aa4804aa41002L,0x4800c01506800820L,0x2028000484498404L,0xd25df5d74ba4bff1L,0xe97ebaffa49249a6L,0x80410000517492L,0x40240061808000L,0x24104120000L,0x30044028d2000082L,0xb24864b24101a000L,0xcc0190680082c934L,0x1b048449e584480L,0x18596482480d1203L,0xc82db249249a6d24L,0x410000510492c90L,0x240061808000008L,0x24104120000004L,0x44028d2000082000L,0x864b24101a000300L,0x190680082c934b24L,0x48449e584480cc0L,0x964ba4bfd120301bL,0xdb249249a6d25df5L,0x517492c97cbaL,0x61808000008041L,0x4105520000004024L,0x2ad20050aa000002L,0xaa41002d00300540L,0x6800820934aa4804L,0x549d405480ac0150L,0x824ad15202816848L,0x49249a6d25584154L,0x555492090a82b42L,0x1808000008041000L,0x5520000004024006L,0x20050aa000002410L,0x1002d003005402adL,0x820934aa4804aa4L,0xd405480ac0150680L,0xadf5202816848549L,0x49a6d255f5d54ba4L,0x5492e97abab7a492L,0x8000008041000055L,0x4024006180L,0x50aa000002410552L,0xad003005402ad200L,0xc934b24864b24101L,0x5480ac0190680082L,0x5203016848549d58L,0x6d25585954824addL,0x2c90a82b7249249aL,0x8041000055549L,0x4024006180800L,0xa000002410552000L,0x3005402ad20050aL,0x4b24864b24101ad0L,0xac0190680082c93L,0x3016848549d58548L,0x55f5954ba4add520L,0x7abab7249249a6d2L,0x80410000555492c9L,0x4024209200800000L,0x2410512000000L,0x44029120000a200L,0x4844a24100200040L,0x1508800828944aaL,0x4844a040448090L,0x4144824849120201L,0x21224924a2912524L,0x1000051049209408L,0x4209200800000804L,0x2410512000000402L,0x29120000a200000L,0x4a24100200040044L,0x8800828944aa484L,0x844a040448090015L,0x4ba4bc9120201004L,0x24924a29125245d4L,0x517492e94ebaf2L,0x9200800000804100L,0x512000000402420L,0x120000a200000241L,0x4101a00040044029L,0x828944b24844a2L,0xa658448090019088L,0x4849120201304844L,0x24a2912524594482L,0x10492c94c82d2249L,0x800000804100005L,0x2000000402420920L,0xa200000241051L,0x1a00040044029120L,0x28944b24844a2410L,0x8448090019088008L,0x9120201304844a65L,0x29125245944ba4bcL,0x92c94cbad224924aL,0x804100005174L,0x402420920080L,0xa200000241051200L,0x4005402b120050L,0x44aa4844a241002dL,0x8090015088008289L,0x201284854a54054L,0x25244144824ac952L,0x94a82b224924a291L,0x804100005554920L,0x402420920080000L,0x241051200000L,0x5402b120050a20L,0xa4844a241002d004L,0x1508800828944aL,0x1284854a54054809L,0x45d44ba4ac952020L,0xbab224924a291252L,0x410000555492e94aL,0x2420920080000080L,0x241051200000040L,0x402b120050a20000L,0x44a24101ad004005L,0x908800828944b248L,0x4854a55854809001L,0x44824ac952020128L,0x224924a291252459L,0x555492c94a82bL,0x920080000080410L,0x1051200000040242L,0xb120050a20000024L,0x24101ad004005402L,0x800828944b24844aL,0x4a55854809001908L,0xa4ac952020128485L,0x924a29125245944bL,0x555492c94abab224L,0x80830000c0410000L,0xda00000040341861L,0x30c30000024104L,0xd80030046028d2L,0x836d34da4804aa41L,0x6044806c01586800L,0x36da0180004c34dbL,0x9a6d24184134da68L,0x4936936830024d34L,0x30000c041000051bL,0x40341861808L,0xc30000024104da0L,0x80030046028d2003L,0xd34da4804aa4100dL,0x4806c01586800836L,0xa0180004c34db604L,0xd25df5d34da6bb6dL,0x6936bbffa4d349a6L,0xc041000051b493L,0x40341861808300L,0x24104da0000L,0x30046028d20030c3L,0xda4864b24100d800L,0x6c01986800836d34L,0x81b04c34db784480L,0x185934da6836da01L,0x683db24d349a6d24L,0x41000051b493693L,0x34186180830000cL,0x24104da0000004L,0x46028d20030c3000L,0x864b24100d800300L,0x1986800836d34da4L,0x4c34db7844806c0L,0x934da6bb6da0181bL,0xdb24d349a6d25df5L,0x51b4936936bbL,0x186180830000c041L,0x4104da0000004034L,0x2ad20030eb000002L,0xaa4100dd00300560L,0x6800836d34da4804L,0x34db6054806c0158L,0xda6ab6da0181684cL,0x4d349a6d25584134L,0x55b493693683b42L,0x180830000c041000L,0x4da0000004034186L,0x20030eb000002410L,0x100dd003005602adL,0x836d34da4804aa4L,0xb6054806c0158680L,0xab6da0181684c34dL,0x49a6d255f5d34da6L,0xb4936936bbb7a4d3L,0x830000c041000055L,0x4034186180L,0x30eb0000024104daL,0xdd003005602ad200L,0x6d34da4864b24100L,0x54806c0198680083L,0xda0181684c34db78L,0x6d25585934da6ab6L,0x3693683b724d349aL,0xc041000055b49L,0x4034186180830L,0xb0000024104da000L,0x3005602ad20030eL,0x4da4864b24100dd0L,0x6c01986800836d3L,0x181684c34db78548L,0x55f5934da6ab6da0L,0x36bbb724d349a6d2L,0xc041000055b49369L,0x4034189200830000L,0x24104da000000L,0x46029120030e300L,0x4844a24100d80040L,0x1588800836d44daL,0x4c34e360448070L,0x4134da6836da0181L,0x31224d34a2912524L,0x1000051b49369368L,0x4189200830000c04L,0x24104da000000403L,0x29120030e300000L,0x4a24100d80040046L,0x88800836d44da484L,0xc34e360448070015L,0x4da6bb6da0181004L,0x24d34a29125245d3L,0x51b4936936bbf2L,0x9200830000c04100L,0x4da000000403418L,0x120030e300000241L,0x4100d80040046029L,0x836d44da4844a2L,0xe378448070019888L,0x6836da0181304c34L,0x34a29125245934daL,0x1b493693683d224dL,0x830000c04100005L,0xa000000403418920L,0x30e30000024104dL,0xd80040046029120L,0x36d44da4844a2410L,0x8448070019888008L,0x6da0181304c34e37L,0x29125245934da6bbL,0x936936bbd224d34aL,0xc041000051b4L,0x403418920083L,0xe30000024104da00L,0x4005602b120030L,0x44da4844a24100ddL,0x807001588800836dL,0x181284c34e36054L,0x25244134da6ab6daL,0x93683b224d34a291L,0xc041000055b4936L,0x403418920083000L,0x24104da00000L,0x5602b120030e30L,0xa4844a24100dd004L,0x1588800836d44dL,0x1284c34e36054807L,0x45d34da6ab6da018L,0xbbb224d34a291252L,0x41000055b4936936L,0x34189200830000c0L,0x24104da00000040L,0x602b120030e30000L,0x44a24100dd004005L,0x988800836d44da48L,0x4c34e37854807001L,0x34da6ab6da018128L,0x224d34a291252459L,0x55b493693683bL,0x89200830000c0410L,0x104da00000040341L,0xb120030e30000024L,0x24100dd004005602L,0x800836d44da4844aL,0x4e37854807001988L,0xa6ab6da0181284c3L,0xd34a29125245934dL,0x55b4936936bbb224L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L,0x9249249249249249L,0x4924924924924924L,0x2492492492492492L}; // 3 bits per value + + // state map + // 0 -> [(0, 0)] + // 1 -> [(0, 2)] + // 2 -> [(0, 3)] + // 3 -> [(0, 1)] + // 4 -> [(0, 2), (1, 2)] + // 5 -> [(0, 3), (1, 3)] + // 6 -> [(0, 1), (1, 1)] + // 7 -> [(0, 3), (1, 3), (2, 3)] + // 8 -> [(0, 2), (2, 3)] + // 9 -> [(0, 2), (2, 1)] + // 10 -> [(0, 3), (2, 2)] + // 11 -> [(0, 1), (2, 2)] + // 12 -> [(0, 2), (1, 2), (2, 2)] + // 13 -> [(0, 1), (2, 1)] + // 14 -> [(0, 2), (2, 2)] + // 15 -> [(0, 1), (1, 1), (2, 1)] + // 16 -> [(0, 3), (2, 3)] + // 17 -> [(0, 2), (1, 2), (2, 2), (3, 2)] + // 18 -> [(0, 3), (1, 3), (2, 3), (3, 3)] + // 19 -> [(0, 2), (1, 2), (3, 3)] + // 20 -> [(0, 2), (2, 2), (3, 2)] + // 21 -> [(0, 3), (3, 1)] + // 22 -> [(0, 3), (3, 3)] + // 23 -> [(0, 3), (3, 2)] + // 24 -> [(0, 2), (2, 3), (3, 3)] + // 25 -> [(0, 3), (2, 3), (3, 3)] + // 26 -> [(0, 2), (3, 2)] + // 27 -> [(0, 3), (1, 3), (3, 3)] + // 28 -> [(0, 3), (2, 2), (3, 2)] + // 29 -> [(0, 2), (3, 3)] + // 30 -> [(0, 1), (1, 1), (3, 2)] + // 31 -> [(0, 3), (1, 3), (3, 2)] + // 32 -> [(0, 2), (1, 2), (3, 1)] + // 33 -> [(0, 2), (1, 2), (3, 2)] + // 34 -> [(0, 1), (2, 2), (3, 2)] + // 35 -> [(0, 2), (3, 1)] + // 36 -> [(0, 1), (3, 3)] + // 37 -> [(0, 2), (2, 1), (3, 1)] + // 38 -> [(0, 1), (3, 2)] + // 39 -> [(0, 2), (3, 2), (4, 2)] + // 40 -> [(0, 3), (1, 3), (3, 3), (4, 3)] + // 41 -> [(0, 3), (2, 2), (4, 3)] + // 42 -> [(0, 3), (2, 3), (3, 3), (4, 3)] + // 43 -> [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3)] + // 44 -> [(0, 2), (2, 3), (4, 2)] + // 45 -> [(0, 3), (1, 3), (4, 3)] + // 46 -> [(0, 2), (2, 1), (4, 2)] + // 47 -> [(0, 3), (1, 3), (2, 3), (4, 2)] + // 48 -> [(0, 3), (1, 3), (3, 2), (4, 2)] + // 49 -> [(0, 2), (1, 2), (3, 3), (4, 3)] + // 50 -> [(0, 1), (4, 3)] + // 51 -> [(0, 2), (3, 3), (4, 3)] + // 52 -> [(0, 2), (1, 2), (3, 2), (4, 2)] + // 53 -> [(0, 2), (2, 2), (4, 2)] + // 54 -> [(0, 2), (1, 2), (4, 3)] + // 55 -> [(0, 2), (2, 2), (3, 2), (4, 2)] + // 56 -> [(0, 3), (2, 2), (4, 2)] + // 57 -> [(0, 3), (3, 3), (4, 3)] + // 58 -> [(0, 3), (2, 2), (3, 2), (4, 2)] + // 59 -> [(0, 1), (3, 3), (4, 3)] + // 60 -> [(0, 3), (2, 3), (4, 3)] + // 61 -> [(0, 1), (1, 1), (4, 3)] + // 62 -> [(0, 2), (4, 3)] + // 63 -> [(0, 2), (2, 3), (4, 3)] + // 64 -> [(0, 3), (1, 3), (4, 2)] + // 65 -> [(0, 3), (1, 3), (2, 3), (4, 3)] + // 66 -> [(0, 3), (3, 2), (4, 2)] + // 67 -> [(0, 3), (4, 2)] + // 68 -> [(0, 3), (1, 3), (4, 1)] + // 69 -> [(0, 1), (2, 2), (4, 3)] + // 70 -> [(0, 2), (1, 2), (2, 2), (4, 3)] + // 71 -> [(0, 3), (2, 2), (4, 1)] + // 72 -> [(0, 3), (4, 1)] + // 73 -> [(0, 2), (2, 3), (3, 3), (4, 3)] + // 74 -> [(0, 2), (1, 2), (2, 2), (3, 2), (4, 2)] + // 75 -> [(0, 2), (4, 2)] + // 76 -> [(0, 3), (3, 1), (4, 1)] + // 77 -> [(0, 2), (2, 2), (4, 3)] + // 78 -> [(0, 2), (1, 2), (2, 2), (4, 2)] + // 79 -> [(0, 2), (1, 2), (4, 2)] + // 80 -> [(0, 3), (4, 3)] + // 81 -> [(0, 3), (2, 3), (4, 2)] + // 82 -> [(0, 3), (2, 3), (5, 3)] + // 83 -> [(0, 2), (1, 2), (4, 3), (5, 3)] + // 84 -> [(0, 2), (2, 3), (5, 3)] + // 85 -> [(0, 3), (1, 3), (3, 2), (5, 3)] + // 86 -> [(0, 2), (3, 3), (4, 3), (5, 3)] + // 87 -> [(0, 3), (1, 3), (5, 2)] + // 88 -> [(0, 3), (1, 3), (3, 3), (5, 2)] + // 89 -> [(0, 3), (3, 3), (5, 2)] + // 90 -> [(0, 3), (1, 3), (3, 2), (4, 2), (5, 2)] + // 91 -> [(0, 3), (1, 3), (2, 3), (3, 3), (5, 3)] + // 92 -> [(0, 3), (3, 3), (5, 3)] + // 93 -> [(0, 2), (3, 3), (5, 3)] + // 94 -> [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (5, 3)] + // 95 -> [(0, 3), (1, 3), (2, 3), (4, 3), (5, 3)] + // 96 -> [(0, 3), (1, 3), (4, 2), (5, 2)] + // 97 -> [(0, 3), (2, 3), (5, 2)] + // 98 -> [(0, 3), (2, 2), (3, 2), (5, 2)] + // 99 -> [(0, 3), (1, 3), (3, 3), (4, 3), (5, 3)] + // 100 -> [(0, 3), (3, 2), (5, 2)] + // 101 -> [(0, 3), (1, 3), (2, 3), (5, 2)] + // 102 -> [(0, 3), (2, 2), (5, 2)] + // 103 -> [(0, 3), (2, 3), (3, 3), (5, 3)] + // 104 -> [(0, 3), (2, 2), (4, 3), (5, 3)] + // 105 -> [(0, 2), (1, 2), (3, 2), (5, 3)] + // 106 -> [(0, 3), (1, 3), (5, 3)] + // 107 -> [(0, 2), (2, 2), (3, 2), (5, 3)] + // 108 -> [(0, 2), (1, 2), (3, 3), (4, 3), (5, 3)] + // 109 -> [(0, 2), (3, 2), (5, 3)] + // 110 -> [(0, 3), (1, 3), (4, 3), (5, 3)] + // 111 -> [(0, 3), (3, 1), (5, 2)] + // 112 -> [(0, 2), (4, 3), (5, 3)] + // 113 -> [(0, 3), (2, 2), (3, 2), (5, 3)] + // 114 -> [(0, 3), (5, 2)] + // 115 -> [(0, 2), (1, 2), (2, 2), (4, 3), (5, 3)] + // 116 -> [(0, 2), (2, 3), (4, 3), (5, 3)] + // 117 -> [(0, 2), (1, 2), (5, 3)] + // 118 -> [(0, 3), (3, 2), (4, 2), (5, 2)] + // 119 -> [(0, 3), (2, 3), (3, 3), (4, 3), (5, 3)] + // 120 -> [(0, 2), (2, 2), (4, 3), (5, 3)] + // 121 -> [(0, 2), (2, 2), (5, 3)] + // 122 -> [(0, 3), (1, 3), (2, 3), (3, 3), (5, 2)] + // 123 -> [(0, 3), (1, 3), (3, 3), (5, 3)] + // 124 -> [(0, 3), (4, 2), (5, 2)] + // 125 -> [(0, 2), (2, 3), (3, 3), (4, 3), (5, 3)] + // 126 -> [(0, 3), (5, 3)] + // 127 -> [(0, 3), (2, 2), (3, 2), (4, 2), (5, 2)] + // 128 -> [(0, 3), (2, 3), (4, 3), (5, 3)] + // 129 -> [(0, 3), (3, 2), (5, 3)] + // 130 -> [(0, 3), (2, 2), (4, 2), (5, 2)] + // 131 -> [(0, 3), (1, 3), (2, 3), (5, 3)] + // 132 -> [(0, 3), (2, 3), (4, 2), (5, 2)] + // 133 -> [(0, 2), (2, 3), (3, 3), (5, 3)] + // 134 -> [(0, 3), (2, 2), (5, 3)] + // 135 -> [(0, 3), (1, 3), (2, 3), (4, 2), (5, 2)] + // 136 -> [(0, 2), (2, 1), (5, 3)] + // 137 -> [(0, 3), (4, 3), (5, 3)] + // 138 -> [(0, 3), (3, 3), (4, 3), (5, 3)] + // 139 -> [(0, 2), (1, 2), (3, 3), (5, 3)] + // 140 -> [(0, 2), (1, 2), (2, 2), (3, 2), (5, 3)] + // 141 -> [(0, 3), (2, 3), (3, 3), (5, 2)] + // 142 -> [(0, 2), (5, 3)] + // 143 -> [(0, 2), (1, 2), (2, 2), (5, 3)] + // 144 -> [(0, 3), (1, 3), (3, 2), (5, 2)] + // 145 -> [(0, 3), (2, 2), (3, 2), (5, 3), (6, 3)] + // 146 -> [(0, 3), (2, 3), (4, 2), (6, 3)] + // 147 -> [(0, 3), (2, 3), (3, 3), (5, 3), (6, 3)] + // 148 -> [(0, 3), (2, 3), (3, 3), (4, 3), (6, 3)] + // 149 -> [(0, 3), (4, 3), (6, 3)] + // 150 -> [(0, 3), (1, 3), (2, 3), (3, 3), (5, 3), (6, 3)] + // 151 -> [(0, 3), (2, 2), (5, 3), (6, 3)] + // 152 -> [(0, 3), (1, 3), (2, 3), (3, 3), (6, 3)] + // 153 -> [(0, 3), (2, 3), (6, 3)] + // 154 -> [(0, 3), (2, 2), (3, 2), (6, 3)] + // 155 -> [(0, 3), (1, 3), (3, 3), (6, 3)] + // 156 -> [(0, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3)] + // 157 -> [(0, 3), (1, 3), (3, 3), (4, 3), (5, 3), (6, 3)] + // 158 -> [(0, 3), (5, 3), (6, 3)] + // 159 -> [(0, 3), (1, 3), (4, 3), (5, 3), (6, 3)] + // 160 -> [(0, 3), (3, 3), (6, 3)] + // 161 -> [(0, 3), (3, 2), (5, 3), (6, 3)] + // 162 -> [(0, 3), (3, 3), (4, 3), (6, 3)] + // 163 -> [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3)] + // 164 -> [(0, 3), (1, 3), (4, 2), (6, 3)] + // 165 -> [(0, 3), (1, 3), (2, 3), (4, 3), (5, 3), (6, 3)] + // 166 -> [(0, 3), (3, 2), (6, 3)] + // 167 -> [(0, 3), (3, 2), (4, 2), (6, 3)] + // 168 -> [(0, 3), (1, 3), (2, 3), (5, 3), (6, 3)] + // 169 -> [(0, 3), (3, 1), (6, 3)] + // 170 -> [(0, 3), (1, 3), (5, 3), (6, 3)] + // 171 -> [(0, 3), (1, 3), (2, 3), (6, 3)] + // 172 -> [(0, 3), (2, 2), (4, 2), (6, 3)] + // 173 -> [(0, 3), (1, 3), (3, 2), (5, 3), (6, 3)] + // 174 -> [(0, 3), (2, 2), (4, 3), (6, 3)] + // 175 -> [(0, 3), (1, 3), (2, 3), (4, 3), (6, 3)] + // 176 -> [(0, 3), (1, 3), (3, 3), (5, 3), (6, 3)] + // 177 -> [(0, 3), (3, 3), (5, 3), (6, 3)] + // 178 -> [(0, 3), (3, 3), (4, 3), (5, 3), (6, 3)] + // 179 -> [(0, 3), (4, 3), (5, 3), (6, 3)] + // 180 -> [(0, 3), (2, 2), (3, 2), (4, 2), (6, 3)] + // 181 -> [(0, 3), (6, 3)] + // 182 -> [(0, 3), (1, 3), (3, 3), (4, 3), (6, 3)] + // 183 -> [(0, 3), (2, 3), (4, 3), (5, 3), (6, 3)] + // 184 -> [(0, 3), (2, 3), (3, 3), (6, 3)] + // 185 -> [(0, 3), (1, 3), (4, 3), (6, 3)] + // 186 -> [(0, 3), (1, 3), (3, 2), (4, 2), (6, 3)] + // 187 -> [(0, 3), (2, 3), (5, 3), (6, 3)] + // 188 -> [(0, 3), (2, 2), (4, 3), (5, 3), (6, 3)] + // 189 -> [(0, 3), (1, 3), (2, 3), (3, 3), (4, 3), (6, 3)] + // 190 -> [(0, 3), (1, 3), (2, 3), (4, 2), (6, 3)] + // 191 -> [(0, 3), (1, 3), (6, 3)] + // 192 -> [(0, 3), (2, 3), (4, 3), (6, 3)] + // 193 -> [(0, 3), (2, 2), (6, 3)] + // 194 -> [(0, 3), (4, 2), (6, 3)] + // 195 -> [(0, 3), (1, 3), (3, 2), (6, 3)] + + private final static int[] stateSizes = new int[] {1,1,1,1,2,2,2,3,2,2,2,2,3,2,2,3,2,4,4,3,3,2,2,2,3,3,2,3,3,2,3,3,3,3,3,2,2,3,2,3,4,3,4,5,3,3,3,4,4,4,2,3,4,3,3,4,3,3,4,3,3,3,2,3,3,4,3,2,3,3,4,3,2,4,5,2,3,3,4,3,2,3,3,4,3,4,4,3,4,3,5,5,3,3,6,5,4,3,4,5,3,4,3,4,4,4,3,4,5,3,4,3,3,4,2,5,4,3,4,5,4,3,5,4,3,5,2,5,4,3,4,4,4,4,3,5,3,3,4,4,5,4,2,4,4,5,4,5,5,3,6,4,5,3,4,4,6,6,3,5,3,4,4,7,4,6,3,4,5,3,4,4,4,5,4,5,5,4,5,4,5,2,5,5,4,4,5,4,5,6,5,3,4,3,3,4}; + private final static int[] minErrors = new int[] {0,2,3,1,1,2,0,1,1,-1,0,0,0,-1,0,-1,1,-1,0,0,-1,-2,0,-1,0,0,-1,0,-1,0,-1,-1,-2,-1,-1,-2,0,-2,-1,-2,-1,-1,-1,-1,-2,-1,-2,-2,-2,-1,-1,-1,-2,-2,-1,-2,-2,-1,-2,-1,-1,-1,-1,-1,-2,-1,-2,-2,-3,-1,-1,-3,-3,-1,-2,-2,-3,-1,-2,-2,-1,-2,-2,-2,-2,-2,-2,-3,-3,-3,-3,-2,-2,-2,-2,-2,-3,-3,-3,-2,-3,-3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-3,-2,-2,-3,-2,-2,-2,-3,-2,-2,-2,-3,-2,-3,-2,-2,-3,-2,-2,-3,-2,-3,-2,-2,-3,-2,-2,-2,-2,-2,-3,-2,-2,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3}; + private final int[] stateToAbs; + private final int[] absToState; + + public Lev3ParametricDescription(int w) { + super(w); + stateToAbs = new int[196]; + absToState = new int[(w+1)*694]; + int upto = 0; + for(int i=0;i state, offset + int state = absToState[absState]; + int offset = absState - stateToAbs[state]; + assert offset >= 0; + return w - offset + minErrors[state] <= 3; + } + + private final static long[] MASKS = new long[] {0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff,0x1ff,0x3ff,0x7ff,0xfff,0x1fff,0x3fff,0x7fff,0xffff,0x1ffff,0x3ffff,0x7ffff,0xfffff,0x1fffff,0x3fffff,0x7fffff,0xffffff,0x1ffffff,0x3ffffff,0x7ffffff,0xfffffff,0x1fffffff,0x3fffffff,0x7fffffffL,0xffffffffL,0x1ffffffffL,0x3ffffffffL,0x7ffffffffL,0xfffffffffL,0x1fffffffffL,0x3fffffffffL,0x7fffffffffL,0xffffffffffL,0x1ffffffffffL,0x3ffffffffffL,0x7ffffffffffL,0xfffffffffffL,0x1fffffffffffL,0x3fffffffffffL,0x7fffffffffffL,0xffffffffffffL,0x1ffffffffffffL,0x3ffffffffffffL,0x7ffffffffffffL,0xfffffffffffffL,0x1fffffffffffffL,0x3fffffffffffffL,0x7fffffffffffffL,0xffffffffffffffL,0x1ffffffffffffffL,0x3ffffffffffffffL,0x7ffffffffffffffL,0xfffffffffffffffL,0x1fffffffffffffffL,0x3fffffffffffffffL,0x7fffffffffffffffL}; + + private int unpack(long[] data, int index, int bitsPerValue) { + final long bitLoc = bitsPerValue * index; + final int dataLoc = (int) (bitLoc >> 6); + final int bitStart = (int) (bitLoc & 63); + //System.out.println("index=" + index + " dataLoc=" + dataLoc + " bitStart=" + bitStart + " bitsPerV=" + bitsPerValue); + if (bitStart + bitsPerValue <= 64) { + // not split + return (int) ((data[dataLoc] >> bitStart) & MASKS[bitsPerValue-1]); + } else { + // split + final int part = 64-bitStart; + return (int) (((data[dataLoc] >> bitStart) & MASKS[part-1]) + + ((data[1+dataLoc] & MASKS[bitsPerValue-part-1]) << part)); + } + } +} Property changes on: src/java/org/apache/lucene/util/automaton/Lev3ParametricDescription.java ___________________________________________________________________ Added: svn:eol-style + native Index: gen.py =================================================================== --- gen.py (revision 0) +++ gen.py (revision 0) @@ -0,0 +1,430 @@ +import math +import os +import sys +try: + from possibleStates import genTransitions +except ImportError: + from finenight.possibleStates import genTransitions + +MODE = 'array' +PACKED = True +WORD = 64 +LOG2_WORD = int(math.log(WORD)/math.log(2)) +#MODE = 'switch' + +class LineOutput: + + def __init__(self, indent=''): + self.l = [] + self._indent = self.startIndent = indent + + def __call__(self, s, indent=0): + if s.find('}') != -1: + assert self._indent != self.startIndent + self._indent = self._indent[:-2] + + if indent != 0: + indent0 = ' ' * (len(self._indent)/2+indent) + else: + indent0 = self._indent + + self.l.append(indent0 + s.lstrip()) + if s.find('{') != -1: + self._indent += ' ' + + def __str__(self): + if True: + assert self._indent == self.startIndent, 'indent %d vs start indent %d' % \ + (len(self._indent), len(self.startIndent)) + return '\n'.join(self.l) + + def indent(self): + self._indent += ' ' + + def outdent(self): + assert self._indent != self.startIndent + self._indent = self._indent[:-2] + +def charVarNumber(charVar): + """ + Maps binary number (eg [1, 0, 1]) to its decimal value (5). + """ + + p = 1 + sum = 0 + downTo = len(charVar)-1 + while downTo >= 0: + sum += p * int(charVar[downTo]) + p *= 2 + downTo -= 1 + return sum + +def main(): + + n = int(sys.argv[1]) + + tables = genTransitions(n) + + stateMap = {} + + # init null state + stateMap['[]'] = -1 + + # init start state + stateMap['[(0, 0)]'] = 0 + + w = LineOutput() + + w('package org.apache.lucene.util.automaton;') + w('') + w('// The following code was generated with the moman/finenight pkg') + w('// This package is available under the MIT License, see NOTICE') + w('// for more details.') + w('') + w('import org.apache.lucene.util.automaton.LevenshteinAutomata.ParametricDescription;') + w('') + + className = 'Lev%dParametricDescription' % n + + w('class %s extends ParametricDescription {' % className) + + w('') + w('@Override') + w('int transition(int absState, int position, int vector) {') + + w('') + w(' // decode absState -> state, offset') + w(' int state = absToState[absState];') + w(' int offset = absState - stateToAbs[state];') + w(' assert offset >= 0;') + w('') + w(' // null state should never be passed in') + w(' assert state != -1;') + + machines = [] + + for i, map in enumerate(tables): + if i == 0: + w('if (position == w) {') + elif i == len(tables)-1: + w('} else {') + else: + w('} else if (position == w-%d) {' % i) + + if i != 0 and MODE == 'switch': + w('switch(vector) {') + + l = map.items() + l.sort() + + numCasesPerVector = None + numVectors = len(l) + + if MODE == 'array': + toStateArray = [] + toOffsetIncrArray = [] + + for charVar, states in l: + + # somehow it's a string: + charVar = eval(charVar) + + if i != 0 and MODE == 'switch': + w('case %s: // <%s>' % (charVarNumber(charVar), ','.join([str(x) for x in charVar]))) + w.indent() + + l = states.items() + + byFromState = {} + + # first pass to assign states + byAction = {} + for s, (toS, offset) in l: + state = str(s) + if state == '[]': + # don't waste code on the null state + continue + + toState = str(toS) + if state not in stateMap: + stateMap[state] = len(stateMap)-1 + if toState not in stateMap: + stateMap[toState] = len(stateMap)-1 + + byFromState[stateMap[state]] = (1+stateMap[toState], offset) + + fromStateDesc = ', '.join([str(x) for x in eval(s)]) + toStateDesc = ', '.join([str(x) for x in toS]) + + tup = (stateMap[toState], toStateDesc, offset) + if tup not in byAction: + byAction[tup] = [] + byAction[tup].append((fromStateDesc, stateMap[state])) + + if numCasesPerVector is None: + numCasesPerVector = len(l)-1 + else: + # we require this to be uniform... empirically it seems to be! + assert numCasesPerVector == len(l)-1 + + if MODE == 'array': + + for s in range(numCasesPerVector): + toState, offsetIncr = byFromState[s] + toStateArray.append(toState) + toOffsetIncrArray.append(offsetIncr) + + else: + + # render switches + w('switch(state) { // %s cases' % len(l)) + + for (toState, toStateDesc, offset), lx in byAction.items(): + for fromStateDesc, fromState in lx: + w('case %s: // %s' % (fromState, fromStateDesc)) + w.indent() + w(' state = %s; // %s' % (toState, toStateDesc)) + if offset > 0: + w(' offset += %s;' % offset) + w('break;') + w.outdent() + + w('}') + if i != 0: + w('break;') + w.outdent() + + if MODE == 'array': + # strangely state can come in wildly out of bounds.... + w(' if (state < %d) {' % numCasesPerVector) + w(' final int loc = vector * %d + state;' % numCasesPerVector) + if PACKED: + w(' offset += unpack(offsetIncrs%d, loc, NBITSOFFSET%d);' % (i, i)) + w(' state = unpack(toStates%d, loc, NBITSSTATES%d)-1;' % (i, i)) + else: + w(' offset += offsetIncrs%d[loc];' % i) + w(' state = toStates%d[loc]-1;' % i) + w(' }') + elif i != 0: + w('}') + + machines.append((toStateArray, toOffsetIncrArray, numCasesPerVector, numVectors)) + + # ends switch statement for machine + w('}') + + w('') + + w(' if (state == -1) {') + w(' // null state') + w(' return -1;') + w(' } else {') + w(' // translate back to abs') + w(' return stateToAbs[state] + offset;') + w(' }') + + # ends transition method + w('}') + + subs = [] + if MODE == 'array': + w.indent() + for i, (toStateArray, toOffsetIncrsArray, numCasesPerVector, numVectors) in enumerate(machines): + w('') + w.outdent() + w('// %d vectors; %d states per vector; array length = %d' % \ + (numVectors, numCasesPerVector, numVectors*numCasesPerVector)) + w.indent() + if PACKED: + # pack in python + l, nbits = pack(toStateArray) + subs.append(('NBITSSTATES%d' % i, str(nbits))) + w(' private final static long[] toStates%d = new long[] {%s}; // %d bits per value' % \ + (i, ','.join([hex(x) for x in l]), nbits)) + + l, nbits = pack(toOffsetIncrsArray) + subs.append(('NBITSOFFSET%d' % i, str(nbits))) + w(' private final static long[] offsetIncrs%d = new long[] {%s}; // %d bits per value' % \ + (i, ','.join([hex(x) for x in l]), nbits)) + else: + w(' private final static int[] toStates%d = new int[] {%s};' % \ + (i, ','.join([str(x) for x in toStateArray]))) + w(' private final static int[] offsetIncrs%d = new int[] {%s};' % \ + (i, ','.join([str(x) for x in toOffsetIncrsArray]))) + w.outdent() + + stateMap2 = dict([[v,k] for k,v in stateMap.items()]) + w('') + w('// state map') + sum = 0 + stateSizes = [] + minErrors = [] + for i in xrange(len(stateMap2)-1): + w('// %s -> %s' % (i, stateMap2[i])) + v = eval(stateMap2[i]) + minError = min([-i+e for i, e in v]) + c = len(v) + sum += c + stateSizes.append(c) + minErrors.append(minError) + w('') + + w.indent() + w('private final static int[] stateSizes = new int[] {%s};' % ','.join([str(x) for x in stateSizes])) + w('private final static int[] minErrors = new int[] {%s};' % ','.join([str(x) for x in minErrors])) + + w.outdent() + w('private final int[] stateToAbs;') + w('private final int[] absToState;') + + w('') + w(' public %s(int w) {' % className) + w(' super(w);') + w(' stateToAbs = new int[%d];' % len(stateSizes)) + w(' absToState = new int[(w+1)*%d];' % sum) + w(' int upto = 0;') + w(' for(int i=0;i state, offset') + w(' int state = absToState[absState];') + w(' int offset = absState - stateToAbs[state];') + w(' assert offset >= 0;') + w(' return w - offset + minErrors[state] <= %d;' % n) + w('}') + + if MODE == 'array' and PACKED: + w('') + + v = 2 + l = [] + for i in range(63): + l.append(hex(v-1)) + v *= 2 + w('private final static long[] MASKS = new long[] {%s};' % ','.join(l), indent=1) + w('') + + # unpack in java + w('private int unpack(long[] data, int index, int bitsPerValue) {') + w(' final long bitLoc = bitsPerValue * index;') + w(' final int dataLoc = (int) (bitLoc >> %d);' % LOG2_WORD) + w(' final int bitStart = (int) (bitLoc & %d);' % (WORD-1)) + w(' //System.out.println("index=" + index + " dataLoc=" + dataLoc + " bitStart=" + bitStart + " bitsPerV=" + bitsPerValue);') + w(' if (bitStart + bitsPerValue <= %d) {' % WORD) + w(' // not split') + w(' return (int) ((data[dataLoc] >> bitStart) & MASKS[bitsPerValue-1]);') + w(' } else {') + w(' // split') + w(' final int part = %d-bitStart;' % WORD) + w(' return (int) (((data[dataLoc] >> bitStart) & MASKS[part-1]) +') + w(' ((data[1+dataLoc] & MASKS[bitsPerValue-part-1]) << part));', indent=1) + w(' }') + w('}') + + # class + w('}') + w('') + + fileOut = 'src/java/org/apache/lucene/util/automaton/%s.java' % className + + s = str(w) + for sub, repl in subs: + s = s.replace(sub, repl) + + open(fileOut, 'wb').write(s) + + print 'Wrote %s [%d lines; %.1f KB]' % \ + (fileOut, len(w.l), os.path.getsize(fileOut)/1024.) + + +MASKS = [] +v = 2 +for i in xrange(63): + MASKS.append(v-1) + v *= 2 + +# packs into longs; returns long[], numBits +def pack(l): + maxV = max(l) + bitsPerValue = max(1, int(math.ceil(math.log(maxV+1)/math.log(2.0)))) + + bitsLeft = WORD + pendingValue = 0 + + packed = [] + for i in xrange(len(l)): + v = l[i] + if pendingValue > 0: + bitsUsed = math.ceil(math.log(pendingValue)/math.log(2.0)) + assert bitsUsed <= (WORD-bitsLeft), 'bitsLeft=%s (%s-%s=%s) bitsUsed=%s' % (bitsLeft, WORD, bitsLeft, WORD-bitsLeft, bitsUsed) + + if bitsLeft >= bitsPerValue: + pendingValue += v << (WORD-bitsLeft) + bitsLeft -= bitsPerValue + if bitsLeft == 0: + packed.append(pendingValue) + bitsLeft = WORD + pendingValue = 0 + else: + # split + + # bottom bitsLeft go in current word: + pendingValue += (v & MASKS[bitsLeft-1]) << (WORD-bitsLeft) + packed.append(pendingValue) + + pendingValue = v >> bitsLeft + bitsLeft = WORD - (bitsPerValue-bitsLeft) + + if bitsLeft < WORD: + packed.append(pendingValue) + + # verify(l, packed, bitsPerValue) + + return packed, bitsPerValue + +def verify(data, packedData, bitsPerValue): + for i in range(len(data)): + assert data[i] == unpack(packedData, i, bitsPerValue) + +def unpack(data, index, bitsPerValue): + bitLoc = bitsPerValue * index + dataLoc = int(bitLoc >> LOG2_WORD) + bitStart = int(bitLoc & (WORD-1)) + if bitStart + bitsPerValue <= WORD: + # not split + return int(((data[dataLoc] >> bitStart) & MASKS[bitsPerValue-1])) + else: + # split + part = WORD-bitStart; + return int((((data[dataLoc] >> bitStart) & MASKS[part-1]) + + ((data[1+dataLoc] & MASKS[bitsPerValue-part-1]) << part))) + +if __name__ == '__main__': + if not __debug__: + print + print 'ERROR: please run without -O' + print + sys.exit(1) + main() Property changes on: gen.py ___________________________________________________________________ Added: svn:eol-style + native