diff --git a/modules/analysis/CHANGES.txt b/modules/analysis/CHANGES.txt index 9bfd6d8db5a..59dbc6024d0 100644 --- a/modules/analysis/CHANGES.txt +++ b/modules/analysis/CHANGES.txt @@ -9,15 +9,17 @@ API Changes * LUCENE-2413: Removed the AnalyzerUtil in common/miscellaneous. (Robert Muir) - * LUCENE-2167: StandardTokenizer/Analyzer in common/standard/ now implement - the Word Break rules from the Unicode Text Segmentation algorithm (UAX#29), - as well as tokenizing URLs and email addresses according to the relevant - RFCs. ClassicTokenizer/Analyzer retains the old StandardTokenizer/Analyzer - behavior. (Steven Rowe, Robert Muir, Uwe Schindler) - - * LUCENE-2699: Update StandardTokenizer and UAX29Tokenizer to Unicode 6.0.0. - (Steven Rowe) + * LUCENE-2167,LUCENE-2699,LUCENE-2763: StandardTokenizer/Analyzer in + common/standard/ now implement the Word Break rules from the Unicode 6.0.0 + Text Segmentation algorithm (UAX#29). + ClassicTokenizer/Analyzer retains the old StandardTokenizer/Analyzer + implementation and behavior. + + UAX29URLEmailTokenizer tokenizes URLs and E-mail addresses according to the + relevant RFCs, in addition to implementing the UAX#29 Word Break rules. + (Steven Rowe, Robert Muir, Uwe Schindler) + * LUCENE-1370: Added ShingleFilter option to output unigrams if no shingles can be generated. (Chris Harris via Steven Rowe) diff --git a/modules/analysis/common/build.xml b/modules/analysis/common/build.xml index fc8cb624186..3a7d30334e7 100644 --- a/modules/analysis/common/build.xml +++ b/modules/analysis/common/build.xml @@ -38,7 +38,7 @@ - + @@ -62,11 +62,11 @@ nobak="on" /> - + - diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ASCIITLD.jflex-macro b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ASCIITLD.jflex-macro index 39d3aa85009..054167e0cd1 100644 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ASCIITLD.jflex-macro +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ASCIITLD.jflex-macro @@ -15,8 +15,8 @@ */ // Generated from IANA Root Zone Database -// file version from Tuesday, October 12, 2010 11:34:09 AM UTC -// generated on Wednesday, October 13, 2010 4:12:27 AM UTC +// file version from Saturday, December 4, 2010 12:34:19 PM UTC +// generated on Sunday, December 5, 2010 12:24:12 AM UTC // by org.apache.lucene.analysis.standard.GenerateJflexTLDMacros ASCIITLD = "." ( diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ClassicTokenizerImpl.java b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ClassicTokenizerImpl.java index 18d1b7be027..5996e4f6a91 100644 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ClassicTokenizerImpl.java +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ClassicTokenizerImpl.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.5.0-SNAPSHOT on 10/3/10 9:07 AM */ +/* The following code was generated by JFlex 1.5.0-SNAPSHOT on 12/4/10 7:24 PM */ package org.apache.lucene.analysis.standard; @@ -33,8 +33,8 @@ import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; /** * This class is a scanner generated by * JFlex 1.5.0-SNAPSHOT - * on 10/3/10 9:07 AM from the specification file - * C:/Users/rmuir/workspace/lucene-clean/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ClassicTokenizerImpl.jflex + * on 12/4/10 7:24 PM from the specification file + * C:/cygwin/home/us/svn/lucene/dev/trunk/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/ClassicTokenizerImpl.jflex */ class ClassicTokenizerImpl implements StandardTokenizerInterface { @@ -630,6 +630,12 @@ public final void getText(CharTermAttribute t) { zzState = ZZ_LEXSTATE[zzLexicalState]; + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + zzForAction: { while (true) { @@ -662,7 +668,7 @@ public final void getText(CharTermAttribute t) { if (zzNext == -1) break zzForAction; zzState = zzNext; - int zzAttributes = zzAttrL[zzState]; + zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; @@ -676,45 +682,45 @@ public final void getText(CharTermAttribute t) { zzMarkedPos = zzMarkedPosL; switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 10: - { return EMAIL; - } - case 11: break; - case 2: - { return ALPHANUM; - } - case 12: break; - case 4: - { return HOST; - } - case 13: break; - case 1: - { /* ignore */ - } - case 14: break; - case 8: - { return ACRONYM_DEP; - } - case 15: break; case 5: { return NUM; } - case 16: break; + case 11: break; case 9: { return ACRONYM; } - case 17: break; + case 12: break; case 7: { return COMPANY; } - case 18: break; + case 13: break; + case 10: + { return EMAIL; + } + case 14: break; + case 1: + { /* ignore */ + } + case 15: break; case 6: { return APOSTROPHE; } - case 19: break; + case 16: break; case 3: { return CJ; } + case 17: break; + case 8: + { return ACRONYM_DEP; + } + case 18: break; + case 2: + { return ALPHANUM; + } + case 19: break; + case 4: + { return HOST; + } case 20: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/READ_BEFORE_REGENERATING.txt b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/READ_BEFORE_REGENERATING.txt index cc5256575b2..84432367493 100644 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/READ_BEFORE_REGENERATING.txt +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/READ_BEFORE_REGENERATING.txt @@ -16,6 +16,6 @@ */ -WARNING: if you change StandardTokenizerImpl*.jflex and need to regenerate - the tokenizer, only use the trunk version of JFlex 1.5 (with a minimum - SVN revision 597) at the moment! +WARNING: if you change StandardTokenizerImpl*.jflex or UAX29URLEmailTokenizer + and need to regenerate the tokenizer, only use the trunk version + of JFlex 1.5 (with a minimum SVN revision 597) at the moment! diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizer.java b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizer.java index 9370de77874..4a43225a46f 100644 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizer.java +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizer.java @@ -83,10 +83,9 @@ public final class StandardTokenizer extends Tokenizer { @Deprecated public static final int ACRONYM_DEP = 8; - public static final int URL = 9; - public static final int SOUTHEAST_ASIAN = 10; - public static final int IDEOGRAPHIC = 11; - public static final int HIRAGANA = 12; + public static final int SOUTHEAST_ASIAN = 9; + public static final int IDEOGRAPHIC = 10; + public static final int HIRAGANA = 11; /** String token types that correspond to token type int constants */ public static final String [] TOKEN_TYPES = new String [] { @@ -99,7 +98,6 @@ public final class StandardTokenizer extends Tokenizer { "", "", "", - "", "", "", "" diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java index 5cad50f58e5..b4c6e902763 100644 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.5.0-SNAPSHOT on 10/13/10 12:12 AM */ +/* The following code was generated by JFlex 1.5.0-SNAPSHOT on 12/4/10 7:24 PM */ package org.apache.lucene.analysis.standard; @@ -25,14 +25,11 @@ import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; * This class implements Word Break rules from the Unicode Text Segmentation * algorithm, as specified in * Unicode Standard Annex #29 - * URLs and email addresses are also tokenized according to the relevant RFCs. *

* Tokens produced are of the following types: *

    *
  • <ALPHANUM>: A sequence of alphabetic and numeric characters
  • *
  • <NUM>: A number
  • - *
  • <URL>: A URL
  • - *
  • <EMAIL>: An email address
  • *
  • <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast * Asian languages, including Thai, Lao, Myanmar, and Khmer
  • *
  • <IDEOGRAPHIC>: A single CJKV ideographic character
  • @@ -73,123 +70,115 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { * Translates characters to character classes */ private static final String ZZ_CMAP_PACKED = - "\1\101\10\77\2\101\2\77\1\101\23\77\1\102\1\76\1\71\1\102"+ - "\1\62\1\60\1\65\2\63\2\102\1\64\1\44\1\11\1\70\1\45"+ - "\1\50\1\55\1\51\1\54\1\46\1\47\1\56\1\53\1\52\1\57"+ - "\1\74\1\77\1\75\1\77\1\67\1\66\1\12\1\36\1\13\1\14"+ - "\1\15\1\20\1\21\1\37\1\22\1\40\1\43\1\23\1\24\1\25"+ - "\1\17\1\27\1\26\1\16\1\30\1\31\1\32\1\41\1\33\1\34"+ - "\1\42\1\35\1\72\1\100\1\73\1\103\1\61\1\103\1\12\1\36"+ - "\1\13\1\14\1\15\1\20\1\21\1\37\1\22\1\40\1\43\1\23"+ - "\1\24\1\25\1\17\1\27\1\26\1\16\1\30\1\31\1\32\1\41"+ - "\1\33\1\34\1\42\1\35\3\103\1\60\1\104\52\0\1\1\2\0"+ - "\1\2\7\0\1\1\1\0\1\5\2\0\1\1\5\0\27\1\1\0"+ - "\37\1\1\0\u01ca\1\4\0\14\1\16\0\5\1\7\0\1\1\1\0"+ - "\1\1\21\0\160\2\5\1\1\0\2\1\2\0\4\1\1\6\7\0"+ - "\1\1\1\5\3\1\1\0\1\1\1\0\24\1\1\0\123\1\1\0"+ - "\213\1\1\0\7\2\236\1\11\0\46\1\2\0\1\1\7\0\47\1"+ - "\1\0\1\6\7\0\55\2\1\0\1\2\1\0\2\2\1\0\2\2"+ - "\1\0\1\2\10\0\33\1\5\0\4\1\1\5\13\0\4\2\10\0"+ - "\2\6\2\0\13\2\5\0\53\1\25\2\12\3\1\0\1\3\1\6"+ - "\1\0\2\1\1\2\143\1\1\0\1\1\10\2\1\0\6\2\2\1"+ - "\2\2\1\0\4\2\2\1\12\3\3\1\2\0\1\1\17\0\1\2"+ - "\1\1\1\2\36\1\33\2\2\0\131\1\13\2\1\1\16\0\12\3"+ - "\41\1\11\2\2\1\2\0\1\6\1\0\1\1\5\0\26\1\4\2"+ - "\1\1\11\2\1\1\3\2\1\1\5\2\22\0\31\1\3\2\244\0"+ - "\4\2\66\1\3\2\1\1\22\2\1\1\7\2\12\1\2\2\2\0"+ - "\12\3\1\0\7\1\1\0\7\1\1\0\3\2\1\0\10\1\2\0"+ - "\2\1\2\0\26\1\1\0\7\1\1\0\1\1\3\0\4\1\2\0"+ - "\1\2\1\1\7\2\2\0\2\2\2\0\3\2\1\1\10\0\1\2"+ - "\4\0\2\1\1\0\3\1\2\2\2\0\12\3\2\1\17\0\3\2"+ - "\1\0\6\1\4\0\2\1\2\0\26\1\1\0\7\1\1\0\2\1"+ - "\1\0\2\1\1\0\2\1\2\0\1\2\1\0\5\2\4\0\2\2"+ - "\2\0\3\2\3\0\1\2\7\0\4\1\1\0\1\1\7\0\12\3"+ - "\2\2\3\1\1\2\13\0\3\2\1\0\11\1\1\0\3\1\1\0"+ - "\26\1\1\0\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1"+ - "\10\2\1\0\3\2\1\0\3\2\2\0\1\1\17\0\2\1\2\2"+ - "\2\0\12\3\21\0\3\2\1\0\10\1\2\0\2\1\2\0\26\1"+ - "\1\0\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1\7\2"+ - "\2\0\2\2\2\0\3\2\10\0\2\2\4\0\2\1\1\0\3\1"+ - "\2\2\2\0\12\3\1\0\1\1\20\0\1\2\1\1\1\0\6\1"+ - "\3\0\3\1\1\0\4\1\3\0\2\1\1\0\1\1\1\0\2\1"+ - "\3\0\2\1\3\0\3\1\3\0\14\1\4\0\5\2\3\0\3\2"+ - "\1\0\4\2\2\0\1\1\6\0\1\2\16\0\12\3\21\0\3\2"+ - "\1\0\10\1\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1"+ - "\3\0\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2\1\0"+ - "\2\1\6\0\2\1\2\2\2\0\12\3\22\0\2\2\1\0\10\1"+ - "\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1\2\0\1\2"+ - "\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2\7\0\1\1"+ - "\1\0\2\1\2\2\2\0\12\3\1\0\2\1\17\0\2\2\1\0"+ - "\10\1\1\0\3\1\1\0\51\1\2\0\1\1\7\2\1\0\3\2"+ - "\1\0\4\2\1\1\10\0\1\2\10\0\2\1\2\2\2\0\12\3"+ - "\12\0\6\1\2\0\2\2\1\0\22\1\3\0\30\1\1\0\11\1"+ - "\1\0\1\1\2\0\7\1\3\0\1\2\4\0\6\2\1\0\1\2"+ - "\1\0\10\2\22\0\2\2\15\0\60\105\1\106\2\105\7\106\5\0"+ - "\7\105\10\106\1\0\12\3\47\0\2\105\1\0\1\105\2\0\2\105"+ - "\1\0\1\105\2\0\1\105\6\0\4\105\1\0\7\105\1\0\3\105"+ - "\1\0\1\105\1\0\1\105\2\0\2\105\1\0\4\105\1\106\2\105"+ - "\6\106\1\0\2\106\1\105\2\0\5\105\1\0\1\105\1\0\6\106"+ - "\2\0\12\3\2\0\2\105\42\0\1\1\27\0\2\2\6\0\12\3"+ - "\13\0\1\2\1\0\1\2\1\0\1\2\4\0\2\2\10\1\1\0"+ - "\44\1\4\0\24\2\1\0\2\2\5\1\13\2\1\0\44\2\11\0"+ - "\1\2\71\0\53\105\24\106\1\105\12\3\6\0\6\105\4\106\4\105"+ - "\3\106\1\105\3\106\2\105\7\106\3\105\4\106\15\105\14\106\1\105"+ - "\1\106\12\3\4\106\2\105\46\1\12\0\53\1\1\0\1\1\3\0"+ - "\u0149\1\1\0\4\1\2\0\7\1\1\0\1\1\1\0\4\1\2\0"+ - "\51\1\1\0\4\1\2\0\41\1\1\0\4\1\2\0\7\1\1\0"+ - "\1\1\1\0\4\1\2\0\17\1\1\0\71\1\1\0\4\1\2\0"+ - "\103\1\2\0\3\2\40\0\20\1\20\0\125\1\14\0\u026c\1\2\0"+ - "\21\1\1\0\32\1\5\0\113\1\3\0\3\1\17\0\15\1\1\0"+ - "\4\1\3\2\13\0\22\1\3\2\13\0\22\1\2\2\14\0\15\1"+ - "\1\0\3\1\1\0\2\2\14\0\64\105\40\106\3\0\1\105\4\0"+ - "\1\105\1\106\2\0\12\3\41\0\3\2\2\0\12\3\6\0\130\1"+ - "\10\0\51\1\1\2\1\1\5\0\106\1\12\0\35\1\3\0\14\2"+ - "\4\0\14\2\12\0\12\3\36\105\2\0\5\105\13\0\54\105\4\0"+ - "\21\106\7\105\2\106\6\0\12\3\1\105\3\0\2\105\40\0\27\1"+ - "\5\2\4\0\65\105\12\106\1\0\35\106\2\0\1\2\12\3\6\0"+ - "\12\3\6\0\16\105\122\0\5\2\57\1\21\2\7\1\4\0\12\3"+ - "\21\0\11\2\14\0\3\2\36\1\12\2\3\0\2\1\12\3\6\0"+ - "\46\1\16\2\14\0\44\1\24\2\10\0\12\3\3\0\3\1\12\3"+ - "\44\1\122\0\3\2\1\0\25\2\4\1\1\2\4\1\1\2\15\0"+ - "\300\1\47\2\25\0\4\2\u0116\1\2\0\6\1\2\0\46\1\2\0"+ - "\6\1\2\0\10\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+ - "\37\1\2\0\65\1\1\0\7\1\1\0\1\1\3\0\3\1\1\0"+ - "\7\1\3\0\4\1\2\0\6\1\4\0\15\1\5\0\3\1\1\0"+ - "\7\1\17\0\4\2\10\0\2\7\12\0\1\7\2\0\1\5\2\0"+ - "\5\2\20\0\2\10\3\0\1\6\17\0\1\10\13\0\5\2\5\0"+ - "\6\2\1\0\1\1\15\0\1\1\20\0\15\1\63\0\41\2\21\0"+ - "\1\1\4\0\1\1\2\0\12\1\1\0\1\1\3\0\5\1\6\0"+ - "\1\1\1\0\1\1\1\0\1\1\1\0\4\1\1\0\13\1\2\0"+ - "\4\1\5\0\5\1\4\0\1\1\21\0\51\1\u032d\0\64\1\u0716\0"+ - "\57\1\1\0\57\1\1\0\205\1\6\0\4\1\3\2\16\0\46\1"+ - "\12\0\66\1\11\0\1\1\17\0\1\2\27\1\11\0\7\1\1\0"+ - "\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0"+ - "\7\1\1\0\7\1\1\0\40\2\57\0\1\1\120\0\32\107\1\0"+ - "\131\107\14\0\326\107\57\0\1\1\1\0\1\107\31\0\11\107\6\2"+ - "\1\0\5\4\2\0\3\107\1\1\1\1\4\0\126\110\2\0\2\2"+ - "\2\4\3\110\133\4\1\0\4\4\5\0\51\1\3\0\136\1\21\0"+ - "\33\1\65\0\20\4\320\0\57\4\1\0\130\4\250\0\u19b6\107\112\0"+ - "\u51cc\107\64\0\u048d\1\103\0\56\1\2\0\u010d\1\3\0\20\1\12\3"+ - "\2\1\24\0\57\1\4\2\11\0\2\2\1\0\31\1\10\0\120\1"+ - "\2\2\45\0\11\1\2\0\147\1\2\0\4\1\1\0\2\1\16\0"+ - "\12\1\120\0\10\1\1\2\3\1\1\2\4\1\1\2\27\1\5\2"+ - "\30\0\64\1\14\0\2\2\62\1\21\2\13\0\12\3\6\0\22\2"+ - "\6\1\3\0\1\1\4\0\12\3\34\1\10\2\2\0\27\1\15\2"+ - "\14\0\35\1\3\0\4\2\57\1\16\2\16\0\1\1\12\3\46\0"+ - "\51\1\16\2\11\0\3\1\1\2\10\1\2\2\2\0\12\3\6\0"+ - "\33\105\1\106\4\0\60\105\1\106\1\105\3\106\2\105\2\106\5\105"+ - "\2\106\1\105\1\106\1\105\30\0\5\105\41\0\6\1\2\0\6\1"+ - "\2\0\6\1\11\0\7\1\1\0\7\1\221\0\43\1\10\2\1\0"+ - "\2\2\2\0\12\3\6\0\u2ba4\1\14\0\27\1\4\0\61\1\u2104\0"+ - "\u012e\107\2\0\76\107\2\0\152\107\46\0\7\1\14\0\5\1\5\0"+ - "\1\1\1\2\12\1\1\0\15\1\1\0\5\1\1\0\1\1\1\0"+ - "\2\1\1\0\2\1\1\0\154\1\41\0\u016b\1\22\0\100\1\2\0"+ - "\66\1\50\0\14\1\4\0\20\2\1\6\2\0\1\5\1\6\13\0"+ - "\7\2\14\0\2\10\30\0\3\10\1\6\1\0\1\7\1\0\1\6"+ - "\1\5\32\0\5\1\1\0\207\1\2\0\1\2\7\0\1\7\4\0"+ - "\1\6\1\0\1\7\1\0\12\3\1\5\1\6\5\0\32\1\4\0"+ - "\1\10\1\0\32\1\13\0\70\4\2\2\37\1\3\0\6\1\2\0"+ - "\6\1\2\0\6\1\2\0\3\1\34\0\3\2\4\0"; + "\47\0\1\7\4\0\1\6\1\0\1\7\1\0\12\3\1\5\1\6"+ + "\5\0\32\1\4\0\1\10\1\0\32\1\57\0\1\1\2\0\1\2"+ + "\7\0\1\1\1\0\1\5\2\0\1\1\5\0\27\1\1\0\37\1"+ + "\1\0\u01ca\1\4\0\14\1\16\0\5\1\7\0\1\1\1\0\1\1"+ + "\21\0\160\2\5\1\1\0\2\1\2\0\4\1\1\6\7\0\1\1"+ + "\1\5\3\1\1\0\1\1\1\0\24\1\1\0\123\1\1\0\213\1"+ + "\1\0\7\2\236\1\11\0\46\1\2\0\1\1\7\0\47\1\1\0"+ + "\1\6\7\0\55\2\1\0\1\2\1\0\2\2\1\0\2\2\1\0"+ + "\1\2\10\0\33\1\5\0\4\1\1\5\13\0\4\2\10\0\2\6"+ + "\2\0\13\2\5\0\53\1\25\2\12\3\1\0\1\3\1\6\1\0"+ + "\2\1\1\2\143\1\1\0\1\1\10\2\1\0\6\2\2\1\2\2"+ + "\1\0\4\2\2\1\12\3\3\1\2\0\1\1\17\0\1\2\1\1"+ + "\1\2\36\1\33\2\2\0\131\1\13\2\1\1\16\0\12\3\41\1"+ + "\11\2\2\1\2\0\1\6\1\0\1\1\5\0\26\1\4\2\1\1"+ + "\11\2\1\1\3\2\1\1\5\2\22\0\31\1\3\2\244\0\4\2"+ + "\66\1\3\2\1\1\22\2\1\1\7\2\12\1\2\2\2\0\12\3"+ + "\1\0\7\1\1\0\7\1\1\0\3\2\1\0\10\1\2\0\2\1"+ + "\2\0\26\1\1\0\7\1\1\0\1\1\3\0\4\1\2\0\1\2"+ + "\1\1\7\2\2\0\2\2\2\0\3\2\1\1\10\0\1\2\4\0"+ + "\2\1\1\0\3\1\2\2\2\0\12\3\2\1\17\0\3\2\1\0"+ + "\6\1\4\0\2\1\2\0\26\1\1\0\7\1\1\0\2\1\1\0"+ + "\2\1\1\0\2\1\2\0\1\2\1\0\5\2\4\0\2\2\2\0"+ + "\3\2\3\0\1\2\7\0\4\1\1\0\1\1\7\0\12\3\2\2"+ + "\3\1\1\2\13\0\3\2\1\0\11\1\1\0\3\1\1\0\26\1"+ + "\1\0\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1\10\2"+ + "\1\0\3\2\1\0\3\2\2\0\1\1\17\0\2\1\2\2\2\0"+ + "\12\3\21\0\3\2\1\0\10\1\2\0\2\1\2\0\26\1\1\0"+ + "\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1\7\2\2\0"+ + "\2\2\2\0\3\2\10\0\2\2\4\0\2\1\1\0\3\1\2\2"+ + "\2\0\12\3\1\0\1\1\20\0\1\2\1\1\1\0\6\1\3\0"+ + "\3\1\1\0\4\1\3\0\2\1\1\0\1\1\1\0\2\1\3\0"+ + "\2\1\3\0\3\1\3\0\14\1\4\0\5\2\3\0\3\2\1\0"+ + "\4\2\2\0\1\1\6\0\1\2\16\0\12\3\21\0\3\2\1\0"+ + "\10\1\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1\3\0"+ + "\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2\1\0\2\1"+ + "\6\0\2\1\2\2\2\0\12\3\22\0\2\2\1\0\10\1\1\0"+ + "\3\1\1\0\27\1\1\0\12\1\1\0\5\1\2\0\1\2\1\1"+ + "\7\2\1\0\3\2\1\0\4\2\7\0\2\2\7\0\1\1\1\0"+ + "\2\1\2\2\2\0\12\3\1\0\2\1\17\0\2\2\1\0\10\1"+ + "\1\0\3\1\1\0\51\1\2\0\1\1\7\2\1\0\3\2\1\0"+ + "\4\2\1\1\10\0\1\2\10\0\2\1\2\2\2\0\12\3\12\0"+ + "\6\1\2\0\2\2\1\0\22\1\3\0\30\1\1\0\11\1\1\0"+ + "\1\1\2\0\7\1\3\0\1\2\4\0\6\2\1\0\1\2\1\0"+ + "\10\2\22\0\2\2\15\0\60\11\1\12\2\11\7\12\5\0\7\11"+ + "\10\12\1\0\12\3\47\0\2\11\1\0\1\11\2\0\2\11\1\0"+ + "\1\11\2\0\1\11\6\0\4\11\1\0\7\11\1\0\3\11\1\0"+ + "\1\11\1\0\1\11\2\0\2\11\1\0\4\11\1\12\2\11\6\12"+ + "\1\0\2\12\1\11\2\0\5\11\1\0\1\11\1\0\6\12\2\0"+ + "\12\3\2\0\2\11\42\0\1\1\27\0\2\2\6\0\12\3\13\0"+ + "\1\2\1\0\1\2\1\0\1\2\4\0\2\2\10\1\1\0\44\1"+ + "\4\0\24\2\1\0\2\2\5\1\13\2\1\0\44\2\11\0\1\2"+ + "\71\0\53\11\24\12\1\11\12\3\6\0\6\11\4\12\4\11\3\12"+ + "\1\11\3\12\2\11\7\12\3\11\4\12\15\11\14\12\1\11\1\12"+ + "\12\3\4\12\2\11\46\1\12\0\53\1\1\0\1\1\3\0\u0149\1"+ + "\1\0\4\1\2\0\7\1\1\0\1\1\1\0\4\1\2\0\51\1"+ + "\1\0\4\1\2\0\41\1\1\0\4\1\2\0\7\1\1\0\1\1"+ + "\1\0\4\1\2\0\17\1\1\0\71\1\1\0\4\1\2\0\103\1"+ + "\2\0\3\2\40\0\20\1\20\0\125\1\14\0\u026c\1\2\0\21\1"+ + "\1\0\32\1\5\0\113\1\3\0\3\1\17\0\15\1\1\0\4\1"+ + "\3\2\13\0\22\1\3\2\13\0\22\1\2\2\14\0\15\1\1\0"+ + "\3\1\1\0\2\2\14\0\64\11\40\12\3\0\1\11\4\0\1\11"+ + "\1\12\2\0\12\3\41\0\3\2\2\0\12\3\6\0\130\1\10\0"+ + "\51\1\1\2\1\1\5\0\106\1\12\0\35\1\3\0\14\2\4\0"+ + "\14\2\12\0\12\3\36\11\2\0\5\11\13\0\54\11\4\0\21\12"+ + "\7\11\2\12\6\0\12\3\1\11\3\0\2\11\40\0\27\1\5\2"+ + "\4\0\65\11\12\12\1\0\35\12\2\0\1\2\12\3\6\0\12\3"+ + "\6\0\16\11\122\0\5\2\57\1\21\2\7\1\4\0\12\3\21\0"+ + "\11\2\14\0\3\2\36\1\12\2\3\0\2\1\12\3\6\0\46\1"+ + "\16\2\14\0\44\1\24\2\10\0\12\3\3\0\3\1\12\3\44\1"+ + "\122\0\3\2\1\0\25\2\4\1\1\2\4\1\1\2\15\0\300\1"+ + "\47\2\25\0\4\2\u0116\1\2\0\6\1\2\0\46\1\2\0\6\1"+ + "\2\0\10\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0\37\1"+ + "\2\0\65\1\1\0\7\1\1\0\1\1\3\0\3\1\1\0\7\1"+ + "\3\0\4\1\2\0\6\1\4\0\15\1\5\0\3\1\1\0\7\1"+ + "\17\0\4\2\10\0\2\7\12\0\1\7\2\0\1\5\2\0\5\2"+ + "\20\0\2\10\3\0\1\6\17\0\1\10\13\0\5\2\5\0\6\2"+ + "\1\0\1\1\15\0\1\1\20\0\15\1\63\0\41\2\21\0\1\1"+ + "\4\0\1\1\2\0\12\1\1\0\1\1\3\0\5\1\6\0\1\1"+ + "\1\0\1\1\1\0\1\1\1\0\4\1\1\0\13\1\2\0\4\1"+ + "\5\0\5\1\4\0\1\1\21\0\51\1\u032d\0\64\1\u0716\0\57\1"+ + "\1\0\57\1\1\0\205\1\6\0\4\1\3\2\16\0\46\1\12\0"+ + "\66\1\11\0\1\1\17\0\1\2\27\1\11\0\7\1\1\0\7\1"+ + "\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1"+ + "\1\0\7\1\1\0\40\2\57\0\1\1\120\0\32\13\1\0\131\13"+ + "\14\0\326\13\57\0\1\1\1\0\1\13\31\0\11\13\6\2\1\0"+ + "\5\4\2\0\3\13\1\1\1\1\4\0\126\14\2\0\2\2\2\4"+ + "\3\14\133\4\1\0\4\4\5\0\51\1\3\0\136\1\21\0\33\1"+ + "\65\0\20\4\320\0\57\4\1\0\130\4\250\0\u19b6\13\112\0\u51cc\13"+ + "\64\0\u048d\1\103\0\56\1\2\0\u010d\1\3\0\20\1\12\3\2\1"+ + "\24\0\57\1\4\2\11\0\2\2\1\0\31\1\10\0\120\1\2\2"+ + "\45\0\11\1\2\0\147\1\2\0\4\1\1\0\2\1\16\0\12\1"+ + "\120\0\10\1\1\2\3\1\1\2\4\1\1\2\27\1\5\2\30\0"+ + "\64\1\14\0\2\2\62\1\21\2\13\0\12\3\6\0\22\2\6\1"+ + "\3\0\1\1\4\0\12\3\34\1\10\2\2\0\27\1\15\2\14\0"+ + "\35\1\3\0\4\2\57\1\16\2\16\0\1\1\12\3\46\0\51\1"+ + "\16\2\11\0\3\1\1\2\10\1\2\2\2\0\12\3\6\0\33\11"+ + "\1\12\4\0\60\11\1\12\1\11\3\12\2\11\2\12\5\11\2\12"+ + "\1\11\1\12\1\11\30\0\5\11\41\0\6\1\2\0\6\1\2\0"+ + "\6\1\11\0\7\1\1\0\7\1\221\0\43\1\10\2\1\0\2\2"+ + "\2\0\12\3\6\0\u2ba4\1\14\0\27\1\4\0\61\1\u2104\0\u012e\13"+ + "\2\0\76\13\2\0\152\13\46\0\7\1\14\0\5\1\5\0\1\1"+ + "\1\2\12\1\1\0\15\1\1\0\5\1\1\0\1\1\1\0\2\1"+ + "\1\0\2\1\1\0\154\1\41\0\u016b\1\22\0\100\1\2\0\66\1"+ + "\50\0\14\1\4\0\20\2\1\6\2\0\1\5\1\6\13\0\7\2"+ + "\14\0\2\10\30\0\3\10\1\6\1\0\1\7\1\0\1\6\1\5"+ + "\32\0\5\1\1\0\207\1\2\0\1\2\7\0\1\7\4\0\1\6"+ + "\1\0\1\7\1\0\12\3\1\5\1\6\5\0\32\1\4\0\1\10"+ + "\1\0\32\1\13\0\70\4\2\2\37\1\3\0\6\1\2\0\6\1"+ + "\2\0\6\1\2\0\3\1\34\0\3\2\4\0"; /** * Translates characters to character classes @@ -202,25 +191,11 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\1\0\1\1\1\2\1\3\1\2\2\1\3\2\3\3"+ - "\3\1\1\4\1\5\1\6\1\2\1\0\1\2\1\0"+ - "\1\3\6\0\2\2\1\0\3\2\1\0\1\3\1\0"+ - "\2\3\1\2\1\3\11\0\32\2\3\0\4\2\32\0"+ - "\4\3\10\0\1\7\1\0\6\10\3\2\2\10\1\2"+ - "\4\10\1\2\2\10\2\0\1\2\1\0\1\2\6\10"+ - "\3\0\2\10\1\0\4\10\1\0\2\10\1\0\2\3"+ - "\10\0\1\10\32\0\1\10\1\0\3\10\6\2\1\0"+ - "\1\2\2\0\1\2\1\0\1\10\10\0\3\3\15\0"+ - "\3\10\6\7\3\0\2\7\1\0\4\7\1\0\2\7"+ - "\2\10\1\0\2\10\1\0\2\10\1\0\1\10\2\2"+ - "\7\0\2\3\20\0\1\7\10\0\1\10\3\0\1\2"+ - "\32\0\3\10\23\0\1\10\27\0\1\10\4\0\1\10"+ - "\6\0\1\10\4\0\2\10\36\0\1\10\51\0\1\10"+ - "\42\0\1\10\50\0\1\10\122\0\1\10\116\0\1\10"+ - "\107\0\1\10\74\0\1\10\51\0\1\10\333\0"; + "\1\0\1\1\1\2\1\3\1\2\1\1\1\4\1\5"+ + "\1\6\1\2\1\0\1\2\1\0\1\3\2\0"; private static int [] zzUnpackAction() { - int [] result = new int[1117]; + int [] result = new int[16]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -245,149 +220,11 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\111\0\222\0\333\0\u0124\0\u016d\0\u01b6\0\u01ff"+ - "\0\u0248\0\u0291\0\u02da\0\u0323\0\u036c\0\u03b5\0\u03fe\0\u0447"+ - "\0\u0490\0\111\0\111\0\u04d9\0\u0522\0\u056b\0\u05b4\0\u05fd"+ - "\0\u016d\0\u0646\0\u01b6\0\u068f\0\u06d8\0\u0721\0\u076a\0\u07b3"+ - "\0\u07fc\0\u0845\0\u088e\0\u08d7\0\u0920\0\u0969\0\u09b2\0\u09fb"+ - "\0\u0a44\0\u0a8d\0\u0ad6\0\u03b5\0\u0b1f\0\u0b68\0\u0447\0\u0bb1"+ - "\0\u0bfa\0\u0c43\0\u0c8c\0\u0cd5\0\u0d1e\0\u0d67\0\u0db0\0\u0df9"+ - "\0\u0e42\0\u0e8b\0\u0ed4\0\u0f1d\0\u0f66\0\u0faf\0\u0ff8\0\u1041"+ - "\0\u108a\0\u10d3\0\u111c\0\u1165\0\u11ae\0\u11f7\0\u1240\0\u1289"+ - "\0\u12d2\0\u131b\0\u1364\0\u13ad\0\u13f6\0\u143f\0\u1488\0\u14d1"+ - "\0\u151a\0\u1563\0\u15ac\0\u15f5\0\u163e\0\u1687\0\u16d0\0\u1719"+ - "\0\u1762\0\u17ab\0\u17f4\0\u183d\0\u1886\0\u18cf\0\u1918\0\u1961"+ - "\0\u19aa\0\u19f3\0\u1a3c\0\u1a85\0\u1ace\0\u1b17\0\u1b60\0\u1ba9"+ - "\0\u1bf2\0\u1c3b\0\u1c84\0\u1ccd\0\u1d16\0\u1d5f\0\u1da8\0\u1df1"+ - "\0\u1e3a\0\u1e83\0\u1ecc\0\u1f15\0\u1f5e\0\u1fa7\0\u1ff0\0\u2039"+ - "\0\u2082\0\u20cb\0\u2114\0\111\0\u215d\0\u21a6\0\u21ef\0\u2238"+ - "\0\u2281\0\u22ca\0\u2313\0\u235c\0\u23a5\0\u23ee\0\u2437\0\u2480"+ - "\0\u24c9\0\u2512\0\u255b\0\u25a4\0\u25ed\0\u2636\0\u267f\0\u26c8"+ - "\0\u2711\0\u275a\0\u27a3\0\u27ec\0\u2835\0\u287e\0\u28c7\0\u2910"+ - "\0\u2959\0\u29a2\0\u29eb\0\u2a34\0\u2a7d\0\u2ac6\0\u2b0f\0\u2b58"+ - "\0\u2ba1\0\u2bea\0\u2c33\0\u2c7c\0\u2cc5\0\u2d0e\0\u2d57\0\u2da0"+ - "\0\u2de9\0\u2e32\0\u2e7b\0\u2ec4\0\u2f0d\0\u2f56\0\u2f9f\0\u2fe8"+ - "\0\u3031\0\u307a\0\u30c3\0\u310c\0\u3155\0\u319e\0\u31e7\0\u3230"+ - "\0\u3279\0\u32c2\0\u330b\0\u3354\0\u339d\0\u33e6\0\u342f\0\u3478"+ - "\0\u34c1\0\u350a\0\u3553\0\u359c\0\u35e5\0\u362e\0\u3677\0\u36c0"+ - "\0\u3709\0\u3752\0\u379b\0\u37e4\0\u382d\0\u3876\0\u38bf\0\u3908"+ - "\0\u3951\0\u399a\0\u39e3\0\u3a2c\0\u3a75\0\u3abe\0\u3b07\0\u3b50"+ - "\0\u3b99\0\u3be2\0\u3c2b\0\u3c74\0\u3cbd\0\u3d06\0\u3d4f\0\u3d98"+ - "\0\u3de1\0\u3e2a\0\u3e73\0\u3ebc\0\u3f05\0\u3f4e\0\u3f97\0\u3fe0"+ - "\0\u4029\0\u4072\0\u40bb\0\u4104\0\u414d\0\u4196\0\u41df\0\u4228"+ - "\0\u4271\0\u42ba\0\u4303\0\u434c\0\u4395\0\u43de\0\u4427\0\u4470"+ - "\0\u44b9\0\u4502\0\u454b\0\u4594\0\u45dd\0\u4626\0\u466f\0\u46b8"+ - "\0\u4701\0\u474a\0\u4793\0\u47dc\0\u4825\0\u486e\0\u48b7\0\u4900"+ - "\0\u4949\0\u4992\0\u49db\0\u4a24\0\u4a6d\0\u4ab6\0\u4aff\0\u4b48"+ - "\0\u4b91\0\u4bda\0\u4c23\0\u4c6c\0\u4cb5\0\u4cfe\0\u4d47\0\u4d90"+ - "\0\u4dd9\0\u4e22\0\u4e6b\0\u4eb4\0\u4efd\0\u4f46\0\u4f8f\0\u4fd8"+ - "\0\u5021\0\u506a\0\u50b3\0\u50fc\0\u5145\0\u518e\0\u51d7\0\u5220"+ - "\0\u5269\0\u52b2\0\u52fb\0\u5344\0\u538d\0\u53d6\0\u541f\0\u5468"+ - "\0\u54b1\0\u54fa\0\u5543\0\u20cb\0\u558c\0\u55d5\0\u561e\0\u5667"+ - "\0\u56b0\0\u56f9\0\u5742\0\u578b\0\u57d4\0\u581d\0\u5866\0\u58af"+ - "\0\u58f8\0\u5941\0\u598a\0\u59d3\0\u5a1c\0\u5a65\0\u5aae\0\u5af7"+ - "\0\u5b40\0\u5b89\0\u5bd2\0\u5c1b\0\u5c64\0\u5cad\0\u5cf6\0\u5d3f"+ - "\0\u5d88\0\u5dd1\0\u5e1a\0\u5e63\0\u5eac\0\u5ef5\0\u5f3e\0\u5f87"+ - "\0\u5fd0\0\u6019\0\u6062\0\u60ab\0\u60f4\0\u613d\0\u6186\0\u61cf"+ - "\0\u6218\0\u6261\0\u62aa\0\u62f3\0\u633c\0\u6385\0\u63ce\0\u6417"+ - "\0\u6460\0\u64a9\0\u64f2\0\u653b\0\u6584\0\u65cd\0\u6616\0\u665f"+ - "\0\u66a8\0\u66f1\0\u673a\0\u6783\0\u67cc\0\u6815\0\u685e\0\u68a7"+ - "\0\u68f0\0\u6939\0\u6982\0\u69cb\0\u6a14\0\u6a5d\0\u6aa6\0\u6aef"+ - "\0\u6b38\0\u6b81\0\u6bca\0\u6c13\0\u6c5c\0\u6ca5\0\u6cee\0\u6d37"+ - "\0\u6d80\0\u6dc9\0\u6e12\0\u6e5b\0\u6ea4\0\u6eed\0\u6f36\0\u6f7f"+ - "\0\u6fc8\0\u7011\0\u705a\0\u70a3\0\u70ec\0\u7135\0\u717e\0\u71c7"+ - "\0\u7210\0\u03fe\0\u7259\0\u72a2\0\u72eb\0\u7334\0\u737d\0\u73c6"+ - "\0\u740f\0\u7458\0\u74a1\0\u74ea\0\u7533\0\u757c\0\u75c5\0\u760e"+ - "\0\u7657\0\u76a0\0\u76e9\0\u7732\0\u777b\0\u77c4\0\u780d\0\u7856"+ - "\0\u789f\0\u78e8\0\u7931\0\u797a\0\u79c3\0\u7a0c\0\u7a55\0\u7a9e"+ - "\0\u7ae7\0\u7b30\0\u7b79\0\u7bc2\0\u7c0b\0\u7c54\0\u7c9d\0\u7ce6"+ - "\0\u7d2f\0\u7d78\0\u7dc1\0\u7e0a\0\u7e53\0\u7e9c\0\u7ee5\0\u7f2e"+ - "\0\u7f77\0\u7fc0\0\u8009\0\u8052\0\u809b\0\u80e4\0\u812d\0\u8176"+ - "\0\u81bf\0\u8208\0\u8251\0\u829a\0\u82e3\0\u832c\0\u8375\0\u83be"+ - "\0\u8407\0\u8450\0\u8499\0\u84e2\0\u852b\0\u8574\0\u85bd\0\u8606"+ - "\0\u864f\0\u8698\0\u86e1\0\u872a\0\u8773\0\u87bc\0\u8805\0\u884e"+ - "\0\u8897\0\u88e0\0\u8929\0\u8972\0\u89bb\0\u8a04\0\u8a4d\0\u8a96"+ - "\0\u8adf\0\u8b28\0\u8b71\0\u8bba\0\u8c03\0\u8c4c\0\u8c95\0\u8cde"+ - "\0\u8d27\0\u8d70\0\u8db9\0\u8e02\0\u8e4b\0\u8e94\0\u8edd\0\u8f26"+ - "\0\u8f6f\0\u8fb8\0\u9001\0\u904a\0\u9093\0\u90dc\0\u9125\0\u916e"+ - "\0\u91b7\0\u9200\0\u9249\0\u9292\0\u92db\0\u9324\0\u936d\0\u93b6"+ - "\0\u93ff\0\u9448\0\u9491\0\u94da\0\u9523\0\u956c\0\u95b5\0\u95fe"+ - "\0\u9647\0\u9690\0\u96d9\0\u9722\0\u976b\0\u97b4\0\u97fd\0\u9846"+ - "\0\u988f\0\u98d8\0\u9921\0\u996a\0\u99b3\0\u99fc\0\u9a45\0\u9a8e"+ - "\0\u9ad7\0\u9b20\0\u9b69\0\u9bb2\0\u9bfb\0\u9c44\0\u9c8d\0\u9cd6"+ - "\0\u9d1f\0\u9d68\0\u9db1\0\u9dfa\0\u9e43\0\u9e8c\0\u9ed5\0\u9f1e"+ - "\0\u9f67\0\u9fb0\0\u9ff9\0\ua042\0\ua08b\0\ua0d4\0\ua11d\0\ua166"+ - "\0\ua1af\0\ua1f8\0\ua241\0\ua28a\0\ua2d3\0\ua31c\0\ua365\0\ua3ae"+ - "\0\ua3f7\0\ua440\0\ua489\0\ua4d2\0\ua51b\0\ua564\0\ua5ad\0\ua5f6"+ - "\0\ua63f\0\ua688\0\ua6d1\0\ua71a\0\ua763\0\ua7ac\0\ua7f5\0\ua83e"+ - "\0\ua887\0\ua8d0\0\ua919\0\ua962\0\ua9ab\0\ua9f4\0\uaa3d\0\uaa86"+ - "\0\uaacf\0\uab18\0\uab61\0\uabaa\0\uabf3\0\uac3c\0\uac85\0\uacce"+ - "\0\uad17\0\uad60\0\uada9\0\uadf2\0\uae3b\0\uae84\0\uaecd\0\uaf16"+ - "\0\uaf5f\0\uafa8\0\uaff1\0\ub03a\0\ub083\0\ub0cc\0\ub115\0\ub15e"+ - "\0\ub1a7\0\ub1f0\0\ub239\0\ub282\0\ub2cb\0\ub314\0\ub35d\0\ub3a6"+ - "\0\ub3ef\0\ub438\0\ub481\0\ub4ca\0\ub513\0\ub55c\0\ub5a5\0\ub5ee"+ - "\0\ub637\0\ub680\0\ub6c9\0\ub712\0\ub75b\0\ub7a4\0\ub7ed\0\ub836"+ - "\0\ub87f\0\ub8c8\0\ub911\0\ub95a\0\ub9a3\0\ub9ec\0\uba35\0\uba7e"+ - "\0\ubac7\0\ubb10\0\ubb59\0\ubba2\0\ubbeb\0\ubc34\0\ubc7d\0\ubcc6"+ - "\0\ubd0f\0\ubd58\0\ubda1\0\ubdea\0\ube33\0\ube7c\0\ubec5\0\ubf0e"+ - "\0\ubf57\0\ubfa0\0\ubfe9\0\uc032\0\uc07b\0\uc0c4\0\uc10d\0\uc156"+ - "\0\uc19f\0\uc1e8\0\uc231\0\uc27a\0\uc2c3\0\uc30c\0\uc355\0\uc39e"+ - "\0\uc3e7\0\uc430\0\uc479\0\uc4c2\0\uc50b\0\uc554\0\uc59d\0\uc5e6"+ - "\0\uc62f\0\uc678\0\uc6c1\0\uc70a\0\uc753\0\uc79c\0\uc7e5\0\uc82e"+ - "\0\uc877\0\uc8c0\0\uc909\0\uc952\0\uc99b\0\uc9e4\0\uca2d\0\uca76"+ - "\0\ucabf\0\ucb08\0\ucb51\0\ucb9a\0\ucbe3\0\ucc2c\0\ucc75\0\uccbe"+ - "\0\ucd07\0\ucd50\0\ucd99\0\ucde2\0\uce2b\0\uce74\0\ucebd\0\ucf06"+ - "\0\ucf4f\0\ucf98\0\ucfe1\0\ud02a\0\ud073\0\ud0bc\0\ud105\0\ud14e"+ - "\0\ud197\0\ud1e0\0\ud229\0\ud272\0\ud2bb\0\ud304\0\ud34d\0\ud396"+ - "\0\ud3df\0\ud428\0\ud471\0\ud4ba\0\ud503\0\ud54c\0\ud595\0\ud5de"+ - "\0\ud627\0\ud670\0\ud6b9\0\ud702\0\ud74b\0\ud794\0\ud7dd\0\ud826"+ - "\0\ud86f\0\ud8b8\0\ud901\0\ud94a\0\ud993\0\ud9dc\0\uda25\0\uda6e"+ - "\0\udab7\0\udb00\0\udb49\0\udb92\0\udbdb\0\udc24\0\udc6d\0\udcb6"+ - "\0\udcff\0\udd48\0\udd91\0\uddda\0\ude23\0\ude6c\0\udeb5\0\udefe"+ - "\0\udf47\0\udf90\0\udfd9\0\ue022\0\ue06b\0\ue0b4\0\ue0fd\0\ue146"+ - "\0\ue18f\0\ue1d8\0\ue221\0\ue26a\0\ue2b3\0\ue2fc\0\ue345\0\ue38e"+ - "\0\ue3d7\0\ue420\0\ue469\0\ue4b2\0\ue4fb\0\ue544\0\ue58d\0\ue5d6"+ - "\0\ue61f\0\ue668\0\ue6b1\0\ue6fa\0\ue743\0\ue78c\0\ue7d5\0\ue81e"+ - "\0\ue867\0\ue8b0\0\ue8f9\0\ue942\0\ue98b\0\ue9d4\0\uea1d\0\uea66"+ - "\0\ueaaf\0\ueaf8\0\ueb41\0\ueb8a\0\uebd3\0\uec1c\0\uec65\0\uecae"+ - "\0\uecf7\0\ued40\0\ued89\0\uedd2\0\uee1b\0\uee64\0\ueead\0\ueef6"+ - "\0\uef3f\0\uef88\0\uefd1\0\uf01a\0\uf063\0\uf0ac\0\uf0f5\0\uf13e"+ - "\0\uf187\0\uf1d0\0\uf219\0\uf262\0\uf2ab\0\uf2f4\0\uf33d\0\uf386"+ - "\0\uf3cf\0\uf418\0\uf461\0\uf4aa\0\uf4f3\0\uf53c\0\uf585\0\uf5ce"+ - "\0\uf617\0\uf660\0\uf6a9\0\uf6f2\0\uf73b\0\uf784\0\uf7cd\0\uf816"+ - "\0\uf85f\0\uf8a8\0\uf8f1\0\uf93a\0\uf983\0\uf9cc\0\ufa15\0\ufa5e"+ - "\0\ufaa7\0\ufaf0\0\ufb39\0\ufb82\0\ufbcb\0\ufc14\0\ufc5d\0\ufca6"+ - "\0\ufcef\0\ufd38\0\ufd81\0\ufdca\0\ufe13\0\ufe5c\0\ufea5\0\ufeee"+ - "\0\uff37\0\uff80\0\uffc9\1\22\1\133\1\244\1\355\1\u0136"+ - "\1\u017f\1\u01c8\1\u0211\1\u025a\1\u02a3\1\u02ec\1\u0335\1\u037e"+ - "\1\u03c7\1\u0410\1\u0459\1\u04a2\1\u04eb\1\u0534\1\u057d\1\u05c6"+ - "\1\u060f\1\u0658\1\u06a1\1\u06ea\1\u0733\1\u077c\1\u07c5\1\u080e"+ - "\1\u0857\1\u08a0\1\u08e9\1\u0932\1\u097b\1\u09c4\1\u0a0d\1\u0a56"+ - "\1\u0a9f\1\u0ae8\1\u0b31\1\u0b7a\1\u0bc3\1\u0c0c\1\u0c55\1\u0c9e"+ - "\1\u0ce7\1\u0d30\1\u0d79\1\u0dc2\1\u0e0b\1\u0e54\1\u0e9d\1\u0ee6"+ - "\1\u0f2f\1\u0f78\1\u0fc1\1\u100a\1\u1053\1\u109c\1\u10e5\1\u112e"+ - "\1\u1177\1\u11c0\1\u1209\1\u1252\1\u129b\1\u12e4\1\u132d\1\u1376"+ - "\1\u13bf\1\u1408\1\u1451\1\u149a\1\u14e3\1\u152c\1\u1575\1\u15be"+ - "\1\u1607\1\u1650\1\u1699\1\u16e2\1\u172b\1\u1774\1\u17bd\1\u1806"+ - "\1\u184f\1\u1898\1\u18e1\1\u192a\1\u1973\1\u19bc\1\u1a05\1\u1a4e"+ - "\1\u1a97\1\u1ae0\1\u1b29\1\u1b72\1\u1bbb\1\u1c04\1\u1c4d\1\u1c96"+ - "\1\u1cdf\1\u1d28\1\u1d71\1\u1dba\1\u1e03\1\u1e4c\1\u1e95\1\u1ede"+ - "\1\u1f27\1\u1f70\1\u1fb9\1\u2002\1\u204b\1\u2094\1\u20dd\1\u2126"+ - "\1\u216f\1\u21b8\1\u2201\1\u224a\1\u2293\1\u22dc\1\u2325\1\u236e"+ - "\1\u23b7\1\u2400\1\u2449\1\u2492\1\u24db\1\u2524\1\u256d\1\u25b6"+ - "\1\u25ff\1\u2648\1\u2691\1\u26da\1\u2723\1\u276c\1\u27b5\1\u27fe"+ - "\1\u2847\1\u2890\1\u28d9\1\u2922\1\u296b\1\u29b4\1\u29fd\1\u2a46"+ - "\1\u2a8f\1\u2ad8\1\u2b21\1\u2b6a\1\u2bb3\1\u2bfc\1\u2c45\1\u2c8e"+ - "\1\u2cd7\1\u2d20\1\u2d69\1\u2db2\1\u2dfb\1\u2e44\1\u2e8d\1\u2ed6"+ - "\1\u2f1f\1\u2f68\1\u2fb1\1\u2ffa\1\u3043\1\u308c\1\u30d5\1\u311e"+ - "\1\u3167\1\u31b0\1\u31f9\1\u3242\1\u328b\1\u32d4\1\u331d\1\u3366"+ - "\1\u33af\1\u33f8\1\u3441\1\u348a\1\u34d3\1\u351c\1\u3565\1\u35ae"+ - "\1\u35f7\1\u3640\1\u3689\1\u36d2\1\u371b\1\u3764\1\u37ad\1\u37f6"+ - "\1\u383f\1\u3888\1\u38d1\1\u391a\1\u3963\1\u39ac\1\u39f5\1\u3a3e"+ - "\1\u3a87\1\u3ad0\1\u3b19\1\u3b62\1\u3bab"; + "\0\0\0\15\0\32\0\47\0\64\0\101\0\116\0\15"+ + "\0\15\0\133\0\150\0\165\0\202\0\217\0\101\0\234"; private static int [] zzUnpackRowMap() { - int [] result = new int[1117]; + int [] result = new int[16]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -410,1848 +247,21 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final String ZZ_TRANS_PACKED_0 = - "\1\2\1\3\1\2\1\4\1\5\3\2\1\6\1\7"+ - "\6\10\1\11\16\10\1\12\4\10\1\7\1\13\2\14"+ - "\1\13\4\14\1\15\1\14\1\2\1\7\1\16\1\7"+ - "\1\2\2\7\1\2\3\7\1\17\2\2\1\7\1\20"+ - "\3\2\2\7\1\2\2\21\1\22\1\23\112\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\25\32\3"+ - "\1\0\12\24\1\25\1\0\1\26\3\0\1\25\20\0"+ - "\1\3\3\0\1\3\2\4\2\0\2\27\1\30\1\27"+ - "\32\3\1\0\12\4\2\0\1\30\2\0\2\27\6\0"+ - "\1\27\11\0\1\4\4\0\1\5\1\0\1\5\3\0"+ - "\1\26\50\0\1\26\24\0\1\5\3\0\1\3\1\31"+ - "\1\4\1\5\3\0\1\31\1\0\32\3\1\0\12\4"+ - "\2\0\1\31\24\0\1\31\13\0\1\32\45\33\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\6\0\2\3\1\24\1\0\1\25\1\0\1\25"+ - "\1\26\1\35\32\10\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\10\10\1\42\6\10"+ - "\1\43\12\10\1\36\12\37\1\25\1\33\1\40\1\33"+ - "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\35\17\10\1\44\12\10\1\36"+ - "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\1\3\2\4\2\0\2\27\1\30\1\45\32\10"+ - "\1\36\12\14\1\0\1\33\1\46\1\33\1\0\2\47"+ - "\1\34\3\33\2\0\1\27\1\33\4\0\2\33\2\0"+ - "\1\4\3\0\1\3\2\4\2\0\2\27\1\30\1\45"+ - "\32\10\1\36\12\50\1\0\1\33\1\46\1\33\1\0"+ - "\2\47\1\34\3\33\2\0\1\27\1\33\4\0\2\33"+ - "\2\0\1\4\3\0\1\3\2\4\2\0\2\27\1\30"+ - "\1\45\32\10\1\36\1\14\1\51\1\50\2\14\2\50"+ - "\2\14\1\50\1\0\1\33\1\46\1\33\1\0\2\47"+ - "\1\34\3\33\2\0\1\27\1\33\4\0\2\33\2\0"+ - "\1\4\3\0\1\3\1\31\1\4\1\5\3\0\1\31"+ - "\1\32\32\52\1\33\12\53\1\0\1\33\1\54\1\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\2\0\1\31\14\0\4\55\2\0\1\55\15\0\1\55"+ - "\6\0\12\55\1\56\42\0\65\57\1\60\1\57\1\61"+ - "\1\0\2\57\112\0\2\21\3\0\1\3\2\24\2\0"+ - "\2\62\1\26\1\62\32\3\1\0\12\24\2\0\1\26"+ - "\2\0\2\62\6\0\1\62\11\0\1\24\3\0\1\3"+ - "\1\25\7\0\32\3\42\0\1\25\3\0\1\3\1\26"+ - "\1\24\1\5\3\0\1\26\1\0\32\3\1\0\12\24"+ - "\2\0\1\26\24\0\1\26\4\0\1\27\1\4\41\0"+ - "\12\4\27\0\1\27\3\0\1\3\1\30\1\4\1\5"+ - "\3\0\1\30\1\0\32\3\1\0\12\4\2\0\1\30"+ - "\24\0\1\30\13\0\1\32\45\33\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\1\57\3\0\2\33"+ - "\17\0\32\63\1\0\12\63\13\0\1\64\17\0\1\3"+ - "\1\25\6\0\1\32\1\65\1\66\1\67\1\70\1\71"+ - "\1\72\1\73\1\74\1\75\1\76\1\77\1\100\1\101"+ - "\1\102\1\103\1\104\1\105\1\106\1\107\1\110\1\111"+ - "\1\112\1\113\1\114\1\115\1\116\1\33\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\1\57"+ - "\3\0\2\33\2\0\1\25\13\0\1\32\32\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\6\0\1\3\2\24\2\0\2\62"+ - "\1\26\1\120\32\10\1\36\12\37\1\0\1\33\1\40"+ - "\1\33\1\0\2\121\1\34\3\33\2\0\1\62\1\33"+ - "\4\0\2\33\2\0\1\24\3\0\1\3\1\26\1\24"+ - "\1\5\3\0\1\26\1\32\32\52\1\33\12\122\1\0"+ - "\1\33\1\40\1\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\2\0\1\26\3\0\1\3\1\25"+ - "\6\0\1\32\32\52\13\33\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\25"+ - "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\35\11\10\1\123\20\10\1\36\12\37\1\25\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\2\0\1\3\3\0\2\3\1\24"+ - "\1\0\1\25\1\0\1\25\1\26\1\35\15\10\1\124"+ - "\14\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ - "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ - "\1\25\1\26\1\35\17\10\1\125\12\10\1\36\12\37"+ - "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\4\0"+ - "\1\27\1\4\5\0\1\32\1\126\1\127\1\130\1\131"+ - "\1\132\1\133\1\134\1\135\1\136\1\137\1\140\1\141"+ - "\1\142\1\143\1\144\1\145\1\146\1\147\1\150\1\151"+ - "\1\152\1\153\1\154\1\155\1\156\1\157\1\33\1\160"+ - "\2\161\1\160\4\161\1\162\1\161\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\1\57\3\0\2\33"+ - "\2\0\1\27\3\0\1\3\1\30\1\4\1\5\3\0"+ - "\1\30\1\32\32\52\1\33\12\53\1\0\1\33\1\46"+ - "\1\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\30\4\0\1\27\1\4\5\0\1\32"+ - "\33\33\12\53\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\2\0\1\27\3\0\1\3"+ - "\2\4\2\0\2\27\1\30\1\45\32\10\1\36\12\163"+ - "\1\0\1\33\1\46\1\33\1\0\2\47\1\34\3\33"+ - "\2\0\1\27\1\33\4\0\2\33\2\0\1\4\3\0"+ - "\1\3\2\4\2\0\2\27\1\30\1\45\32\10\1\36"+ - "\2\50\1\163\2\50\2\163\2\50\1\163\1\0\1\33"+ - "\1\46\1\33\1\0\2\47\1\34\3\33\2\0\1\27"+ - "\1\33\4\0\2\33\2\0\1\4\3\0\2\3\1\24"+ - "\1\0\1\25\1\0\1\25\1\26\1\164\32\52\1\33"+ - "\12\122\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\1\3\2\4\2\0\2\27\1\30\1\165\32\52"+ - "\1\33\12\53\1\0\1\33\1\46\1\33\1\0\2\47"+ - "\1\34\3\33\2\0\1\27\1\33\4\0\2\33\2\0"+ - "\1\4\14\0\4\166\2\0\1\166\15\0\1\166\6\0"+ - "\12\166\1\167\110\0\1\170\42\0\1\171\54\0\1\34"+ - "\33\0\74\57\6\0\1\62\1\24\41\0\12\24\27\0"+ - "\1\62\13\0\1\172\32\63\1\173\12\63\43\0\61\64"+ - "\1\0\1\174\4\64\1\175\1\0\3\64\5\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\1\10"+ - "\2\176\1\177\1\200\10\176\1\10\1\201\5\176\6\10"+ - "\1\36\12\37\1\25\1\33\1\40\1\33\1\0\1\33"+ - "\1\41\1\34\3\33\3\0\1\33\4\0\2\33\2\0"+ - "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ - "\1\26\1\35\1\202\2\176\1\10\1\176\1\203\6\176"+ - "\4\10\1\176\1\10\2\176\1\10\1\176\1\10\3\176"+ - "\1\36\12\37\1\25\1\33\1\40\1\33\1\0\1\33"+ - "\1\41\1\34\3\33\3\0\1\33\4\0\2\33\2\0"+ - "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ - "\1\26\1\35\3\10\1\176\1\10\1\176\4\10\1\176"+ - "\10\10\1\176\2\10\1\176\2\10\1\176\1\36\12\37"+ - "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ - "\1\10\1\176\1\204\2\176\2\10\1\176\6\10\3\176"+ - "\11\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ - "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ - "\1\25\1\26\1\35\3\10\1\176\1\10\1\176\10\10"+ - "\1\176\1\10\2\176\10\10\1\36\12\37\1\25\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\2\0\1\3\3\0\2\3\1\24"+ - "\1\0\1\25\1\0\1\25\1\26\1\35\4\10\1\205"+ - "\5\10\1\176\17\10\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\4\10\2\176\2\10"+ - "\1\176\1\10\1\176\13\10\1\176\2\10\1\176\1\36"+ - "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\35\1\176\1\10\3\176\1\206\14\176\2\10\2\176"+ - "\2\10\1\176\1\10\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\2\10\4\176\3\10"+ - "\2\176\1\207\1\176\1\10\2\176\12\10\1\36\12\37"+ - "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ - "\2\176\2\10\1\176\3\10\1\176\5\10\3\176\3\10"+ - "\1\176\2\10\3\176\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\5\176\1\210\1\10"+ - "\1\176\1\211\7\176\1\212\3\176\1\10\1\176\1\10"+ - "\3\176\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ - "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ - "\1\25\1\26\1\35\1\213\1\176\1\10\1\202\6\176"+ - "\3\10\1\176\2\10\1\176\2\10\1\176\6\10\1\36"+ - "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\35\1\176\31\10\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\1\176\2\10\1\176"+ - "\1\214\1\10\2\176\1\10\3\176\2\10\2\176\1\10"+ - "\1\176\3\10\1\176\2\10\2\176\1\36\12\37\1\25"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\6\176"+ - "\1\10\5\176\3\10\2\176\2\10\7\176\1\36\12\37"+ - "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ - "\1\10\2\176\1\211\1\215\3\176\1\10\3\176\1\10"+ - "\1\176\1\10\1\176\1\10\1\176\1\10\1\176\1\10"+ - "\3\176\1\10\1\176\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\1\176\6\10\1\176"+ - "\6\10\1\176\4\10\1\176\4\10\2\176\1\36\12\37"+ - "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ - "\6\10\1\176\7\10\1\176\13\10\1\36\12\37\1\25"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\13\10"+ - "\1\216\16\10\1\36\12\37\1\25\1\33\1\40\1\33"+ - "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\35\1\176\11\10\1\176\6\10"+ - "\1\176\10\10\1\36\12\37\1\25\1\33\1\40\1\33"+ - "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\35\1\176\1\10\6\176\1\217"+ - "\1\10\2\176\2\10\2\176\1\10\1\176\1\10\6\176"+ - "\1\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ - "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ - "\1\25\1\26\1\35\4\10\1\176\5\10\2\176\3\10"+ - "\2\176\10\10\1\176\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\3\10\1\176\1\10"+ - "\1\220\4\10\1\176\2\10\1\176\14\10\1\36\12\37"+ - "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ - "\2\176\1\10\1\176\3\10\2\176\2\10\1\176\4\10"+ - "\1\176\11\10\1\36\12\37\1\25\1\33\1\40\1\33"+ - "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\35\3\10\1\176\13\10\1\176"+ - "\12\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ - "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ - "\1\25\1\26\1\35\3\10\2\176\2\10\2\176\1\10"+ - "\2\176\1\10\1\176\3\10\1\176\1\10\1\176\1\10"+ - "\1\176\2\10\1\176\1\10\1\36\12\37\1\25\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\2\0\1\3\13\0\1\221\32\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\7\0\1\62\1\24\5\0"+ - "\1\32\1\126\1\127\1\130\1\131\1\132\1\133\1\134"+ - "\1\135\1\136\1\137\1\140\1\141\1\142\1\143\1\144"+ - "\1\145\1\146\1\147\1\150\1\151\1\152\1\153\1\154"+ - "\1\155\1\156\1\157\1\33\12\37\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\1\57\3\0\2\33"+ - "\2\0\1\62\4\0\1\62\1\24\5\0\1\32\33\33"+ - "\12\122\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\2\0\1\62\3\0\1\3\2\24"+ - "\2\0\2\62\1\26\1\222\32\52\1\33\12\122\1\0"+ - "\1\33\1\40\1\33\1\0\2\121\1\34\3\33\2\0"+ - "\1\62\1\33\4\0\2\33\2\0\1\24\3\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\3\10"+ - "\1\223\26\10\1\36\12\37\1\25\1\33\1\40\1\33"+ - "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\35\32\10\1\36\12\37\1\224"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\15\10"+ - "\1\225\14\10\1\36\12\37\1\25\1\33\1\40\1\33"+ - "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\3\13\0\1\221\1\117\2\226\1\227"+ - "\1\230\10\226\1\117\1\231\5\226\6\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\1\232\2\226\1\117\1\226"+ - "\1\233\6\226\4\117\1\226\1\117\2\226\1\117\1\226"+ - "\1\117\3\226\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\3\117\1\226\1\117\1\226\4\117\1\226\10\117\1\226"+ - "\2\117\1\226\2\117\1\226\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\1\117\1\226\1\234\2\226\2\117\1\226"+ - "\6\117\3\226\11\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\3\117\1\226\1\117\1\226\10\117\1\226\1\117"+ - "\2\226\10\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\4\117\1\235\5\117\1\226\17\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\4\117\2\226\2\117\1\226\1\117"+ - "\1\226\13\117\1\226\2\117\1\226\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\1\226\1\117\3\226\1\236\14\226"+ - "\2\117\2\226\2\117\1\226\1\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\2\117\4\226\3\117\2\226\1\237"+ - "\1\226\1\117\2\226\12\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\2\226\2\117\1\226\3\117\1\226\5\117"+ - "\3\226\3\117\1\226\2\117\3\226\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\5\226\1\240\1\117\1\226\1\241"+ - "\7\226\1\242\3\226\1\117\1\226\1\117\3\226\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\1\243\1\226\1\117"+ - "\1\232\6\226\3\117\1\226\2\117\1\226\2\117\1\226"+ - "\6\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\226"+ - "\31\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\226"+ - "\2\117\1\226\1\244\1\117\2\226\1\117\3\226\2\117"+ - "\2\226\1\117\1\226\3\117\1\226\2\117\2\226\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\6\226\1\117\5\226"+ - "\3\117\2\226\2\117\7\226\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\1\117\2\226\1\241\1\245\3\226\1\117"+ - "\3\226\1\117\1\226\1\117\1\226\1\117\1\226\1\117"+ - "\1\226\1\117\3\226\1\117\1\226\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\1\226\6\117\1\226\6\117\1\226"+ - "\4\117\1\226\4\117\2\226\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\6\117\1\226\7\117\1\226\13\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\13\117\1\246\16\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\1\226\11\117"+ - "\1\226\6\117\1\226\10\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\1\226\1\117\6\226\1\247\1\117\2\226"+ - "\2\117\2\226\1\117\1\226\1\117\6\226\1\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\4\117\1\226\5\117"+ - "\2\226\3\117\2\226\10\117\1\226\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\3\117\1\226\1\117\1\250\4\117"+ - "\1\226\2\117\1\226\14\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\2\226\1\117\1\226\3\117\2\226\2\117"+ - "\1\226\4\117\1\226\11\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\3\117\1\226\13\117\1\226\12\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\3\117\2\226\2\117"+ - "\2\226\1\117\2\226\1\117\1\226\3\117\1\226\1\117"+ - "\1\226\1\117\1\226\2\117\1\226\1\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\6\0\1\3\2\4\2\0\2\27\1\30"+ - "\1\251\32\10\1\36\12\161\1\0\1\33\1\46\1\33"+ - "\1\0\2\47\1\34\3\33\2\0\1\27\1\33\4\0"+ - "\2\33\2\0\1\4\3\0\1\3\2\4\2\0\2\27"+ - "\1\30\1\251\32\10\1\36\12\252\1\0\1\33\1\46"+ - "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ - "\4\0\2\33\2\0\1\4\3\0\1\3\2\4\2\0"+ - "\2\27\1\30\1\251\32\10\1\36\1\161\1\253\1\252"+ - "\2\161\2\252\2\161\1\252\1\0\1\33\1\46\1\33"+ - "\1\0\2\47\1\34\3\33\2\0\1\27\1\33\4\0"+ - "\2\33\2\0\1\4\3\0\1\3\2\4\2\0\2\27"+ - "\1\30\1\254\32\10\1\36\12\163\1\0\1\33\1\46"+ - "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ - "\4\0\2\33\2\0\1\4\3\0\1\3\1\25\6\0"+ - "\1\32\32\52\13\33\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\1\57\3\0\2\33\2\0\1\25"+ - "\4\0\1\27\1\4\5\0\1\32\33\33\12\53\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\1\57"+ - "\3\0\2\33\2\0\1\27\14\0\4\255\2\0\1\255"+ - "\15\0\1\255\6\0\12\255\1\167\43\0\4\256\2\0"+ - "\1\256\15\0\1\256\6\0\12\256\1\257\43\0\4\260"+ - "\2\0\1\260\15\0\1\260\6\0\1\261\2\262\1\261"+ - "\4\262\1\263\1\262\14\0\1\264\26\0\46\33\1\0"+ - "\3\33\1\0\2\33\1\0\3\33\3\0\1\33\1\57"+ - "\3\0\2\33\17\0\1\265\1\266\1\267\1\270\1\271"+ - "\1\272\1\273\1\274\1\275\1\276\1\277\1\300\1\301"+ - "\1\302\1\303\1\304\1\305\1\306\1\307\1\310\1\311"+ - "\1\312\1\313\1\314\1\315\1\316\1\0\12\63\44\0"+ - "\32\63\1\173\12\63\43\0\74\64\5\0\2\3\1\24"+ - "\1\0\1\25\1\0\1\25\1\26\1\317\32\10\1\36"+ - "\12\37\1\320\1\33\1\40\1\33\1\0\1\33\1\41"+ - "\1\34\1\321\1\322\1\323\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ - "\1\25\1\26\1\317\4\10\1\324\25\10\1\36\12\37"+ - "\1\320\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\2\0"+ - "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ - "\1\26\1\317\15\10\1\101\14\10\1\36\12\37\1\320"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\1\321"+ - "\1\322\1\323\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\317\10\10\1\101\21\10\1\36\12\37\1\320\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\1\321\1\322"+ - "\1\323\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\317"+ - "\17\10\1\176\12\10\1\36\12\37\1\320\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\1\321\1\322\1\323"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\317\5\10"+ - "\1\325\4\10\1\176\17\10\1\36\12\37\1\320\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\1\321\1\322"+ - "\1\323\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ - "\20\10\1\176\11\10\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\7\10\1\176\22\10"+ - "\1\36\12\37\1\25\1\33\1\40\1\33\1\0\1\33"+ - "\1\41\1\34\3\33\3\0\1\33\4\0\2\33\2\0"+ - "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ - "\1\26\1\35\27\10\1\176\2\10\1\36\12\37\1\25"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\317\6\10"+ - "\1\324\10\10\1\176\12\10\1\36\12\37\1\320\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\1\321\1\322"+ - "\1\323\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\317"+ - "\24\10\1\326\5\10\1\36\12\37\1\320\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\1\321\1\322\1\323"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\11\10"+ - "\1\176\20\10\1\36\12\37\1\25\1\33\1\40\1\33"+ - "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\317\16\10\1\327\13\10\1\36"+ - "\12\37\1\320\1\33\1\40\1\33\1\0\1\33\1\41"+ - "\1\34\1\321\1\322\1\323\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ - "\1\25\1\26\1\317\12\10\1\330\17\10\1\36\12\37"+ - "\1\320\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\2\0"+ - "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ - "\1\26\1\317\5\10\1\176\24\10\1\36\12\37\1\320"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\1\321"+ - "\1\322\1\323\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\317\1\331\31\10\1\36\12\37\1\320\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\1\321\1\322\1\323"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\32\10"+ - "\1\332\12\37\1\25\1\33\1\40\1\33\1\0\1\33"+ - "\1\41\1\34\3\33\3\0\1\33\4\0\2\33\2\0"+ - "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ - "\1\26\1\317\23\10\1\176\6\10\1\36\12\37\1\320"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\1\321"+ - "\1\322\1\323\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\317\24\10\1\333\5\10\1\36\12\37\1\320\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\1\321\1\322"+ - "\1\323\3\0\1\33\4\0\2\33\2\0\1\3\13\0"+ - "\1\32\1\126\1\127\1\130\1\131\1\132\1\133\1\134"+ - "\1\135\1\136\1\137\1\140\1\141\1\142\1\143\1\144"+ - "\1\145\1\146\1\147\1\150\1\151\1\152\1\153\1\154"+ - "\1\155\1\156\1\157\1\33\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\1\57\3\0\2\33"+ - "\7\0\1\62\1\24\5\0\1\32\33\33\12\122\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\1\57"+ - "\3\0\2\33\2\0\1\62\3\0\2\3\1\24\1\0"+ - "\1\25\1\0\1\25\1\26\1\35\32\10\1\36\12\37"+ - "\1\334\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\1\3\1\25\7\0\32\3\24\0\1\335\15\0\1\25"+ - "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\35\16\10\1\336\13\10\1\36\12\37\1\337\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\2\0\1\3\13\0\1\340\32\117"+ - "\1\36\12\117\1\341\3\33\1\0\2\33\1\34\1\321"+ - "\1\322\1\323\3\0\1\33\4\0\2\33\16\0\1\340"+ - "\4\117\1\342\25\117\1\36\12\117\1\341\3\33\1\0"+ - "\2\33\1\34\1\321\1\322\1\323\3\0\1\33\4\0"+ - "\2\33\16\0\1\340\15\117\1\142\14\117\1\36\12\117"+ - "\1\341\3\33\1\0\2\33\1\34\1\321\1\322\1\323"+ - "\3\0\1\33\4\0\2\33\16\0\1\340\10\117\1\142"+ - "\21\117\1\36\12\117\1\341\3\33\1\0\2\33\1\34"+ - "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\16\0"+ - "\1\340\17\117\1\226\12\117\1\36\12\117\1\341\3\33"+ - "\1\0\2\33\1\34\1\321\1\322\1\323\3\0\1\33"+ - "\4\0\2\33\16\0\1\340\5\117\1\343\4\117\1\226"+ - "\17\117\1\36\12\117\1\341\3\33\1\0\2\33\1\34"+ - "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\20\117\1\226\11\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\7\117\1\226\22\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\27\117\1\226\2\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\340\6\117\1\342\10\117\1\226"+ - "\12\117\1\36\12\117\1\341\3\33\1\0\2\33\1\34"+ - "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\16\0"+ - "\1\340\24\117\1\344\5\117\1\36\12\117\1\341\3\33"+ - "\1\0\2\33\1\34\1\321\1\322\1\323\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\11\117\1\226\20\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\340\16\117\1\345\13\117"+ - "\1\36\12\117\1\341\3\33\1\0\2\33\1\34\1\321"+ - "\1\322\1\323\3\0\1\33\4\0\2\33\16\0\1\340"+ - "\12\117\1\346\17\117\1\36\12\117\1\341\3\33\1\0"+ - "\2\33\1\34\1\321\1\322\1\323\3\0\1\33\4\0"+ - "\2\33\16\0\1\340\5\117\1\226\24\117\1\36\12\117"+ - "\1\341\3\33\1\0\2\33\1\34\1\321\1\322\1\323"+ - "\3\0\1\33\4\0\2\33\16\0\1\340\1\347\31\117"+ - "\1\36\12\117\1\341\3\33\1\0\2\33\1\34\1\321"+ - "\1\322\1\323\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\32\117\1\332\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\340\23\117"+ - "\1\226\6\117\1\36\12\117\1\341\3\33\1\0\2\33"+ - "\1\34\1\321\1\322\1\323\3\0\1\33\4\0\2\33"+ - "\16\0\1\340\24\117\1\350\5\117\1\36\12\117\1\341"+ - "\3\33\1\0\2\33\1\34\1\321\1\322\1\323\3\0"+ - "\1\33\4\0\2\33\7\0\1\27\1\4\5\0\1\32"+ - "\1\126\1\127\1\130\1\131\1\132\1\133\1\134\1\135"+ - "\1\136\1\137\1\140\1\141\1\142\1\143\1\144\1\145"+ - "\1\146\1\147\1\150\1\151\1\152\1\153\1\154\1\155"+ - "\1\156\1\157\1\33\1\351\2\352\1\351\4\352\1\353"+ - "\1\352\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\1\57\3\0\2\33\2\0\1\27\3\0\1\3"+ - "\2\4\2\0\2\27\1\30\1\251\32\10\1\36\12\163"+ - "\1\0\1\33\1\46\1\33\1\0\2\47\1\34\3\33"+ - "\2\0\1\27\1\33\4\0\2\33\2\0\1\4\3\0"+ - "\1\3\2\4\2\0\2\27\1\30\1\251\32\10\1\36"+ - "\2\252\1\163\2\252\2\163\2\252\1\163\1\0\1\33"+ - "\1\46\1\33\1\0\2\47\1\34\3\33\2\0\1\27"+ - "\1\33\4\0\2\33\2\0\1\4\4\0\1\27\1\4"+ - "\5\0\1\32\1\126\1\127\1\130\1\131\1\132\1\133"+ - "\1\134\1\135\1\136\1\137\1\140\1\141\1\142\1\143"+ - "\1\144\1\145\1\146\1\147\1\150\1\151\1\152\1\153"+ - "\1\154\1\155\1\156\1\157\1\33\12\163\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\1\57\3\0"+ - "\2\33\2\0\1\27\14\0\4\354\2\0\1\354\15\0"+ - "\1\354\6\0\12\354\1\167\43\0\4\355\2\0\1\355"+ - "\15\0\1\355\6\0\12\355\1\356\43\0\4\357\2\0"+ - "\1\357\15\0\1\357\6\0\1\360\2\361\1\360\4\361"+ - "\1\362\1\361\14\0\1\264\27\0\4\363\2\0\1\363"+ - "\15\0\1\363\6\0\12\363\1\364\13\0\1\264\26\0"+ - "\1\365\4\363\2\0\1\363\15\0\1\363\6\0\12\366"+ - "\1\364\13\0\1\264\26\0\1\365\4\363\2\0\1\363"+ - "\15\0\1\363\6\0\12\367\1\364\13\0\1\264\26\0"+ - "\1\365\4\363\2\0\1\363\15\0\1\363\6\0\1\366"+ - "\1\370\1\367\2\366\2\367\2\366\1\367\1\364\13\0"+ - "\1\264\74\0\1\341\7\0\1\371\1\372\1\373\30\0"+ - "\1\172\1\63\2\374\1\375\1\376\10\374\1\63\1\377"+ - "\5\374\6\63\1\173\12\63\43\0\1\172\1\u0100\2\374"+ - "\1\63\1\374\1\u0101\6\374\4\63\1\374\1\63\2\374"+ - "\1\63\1\374\1\63\3\374\1\173\12\63\43\0\1\172"+ - "\3\63\1\374\1\63\1\374\4\63\1\374\10\63\1\374"+ - "\2\63\1\374\2\63\1\374\1\173\12\63\43\0\1\172"+ - "\1\63\1\374\1\u0102\2\374\2\63\1\374\6\63\3\374"+ - "\11\63\1\173\12\63\43\0\1\172\3\63\1\374\1\63"+ - "\1\374\10\63\1\374\1\63\2\374\10\63\1\173\12\63"+ - "\43\0\1\172\4\63\1\u0103\5\63\1\374\17\63\1\173"+ - "\12\63\43\0\1\172\4\63\2\374\2\63\1\374\1\63"+ - "\1\374\13\63\1\374\2\63\1\374\1\173\12\63\43\0"+ - "\1\172\1\374\1\63\3\374\1\u0104\14\374\2\63\2\374"+ - "\2\63\1\374\1\63\1\173\12\63\43\0\1\172\2\63"+ - "\4\374\3\63\2\374\1\u0105\1\374\1\63\2\374\12\63"+ - "\1\173\12\63\43\0\1\172\2\374\2\63\1\374\3\63"+ - "\1\374\5\63\3\374\3\63\1\374\2\63\3\374\1\173"+ - "\12\63\43\0\1\172\5\374\1\u0106\1\63\1\374\1\u0107"+ - "\7\374\1\u0108\3\374\1\63\1\374\1\63\3\374\1\173"+ - "\12\63\43\0\1\172\1\u0109\1\374\1\63\1\u0100\6\374"+ - "\3\63\1\374\2\63\1\374\2\63\1\374\6\63\1\173"+ - "\12\63\43\0\1\172\1\374\31\63\1\173\12\63\43\0"+ - "\1\172\1\374\2\63\1\374\1\u010a\1\63\2\374\1\63"+ - "\3\374\2\63\2\374\1\63\1\374\3\63\1\374\2\63"+ - "\2\374\1\173\12\63\43\0\1\172\6\374\1\63\5\374"+ - "\3\63\2\374\2\63\7\374\1\173\12\63\43\0\1\172"+ - "\1\63\2\374\1\u0107\1\u010b\3\374\1\63\3\374\1\63"+ - "\1\374\1\63\1\374\1\63\1\374\1\63\1\374\1\63"+ - "\3\374\1\63\1\374\1\173\12\63\43\0\1\172\1\374"+ - "\6\63\1\374\6\63\1\374\4\63\1\374\4\63\2\374"+ - "\1\173\12\63\43\0\1\172\6\63\1\374\7\63\1\374"+ - "\13\63\1\173\12\63\43\0\1\172\13\63\1\u010c\16\63"+ - "\1\173\12\63\43\0\1\172\1\374\11\63\1\374\6\63"+ - "\1\374\10\63\1\173\12\63\43\0\1\172\1\374\1\63"+ - "\6\374\1\u010d\1\63\2\374\2\63\2\374\1\63\1\374"+ - "\1\63\6\374\1\63\1\173\12\63\43\0\1\172\4\63"+ - "\1\374\5\63\2\374\3\63\2\374\10\63\1\374\1\173"+ - "\12\63\43\0\1\172\3\63\1\374\1\63\1\u010e\4\63"+ - "\1\374\2\63\1\374\14\63\1\173\12\63\43\0\1\172"+ - "\2\374\1\63\1\374\3\63\2\374\2\63\1\374\4\63"+ - "\1\374\11\63\1\173\12\63\43\0\1\172\3\63\1\374"+ - "\13\63\1\374\12\63\1\173\12\63\43\0\1\172\3\63"+ - "\2\374\2\63\2\374\1\63\2\374\1\63\1\374\3\63"+ - "\1\374\1\63\1\374\1\63\1\374\2\63\1\374\1\63"+ - "\1\173\12\63\33\0\1\3\1\25\6\0\1\32\1\65"+ - "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ - "\1\76\1\77\1\100\1\101\1\102\1\103\1\104\1\105"+ - "\1\106\1\107\1\110\1\111\1\112\1\113\1\114\1\115"+ - "\1\116\1\33\12\117\1\341\3\33\1\0\2\33\1\34"+ - "\1\321\1\322\1\323\3\0\1\33\1\57\3\0\2\33"+ - "\2\0\1\25\3\0\1\3\1\25\7\0\32\3\1\0"+ - "\12\u010f\27\0\1\25\13\0\1\u0110\45\321\1\371\2\321"+ - "\1\u0111\1\371\2\321\1\u0112\2\321\1\323\2\0\1\371"+ - "\1\321\4\0\1\321\1\33\16\0\1\u0113\45\322\1\372"+ - "\2\322\1\u0114\1\0\2\33\1\u0115\1\321\1\322\1\323"+ - "\2\0\1\372\1\322\4\0\2\33\16\0\1\u0116\45\323"+ - "\1\373\2\323\1\u0117\1\373\2\323\1\u0118\2\323\1\33"+ - "\2\0\1\373\1\323\4\0\1\323\1\33\6\0\2\3"+ - "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\5\10"+ - "\1\176\24\10\1\36\12\37\1\25\1\33\1\40\1\33"+ - "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\35\15\10\1\176\14\10\1\36"+ - "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\35\10\10\1\176\21\10\1\36\12\37\1\25\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\2\0\1\3\3\0\2\3\1\24"+ - "\1\0\1\25\1\0\1\25\1\26\1\35\3\10\1\u0119"+ - "\26\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ - "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ - "\1\25\1\26\1\35\3\10\1\176\26\10\1\36\12\37"+ - "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ - "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ - "\27\10\1\u011a\2\10\1\36\12\37\1\25\1\33\1\40"+ - "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\2\0\1\3\13\0\1\32\32\117\1\u011b"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\6\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\35\16\10\1\176\13\10\1\36"+ - "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ - "\3\0\1\3\1\25\7\0\32\3\24\0\1\u011c\15\0"+ - "\1\25\72\0\1\u011d\21\0\2\3\1\24\1\0\1\25"+ - "\1\0\1\25\1\26\1\35\32\10\1\36\12\37\1\337"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\1\3"+ - "\1\25\7\0\32\3\24\0\1\u011e\15\0\1\25\13\0"+ - "\1\32\1\126\1\127\1\130\1\131\1\132\1\133\1\134"+ - "\1\135\1\136\1\137\1\140\1\141\1\142\1\143\1\144"+ - "\1\145\1\146\1\147\1\150\1\151\1\152\1\153\1\154"+ - "\1\155\1\156\1\157\1\33\12\117\1\341\3\33\1\0"+ - "\2\33\1\34\1\321\1\322\1\323\3\0\1\33\1\57"+ - "\3\0\2\33\52\0\12\u010f\43\0\1\221\5\117\1\226"+ - "\24\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\15\117"+ - "\1\226\14\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\10\117\1\226\21\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\3\117\1\u011f\26\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\3\117\1\226\26\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\27\117\1\u0120\2\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\16\117\1\226\13\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\6\0\1\3\2\4\2\0\2\27"+ - "\1\30\1\u0121\32\10\1\36\12\352\1\0\1\33\1\46"+ - "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ - "\4\0\2\33\2\0\1\4\3\0\1\3\2\4\2\0"+ - "\2\27\1\30\1\u0121\32\10\1\36\12\u0122\1\0\1\33"+ - "\1\46\1\33\1\0\2\47\1\34\3\33\2\0\1\27"+ - "\1\33\4\0\2\33\2\0\1\4\3\0\1\3\2\4"+ - "\2\0\2\27\1\30\1\u0121\32\10\1\36\1\352\1\u0123"+ - "\1\u0122\2\352\2\u0122\2\352\1\u0122\1\0\1\33\1\46"+ - "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ - "\4\0\2\33\2\0\1\4\61\0\1\167\43\0\4\u0124"+ - "\2\0\1\u0124\15\0\1\u0124\6\0\12\u0124\1\356\43\0"+ - "\4\u0125\2\0\1\u0125\15\0\1\u0125\6\0\12\u0125\1\u0126"+ - "\43\0\4\u0127\2\0\1\u0127\15\0\1\u0127\6\0\12\u0127"+ - "\1\u0128\13\0\1\264\26\0\1\365\4\u0127\2\0\1\u0127"+ - "\15\0\1\u0127\6\0\12\u0129\1\u0128\13\0\1\264\26\0"+ - "\1\365\4\u0127\2\0\1\u0127\15\0\1\u0127\6\0\12\u012a"+ - "\1\u0128\13\0\1\264\26\0\1\365\4\u0127\2\0\1\u0127"+ - "\15\0\1\u0127\6\0\1\u0129\1\u012b\1\u012a\2\u0129\2\u012a"+ - "\2\u0129\1\u012a\1\u0128\13\0\1\264\27\0\4\u012c\2\0"+ - "\1\u012c\15\0\1\u012c\6\0\12\u012c\1\364\13\0\1\264"+ - "\27\0\4\357\2\0\1\357\15\0\1\357\6\0\1\360"+ - "\2\361\1\360\4\361\1\362\1\361\77\0\1\u012d\2\u012e"+ - "\1\u012d\4\u012e\1\u012f\1\u012e\43\0\1\365\4\u012c\2\0"+ - "\1\u012c\15\0\1\u012c\6\0\12\u0130\1\364\13\0\1\264"+ - "\26\0\1\365\4\u012c\2\0\1\u012c\15\0\1\u012c\6\0"+ - "\12\u012c\1\364\13\0\1\264\26\0\1\365\4\u012c\2\0"+ - "\1\u012c\15\0\1\u012c\6\0\2\u0130\1\u012c\2\u0130\2\u012c"+ - "\2\u0130\1\u012c\1\364\13\0\1\264\26\0\51\371\1\u0131"+ - "\6\371\1\373\2\0\2\371\4\0\1\371\17\0\51\372"+ - "\1\u0132\3\0\1\372\1\371\1\372\1\373\2\0\2\372"+ - "\24\0\51\373\1\u0133\6\373\3\0\2\373\4\0\1\373"+ - "\17\0\1\u0134\32\63\1\173\12\63\43\0\1\u0134\4\63"+ - "\1\u0135\25\63\1\173\12\63\43\0\1\u0134\15\63\1\301"+ - "\14\63\1\173\12\63\43\0\1\u0134\10\63\1\301\21\63"+ - "\1\173\12\63\43\0\1\u0134\17\63\1\374\12\63\1\173"+ - "\12\63\43\0\1\u0134\5\63\1\u0136\4\63\1\374\17\63"+ - "\1\173\12\63\43\0\1\172\20\63\1\374\11\63\1\173"+ - "\12\63\43\0\1\172\7\63\1\374\22\63\1\173\12\63"+ - "\43\0\1\172\27\63\1\374\2\63\1\173\12\63\43\0"+ - "\1\u0134\6\63\1\u0135\10\63\1\374\12\63\1\173\12\63"+ - "\43\0\1\u0134\24\63\1\u0137\5\63\1\173\12\63\43\0"+ - "\1\172\11\63\1\374\20\63\1\173\12\63\43\0\1\u0134"+ - "\16\63\1\u0138\13\63\1\173\12\63\43\0\1\u0134\12\63"+ - "\1\u0139\17\63\1\173\12\63\43\0\1\u0134\5\63\1\374"+ - "\24\63\1\173\12\63\43\0\1\u0134\1\u013a\31\63\1\173"+ - "\12\63\43\0\1\172\32\63\1\u013b\12\63\43\0\1\u0134"+ - "\23\63\1\374\6\63\1\173\12\63\43\0\1\u0134\24\63"+ - "\1\u013c\5\63\1\173\12\63\77\0\12\u013d\10\0\1\371"+ - "\1\372\1\373\30\0\1\u0110\45\321\1\371\2\321\1\u0111"+ - "\1\371\2\321\1\u0112\2\321\1\323\2\0\1\371\1\321"+ - "\1\57\3\0\1\321\1\33\16\0\1\32\4\u013e\2\33"+ - "\1\u013e\15\33\1\u013e\6\33\12\u013e\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\51\371\1\u0131\6\371\1\373\1\64\1\0\2\371\4\0"+ - "\1\371\17\0\1\u0113\45\322\1\372\2\322\1\u0114\1\0"+ - "\2\33\1\u0115\1\321\1\322\1\323\2\0\1\372\1\322"+ - "\1\57\3\0\2\33\16\0\1\32\4\u013f\2\33\1\u013f"+ - "\15\33\1\u013f\6\33\12\u013f\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\51\372"+ - "\1\u0132\3\0\1\372\1\371\1\372\1\373\1\64\1\0"+ - "\2\372\24\0\1\u0116\45\323\1\373\2\323\1\u0117\1\373"+ - "\2\323\1\u0118\2\323\1\33\2\0\1\373\1\323\1\57"+ - "\3\0\1\323\1\33\16\0\1\32\4\u0140\2\33\1\u0140"+ - "\15\33\1\u0140\6\33\12\u0140\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\51\373"+ - "\1\u0133\6\373\1\0\1\64\1\0\2\373\4\0\1\373"+ - "\7\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ - "\1\35\20\10\1\u0141\11\10\1\36\12\37\1\25\1\33"+ - "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\2\0\1\3\3\0\2\3\1\24"+ - "\1\0\1\25\1\0\1\25\1\26\1\35\3\10\1\211"+ - "\26\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ - "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\2\0\1\3\13\0\1\32\2\117\1\u0142\2\117\1\u0143"+ - "\1\u0144\1\u0145\2\117\1\u0146\2\117\1\u0147\3\117\1\u0148"+ - "\1\u0149\1\u014a\1\117\1\u014b\1\u014c\1\117\1\u014d\1\u014e"+ - "\1\36\1\u014f\2\117\1\u0150\1\117\1\u0151\1\u0152\3\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\75\0\1\u0153\31\0\1\u0154\32\u0155\1\u0154"+ - "\12\u0155\1\u0156\2\u0154\1\u0157\3\u0154\1\u0158\3\0\1\u0159"+ - "\1\0\2\u0154\4\0\1\u0154\76\0\1\u015a\31\0\1\221"+ - "\20\117\1\u015b\11\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\3\117\1\241\26\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\7\0\1\27\1\4\5\0\1\32\1\126\1\127\1\130"+ - "\1\131\1\132\1\133\1\134\1\135\1\136\1\137\1\140"+ - "\1\141\1\142\1\143\1\144\1\145\1\146\1\147\1\150"+ - "\1\151\1\152\1\153\1\154\1\155\1\156\1\157\1\33"+ - "\1\u015c\2\u015d\1\u015c\4\u015d\1\u015e\1\u015d\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\1\57\3\0"+ - "\2\33\2\0\1\27\3\0\1\3\2\4\2\0\2\27"+ - "\1\30\1\u0121\32\10\1\36\12\163\1\0\1\33\1\46"+ - "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ - "\4\0\2\33\2\0\1\4\3\0\1\3\2\4\2\0"+ - "\2\27\1\30\1\u0121\32\10\1\36\2\u0122\1\163\2\u0122"+ - "\2\163\2\u0122\1\163\1\0\1\33\1\46\1\33\1\0"+ - "\2\47\1\34\3\33\2\0\1\27\1\33\4\0\2\33"+ - "\2\0\1\4\14\0\4\u015f\2\0\1\u015f\15\0\1\u015f"+ - "\6\0\12\u015f\1\356\43\0\4\u0160\2\0\1\u0160\15\0"+ - "\1\u0160\6\0\12\u0160\1\u0161\43\0\4\u0162\2\0\1\u0162"+ - "\15\0\1\u0162\6\0\1\u0163\2\u0164\1\u0163\4\u0164\1\u0165"+ - "\1\u0164\14\0\1\264\27\0\4\u0166\2\0\1\u0166\15\0"+ - "\1\u0166\6\0\12\u0166\1\u0128\13\0\1\264\27\0\4\u0162"+ - "\2\0\1\u0162\15\0\1\u0162\6\0\1\u0163\2\u0164\1\u0163"+ - "\4\u0164\1\u0165\1\u0164\43\0\1\365\4\u0166\2\0\1\u0166"+ - "\15\0\1\u0166\6\0\12\u0167\1\u0128\13\0\1\264\26\0"+ - "\1\365\4\u0166\2\0\1\u0166\15\0\1\u0166\6\0\12\u0166"+ - "\1\u0128\13\0\1\264\26\0\1\365\4\u0166\2\0\1\u0166"+ - "\15\0\1\u0166\6\0\2\u0167\1\u0166\2\u0167\2\u0166\2\u0167"+ - "\1\u0166\1\u0128\13\0\1\264\27\0\4\u0168\2\0\1\u0168"+ - "\15\0\1\u0168\6\0\12\u0168\1\364\13\0\1\264\26\0"+ - "\1\u0169\33\0\12\u012e\43\0\1\u0169\33\0\12\u016a\43\0"+ - "\1\u0169\33\0\1\u012e\1\u016b\1\u016a\2\u012e\2\u016a\2\u012e"+ - "\1\u016a\43\0\1\365\4\u0168\2\0\1\u0168\15\0\1\u0168"+ - "\6\0\12\u0168\1\364\13\0\1\264\27\0\4\u016c\2\0"+ - "\1\u016c\15\0\1\u016c\6\0\12\u016c\44\0\4\u016d\2\0"+ - "\1\u016d\15\0\1\u016d\6\0\12\u016d\44\0\4\u016e\2\0"+ - "\1\u016e\15\0\1\u016e\6\0\12\u016e\43\0\1\172\5\63"+ - "\1\374\24\63\1\173\12\63\43\0\1\172\15\63\1\374"+ - "\14\63\1\173\12\63\43\0\1\172\10\63\1\374\21\63"+ - "\1\173\12\63\43\0\1\172\3\63\1\u016f\26\63\1\173"+ - "\12\63\43\0\1\172\3\63\1\374\26\63\1\173\12\63"+ - "\43\0\1\172\27\63\1\u0170\2\63\1\173\12\63\44\0"+ - "\32\63\1\u0171\12\63\43\0\1\172\16\63\1\374\13\63"+ - "\1\173\12\63\77\0\12\u0172\10\0\1\371\1\372\1\373"+ - "\30\0\1\32\4\321\2\33\1\321\15\33\1\321\6\33"+ - "\12\321\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\32\4\322\2\33\1\322"+ - "\15\33\1\322\6\33\12\322\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\32"+ - "\4\323\2\33\1\323\15\33\1\323\6\33\12\323\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\6\0\2\3\1\24\1\0\1\25\1\0\1\25"+ - "\1\26\1\35\12\10\1\176\17\10\1\36\12\37\1\25"+ - "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\2\0\1\3\13\0\1\221"+ - "\3\117\1\u0173\26\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\32\117\1\36\4\117\1\u0174\5\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\10\117\1\u0175\12\117\1\u0176\6\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\2\117"+ - "\1\u0177\7\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\7\117\1\u0178"+ - "\22\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\7\117"+ - "\1\u0179\22\117\1\36\3\117\1\u017a\6\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\7\117\1\u017b\22\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\31\117\1\u017c\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\1\117\1\u017d\30\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\7\117\1\u017e\1\117\1\u017f"+ - "\20\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\22\117"+ - "\1\u0180\7\117\1\36\2\117\1\u0181\7\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\7\117\1\u0182\22\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\7\117\1\u0183\5\117\1\u0184\14\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\23\117\1\u0185"+ - "\6\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ - "\1\36\3\117\1\u0186\6\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\17\117\1\u0187\12\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\32\117\1\36\1\u0188\11\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\17\0"+ - "\32\u0189\1\0\12\u0189\11\0\1\u018a\1\0\1\u018b\27\0"+ - "\46\u0154\1\u0156\2\u0154\1\u0157\3\u0154\1\u0158\5\0\2\u0154"+ - "\4\0\1\u0154\17\0\1\u018c\32\u0155\1\u018d\12\u0155\1\u018e"+ - "\2\u0154\1\u0157\3\u0154\1\u0158\1\0\1\u018f\3\0\2\u0154"+ - "\4\0\1\u0154\17\0\46\u0156\1\0\2\u0156\1\u0190\3\u0156"+ - "\1\u0158\5\0\2\u0156\4\0\1\u0156\20\0\4\u0191\2\0"+ - "\1\u0191\15\0\1\u0191\6\0\12\u0191\44\0\32\u0192\1\0"+ - "\12\u0192\13\0\1\u0159\30\0\4\u0193\2\0\1\u0193\15\0"+ - "\1\u0193\6\0\12\u0193\1\u0194\42\0\1\u0195\32\u0196\1\u0195"+ - "\12\u0196\1\u0197\2\u0195\1\u0198\3\u0195\1\u0199\3\0\1\u019a"+ - "\1\0\2\u0195\4\0\1\u0195\17\0\1\221\12\117\1\226"+ - "\17\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\6\0\1\3\2\4"+ - "\2\0\2\27\1\30\1\254\32\10\1\36\12\u015d\1\341"+ - "\1\33\1\46\1\33\1\0\2\47\1\34\1\321\1\322"+ - "\1\323\2\0\1\27\1\33\4\0\2\33\2\0\1\4"+ - "\3\0\1\3\2\4\2\0\2\27\1\30\1\254\32\10"+ - "\1\36\12\u019b\1\341\1\33\1\46\1\33\1\0\2\47"+ - "\1\34\1\321\1\322\1\323\2\0\1\27\1\33\4\0"+ - "\2\33\2\0\1\4\3\0\1\3\2\4\2\0\2\27"+ - "\1\30\1\254\32\10\1\36\1\u015d\1\u019c\1\u019b\2\u015d"+ - "\2\u019b\2\u015d\1\u019b\1\341\1\33\1\46\1\33\1\0"+ - "\2\47\1\34\1\321\1\322\1\323\2\0\1\27\1\33"+ - "\4\0\2\33\2\0\1\4\61\0\1\356\43\0\4\u019d"+ - "\2\0\1\u019d\15\0\1\u019d\6\0\12\u019d\1\u0161\43\0"+ - "\4\u019e\2\0\1\u019e\15\0\1\u019e\6\0\12\u019e\1\u019f"+ - "\43\0\4\u01a0\2\0\1\u01a0\15\0\1\u01a0\6\0\12\u01a0"+ - "\1\u01a1\13\0\1\264\26\0\1\365\4\u01a0\2\0\1\u01a0"+ - "\15\0\1\u01a0\6\0\12\u01a2\1\u01a1\13\0\1\264\26\0"+ - "\1\365\4\u01a0\2\0\1\u01a0\15\0\1\u01a0\6\0\12\u01a3"+ - "\1\u01a1\13\0\1\264\26\0\1\365\4\u01a0\2\0\1\u01a0"+ - "\15\0\1\u01a0\6\0\1\u01a2\1\u01a4\1\u01a3\2\u01a2\2\u01a3"+ - "\2\u01a2\1\u01a3\1\u01a1\13\0\1\264\27\0\4\u01a5\2\0"+ - "\1\u01a5\15\0\1\u01a5\6\0\12\u01a5\1\u0128\13\0\1\264"+ - "\26\0\1\365\4\u01a5\2\0\1\u01a5\15\0\1\u01a5\6\0"+ - "\12\u01a5\1\u0128\13\0\1\264\74\0\1\364\13\0\1\264"+ - "\62\0\1\u01a6\2\u01a7\1\u01a6\4\u01a7\1\u01a8\1\u01a7\43\0"+ - "\1\u0169\110\0\1\u0169\33\0\2\u016a\1\0\2\u016a\2\0"+ - "\2\u016a\45\0\4\371\2\0\1\371\15\0\1\371\6\0"+ - "\12\371\44\0\4\372\2\0\1\372\15\0\1\372\6\0"+ - "\12\372\44\0\4\373\2\0\1\373\15\0\1\373\6\0"+ - "\12\373\43\0\1\172\20\63\1\u01a9\11\63\1\173\12\63"+ - "\43\0\1\172\3\63\1\u0107\26\63\1\173\12\63\44\0"+ - "\2\63\1\u01aa\2\63\1\u01ab\1\u01ac\1\u01ad\2\63\1\u01ae"+ - "\2\63\1\u01af\3\63\1\u01b0\1\u01b1\1\u01b2\1\63\1\u01b3"+ - "\1\u01b4\1\63\1\u01b5\1\u01b6\1\173\1\u01b7\2\63\1\u01b8"+ - "\1\63\1\u01b9\1\u01ba\3\63\77\0\12\u01bb\10\0\1\371"+ - "\1\372\1\373\30\0\1\221\24\117\1\u01bc\5\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\1\117\1\u01bd\30\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\14\117\1\u01be"+ - "\15\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\117"+ - "\1\u01bf\30\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\21\117\1\u01c0\10\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\24\117\1\u01c1\5\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\24\117\1\u01c2\5\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\1\344\31\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\24\117\1\u01c3\5\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\1\117\1\u01c4\30\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\31\117\1\u01c5\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\24\117\1\u01c6\5\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\1\117\1\u01c7"+ - "\30\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\u01c8"+ - "\31\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\21\117"+ - "\1\u01c9\10\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\24\117\1\u01ca\5\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\24\117\1\u01cb\5\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\4\117\1\u01cc\25\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\21\117\1\u01cd\10\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\24\117\1\u01ce\5\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\7\117"+ - "\1\u01cf\2\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\1\u01d0\31\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\u01d1\32\u0189\1\u01d2"+ - "\12\u0189\11\0\1\u018a\31\0\51\u018a\1\u01d3\3\0\3\u018a"+ - "\1\373\3\0\1\u018a\25\0\4\u01d4\2\0\1\u01d4\15\0"+ - "\1\u01d4\6\0\12\u01d4\1\u01d5\42\0\1\u0154\32\u0155\1\u0154"+ - "\12\u0155\1\u0156\2\u0154\1\u0157\3\u0154\1\u0158\5\0\2\u0154"+ - "\4\0\1\u0154\17\0\1\u0154\32\u0155\1\u018d\12\u0155\1\u0156"+ - "\2\u0154\1\u0157\3\u0154\1\u0158\5\0\2\u0154\4\0\1\u0154"+ - "\17\0\34\u0156\12\u01d6\1\0\2\u0156\1\u0190\3\u0156\1\u0158"+ - "\5\0\2\u0156\4\0\1\u0156\17\0\51\u018f\1\u01d7\3\0"+ - "\3\u018f\1\373\2\0\1\u01d8\1\u018f\25\0\4\u01d9\2\0"+ - "\1\u01d9\15\0\1\u01d9\6\0\12\u01d9\44\0\4\u0154\2\0"+ - "\1\u0154\15\0\1\u0154\6\0\12\u0154\43\0\1\u01da\32\u0192"+ - "\1\u01db\12\u0192\1\u01dc\10\0\1\u018f\32\0\4\u01dd\2\0"+ - "\1\u01dd\15\0\1\u01dd\6\0\12\u01dd\1\u01de\110\0\1\u01df"+ - "\42\0\46\u0195\1\u0197\2\u0195\1\u0198\3\u0195\1\u0199\5\0"+ - "\2\u0195\4\0\1\u0195\17\0\1\u01e0\32\u0196\1\u01e1\12\u0196"+ - "\1\u01e2\2\u0195\1\u0198\3\u0195\1\u0199\1\371\1\372\1\373"+ - "\2\0\2\u0195\4\0\1\u0195\17\0\46\u0197\1\0\2\u0197"+ - "\1\u01e3\3\u0197\1\u0199\5\0\2\u0197\4\0\1\u0197\20\0"+ - "\4\u01e4\2\0\1\u01e4\15\0\1\u01e4\6\0\12\u01e4\44\0"+ - "\32\u01e5\1\0\12\u01e5\13\0\1\u019a\17\0\1\3\2\4"+ - "\2\0\2\27\1\30\1\254\32\10\1\36\12\163\1\341"+ - "\1\33\1\46\1\33\1\0\2\47\1\34\1\321\1\322"+ - "\1\323\2\0\1\27\1\33\4\0\2\33\2\0\1\4"+ - "\3\0\1\3\2\4\2\0\2\27\1\30\1\254\32\10"+ - "\1\36\2\u019b\1\163\2\u019b\2\163\2\u019b\1\163\1\341"+ - "\1\33\1\46\1\33\1\0\2\47\1\34\1\321\1\322"+ - "\1\323\2\0\1\27\1\33\4\0\2\33\2\0\1\4"+ - "\14\0\4\u01e6\2\0\1\u01e6\15\0\1\u01e6\6\0\12\u01e6"+ - "\1\u0161\43\0\4\u01e7\2\0\1\u01e7\15\0\1\u01e7\6\0"+ - "\12\u01e7\1\u01e8\43\0\4\u01e9\2\0\1\u01e9\15\0\1\u01e9"+ - "\6\0\1\u01ea\2\u01eb\1\u01ea\4\u01eb\1\u01ec\1\u01eb\14\0"+ - "\1\264\27\0\4\u01ed\2\0\1\u01ed\15\0\1\u01ed\6\0"+ - "\12\u01ed\1\u01a1\13\0\1\264\27\0\4\u01e9\2\0\1\u01e9"+ - "\15\0\1\u01e9\6\0\1\u01ea\2\u01eb\1\u01ea\4\u01eb\1\u01ec"+ - "\1\u01eb\43\0\1\365\4\u01ed\2\0\1\u01ed\15\0\1\u01ed"+ - "\6\0\12\u01ee\1\u01a1\13\0\1\264\26\0\1\365\4\u01ed"+ - "\2\0\1\u01ed\15\0\1\u01ed\6\0\12\u01ed\1\u01a1\13\0"+ - "\1\264\26\0\1\365\4\u01ed\2\0\1\u01ed\15\0\1\u01ed"+ - "\6\0\2\u01ee\1\u01ed\2\u01ee\2\u01ed\2\u01ee\1\u01ed\1\u01a1"+ - "\13\0\1\264\74\0\1\u0128\13\0\1\264\26\0\1\u01ef"+ - "\33\0\12\u01a7\43\0\1\u01ef\33\0\12\u01f0\43\0\1\u01ef"+ - "\33\0\1\u01a7\1\u01f1\1\u01f0\2\u01a7\2\u01f0\2\u01a7\1\u01f0"+ - "\43\0\1\172\12\63\1\374\17\63\1\173\12\63\43\0"+ - "\1\172\3\63\1\u01f2\26\63\1\173\12\63\43\0\1\172"+ - "\32\63\1\173\4\63\1\u01f3\5\63\43\0\1\172\10\63"+ - "\1\u01f4\12\63\1\u01f5\6\63\1\173\12\63\43\0\1\172"+ - "\32\63\1\173\2\63\1\u01f6\7\63\43\0\1\172\7\63"+ - "\1\u01f7\22\63\1\173\12\63\43\0\1\172\7\63\1\u01f8"+ - "\22\63\1\173\3\63\1\u01f9\6\63\43\0\1\172\7\63"+ - "\1\u01fa\22\63\1\173\12\63\43\0\1\172\31\63\1\u01fb"+ - "\1\173\12\63\43\0\1\172\1\63\1\u01fc\30\63\1\173"+ - "\12\63\43\0\1\172\7\63\1\u01fd\1\63\1\u01fe\20\63"+ - "\1\173\12\63\43\0\1\172\22\63\1\u01ff\7\63\1\173"+ - "\2\63\1\u0200\7\63\43\0\1\172\7\63\1\u0201\22\63"+ - "\1\173\12\63\43\0\1\172\7\63\1\u0202\5\63\1\u0203"+ - "\14\63\1\173\12\63\43\0\1\172\23\63\1\u0204\6\63"+ - "\1\173\12\63\43\0\1\172\32\63\1\173\3\63\1\u0205"+ - "\6\63\43\0\1\172\17\63\1\u0206\12\63\1\173\12\63"+ - "\43\0\1\172\32\63\1\173\1\u0207\11\63\77\0\12\u0208"+ - "\10\0\1\371\1\372\1\373\30\0\1\221\1\u0209\31\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\21\117\1\u020a"+ - "\10\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\16\117"+ - "\1\u020b\4\117\1\u020c\6\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\32\117\1\36\10\117\1\u020d\1\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\32\117\1\36\10\117\1\u020e\1\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\1\u020f\2\117\1\u0210\26\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\16\117\1\u0211"+ - "\13\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\25\117"+ - "\1\u0212\4\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\32\117\1\36\10\117\1\u0213\1\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\23\117\1\u0214\6\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\31\117\1\u0215\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\26\117\1\u0216\3\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\11\117\1\u0217\20\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\32\117\1\36\3\117\1\u0218"+ - "\6\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\10\117\1\u0219\21\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\3\117\1\u021a"+ - "\26\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\21\117"+ - "\1\u021b\6\117\1\u021c\1\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\12\117\1\u021d\17\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\32\117\1\36\1\117\1\u021e\10\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\24\117\1\u021f\5\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\31\117\1\u0220\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\17\0\32\u0189\1\0\12\u0189\44\0"+ - "\32\u0189\1\u01d2\12\u0189\44\0\4\u0221\2\0\1\u0221\15\0"+ - "\1\u0221\6\0\12\u0221\44\0\4\u0222\2\0\1\u0222\15\0"+ - "\1\u0222\6\0\12\u0222\1\u0223\110\0\1\u0224\42\0\34\u0156"+ - "\12\u0225\1\0\2\u0156\1\u0190\3\u0156\1\u0158\1\0\1\u018f"+ - "\3\0\2\u0156\4\0\1\u0156\20\0\4\u0226\2\0\1\u0226"+ - "\15\0\1\u0226\6\0\12\u0226\63\0\1\u0227\71\0\4\u0156"+ - "\2\0\1\u0156\15\0\1\u0156\6\0\12\u0156\44\0\32\u0192"+ - "\1\0\12\u0192\44\0\32\u0192\1\u01db\12\u0192\77\0\12\u0228"+ - "\44\0\4\u0229\2\0\1\u0229\15\0\1\u0229\6\0\12\u0229"+ - "\1\u01de\43\0\4\u022a\2\0\1\u022a\15\0\1\u022a\6\0"+ - "\12\u022a\1\u022b\43\0\4\u022c\2\0\1\u022c\15\0\1\u022c"+ - "\6\0\1\u022d\2\u022e\1\u022d\4\u022e\1\u022f\1\u022e\14\0"+ - "\1\u0230\26\0\1\u0195\32\u0196\1\u0195\12\u0196\1\u0197\2\u0195"+ - "\1\u0198\3\u0195\1\u0199\5\0\2\u0195\4\0\1\u0195\17\0"+ - "\1\u0195\32\u0196\1\u01e1\12\u0196\1\u0197\2\u0195\1\u0198\3\u0195"+ - "\1\u0199\5\0\2\u0195\4\0\1\u0195\17\0\34\u0197\12\u0231"+ - "\1\0\2\u0197\1\u01e3\3\u0197\1\u0199\5\0\2\u0197\4\0"+ - "\1\u0197\20\0\4\u0232\2\0\1\u0232\15\0\1\u0232\6\0"+ - "\12\u0232\44\0\4\u0195\2\0\1\u0195\15\0\1\u0195\6\0"+ - "\12\u0195\43\0\1\u0233\32\u01e5\1\u0234\12\u01e5\1\341\7\0"+ - "\1\371\1\372\1\373\76\0\1\u0161\43\0\4\u0235\2\0"+ - "\1\u0235\15\0\1\u0235\6\0\12\u0235\1\u01e8\43\0\4\u0236"+ - "\2\0\1\u0236\15\0\1\u0236\6\0\12\u0236\1\u0237\43\0"+ - "\4\u0238\2\0\1\u0238\15\0\1\u0238\6\0\12\u0238\1\u0239"+ - "\13\0\1\264\26\0\1\365\4\u0238\2\0\1\u0238\15\0"+ - "\1\u0238\6\0\12\u023a\1\u0239\13\0\1\264\26\0\1\365"+ - "\4\u0238\2\0\1\u0238\15\0\1\u0238\6\0\12\u023b\1\u0239"+ - "\13\0\1\264\26\0\1\365\4\u0238\2\0\1\u0238\15\0"+ - "\1\u0238\6\0\1\u023a\1\u023c\1\u023b\2\u023a\2\u023b\2\u023a"+ - "\1\u023b\1\u0239\13\0\1\264\27\0\4\u023d\2\0\1\u023d"+ - "\15\0\1\u023d\6\0\12\u023d\1\u01a1\13\0\1\264\26\0"+ - "\1\365\4\u023d\2\0\1\u023d\15\0\1\u023d\6\0\12\u023d"+ - "\1\u01a1\13\0\1\264\62\0\1\u023e\2\u023f\1\u023e\4\u023f"+ - "\1\u0240\1\u023f\43\0\1\u01ef\110\0\1\u01ef\33\0\2\u01f0"+ - "\1\0\2\u01f0\2\0\2\u01f0\44\0\1\172\24\63\1\u0241"+ - "\5\63\1\173\12\63\43\0\1\172\1\63\1\u0242\30\63"+ - "\1\173\12\63\43\0\1\172\14\63\1\u0243\15\63\1\173"+ - "\12\63\43\0\1\172\1\63\1\u0244\30\63\1\173\12\63"+ - "\43\0\1\172\21\63\1\u0245\10\63\1\173\12\63\43\0"+ - "\1\172\24\63\1\u0246\5\63\1\173\12\63\43\0\1\172"+ - "\24\63\1\u0247\5\63\1\173\12\63\43\0\1\172\1\u0137"+ - "\31\63\1\173\12\63\43\0\1\172\24\63\1\u0248\5\63"+ - "\1\173\12\63\43\0\1\172\1\63\1\u0249\30\63\1\173"+ - "\12\63\43\0\1\172\31\63\1\u024a\1\173\12\63\43\0"+ - "\1\172\24\63\1\u024b\5\63\1\173\12\63\43\0\1\172"+ - "\1\63\1\u024c\30\63\1\173\12\63\43\0\1\172\1\u024d"+ - "\31\63\1\173\12\63\43\0\1\172\21\63\1\u024e\10\63"+ - "\1\173\12\63\43\0\1\172\24\63\1\u024f\5\63\1\173"+ - "\12\63\43\0\1\172\24\63\1\u0250\5\63\1\173\12\63"+ - "\43\0\1\172\4\63\1\u0251\25\63\1\173\12\63\43\0"+ - "\1\172\21\63\1\u0252\10\63\1\173\12\63\43\0\1\172"+ - "\24\63\1\u0253\5\63\1\173\12\63\43\0\1\172\32\63"+ - "\1\173\7\63\1\u0254\2\63\43\0\1\172\1\u0255\31\63"+ - "\1\173\12\63\121\0\1\371\1\372\1\373\30\0\1\221"+ - "\32\117\1\36\1\u0256\11\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\32\117\1\36\7\117\1\u0257\2\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\32\117\1\36\6\117\1\350\3\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\32\117\1\36\5\117\1\350\4\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\1\117\1\u0258\30\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\32\117\1\36\1\117\1\u0259"+ - "\10\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\1\u025a\27\117\1\u025b"+ - "\1\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\4\117"+ - "\1\u025c\25\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\32\117\1\36\1\u025d\11\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\32\117\1\36\3\117\1\u025e\6\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\1\u025f\31\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\1\u0257\31\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\32\117\1\36\2\117\1\u0260\7\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\32\117\1\36\2\117\1\u0261\7\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\15\117\1\u0262\14\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\32\117\1\36\5\117\1\u0263"+ - "\4\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\10\117"+ - "\1\u0264\1\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\1\117\1\u0265"+ - "\30\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ - "\1\36\3\117\1\u0266\6\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\32\117\1\36\1\117\1\u0267\10\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\32\117\1\36\1\117\1\u0268\10\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\24\117\1\u0269\5\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\32\117\1\36\3\117\1\u026a\6\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\25\117\1\u026b\4\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\17\0\4\u018a\2\0\1\u018a\15\0"+ - "\1\u018a\6\0\12\u018a\44\0\4\u026c\2\0\1\u026c\15\0"+ - "\1\u026c\6\0\12\u026c\1\u0223\43\0\4\u026d\2\0\1\u026d"+ - "\15\0\1\u026d\6\0\12\u026d\1\u026e\43\0\4\u026f\2\0"+ - "\1\u026f\15\0\1\u026f\6\0\1\u0270\2\u0271\1\u0270\4\u0271"+ - "\1\u0272\1\u0271\14\0\1\u0273\26\0\34\u0156\12\u0274\1\0"+ - "\2\u0156\1\u0190\3\u0156\1\u0158\1\0\1\u018f\3\0\2\u0156"+ - "\4\0\1\u0156\20\0\4\u018f\2\0\1\u018f\15\0\1\u018f"+ - "\6\0\12\u018f\74\0\1\u0275\113\0\12\u0276\11\0\1\u018f"+ - "\32\0\4\u0277\2\0\1\u0277\15\0\1\u0277\6\0\12\u0277"+ - "\1\u01de\43\0\4\u0278\2\0\1\u0278\15\0\1\u0278\6\0"+ - "\12\u0278\1\u0279\43\0\4\u027a\2\0\1\u027a\15\0\1\u027a"+ - "\6\0\1\u027b\2\u027c\1\u027b\4\u027c\1\u027d\1\u027c\14\0"+ - "\1\u0230\27\0\4\u027e\2\0\1\u027e\15\0\1\u027e\6\0"+ - "\12\u027e\1\u027f\13\0\1\u0230\26\0\1\u0280\4\u027e\2\0"+ - "\1\u027e\15\0\1\u027e\6\0\12\u0281\1\u027f\13\0\1\u0230"+ - "\26\0\1\u0280\4\u027e\2\0\1\u027e\15\0\1\u027e\6\0"+ - "\12\u0282\1\u027f\13\0\1\u0230\26\0\1\u0280\4\u027e\2\0"+ - "\1\u027e\15\0\1\u027e\6\0\1\u0281\1\u0283\1\u0282\2\u0281"+ - "\2\u0282\2\u0281\1\u0282\1\u027f\13\0\1\u0230\74\0\1\u01dc"+ - "\10\0\1\u018f\31\0\34\u0197\12\u0284\1\0\2\u0197\1\u01e3"+ - "\3\u0197\1\u0199\1\371\1\372\1\373\2\0\2\u0197\4\0"+ - "\1\u0197\20\0\4\u0197\2\0\1\u0197\15\0\1\u0197\6\0"+ - "\12\u0197\44\0\32\u01e5\1\0\12\u01e5\44\0\32\u01e5\1\u0234"+ - "\12\u01e5\44\0\4\u0285\2\0\1\u0285\15\0\1\u0285\6\0"+ - "\12\u0285\1\u01e8\43\0\4\u0286\2\0\1\u0286\15\0\1\u0286"+ - "\6\0\12\u0286\1\u0287\43\0\4\u0288\2\0\1\u0288\15\0"+ - "\1\u0288\6\0\1\u0289\2\u028a\1\u0289\4\u028a\1\u028b\1\u028a"+ - "\14\0\1\264\27\0\4\u028c\2\0\1\u028c\15\0\1\u028c"+ - "\6\0\12\u028c\1\u0239\13\0\1\264\27\0\4\u0288\2\0"+ - "\1\u0288\15\0\1\u0288\6\0\1\u0289\2\u028a\1\u0289\4\u028a"+ - "\1\u028b\1\u028a\43\0\1\365\4\u028c\2\0\1\u028c\15\0"+ - "\1\u028c\6\0\12\u028d\1\u0239\13\0\1\264\26\0\1\365"+ - "\4\u028c\2\0\1\u028c\15\0\1\u028c\6\0\12\u028c\1\u0239"+ - "\13\0\1\264\26\0\1\365\4\u028c\2\0\1\u028c\15\0"+ - "\1\u028c\6\0\2\u028d\1\u028c\2\u028d\2\u028c\2\u028d\1\u028c"+ - "\1\u0239\13\0\1\264\74\0\1\u01a1\13\0\1\264\62\0"+ - "\12\u023f\14\0\1\264\62\0\12\u028e\14\0\1\264\62\0"+ - "\1\u023f\1\u028f\1\u028e\2\u023f\2\u028e\2\u023f\1\u028e\14\0"+ - "\1\264\26\0\1\172\1\u0290\31\63\1\173\12\63\43\0"+ - "\1\172\21\63\1\u0291\10\63\1\173\12\63\43\0\1\172"+ - "\16\63\1\u0292\4\63\1\u0293\6\63\1\173\12\63\43\0"+ - "\1\172\32\63\1\173\10\63\1\u0294\1\63\43\0\1\172"+ - "\32\63\1\173\10\63\1\u0295\1\63\43\0\1\172\1\u0296"+ - "\2\63\1\u0297\26\63\1\173\12\63\43\0\1\172\16\63"+ - "\1\u0298\13\63\1\173\12\63\43\0\1\172\25\63\1\u0299"+ - "\4\63\1\173\12\63\43\0\1\172\32\63\1\173\10\63"+ - "\1\u029a\1\63\43\0\1\172\23\63\1\u029b\6\63\1\173"+ - "\12\63\43\0\1\172\31\63\1\u029c\1\173\12\63\43\0"+ - "\1\172\26\63\1\u029d\3\63\1\173\12\63\43\0\1\172"+ - "\11\63\1\u029e\20\63\1\173\12\63\43\0\1\172\32\63"+ - "\1\173\3\63\1\u029f\6\63\43\0\1\172\10\63\1\u02a0"+ - "\21\63\1\173\12\63\43\0\1\172\3\63\1\u02a1\26\63"+ - "\1\173\12\63\43\0\1\172\21\63\1\u02a2\6\63\1\u02a3"+ - "\1\63\1\173\12\63\43\0\1\172\12\63\1\u02a4\17\63"+ - "\1\173\12\63\43\0\1\172\32\63\1\173\1\63\1\u02a5"+ - "\10\63\43\0\1\172\24\63\1\u02a6\5\63\1\173\12\63"+ - "\43\0\1\172\31\63\1\u02a7\1\173\12\63\43\0\1\221"+ - "\1\u02a8\31\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\25\117\1\226\4\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\32\117\1\36\5\117\1\u02a9\4\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\32\117\1\36\3\117\1\u02a8\6\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\12\117\1\u02aa\17\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\25\117\1\u02ab\4\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\15\117\1\u02ac\14\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\2\117\1\u0257"+ - "\27\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\117"+ - "\1\226\30\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\11\117\1\u02ad\20\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\1\u02ae\31\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\1\u02af\31\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\2\117\1\u02b0\27\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\32\117\1\36\4\117\1\235\5\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\1\u02b1\31\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\25\117\1\u02b2\4\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\32\117\1\36\4\117\1\u02a8"+ - "\5\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\11\117"+ - "\1\u02a8\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\2\117"+ - "\1\u02a8\7\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\16\117\1\u02b3"+ - "\13\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ - "\1\36\3\117\1\u02b4\6\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\24\117\1\u02b5\5\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\17\0"+ - "\4\u02b6\2\0\1\u02b6\15\0\1\u02b6\6\0\12\u02b6\1\u0223"+ - "\43\0\4\u02b7\2\0\1\u02b7\15\0\1\u02b7\6\0\12\u02b7"+ - "\1\u02b8\43\0\4\u02b9\2\0\1\u02b9\15\0\1\u02b9\6\0"+ - "\1\u02ba\2\u02bb\1\u02ba\4\u02bb\1\u02bc\1\u02bb\14\0\1\u0273"+ - "\27\0\4\u02bd\2\0\1\u02bd\15\0\1\u02bd\6\0\12\u02bd"+ - "\1\u02be\13\0\1\u0273\26\0\1\u02bf\4\u02bd\2\0\1\u02bd"+ - "\15\0\1\u02bd\6\0\12\u02c0\1\u02be\13\0\1\u0273\26\0"+ - "\1\u02bf\4\u02bd\2\0\1\u02bd\15\0\1\u02bd\6\0\12\u02c1"+ - "\1\u02be\13\0\1\u0273\26\0\1\u02bf\4\u02bd\2\0\1\u02bd"+ - "\15\0\1\u02bd\6\0\1\u02c0\1\u02c2\1\u02c1\2\u02c0\2\u02c1"+ - "\2\u02c0\1\u02c1\1\u02be\13\0\1\u0273\105\0\1\u018a\31\0"+ - "\34\u0156\12\u02c3\1\0\2\u0156\1\u0190\3\u0156\1\u0158\1\0"+ - "\1\u018f\3\0\2\u0156\4\0\1\u0156\35\0\1\u02c4\126\0"+ - "\12\u02c5\11\0\1\u018f\77\0\1\u01de\43\0\4\u02c6\2\0"+ - "\1\u02c6\15\0\1\u02c6\6\0\12\u02c6\1\u0279\43\0\4\u02c7"+ - "\2\0\1\u02c7\15\0\1\u02c7\6\0\12\u02c7\1\u02c8\43\0"+ - "\4\u02c9\2\0\1\u02c9\15\0\1\u02c9\6\0\12\u02c9\1\u02ca"+ - "\13\0\1\u0230\26\0\1\u0280\4\u02c9\2\0\1\u02c9\15\0"+ - "\1\u02c9\6\0\12\u02cb\1\u02ca\13\0\1\u0230\26\0\1\u0280"+ - "\4\u02c9\2\0\1\u02c9\15\0\1\u02c9\6\0\12\u02cc\1\u02ca"+ - "\13\0\1\u0230\26\0\1\u0280\4\u02c9\2\0\1\u02c9\15\0"+ - "\1\u02c9\6\0\1\u02cb\1\u02cd\1\u02cc\2\u02cb\2\u02cc\2\u02cb"+ - "\1\u02cc\1\u02ca\13\0\1\u0230\27\0\4\u02ce\2\0\1\u02ce"+ - "\15\0\1\u02ce\6\0\12\u02ce\1\u027f\13\0\1\u0230\27\0"+ - "\4\u027a\2\0\1\u027a\15\0\1\u027a\6\0\1\u027b\2\u027c"+ - "\1\u027b\4\u027c\1\u027d\1\u027c\77\0\1\u02cf\2\u02d0\1\u02cf"+ - "\4\u02d0\1\u02d1\1\u02d0\43\0\1\u0280\4\u02ce\2\0\1\u02ce"+ - "\15\0\1\u02ce\6\0\12\u02d2\1\u027f\13\0\1\u0230\26\0"+ - "\1\u0280\4\u02ce\2\0\1\u02ce\15\0\1\u02ce\6\0\12\u02ce"+ - "\1\u027f\13\0\1\u0230\26\0\1\u0280\4\u02ce\2\0\1\u02ce"+ - "\15\0\1\u02ce\6\0\2\u02d2\1\u02ce\2\u02d2\2\u02ce\2\u02d2"+ - "\1\u02ce\1\u027f\13\0\1\u0230\26\0\34\u0197\12\u02d3\1\0"+ - "\2\u0197\1\u01e3\3\u0197\1\u0199\1\371\1\372\1\373\2\0"+ - "\2\u0197\4\0\1\u0197\65\0\1\u01e8\43\0\4\u02d4\2\0"+ - "\1\u02d4\15\0\1\u02d4\6\0\12\u02d4\1\u0287\43\0\4\u02d5"+ - "\2\0\1\u02d5\15\0\1\u02d5\6\0\12\u02d5\1\u02d6\43\0"+ - "\4\u02d7\2\0\1\u02d7\15\0\1\u02d7\6\0\12\u02d7\1\u02d8"+ - "\13\0\1\264\26\0\1\365\4\u02d7\2\0\1\u02d7\15\0"+ - "\1\u02d7\6\0\12\u02d9\1\u02d8\13\0\1\264\26\0\1\365"+ - "\4\u02d7\2\0\1\u02d7\15\0\1\u02d7\6\0\12\u02da\1\u02d8"+ - "\13\0\1\264\26\0\1\365\4\u02d7\2\0\1\u02d7\15\0"+ - "\1\u02d7\6\0\1\u02d9\1\u02db\1\u02da\2\u02d9\2\u02da\2\u02d9"+ - "\1\u02da\1\u02d8\13\0\1\264\27\0\4\u02dc\2\0\1\u02dc"+ - "\15\0\1\u02dc\6\0\12\u02dc\1\u0239\13\0\1\264\26\0"+ - "\1\365\4\u02dc\2\0\1\u02dc\15\0\1\u02dc\6\0\12\u02dc"+ - "\1\u0239\13\0\1\264\110\0\1\264\62\0\2\u028e\1\0"+ - "\2\u028e\2\0\2\u028e\15\0\1\264\26\0\1\172\32\63"+ - "\1\173\1\u02dd\11\63\43\0\1\172\32\63\1\173\7\63"+ - "\1\u02de\2\63\43\0\1\172\32\63\1\173\6\63\1\u013c"+ - "\3\63\43\0\1\172\32\63\1\173\5\63\1\u013c\4\63"+ - "\43\0\1\172\1\63\1\u02df\30\63\1\173\12\63\43\0"+ - "\1\172\32\63\1\173\1\63\1\u02e0\10\63\43\0\1\172"+ - "\1\u02e1\27\63\1\u02e2\1\63\1\173\12\63\43\0\1\172"+ - "\4\63\1\u02e3\25\63\1\173\12\63\43\0\1\172\32\63"+ - "\1\173\1\u02e4\11\63\43\0\1\172\32\63\1\173\3\63"+ - "\1\u02e5\6\63\43\0\1\172\1\u02e6\31\63\1\173\12\63"+ - "\43\0\1\172\1\u02de\31\63\1\173\12\63\43\0\1\172"+ - "\32\63\1\173\2\63\1\u02e7\7\63\43\0\1\172\32\63"+ - "\1\173\2\63\1\u02e8\7\63\43\0\1\172\15\63\1\u02e9"+ - "\14\63\1\173\12\63\43\0\1\172\32\63\1\173\5\63"+ - "\1\u02ea\4\63\43\0\1\172\32\63\1\173\10\63\1\u02eb"+ - "\1\63\43\0\1\172\1\63\1\u02ec\30\63\1\173\12\63"+ - "\43\0\1\172\32\63\1\173\3\63\1\u02ed\6\63\43\0"+ - "\1\172\32\63\1\173\1\63\1\u02ee\10\63\43\0\1\172"+ - "\32\63\1\173\1\63\1\u02ef\10\63\43\0\1\172\24\63"+ - "\1\u02f0\5\63\1\173\12\63\43\0\1\172\32\63\1\173"+ - "\3\63\1\u02f1\6\63\43\0\1\172\25\63\1\u02f2\4\63"+ - "\1\173\12\63\43\0\1\221\2\117\1\226\27\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\3\117\1\u02f3\26\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\32\117\1\36"+ - "\11\117\1\u02f4\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\32\117\1\36"+ - "\11\117\1\u02f5\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\32\117\1\36"+ - "\7\117\1\u02f6\2\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ - "\1\36\4\117\1\u02f7\5\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\26\117\1\u02f8\3\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\30\117\1\u02f9\1\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\11\117\1\343\20\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\12\117\1\u02fa\17\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\17\117\1\236\12\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\4\117"+ - "\1\u02fb\5\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\30\117\1\u02fc"+ - "\1\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\30\117"+ - "\1\u02fd\1\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\64\0\1\u0223"+ - "\43\0\4\u02fe\2\0\1\u02fe\15\0\1\u02fe\6\0\12\u02fe"+ - "\1\u02b8\43\0\4\u02ff\2\0\1\u02ff\15\0\1\u02ff\6\0"+ - "\12\u02ff\1\u0300\43\0\4\u0301\2\0\1\u0301\15\0\1\u0301"+ - "\6\0\12\u0301\1\u0302\13\0\1\u0273\26\0\1\u02bf\4\u0301"+ - "\2\0\1\u0301\15\0\1\u0301\6\0\12\u0303\1\u0302\13\0"+ - "\1\u0273\26\0\1\u02bf\4\u0301\2\0\1\u0301\15\0\1\u0301"+ - "\6\0\12\u0304\1\u0302\13\0\1\u0273\26\0\1\u02bf\4\u0301"+ - "\2\0\1\u0301\15\0\1\u0301\6\0\1\u0303\1\u0305\1\u0304"+ - "\2\u0303\2\u0304\2\u0303\1\u0304\1\u0302\13\0\1\u0273\27\0"+ - "\4\u0306\2\0\1\u0306\15\0\1\u0306\6\0\12\u0306\1\u02be"+ - "\13\0\1\u0273\27\0\4\u02b9\2\0\1\u02b9\15\0\1\u02b9"+ - "\6\0\1\u02ba\2\u02bb\1\u02ba\4\u02bb\1\u02bc\1\u02bb\77\0"+ - "\1\u0307\2\u0308\1\u0307\4\u0308\1\u0309\1\u0308\43\0\1\u02bf"+ - "\4\u0306\2\0\1\u0306\15\0\1\u0306\6\0\12\u030a\1\u02be"+ - "\13\0\1\u0273\26\0\1\u02bf\4\u0306\2\0\1\u0306\15\0"+ - "\1\u0306\6\0\12\u0306\1\u02be\13\0\1\u0273\26\0\1\u02bf"+ - "\4\u0306\2\0\1\u0306\15\0\1\u0306\6\0\2\u030a\1\u0306"+ - "\2\u030a\2\u0306\2\u030a\1\u0306\1\u02be\13\0\1\u0273\26\0"+ - "\34\u0156\12\u030b\1\0\2\u0156\1\u0190\3\u0156\1\u0158\1\0"+ - "\1\u018f\3\0\2\u0156\4\0\1\u0156\23\0\1\u030c\140\0"+ - "\12\u030d\11\0\1\u018f\32\0\4\u030e\2\0\1\u030e\15\0"+ - "\1\u030e\6\0\12\u030e\1\u0279\43\0\4\u030f\2\0\1\u030f"+ - "\15\0\1\u030f\6\0\12\u030f\1\u0310\43\0\4\u0311\2\0"+ - "\1\u0311\15\0\1\u0311\6\0\1\u0312\2\u0313\1\u0312\4\u0313"+ - "\1\u0314\1\u0313\14\0\1\u0230\27\0\4\u0315\2\0\1\u0315"+ - "\15\0\1\u0315\6\0\12\u0315\1\u02ca\13\0\1\u0230\27\0"+ - "\4\u0311\2\0\1\u0311\15\0\1\u0311\6\0\1\u0312\2\u0313"+ - "\1\u0312\4\u0313\1\u0314\1\u0313\43\0\1\u0280\4\u0315\2\0"+ - "\1\u0315\15\0\1\u0315\6\0\12\u0316\1\u02ca\13\0\1\u0230"+ - "\26\0\1\u0280\4\u0315\2\0\1\u0315\15\0\1\u0315\6\0"+ - "\12\u0315\1\u02ca\13\0\1\u0230\26\0\1\u0280\4\u0315\2\0"+ - "\1\u0315\15\0\1\u0315\6\0\2\u0316\1\u0315\2\u0316\2\u0315"+ - "\2\u0316\1\u0315\1\u02ca\13\0\1\u0230\27\0\4\u0317\2\0"+ - "\1\u0317\15\0\1\u0317\6\0\12\u0317\1\u027f\13\0\1\u0230"+ - "\26\0\1\u0318\33\0\12\u02d0\43\0\1\u0318\33\0\12\u0319"+ - "\43\0\1\u0318\33\0\1\u02d0\1\u031a\1\u0319\2\u02d0\2\u0319"+ - "\2\u02d0\1\u0319\43\0\1\u0280\4\u0317\2\0\1\u0317\15\0"+ - "\1\u0317\6\0\12\u0317\1\u027f\13\0\1\u0230\26\0\34\u0197"+ - "\12\u031b\1\0\2\u0197\1\u01e3\3\u0197\1\u0199\1\371\1\372"+ - "\1\373\2\0\2\u0197\4\0\1\u0197\20\0\4\u031c\2\0"+ - "\1\u031c\15\0\1\u031c\6\0\12\u031c\1\u0287\43\0\4\u031d"+ - "\2\0\1\u031d\15\0\1\u031d\6\0\12\u031d\1\u031e\43\0"+ - "\4\u031f\2\0\1\u031f\15\0\1\u031f\6\0\1\u0320\2\u0321"+ - "\1\u0320\4\u0321\1\u0322\1\u0321\14\0\1\264\27\0\4\u0323"+ - "\2\0\1\u0323\15\0\1\u0323\6\0\12\u0323\1\u02d8\13\0"+ - "\1\264\27\0\4\u031f\2\0\1\u031f\15\0\1\u031f\6\0"+ - "\1\u0320\2\u0321\1\u0320\4\u0321\1\u0322\1\u0321\43\0\1\365"+ - "\4\u0323\2\0\1\u0323\15\0\1\u0323\6\0\12\u0324\1\u02d8"+ - "\13\0\1\264\26\0\1\365\4\u0323\2\0\1\u0323\15\0"+ - "\1\u0323\6\0\12\u0323\1\u02d8\13\0\1\264\26\0\1\365"+ - "\4\u0323\2\0\1\u0323\15\0\1\u0323\6\0\2\u0324\1\u0323"+ - "\2\u0324\2\u0323\2\u0324\1\u0323\1\u02d8\13\0\1\264\74\0"+ - "\1\u0239\13\0\1\264\26\0\1\172\1\u0325\31\63\1\173"+ - "\12\63\43\0\1\172\25\63\1\374\4\63\1\173\12\63"+ - "\43\0\1\172\32\63\1\173\5\63\1\u0326\4\63\43\0"+ - "\1\172\32\63\1\173\3\63\1\u0325\6\63\43\0\1\172"+ - "\12\63\1\u0327\17\63\1\173\12\63\43\0\1\172\25\63"+ - "\1\u0328\4\63\1\173\12\63\43\0\1\172\15\63\1\u0329"+ - "\14\63\1\173\12\63\43\0\1\172\2\63\1\u02de\27\63"+ - "\1\173\12\63\43\0\1\172\1\63\1\374\30\63\1\173"+ - "\12\63\43\0\1\172\11\63\1\u032a\20\63\1\173\12\63"+ - "\43\0\1\172\1\u032b\31\63\1\173\12\63\43\0\1\172"+ - "\1\u032c\31\63\1\173\12\63\43\0\1\172\2\63\1\u032d"+ - "\27\63\1\173\12\63\43\0\1\172\32\63\1\173\4\63"+ - "\1\u0103\5\63\43\0\1\172\1\u032e\31\63\1\173\12\63"+ - "\43\0\1\172\25\63\1\u032f\4\63\1\173\12\63\43\0"+ - "\1\172\32\63\1\173\4\63\1\u0325\5\63\43\0\1\172"+ - "\32\63\1\173\11\63\1\u0325\43\0\1\172\32\63\1\173"+ - "\2\63\1\u0325\7\63\43\0\1\172\16\63\1\u0330\13\63"+ - "\1\173\12\63\43\0\1\172\32\63\1\173\3\63\1\u0331"+ - "\6\63\43\0\1\172\24\63\1\u0332\5\63\1\173\12\63"+ - "\43\0\1\221\32\117\1\36\10\117\1\u025e\1\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\1\u0333\31\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\7\117\1\u0334\22\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\1\u0335\31\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\25\117\1\u0336\4\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\11\117"+ - "\1\u0337\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\1\u0338\31\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\12\117\1\u0339\17\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\1\u033a\31\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\10\117\1\u033b"+ - "\21\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\31\117"+ - "\1\u033c\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\17\0\4\u033d\2\0"+ - "\1\u033d\15\0\1\u033d\6\0\12\u033d\1\u02b8\43\0\4\u033e"+ - "\2\0\1\u033e\15\0\1\u033e\6\0\12\u033e\1\u033f\43\0"+ - "\4\u0340\2\0\1\u0340\15\0\1\u0340\6\0\1\u0341\2\u0342"+ - "\1\u0341\4\u0342\1\u0343\1\u0342\14\0\1\u0273\27\0\4\u0344"+ - "\2\0\1\u0344\15\0\1\u0344\6\0\12\u0344\1\u0302\13\0"+ - "\1\u0273\27\0\4\u0340\2\0\1\u0340\15\0\1\u0340\6\0"+ - "\1\u0341\2\u0342\1\u0341\4\u0342\1\u0343\1\u0342\43\0\1\u02bf"+ - "\4\u0344\2\0\1\u0344\15\0\1\u0344\6\0\12\u0345\1\u0302"+ - "\13\0\1\u0273\26\0\1\u02bf\4\u0344\2\0\1\u0344\15\0"+ - "\1\u0344\6\0\12\u0344\1\u0302\13\0\1\u0273\26\0\1\u02bf"+ - "\4\u0344\2\0\1\u0344\15\0\1\u0344\6\0\2\u0345\1\u0344"+ - "\2\u0345\2\u0344\2\u0345\1\u0344\1\u0302\13\0\1\u0273\27\0"+ - "\4\u0346\2\0\1\u0346\15\0\1\u0346\6\0\12\u0346\1\u02be"+ - "\13\0\1\u0273\26\0\1\u0347\33\0\12\u0308\43\0\1\u0347"+ - "\33\0\12\u0348\43\0\1\u0347\33\0\1\u0308\1\u0349\1\u0348"+ - "\2\u0308\2\u0348\2\u0308\1\u0348\43\0\1\u02bf\4\u0346\2\0"+ - "\1\u0346\15\0\1\u0346\6\0\12\u0346\1\u02be\13\0\1\u0273"+ - "\26\0\46\u0156\1\0\2\u0156\1\u0190\3\u0156\1\u0158\1\0"+ - "\1\u018f\3\0\2\u0156\4\0\1\u0156\103\0\1\u034a\60\0"+ - "\12\u034b\11\0\1\u018f\77\0\1\u0279\43\0\4\u034c\2\0"+ - "\1\u034c\15\0\1\u034c\6\0\12\u034c\1\u0310\43\0\4\u034d"+ - "\2\0\1\u034d\15\0\1\u034d\6\0\12\u034d\1\u034e\43\0"+ - "\4\u034f\2\0\1\u034f\15\0\1\u034f\6\0\12\u034f\1\u0350"+ - "\13\0\1\u0230\26\0\1\u0280\4\u034f\2\0\1\u034f\15\0"+ - "\1\u034f\6\0\12\u0351\1\u0350\13\0\1\u0230\26\0\1\u0280"+ - "\4\u034f\2\0\1\u034f\15\0\1\u034f\6\0\12\u0352\1\u0350"+ - "\13\0\1\u0230\26\0\1\u0280\4\u034f\2\0\1\u034f\15\0"+ - "\1\u034f\6\0\1\u0351\1\u0353\1\u0352\2\u0351\2\u0352\2\u0351"+ - "\1\u0352\1\u0350\13\0\1\u0230\27\0\4\u0354\2\0\1\u0354"+ - "\15\0\1\u0354\6\0\12\u0354\1\u02ca\13\0\1\u0230\26\0"+ - "\1\u0280\4\u0354\2\0\1\u0354\15\0\1\u0354\6\0\12\u0354"+ - "\1\u02ca\13\0\1\u0230\74\0\1\u027f\13\0\1\u0230\62\0"+ - "\1\u0355\2\u0356\1\u0355\4\u0356\1\u0357\1\u0356\43\0\1\u0318"+ - "\110\0\1\u0318\33\0\2\u0319\1\0\2\u0319\2\0\2\u0319"+ - "\44\0\34\u0197\12\u0358\1\0\2\u0197\1\u01e3\3\u0197\1\u0199"+ - "\1\371\1\372\1\373\2\0\2\u0197\4\0\1\u0197\65\0"+ - "\1\u0287\43\0\4\u0359\2\0\1\u0359\15\0\1\u0359\6\0"+ - "\12\u0359\1\u031e\43\0\4\u035a\2\0\1\u035a\15\0\1\u035a"+ - "\6\0\1\u035b\2\u035c\1\u035b\4\u035c\1\u035d\1\u035c\1\u035e"+ - "\43\0\4\u035f\2\0\1\u035f\15\0\1\u035f\6\0\12\u035f"+ - "\1\u0360\13\0\1\264\26\0\1\365\4\u035f\2\0\1\u035f"+ - "\15\0\1\u035f\6\0\12\u0361\1\u0360\13\0\1\264\26\0"+ - "\1\365\4\u035f\2\0\1\u035f\15\0\1\u035f\6\0\12\u0362"+ - "\1\u0360\13\0\1\264\26\0\1\365\4\u035f\2\0\1\u035f"+ - "\15\0\1\u035f\6\0\1\u0361\1\u0363\1\u0362\2\u0361\2\u0362"+ - "\2\u0361\1\u0362\1\u0360\13\0\1\264\27\0\4\u0364\2\0"+ - "\1\u0364\15\0\1\u0364\6\0\12\u0364\1\u02d8\13\0\1\264"+ - "\26\0\1\365\4\u0364\2\0\1\u0364\15\0\1\u0364\6\0"+ - "\12\u0364\1\u02d8\13\0\1\264\26\0\1\172\2\63\1\374"+ - "\27\63\1\173\12\63\43\0\1\172\3\63\1\u0365\26\63"+ - "\1\173\12\63\43\0\1\172\32\63\1\173\11\63\1\u0366"+ - "\43\0\1\172\32\63\1\173\11\63\1\u0367\43\0\1\172"+ - "\32\63\1\173\7\63\1\u0368\2\63\43\0\1\172\32\63"+ - "\1\173\4\63\1\u0369\5\63\43\0\1\172\26\63\1\u036a"+ - "\3\63\1\173\12\63\43\0\1\172\30\63\1\u036b\1\63"+ - "\1\173\12\63\43\0\1\172\11\63\1\u0136\20\63\1\173"+ - "\12\63\43\0\1\172\12\63\1\u036c\17\63\1\173\12\63"+ - "\43\0\1\172\17\63\1\u0104\12\63\1\173\12\63\43\0"+ - "\1\172\32\63\1\173\4\63\1\u036d\5\63\43\0\1\172"+ - "\30\63\1\u036e\1\63\1\173\12\63\43\0\1\172\30\63"+ - "\1\u036f\1\63\1\173\12\63\43\0\1\221\32\117\1\36"+ - "\6\117\1\u0257\3\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\15\117"+ - "\1\142\14\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ - "\32\117\1\36\1\117\1\u0370\10\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\30\117\1\u0371\1\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\6\117\1\u0372\23\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\32\117\1\36\5\117\1\u0373\4\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\22\117\1\226\7\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\5\117"+ - "\1\u0374\4\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\32\117\1\36"+ - "\1\117\1\142\10\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\13\117"+ - "\1\u0375\16\117\1\36\12\117\1\0\3\33\1\0\2\33"+ - "\1\34\3\33\3\0\1\33\4\0\2\33\64\0\1\u02b8"+ - "\43\0\4\u0376\2\0\1\u0376\15\0\1\u0376\6\0\12\u0376"+ - "\1\u033f\43\0\4\u0377\2\0\1\u0377\15\0\1\u0377\6\0"+ - "\12\u0377\1\u0378\43\0\4\u0379\2\0\1\u0379\15\0\1\u0379"+ - "\6\0\12\u0379\1\u037a\13\0\1\u0273\26\0\1\u02bf\4\u0379"+ - "\2\0\1\u0379\15\0\1\u0379\6\0\12\u037b\1\u037a\13\0"+ - "\1\u0273\26\0\1\u02bf\4\u0379\2\0\1\u0379\15\0\1\u0379"+ - "\6\0\12\u037c\1\u037a\13\0\1\u0273\26\0\1\u02bf\4\u0379"+ - "\2\0\1\u0379\15\0\1\u0379\6\0\1\u037b\1\u037d\1\u037c"+ - "\2\u037b\2\u037c\2\u037b\1\u037c\1\u037a\13\0\1\u0273\27\0"+ - "\4\u037e\2\0\1\u037e\15\0\1\u037e\6\0\12\u037e\1\u0302"+ - "\13\0\1\u0273\26\0\1\u02bf\4\u037e\2\0\1\u037e\15\0"+ - "\1\u037e\6\0\12\u037e\1\u0302\13\0\1\u0273\74\0\1\u02be"+ - "\13\0\1\u0273\62\0\1\u037f\2\u0380\1\u037f\4\u0380\1\u0381"+ - "\1\u0380\43\0\1\u0347\110\0\1\u0347\33\0\2\u0348\1\0"+ - "\2\u0348\2\0\2\u0348\45\0\1\u0382\1\0\1\u0382\5\0"+ - "\1\u0382\156\0\1\u018f\32\0\4\u0383\2\0\1\u0383\15\0"+ - "\1\u0383\6\0\12\u0383\1\u0310\43\0\4\u0384\2\0\1\u0384"+ - "\15\0\1\u0384\6\0\12\u0384\1\u0385\43\0\4\u0386\2\0"+ - "\1\u0386\15\0\1\u0386\6\0\1\u0387\2\u0388\1\u0387\4\u0388"+ - "\1\u0389\1\u0388\14\0\1\u0230\27\0\4\u038a\2\0\1\u038a"+ - "\15\0\1\u038a\6\0\12\u038a\1\u0350\13\0\1\u0230\27\0"+ - "\4\u0386\2\0\1\u0386\15\0\1\u0386\6\0\1\u0387\2\u0388"+ - "\1\u0387\4\u0388\1\u0389\1\u0388\43\0\1\u0280\4\u038a\2\0"+ - "\1\u038a\15\0\1\u038a\6\0\12\u038b\1\u0350\13\0\1\u0230"+ - "\26\0\1\u0280\4\u038a\2\0\1\u038a\15\0\1\u038a\6\0"+ - "\12\u038a\1\u0350\13\0\1\u0230\26\0\1\u0280\4\u038a\2\0"+ - "\1\u038a\15\0\1\u038a\6\0\2\u038b\1\u038a\2\u038b\2\u038a"+ - "\2\u038b\1\u038a\1\u0350\13\0\1\u0230\74\0\1\u02ca\13\0"+ - "\1\u0230\26\0\1\u038c\33\0\12\u0356\43\0\1\u038c\33\0"+ - "\12\u038d\43\0\1\u038c\33\0\1\u0356\1\u038e\1\u038d\2\u0356"+ - "\2\u038d\2\u0356\1\u038d\43\0\46\u0197\1\0\2\u0197\1\u01e3"+ - "\3\u0197\1\u0199\1\371\1\372\1\373\2\0\2\u0197\4\0"+ - "\1\u0197\20\0\4\u038f\2\0\1\u038f\15\0\1\u038f\6\0"+ - "\12\u038f\1\u031e\43\0\4\u0390\2\0\1\u0390\15\0\1\u0390"+ - "\6\0\12\u0390\1\u0391\42\0\1\365\4\u0390\2\0\1\u0390"+ - "\15\0\1\u0390\6\0\12\u0392\1\u0391\42\0\1\365\4\u0390"+ - "\2\0\1\u0390\15\0\1\u0390\6\0\12\u0393\1\u0391\42\0"+ - "\1\365\4\u0390\2\0\1\u0390\15\0\1\u0390\6\0\1\u0392"+ - "\1\u0394\1\u0393\2\u0392\2\u0393\2\u0392\1\u0393\1\u0391\43\0"+ - "\4\u0395\2\0\1\u0395\15\0\1\u0395\6\0\12\u0395\14\0"+ - "\1\264\27\0\4\u0396\2\0\1\u0396\15\0\1\u0396\6\0"+ - "\12\u0396\1\u0360\13\0\1\264\27\0\4\u0395\2\0\1\u0395"+ - "\15\0\1\u0395\6\0\12\u0395\43\0\1\365\4\u0396\2\0"+ - "\1\u0396\15\0\1\u0396\6\0\12\u0397\1\u0360\13\0\1\264"+ - "\26\0\1\365\4\u0396\2\0\1\u0396\15\0\1\u0396\6\0"+ - "\12\u0396\1\u0360\13\0\1\264\26\0\1\365\4\u0396\2\0"+ - "\1\u0396\15\0\1\u0396\6\0\2\u0397\1\u0396\2\u0397\2\u0396"+ - "\2\u0397\1\u0396\1\u0360\13\0\1\264\74\0\1\u02d8\13\0"+ - "\1\264\26\0\1\172\32\63\1\173\10\63\1\u02e5\1\63"+ - "\43\0\1\172\1\u0398\31\63\1\173\12\63\43\0\1\172"+ - "\7\63\1\u0399\22\63\1\173\12\63\43\0\1\172\1\u039a"+ - "\31\63\1\173\12\63\43\0\1\172\25\63\1\u039b\4\63"+ - "\1\173\12\63\43\0\1\172\32\63\1\173\11\63\1\u039c"+ - "\43\0\1\172\1\u039d\31\63\1\173\12\63\43\0\1\172"+ - "\12\63\1\u039e\17\63\1\173\12\63\43\0\1\172\1\u039f"+ - "\31\63\1\173\12\63\43\0\1\172\10\63\1\u03a0\21\63"+ - "\1\173\12\63\43\0\1\172\31\63\1\u03a1\1\173\12\63"+ - "\43\0\1\221\2\117\1\u03a2\27\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\3\117\1\u03a3\26\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\32\117\1\36\1\117\1\u03a4"+ - "\10\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\3\117\1\u03a5\26\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\1\u03a6\31\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\26\117\1\u03a7"+ - "\3\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\17\0\4\u03a8\2\0"+ - "\1\u03a8\15\0\1\u03a8\6\0\12\u03a8\1\u033f\43\0\4\u03a9"+ - "\2\0\1\u03a9\15\0\1\u03a9\6\0\12\u03a9\1\u03aa\43\0"+ - "\4\u03ab\2\0\1\u03ab\15\0\1\u03ab\6\0\1\u03ac\2\u03ad"+ - "\1\u03ac\4\u03ad\1\u03ae\1\u03ad\14\0\1\u0273\27\0\4\u03af"+ - "\2\0\1\u03af\15\0\1\u03af\6\0\12\u03af\1\u037a\13\0"+ - "\1\u0273\27\0\4\u03ab\2\0\1\u03ab\15\0\1\u03ab\6\0"+ - "\1\u03ac\2\u03ad\1\u03ac\4\u03ad\1\u03ae\1\u03ad\43\0\1\u02bf"+ - "\4\u03af\2\0\1\u03af\15\0\1\u03af\6\0\12\u03b0\1\u037a"+ - "\13\0\1\u0273\26\0\1\u02bf\4\u03af\2\0\1\u03af\15\0"+ - "\1\u03af\6\0\12\u03af\1\u037a\13\0\1\u0273\26\0\1\u02bf"+ - "\4\u03af\2\0\1\u03af\15\0\1\u03af\6\0\2\u03b0\1\u03af"+ - "\2\u03b0\2\u03af\2\u03b0\1\u03af\1\u037a\13\0\1\u0273\74\0"+ - "\1\u0302\13\0\1\u0273\26\0\1\u03b1\33\0\12\u0380\43\0"+ - "\1\u03b1\33\0\12\u03b2\43\0\1\u03b1\33\0\1\u0380\1\u03b3"+ - "\1\u03b2\2\u0380\2\u03b2\2\u0380\1\u03b2\123\0\1\373\76\0"+ - "\1\u0310\43\0\4\u03b4\2\0\1\u03b4\15\0\1\u03b4\6\0"+ - "\12\u03b4\1\u0385\43\0\4\u03b5\2\0\1\u03b5\15\0\1\u03b5"+ - "\6\0\12\u03b5\1\u03b6\43\0\4\u03b7\2\0\1\u03b7\15\0"+ - "\1\u03b7\6\0\12\u03b7\1\u03b8\13\0\1\u0230\26\0\1\u0280"+ - "\4\u03b7\2\0\1\u03b7\15\0\1\u03b7\6\0\12\u03b9\1\u03b8"+ - "\13\0\1\u0230\26\0\1\u0280\4\u03b7\2\0\1\u03b7\15\0"+ - "\1\u03b7\6\0\12\u03ba\1\u03b8\13\0\1\u0230\26\0\1\u0280"+ - "\4\u03b7\2\0\1\u03b7\15\0\1\u03b7\6\0\1\u03b9\1\u03bb"+ - "\1\u03ba\2\u03b9\2\u03ba\2\u03b9\1\u03ba\1\u03b8\13\0\1\u0230"+ - "\27\0\4\u03bc\2\0\1\u03bc\15\0\1\u03bc\6\0\12\u03bc"+ - "\1\u0350\13\0\1\u0230\26\0\1\u0280\4\u03bc\2\0\1\u03bc"+ - "\15\0\1\u03bc\6\0\12\u03bc\1\u0350\13\0\1\u0230\62\0"+ - "\1\u03bd\2\u03be\1\u03bd\4\u03be\1\u03bf\1\u03be\43\0\1\u038c"+ - "\110\0\1\u038c\33\0\2\u038d\1\0\2\u038d\2\0\2\u038d"+ - "\112\0\1\u031e\43\0\4\u03c0\2\0\1\u03c0\15\0\1\u03c0"+ - "\6\0\12\u03c0\1\u0391\43\0\4\u0395\2\0\1\u0395\15\0"+ - "\1\u0395\6\0\12\u0395\1\u028e\42\0\1\365\4\u03c0\2\0"+ - "\1\u03c0\15\0\1\u03c0\6\0\12\u03c1\1\u0391\42\0\1\365"+ - "\4\u03c0\2\0\1\u03c0\15\0\1\u03c0\6\0\12\u03c0\1\u0391"+ - "\42\0\1\365\4\u03c0\2\0\1\u03c0\15\0\1\u03c0\6\0"+ - "\2\u03c1\1\u03c0\2\u03c1\2\u03c0\2\u03c1\1\u03c0\1\u0391\43\0"+ - "\4\u03c2\2\0\1\u03c2\15\0\1\u03c2\6\0\12\u03c2\14\0"+ - "\1\264\27\0\4\u03c3\2\0\1\u03c3\15\0\1\u03c3\6\0"+ - "\12\u03c3\1\u0360\13\0\1\264\26\0\1\365\4\u03c3\2\0"+ - "\1\u03c3\15\0\1\u03c3\6\0\12\u03c3\1\u0360\13\0\1\264"+ - "\26\0\1\172\32\63\1\173\6\63\1\u02de\3\63\43\0"+ - "\1\172\15\63\1\301\14\63\1\173\12\63\43\0\1\172"+ - "\32\63\1\173\1\63\1\u03c4\10\63\43\0\1\172\30\63"+ - "\1\u03c5\1\63\1\173\12\63\43\0\1\172\6\63\1\u03c6"+ - "\23\63\1\173\12\63\43\0\1\172\32\63\1\173\5\63"+ - "\1\u03c7\4\63\43\0\1\172\22\63\1\374\7\63\1\173"+ - "\12\63\43\0\1\172\32\63\1\173\5\63\1\u03c8\4\63"+ - "\43\0\1\172\32\63\1\173\1\63\1\301\10\63\43\0"+ - "\1\172\13\63\1\u03c9\16\63\1\173\12\63\43\0\1\221"+ - "\32\117\1\36\7\117\1\u03ca\2\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\32\117\1\36\10\117\1\142\1\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\32\117\1\36\4\117\1\u03cb\5\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\16\117\1\u03cc\13\117\1\36\12\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\26\117\1\u03cd\3\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\7\117"+ - "\1\u03ce\2\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\64\0\1\u033f\43\0\4\u03cf"+ - "\2\0\1\u03cf\15\0\1\u03cf\6\0\12\u03cf\1\u03aa\43\0"+ - "\4\u03d0\2\0\1\u03d0\15\0\1\u03d0\6\0\12\u03d0\1\u03d1"+ - "\43\0\4\u03d2\2\0\1\u03d2\15\0\1\u03d2\6\0\12\u03d2"+ - "\1\u03d3\13\0\1\u0273\26\0\1\u02bf\4\u03d2\2\0\1\u03d2"+ - "\15\0\1\u03d2\6\0\12\u03d4\1\u03d3\13\0\1\u0273\26\0"+ - "\1\u02bf\4\u03d2\2\0\1\u03d2\15\0\1\u03d2\6\0\12\u03d5"+ - "\1\u03d3\13\0\1\u0273\26\0\1\u02bf\4\u03d2\2\0\1\u03d2"+ - "\15\0\1\u03d2\6\0\1\u03d4\1\u03d6\1\u03d5\2\u03d4\2\u03d5"+ - "\2\u03d4\1\u03d5\1\u03d3\13\0\1\u0273\27\0\4\u03d7\2\0"+ - "\1\u03d7\15\0\1\u03d7\6\0\12\u03d7\1\u037a\13\0\1\u0273"+ - "\26\0\1\u02bf\4\u03d7\2\0\1\u03d7\15\0\1\u03d7\6\0"+ - "\12\u03d7\1\u037a\13\0\1\u0273\62\0\1\u03d8\2\u03d9\1\u03d8"+ - "\4\u03d9\1\u03da\1\u03d9\43\0\1\u03b1\110\0\1\u03b1\33\0"+ - "\2\u03b2\1\0\2\u03b2\2\0\2\u03b2\45\0\4\u03db\2\0"+ - "\1\u03db\15\0\1\u03db\6\0\12\u03db\1\u0385\43\0\4\u03dc"+ - "\2\0\1\u03dc\15\0\1\u03dc\6\0\12\u03dc\1\u03dd\43\0"+ - "\4\u03de\2\0\1\u03de\15\0\1\u03de\6\0\1\u03df\2\u03e0"+ - "\1\u03df\4\u03e0\1\u03e1\1\u03e0\14\0\1\u0230\27\0\4\u03e2"+ - "\2\0\1\u03e2\15\0\1\u03e2\6\0\12\u03e2\1\u03b8\13\0"+ - "\1\u0230\27\0\4\u03de\2\0\1\u03de\15\0\1\u03de\6\0"+ - "\1\u03df\2\u03e0\1\u03df\4\u03e0\1\u03e1\1\u03e0\43\0\1\u0280"+ - "\4\u03e2\2\0\1\u03e2\15\0\1\u03e2\6\0\12\u03e3\1\u03b8"+ - "\13\0\1\u0230\26\0\1\u0280\4\u03e2\2\0\1\u03e2\15\0"+ - "\1\u03e2\6\0\12\u03e2\1\u03b8\13\0\1\u0230\26\0\1\u0280"+ - "\4\u03e2\2\0\1\u03e2\15\0\1\u03e2\6\0\2\u03e3\1\u03e2"+ - "\2\u03e3\2\u03e2\2\u03e3\1\u03e2\1\u03b8\13\0\1\u0230\74\0"+ - "\1\u0350\13\0\1\u0230\62\0\12\u03be\14\0\1\u0230\62\0"+ - "\12\u03e4\14\0\1\u0230\62\0\1\u03be\1\u03e5\1\u03e4\2\u03be"+ - "\2\u03e4\2\u03be\1\u03e4\14\0\1\u0230\27\0\4\u03e6\2\0"+ - "\1\u03e6\15\0\1\u03e6\6\0\12\u03e6\1\u0391\42\0\1\365"+ - "\4\u03e6\2\0\1\u03e6\15\0\1\u03e6\6\0\12\u03e6\1\u0391"+ - "\43\0\4\u03e7\2\0\1\u03e7\15\0\1\u03e7\6\0\12\u03e7"+ - "\14\0\1\264\74\0\1\u0360\13\0\1\264\26\0\1\172"+ - "\2\63\1\u03e8\27\63\1\173\12\63\43\0\1\172\3\63"+ - "\1\u03e9\26\63\1\173\12\63\43\0\1\172\32\63\1\173"+ - "\1\63\1\u03ea\10\63\43\0\1\172\3\63\1\u03eb\26\63"+ - "\1\173\12\63\43\0\1\172\1\u03ec\31\63\1\173\12\63"+ - "\43\0\1\172\26\63\1\u03ed\3\63\1\173\12\63\43\0"+ - "\1\221\1\u03ee\31\117\1\36\12\117\1\0\3\33\1\0"+ - "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ - "\1\221\24\117\1\u03ef\5\117\1\36\12\117\1\0\3\33"+ - "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ - "\16\0\1\221\1\117\1\u03f0\30\117\1\36\12\117\1\0"+ - "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ - "\2\33\16\0\1\221\32\117\1\36\2\117\1\235\7\117"+ - "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ - "\4\0\2\33\16\0\1\221\6\117\1\226\23\117\1\36"+ - "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ - "\1\33\4\0\2\33\17\0\4\u03f1\2\0\1\u03f1\15\0"+ - "\1\u03f1\6\0\12\u03f1\1\u03aa\43\0\4\u03f2\2\0\1\u03f2"+ - "\15\0\1\u03f2\6\0\12\u03f2\1\u03f3\43\0\4\u03f4\2\0"+ - "\1\u03f4\15\0\1\u03f4\6\0\1\u03f5\2\u03f6\1\u03f5\4\u03f6"+ - "\1\u03f7\1\u03f6\14\0\1\u0273\27\0\4\u03f8\2\0\1\u03f8"+ - "\15\0\1\u03f8\6\0\12\u03f8\1\u03d3\13\0\1\u0273\27\0"+ - "\4\u03f4\2\0\1\u03f4\15\0\1\u03f4\6\0\1\u03f5\2\u03f6"+ - "\1\u03f5\4\u03f6\1\u03f7\1\u03f6\43\0\1\u02bf\4\u03f8\2\0"+ - "\1\u03f8\15\0\1\u03f8\6\0\12\u03f9\1\u03d3\13\0\1\u0273"+ - "\26\0\1\u02bf\4\u03f8\2\0\1\u03f8\15\0\1\u03f8\6\0"+ - "\12\u03f8\1\u03d3\13\0\1\u0273\26\0\1\u02bf\4\u03f8\2\0"+ - "\1\u03f8\15\0\1\u03f8\6\0\2\u03f9\1\u03f8\2\u03f9\2\u03f8"+ - "\2\u03f9\1\u03f8\1\u03d3\13\0\1\u0273\74\0\1\u037a\13\0"+ - "\1\u0273\62\0\12\u03d9\14\0\1\u0273\62\0\12\u03fa\14\0"+ - "\1\u0273\62\0\1\u03d9\1\u03fb\1\u03fa\2\u03d9\2\u03fa\2\u03d9"+ - "\1\u03fa\14\0\1\u0273\74\0\1\u0385\43\0\4\u03fc\2\0"+ - "\1\u03fc\15\0\1\u03fc\6\0\12\u03fc\1\u03dd\43\0\4\u03fd"+ - "\2\0\1\u03fd\15\0\1\u03fd\6\0\12\u03fd\1\u03fe\43\0"+ - "\4\u03ff\2\0\1\u03ff\15\0\1\u03ff\6\0\12\u03ff\1\u0400"+ - "\13\0\1\u0230\26\0\1\u0280\4\u03ff\2\0\1\u03ff\15\0"+ - "\1\u03ff\6\0\12\u0401\1\u0400\13\0\1\u0230\26\0\1\u0280"+ - "\4\u03ff\2\0\1\u03ff\15\0\1\u03ff\6\0\12\u0402\1\u0400"+ - "\13\0\1\u0230\26\0\1\u0280\4\u03ff\2\0\1\u03ff\15\0"+ - "\1\u03ff\6\0\1\u0401\1\u0403\1\u0402\2\u0401\2\u0402\2\u0401"+ - "\1\u0402\1\u0400\13\0\1\u0230\27\0\4\u0404\2\0\1\u0404"+ - "\15\0\1\u0404\6\0\12\u0404\1\u03b8\13\0\1\u0230\26\0"+ - "\1\u0280\4\u0404\2\0\1\u0404\15\0\1\u0404\6\0\12\u0404"+ - "\1\u03b8\13\0\1\u0230\110\0\1\u0230\62\0\2\u03e4\1\0"+ - "\2\u03e4\2\0\2\u03e4\15\0\1\u0230\74\0\1\u0391\43\0"+ - "\4\u028e\2\0\1\u028e\15\0\1\u028e\6\0\12\u028e\14\0"+ - "\1\264\26\0\1\172\32\63\1\173\7\63\1\u0405\2\63"+ - "\43\0\1\172\32\63\1\173\10\63\1\301\1\63\43\0"+ - "\1\172\32\63\1\173\4\63\1\u0406\5\63\43\0\1\172"+ - "\16\63\1\u0407\13\63\1\173\12\63\43\0\1\172\26\63"+ - "\1\u0408\3\63\1\173\12\63\43\0\1\172\32\63\1\173"+ - "\7\63\1\u0409\2\63\43\0\1\221\4\117\1\226\25\117"+ - "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ - "\3\0\1\33\4\0\2\33\16\0\1\221\24\117\1\142"+ - "\5\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ - "\1\36\11\117\1\142\1\0\3\33\1\0\2\33\1\34"+ - "\3\33\3\0\1\33\4\0\2\33\64\0\1\u03aa\43\0"+ - "\4\u040a\2\0\1\u040a\15\0\1\u040a\6\0\12\u040a\1\u03f3"+ - "\43\0\4\u040b\2\0\1\u040b\15\0\1\u040b\6\0\12\u040b"+ - "\1\u040c\43\0\4\u040d\2\0\1\u040d\15\0\1\u040d\6\0"+ - "\12\u040d\1\u040e\13\0\1\u0273\26\0\1\u02bf\4\u040d\2\0"+ - "\1\u040d\15\0\1\u040d\6\0\12\u040f\1\u040e\13\0\1\u0273"+ - "\26\0\1\u02bf\4\u040d\2\0\1\u040d\15\0\1\u040d\6\0"+ - "\12\u0410\1\u040e\13\0\1\u0273\26\0\1\u02bf\4\u040d\2\0"+ - "\1\u040d\15\0\1\u040d\6\0\1\u040f\1\u0411\1\u0410\2\u040f"+ - "\2\u0410\2\u040f\1\u0410\1\u040e\13\0\1\u0273\27\0\4\u0412"+ - "\2\0\1\u0412\15\0\1\u0412\6\0\12\u0412\1\u03d3\13\0"+ - "\1\u0273\26\0\1\u02bf\4\u0412\2\0\1\u0412\15\0\1\u0412"+ - "\6\0\12\u0412\1\u03d3\13\0\1\u0273\110\0\1\u0273\62\0"+ - "\2\u03fa\1\0\2\u03fa\2\0\2\u03fa\15\0\1\u0273\27\0"+ - "\4\u0413\2\0\1\u0413\15\0\1\u0413\6\0\12\u0413\1\u03dd"+ - "\43\0\4\u0414\2\0\1\u0414\15\0\1\u0414\6\0\12\u0414"+ - "\1\u0415\43\0\4\u0416\2\0\1\u0416\15\0\1\u0416\6\0"+ - "\1\u0417\2\u0418\1\u0417\4\u0418\1\u0419\1\u0418\14\0\1\u0230"+ - "\27\0\4\u041a\2\0\1\u041a\15\0\1\u041a\6\0\12\u041a"+ - "\1\u0400\13\0\1\u0230\27\0\4\u0416\2\0\1\u0416\15\0"+ - "\1\u0416\6\0\1\u0417\2\u0418\1\u0417\4\u0418\1\u0419\1\u0418"+ - "\43\0\1\u0280\4\u041a\2\0\1\u041a\15\0\1\u041a\6\0"+ - "\12\u041b\1\u0400\13\0\1\u0230\26\0\1\u0280\4\u041a\2\0"+ - "\1\u041a\15\0\1\u041a\6\0\12\u041a\1\u0400\13\0\1\u0230"+ - "\26\0\1\u0280\4\u041a\2\0\1\u041a\15\0\1\u041a\6\0"+ - "\2\u041b\1\u041a\2\u041b\2\u041a\2\u041b\1\u041a\1\u0400\13\0"+ - "\1\u0230\74\0\1\u03b8\13\0\1\u0230\26\0\1\172\1\u041c"+ - "\31\63\1\173\12\63\43\0\1\172\24\63\1\u041d\5\63"+ - "\1\173\12\63\43\0\1\172\1\63\1\u041e\30\63\1\173"+ - "\12\63\43\0\1\172\32\63\1\173\2\63\1\u0103\7\63"+ - "\43\0\1\172\6\63\1\374\23\63\1\173\12\63\44\0"+ - "\4\u041f\2\0\1\u041f\15\0\1\u041f\6\0\12\u041f\1\u03f3"+ - "\43\0\4\u0420\2\0\1\u0420\15\0\1\u0420\6\0\12\u0420"+ - "\1\u0421\43\0\4\u0422\2\0\1\u0422\15\0\1\u0422\6\0"+ - "\1\u0423\2\u0424\1\u0423\4\u0424\1\u0425\1\u0424\14\0\1\u0273"+ - "\27\0\4\u0426\2\0\1\u0426\15\0\1\u0426\6\0\12\u0426"+ - "\1\u040e\13\0\1\u0273\27\0\4\u0422\2\0\1\u0422\15\0"+ - "\1\u0422\6\0\1\u0423\2\u0424\1\u0423\4\u0424\1\u0425\1\u0424"+ - "\43\0\1\u02bf\4\u0426\2\0\1\u0426\15\0\1\u0426\6\0"+ - "\12\u0427\1\u040e\13\0\1\u0273\26\0\1\u02bf\4\u0426\2\0"+ - "\1\u0426\15\0\1\u0426\6\0\12\u0426\1\u040e\13\0\1\u0273"+ - "\26\0\1\u02bf\4\u0426\2\0\1\u0426\15\0\1\u0426\6\0"+ - "\2\u0427\1\u0426\2\u0427\2\u0426\2\u0427\1\u0426\1\u040e\13\0"+ - "\1\u0273\74\0\1\u03d3\13\0\1\u0273\74\0\1\u03dd\43\0"+ - "\4\u0428\2\0\1\u0428\15\0\1\u0428\6\0\12\u0428\1\u0415"+ - "\43\0\4\u0429\2\0\1\u0429\15\0\1\u0429\6\0\1\u042a"+ - "\2\u042b\1\u042a\4\u042b\1\u042c\1\u042b\1\u042d\43\0\4\u042e"+ - "\2\0\1\u042e\15\0\1\u042e\6\0\12\u042e\1\u042f\13\0"+ - "\1\u0230\26\0\1\u0280\4\u042e\2\0\1\u042e\15\0\1\u042e"+ - "\6\0\12\u0430\1\u042f\13\0\1\u0230\26\0\1\u0280\4\u042e"+ - "\2\0\1\u042e\15\0\1\u042e\6\0\12\u0431\1\u042f\13\0"+ - "\1\u0230\26\0\1\u0280\4\u042e\2\0\1\u042e\15\0\1\u042e"+ - "\6\0\1\u0430\1\u0432\1\u0431\2\u0430\2\u0431\2\u0430\1\u0431"+ - "\1\u042f\13\0\1\u0230\27\0\4\u0433\2\0\1\u0433\15\0"+ - "\1\u0433\6\0\12\u0433\1\u0400\13\0\1\u0230\26\0\1\u0280"+ - "\4\u0433\2\0\1\u0433\15\0\1\u0433\6\0\12\u0433\1\u0400"+ - "\13\0\1\u0230\26\0\1\172\4\63\1\374\25\63\1\173"+ - "\12\63\43\0\1\172\24\63\1\301\5\63\1\173\12\63"+ - "\43\0\1\172\32\63\1\173\11\63\1\301\111\0\1\u03f3"+ - "\43\0\4\u0434\2\0\1\u0434\15\0\1\u0434\6\0\12\u0434"+ - "\1\u0421\43\0\4\u0435\2\0\1\u0435\15\0\1\u0435\6\0"+ - "\1\u0436\2\u0437\1\u0436\4\u0437\1\u0438\1\u0437\1\u0439\43\0"+ - "\4\u043a\2\0\1\u043a\15\0\1\u043a\6\0\12\u043a\1\u043b"+ - "\13\0\1\u0273\26\0\1\u02bf\4\u043a\2\0\1\u043a\15\0"+ - "\1\u043a\6\0\12\u043c\1\u043b\13\0\1\u0273\26\0\1\u02bf"+ - "\4\u043a\2\0\1\u043a\15\0\1\u043a\6\0\12\u043d\1\u043b"+ - "\13\0\1\u0273\26\0\1\u02bf\4\u043a\2\0\1\u043a\15\0"+ - "\1\u043a\6\0\1\u043c\1\u043e\1\u043d\2\u043c\2\u043d\2\u043c"+ - "\1\u043d\1\u043b\13\0\1\u0273\27\0\4\u043f\2\0\1\u043f"+ - "\15\0\1\u043f\6\0\12\u043f\1\u040e\13\0\1\u0273\26\0"+ - "\1\u02bf\4\u043f\2\0\1\u043f\15\0\1\u043f\6\0\12\u043f"+ - "\1\u040e\13\0\1\u0273\27\0\4\u0440\2\0\1\u0440\15\0"+ - "\1\u0440\6\0\12\u0440\1\u0415\43\0\4\u0441\2\0\1\u0441"+ - "\15\0\1\u0441\6\0\12\u0441\1\u0442\42\0\1\u0280\4\u0441"+ - "\2\0\1\u0441\15\0\1\u0441\6\0\12\u0443\1\u0442\42\0"+ - "\1\u0280\4\u0441\2\0\1\u0441\15\0\1\u0441\6\0\12\u0444"+ - "\1\u0442\42\0\1\u0280\4\u0441\2\0\1\u0441\15\0\1\u0441"+ - "\6\0\1\u0443\1\u0445\1\u0444\2\u0443\2\u0444\2\u0443\1\u0444"+ - "\1\u0442\43\0\4\u0446\2\0\1\u0446\15\0\1\u0446\6\0"+ - "\12\u0446\14\0\1\u0230\27\0\4\u0447\2\0\1\u0447\15\0"+ - "\1\u0447\6\0\12\u0447\1\u042f\13\0\1\u0230\27\0\4\u0446"+ - "\2\0\1\u0446\15\0\1\u0446\6\0\12\u0446\43\0\1\u0280"+ - "\4\u0447\2\0\1\u0447\15\0\1\u0447\6\0\12\u0448\1\u042f"+ - "\13\0\1\u0230\26\0\1\u0280\4\u0447\2\0\1\u0447\15\0"+ - "\1\u0447\6\0\12\u0447\1\u042f\13\0\1\u0230\26\0\1\u0280"+ - "\4\u0447\2\0\1\u0447\15\0\1\u0447\6\0\2\u0448\1\u0447"+ - "\2\u0448\2\u0447\2\u0448\1\u0447\1\u042f\13\0\1\u0230\74\0"+ - "\1\u0400\13\0\1\u0230\27\0\4\u0449\2\0\1\u0449\15\0"+ - "\1\u0449\6\0\12\u0449\1\u0421\43\0\4\u044a\2\0\1\u044a"+ - "\15\0\1\u044a\6\0\12\u044a\1\u044b\42\0\1\u02bf\4\u044a"+ - "\2\0\1\u044a\15\0\1\u044a\6\0\12\u044c\1\u044b\42\0"+ - "\1\u02bf\4\u044a\2\0\1\u044a\15\0\1\u044a\6\0\12\u044d"+ - "\1\u044b\42\0\1\u02bf\4\u044a\2\0\1\u044a\15\0\1\u044a"+ - "\6\0\1\u044c\1\u044e\1\u044d\2\u044c\2\u044d\2\u044c\1\u044d"+ - "\1\u044b\43\0\4\u044f\2\0\1\u044f\15\0\1\u044f\6\0"+ - "\12\u044f\14\0\1\u0273\27\0\4\u0450\2\0\1\u0450\15\0"+ - "\1\u0450\6\0\12\u0450\1\u043b\13\0\1\u0273\27\0\4\u044f"+ - "\2\0\1\u044f\15\0\1\u044f\6\0\12\u044f\43\0\1\u02bf"+ - "\4\u0450\2\0\1\u0450\15\0\1\u0450\6\0\12\u0451\1\u043b"+ - "\13\0\1\u0273\26\0\1\u02bf\4\u0450\2\0\1\u0450\15\0"+ - "\1\u0450\6\0\12\u0450\1\u043b\13\0\1\u0273\26\0\1\u02bf"+ - "\4\u0450\2\0\1\u0450\15\0\1\u0450\6\0\2\u0451\1\u0450"+ - "\2\u0451\2\u0450\2\u0451\1\u0450\1\u043b\13\0\1\u0273\74\0"+ - "\1\u040e\13\0\1\u0273\74\0\1\u0415\43\0\4\u0452\2\0"+ - "\1\u0452\15\0\1\u0452\6\0\12\u0452\1\u0442\43\0\4\u0446"+ - "\2\0\1\u0446\15\0\1\u0446\6\0\12\u0446\1\u03e4\42\0"+ - "\1\u0280\4\u0452\2\0\1\u0452\15\0\1\u0452\6\0\12\u0453"+ - "\1\u0442\42\0\1\u0280\4\u0452\2\0\1\u0452\15\0\1\u0452"+ - "\6\0\12\u0452\1\u0442\42\0\1\u0280\4\u0452\2\0\1\u0452"+ - "\15\0\1\u0452\6\0\2\u0453\1\u0452\2\u0453\2\u0452\2\u0453"+ - "\1\u0452\1\u0442\43\0\4\u0454\2\0\1\u0454\15\0\1\u0454"+ - "\6\0\12\u0454\14\0\1\u0230\27\0\4\u0455\2\0\1\u0455"+ - "\15\0\1\u0455\6\0\12\u0455\1\u042f\13\0\1\u0230\26\0"+ - "\1\u0280\4\u0455\2\0\1\u0455\15\0\1\u0455\6\0\12\u0455"+ - "\1\u042f\13\0\1\u0230\74\0\1\u0421\43\0\4\u0456\2\0"+ - "\1\u0456\15\0\1\u0456\6\0\12\u0456\1\u044b\43\0\4\u044f"+ - "\2\0\1\u044f\15\0\1\u044f\6\0\12\u044f\1\u03fa\42\0"+ - "\1\u02bf\4\u0456\2\0\1\u0456\15\0\1\u0456\6\0\12\u0457"+ - "\1\u044b\42\0\1\u02bf\4\u0456\2\0\1\u0456\15\0\1\u0456"+ - "\6\0\12\u0456\1\u044b\42\0\1\u02bf\4\u0456\2\0\1\u0456"+ - "\15\0\1\u0456\6\0\2\u0457\1\u0456\2\u0457\2\u0456\2\u0457"+ - "\1\u0456\1\u044b\43\0\4\u0458\2\0\1\u0458\15\0\1\u0458"+ - "\6\0\12\u0458\14\0\1\u0273\27\0\4\u0459\2\0\1\u0459"+ - "\15\0\1\u0459\6\0\12\u0459\1\u043b\13\0\1\u0273\26\0"+ - "\1\u02bf\4\u0459\2\0\1\u0459\15\0\1\u0459\6\0\12\u0459"+ - "\1\u043b\13\0\1\u0273\27\0\4\u045a\2\0\1\u045a\15\0"+ - "\1\u045a\6\0\12\u045a\1\u0442\42\0\1\u0280\4\u045a\2\0"+ - "\1\u045a\15\0\1\u045a\6\0\12\u045a\1\u0442\43\0\4\u045b"+ - "\2\0\1\u045b\15\0\1\u045b\6\0\12\u045b\14\0\1\u0230"+ - "\74\0\1\u042f\13\0\1\u0230\27\0\4\u045c\2\0\1\u045c"+ - "\15\0\1\u045c\6\0\12\u045c\1\u044b\42\0\1\u02bf\4\u045c"+ - "\2\0\1\u045c\15\0\1\u045c\6\0\12\u045c\1\u044b\43\0"+ - "\4\u045d\2\0\1\u045d\15\0\1\u045d\6\0\12\u045d\14\0"+ - "\1\u0273\74\0\1\u043b\13\0\1\u0273\74\0\1\u0442\43\0"+ - "\4\u03e4\2\0\1\u03e4\15\0\1\u03e4\6\0\12\u03e4\14\0"+ - "\1\u0230\74\0\1\u044b\43\0\4\u03fa\2\0\1\u03fa\15\0"+ - "\1\u03fa\6\0\12\u03fa\14\0\1\u0273\15\0"; + "\1\2\1\3\1\2\1\4\1\5\3\2\1\6\2\7"+ + "\1\10\1\11\16\0\2\3\1\12\1\0\1\13\1\0"+ + "\1\13\1\14\1\0\1\3\3\0\1\3\2\4\2\0"+ + "\2\15\1\16\1\0\1\4\4\0\1\5\1\0\1\5"+ + "\3\0\1\14\1\0\1\5\3\0\1\3\1\17\1\4"+ + "\1\5\3\0\1\17\1\0\1\17\13\0\2\7\3\0"+ + "\1\3\2\12\2\0\2\20\1\14\1\0\1\12\3\0"+ + "\1\3\1\13\7\0\1\13\3\0\1\3\1\14\1\12"+ + "\1\5\3\0\1\14\1\0\1\14\4\0\1\15\1\4"+ + "\6\0\1\15\3\0\1\3\1\16\1\4\1\5\3\0"+ + "\1\16\1\0\1\16\4\0\1\20\1\12\6\0\1\20"+ + "\2\0"; private static int [] zzUnpackTrans() { - int [] result = new int[80884]; + int [] result = new int[169]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -2289,23 +299,11 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\11\17\1\2\11\1\1\1\0\1\1\1\0"+ - "\1\1\6\0\2\1\1\0\3\1\1\0\1\1\1\0"+ - "\4\1\11\0\32\1\3\0\4\1\32\0\4\1\10\0"+ - "\1\11\1\0\23\1\2\0\1\1\1\0\7\1\3\0"+ - "\2\1\1\0\4\1\1\0\2\1\1\0\2\1\10\0"+ - "\1\1\32\0\1\1\1\0\11\1\1\0\1\1\2\0"+ - "\1\1\1\0\1\1\10\0\3\1\15\0\11\1\3\0"+ - "\2\1\1\0\4\1\1\0\4\1\1\0\2\1\1\0"+ - "\2\1\1\0\3\1\7\0\2\1\20\0\1\1\10\0"+ - "\1\1\3\0\1\1\32\0\3\1\23\0\1\1\27\0"+ - "\1\1\4\0\1\1\6\0\1\1\4\0\2\1\36\0"+ - "\1\1\51\0\1\1\42\0\1\1\50\0\1\1\122\0"+ - "\1\1\116\0\1\1\107\0\1\1\74\0\1\1\51\0"+ - "\1\1\333\0"; + "\1\0\1\11\5\1\2\11\1\1\1\0\1\1\1\0"+ + "\1\1\2\0"; private static int [] zzUnpackAttribute() { - int [] result = new int[1117]; + int [] result = new int[16]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -2379,12 +377,6 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { /** Numbers */ public static final int NUMERIC_TYPE = StandardTokenizer.NUM; - /** URLs with scheme: HTTP(S), FTP, or FILE; no-scheme URLs match HTTP syntax */ - public static final int URL_TYPE = StandardTokenizer.URL; - - /** E-mail addresses */ - public static final int EMAIL_TYPE = StandardTokenizer.EMAIL; - /** * Chars in class \p{Line_Break = Complex_Context} are from South East Asian * scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept @@ -2442,7 +434,7 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 2336) { + while (i < 2174) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); @@ -2669,6 +661,12 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { zzState = ZZ_LEXSTATE[zzLexicalState]; + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + zzForAction: { while (true) { @@ -2701,7 +699,7 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { if (zzNext == -1) break zzForAction; zzState = zzNext; - int zzAttributes = zzAttrL[zzState]; + zzAttributes = zzAttrL[zzState]; if ( (zzAttributes & 1) == 1 ) { zzAction = zzState; zzMarkedPosL = zzCurrentPosL; @@ -2718,35 +716,27 @@ public final class StandardTokenizerImpl implements StandardTokenizerInterface { case 1: { /* Not numeric, word, ideographic, hiragana, or SE Asian -- ignore it. */ } - case 9: break; + case 7: break; case 6: { return HIRAGANA_TYPE; } - case 10: break; + case 8: break; case 2: { return WORD_TYPE; } - case 11: break; - case 8: - { return URL_TYPE; - } - case 12: break; + case 9: break; case 5: { return IDEOGRAPHIC_TYPE; } - case 13: break; - case 7: - { return EMAIL_TYPE; - } - case 14: break; + case 10: break; case 3: { return NUMERIC_TYPE; } - case 15: break; + case 11: break; case 4: { return SOUTH_EAST_ASIAN_TYPE; } - case 16: break; + case 12: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex index addcf505989..7cb8ee498f4 100644 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/StandardTokenizerImpl.jflex @@ -23,14 +23,11 @@ import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; * This class implements Word Break rules from the Unicode Text Segmentation * algorithm, as specified in * Unicode Standard Annex #29 - * URLs and email addresses are also tokenized according to the relevant RFCs. *

    * Tokens produced are of the following types: *

      *
    • <ALPHANUM>: A sequence of alphabetic and numeric characters
    • *
    • <NUM>: A number
    • - *
    • <URL>: A URL
    • - *
    • <EMAIL>: An email address
    • *
    • <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast * Asian languages, including Thai, Lao, Myanmar, and Khmer
    • *
    • <IDEOGRAPHIC>: A single CJKV ideographic character
    • @@ -67,83 +64,6 @@ MidNumericEx = [\p{WB:MidNum}\p{WB:MidNumLet}] [\p{WB:Format}\p{WB:Extend}] ExtendNumLetEx = \p{WB:ExtendNumLet} [\p{WB:Format}\p{WB:Extend}]* -// URL and E-mail syntax specifications: -// -// RFC-952: DOD INTERNET HOST TABLE SPECIFICATION -// RFC-1035: DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION -// RFC-1123: Requirements for Internet Hosts - Application and Support -// RFC-1738: Uniform Resource Locators (URL) -// RFC-3986: Uniform Resource Identifier (URI): Generic Syntax -// RFC-5234: Augmented BNF for Syntax Specifications: ABNF -// RFC-5321: Simple Mail Transfer Protocol -// RFC-5322: Internet Message Format - -%include src/java/org/apache/lucene/analysis/standard/ASCIITLD.jflex-macro - -DomainLabel = [A-Za-z0-9] ([-A-Za-z0-9]* [A-Za-z0-9])? -DomainNameStrict = {DomainLabel} ("." {DomainLabel})* {ASCIITLD} -DomainNameLoose = {DomainLabel} ("." {DomainLabel})* - -IPv4DecimalOctet = "0"{0,2} [0-9] | "0"? [1-9][0-9] | "1" [0-9][0-9] | "2" ([0-4][0-9] | "5" [0-5]) -IPv4Address = {IPv4DecimalOctet} ("." {IPv4DecimalOctet}){3} -IPv6Hex16Bit = [0-9A-Fa-f]{1,4} -IPv6LeastSignificant32Bits = {IPv4Address} | ({IPv6Hex16Bit} ":" {IPv6Hex16Bit}) -IPv6Address = ({IPv6Hex16Bit} ":"){6} {IPv6LeastSignificant32Bits} - | "::" ({IPv6Hex16Bit} ":"){5} {IPv6LeastSignificant32Bits} - | {IPv6Hex16Bit}? "::" ({IPv6Hex16Bit} ":"){4} {IPv6LeastSignificant32Bits} - | (({IPv6Hex16Bit} ":"){0,1} {IPv6Hex16Bit})? "::" ({IPv6Hex16Bit} ":"){3} {IPv6LeastSignificant32Bits} - | (({IPv6Hex16Bit} ":"){0,2} {IPv6Hex16Bit})? "::" ({IPv6Hex16Bit} ":"){2} {IPv6LeastSignificant32Bits} - | (({IPv6Hex16Bit} ":"){0,3} {IPv6Hex16Bit})? "::" {IPv6Hex16Bit} ":" {IPv6LeastSignificant32Bits} - | (({IPv6Hex16Bit} ":"){0,4} {IPv6Hex16Bit})? "::" {IPv6LeastSignificant32Bits} - | (({IPv6Hex16Bit} ":"){0,5} {IPv6Hex16Bit})? "::" {IPv6Hex16Bit} - | (({IPv6Hex16Bit} ":"){0,6} {IPv6Hex16Bit})? "::" - -URIunreserved = [-._~A-Za-z0-9] -URIpercentEncoded = "%" [0-9A-Fa-f]{2} -URIsubDelims = [!$&'()*+,;=] -URIloginSegment = ({URIunreserved} | {URIpercentEncoded} | {URIsubDelims})* -URIlogin = {URIloginSegment} (":" {URIloginSegment})? "@" -URIquery = "?" ({URIunreserved} | {URIpercentEncoded} | {URIsubDelims} | [:@/?])* -URIfragment = "#" ({URIunreserved} | {URIpercentEncoded} | {URIsubDelims} | [:@/?])* -URIport = ":" [0-9]{1,5} -URIhostStrict = ("[" {IPv6Address} "]") | {IPv4Address} | {DomainNameStrict} -URIhostLoose = ("[" {IPv6Address} "]") | {IPv4Address} | {DomainNameLoose} - -URIauthorityStrict = {URIhostStrict} {URIport}? -URIauthorityLoose = {URIlogin}? {URIhostLoose} {URIport}? - -HTTPsegment = ({URIunreserved} | {URIpercentEncoded} | [;:@&=])* -HTTPpath = ("/" {HTTPsegment})* -HTTPscheme = [hH][tT][tT][pP][sS]? "://" -HTTPurlFull = {HTTPscheme} {URIauthorityLoose} {HTTPpath}? {URIquery}? {URIfragment}? -// {HTTPurlNoScheme} excludes {URIlogin}, because it could otherwise accept e-mail addresses -HTTPurlNoScheme = {URIauthorityStrict} {HTTPpath}? {URIquery}? {URIfragment}? -HTTPurl = {HTTPurlFull} | {HTTPurlNoScheme} - -FTPorFILEsegment = ({URIunreserved} | {URIpercentEncoded} | [?:@&=])* -FTPorFILEpath = "/" {FTPorFILEsegment} ("/" {FTPorFILEsegment})* -FTPtype = ";" [tT][yY][pP][eE] "=" [aAiIdD] -FTPscheme = [fF][tT][pP] "://" -FTPurl = {FTPscheme} {URIauthorityLoose} {FTPorFILEpath} {FTPtype}? {URIfragment}? - -FILEscheme = [fF][iI][lL][eE] "://" -FILEurl = {FILEscheme} {URIhostLoose}? {FTPorFILEpath} {URIfragment}? - -URL = {HTTPurl} | {FTPurl} | {FILEurl} - -EMAILquotedString = [\"] ([\u0001-\u0008\u000B\u000C\u000E-\u0021\u0023-\u005B\u005D-\u007E] | [\\] [\u0000-\u007F])* [\"] -EMAILatomText = [A-Za-z0-9!#$%&'*+-/=?\^_`{|}~] -EMAILlabel = {EMAILatomText}+ | {EMAILquotedString} -EMAILlocalPart = {EMAILlabel} ("." {EMAILlabel})* -EMAILdomainLiteralText = [\u0001-\u0008\u000B\u000C\u000E-\u005A\u005E-\u007F] | [\\] [\u0000-\u007F] -// DFA minimization allows {IPv6Address} and {IPv4Address} to be included -// in the {EMAILbracketedHost} definition without incurring any size penalties, -// since {EMAILdomainLiteralText} recognizes all valid IP addresses. -// The IP address regexes are included in {EMAILbracketedHost} simply as a -// reminder that they are acceptable bracketed host forms. -EMAILbracketedHost = "[" ({EMAILdomainLiteralText}* | {IPv4Address} | [iI][pP][vV] "6:" {IPv6Address}) "]" -EMAIL = {EMAILlocalPart} "@" ({DomainNameStrict} | {EMAILbracketedHost}) - %{ /** Alphanumeric sequences */ public static final int WORD_TYPE = StandardTokenizer.ALPHANUM; @@ -151,12 +71,6 @@ EMAIL = {EMAILlocalPart} "@" ({DomainNameStrict} | {EMAILbracketedHost}) /** Numbers */ public static final int NUMERIC_TYPE = StandardTokenizer.NUM; - /** URLs with scheme: HTTP(S), FTP, or FILE; no-scheme URLs match HTTP syntax */ - public static final int URL_TYPE = StandardTokenizer.URL; - - /** E-mail addresses */ - public static final int EMAIL_TYPE = StandardTokenizer.EMAIL; - /** * Chars in class \p{Line_Break = Complex_Context} are from South East Asian * scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept @@ -191,9 +105,6 @@ EMAIL = {EMAILlocalPart} "@" ({DomainNameStrict} | {EMAILbracketedHost}) // <> { return StandardTokenizerInterface.YYEOF; } -{URL} { return URL_TYPE; } -{EMAIL} { return EMAIL_TYPE; } - // UAX#29 WB8. Numeric × Numeric // WB11. Numeric (MidNum | MidNumLet) × Numeric // WB12. Numeric × (MidNum | MidNumLet) Numeric diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29Tokenizer.java b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29Tokenizer.java deleted file mode 100644 index daf6b4d38c3..00000000000 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29Tokenizer.java +++ /dev/null @@ -1,847 +0,0 @@ -/* The following code was generated by JFlex 1.5.0-SNAPSHOT on 10/13/10 12:12 AM */ - -package org.apache.lucene.analysis.standard; - -/** - * 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.io.IOException; -import java.io.Reader; - -import org.apache.lucene.analysis.Tokenizer; -import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; -import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute; -import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; -import org.apache.lucene.analysis.tokenattributes.TypeAttribute; -import org.apache.lucene.util.AttributeSource; - - -/** - * This class implements Word Break rules from the Unicode Text Segmentation - * algorithm, as specified in - * Unicode Standard Annex #29 - *

      - * Tokens produced are of the following types: - *

        - *
      • <ALPHANUM>: A sequence of alphabetic and numeric characters
      • - *
      • <NUM>: A number
      • - *
      • <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast - * Asian languages, including Thai, Lao, Myanmar, and Khmer
      • - *
      • <IDEOGRAPHIC>: A single CJKV ideographic character
      • - *
      • <HIRAGANA>: A single hiragana character
      • - *
      - * WARNING: Because JFlex does not support Unicode supplementary - * characters (characters above the Basic Multilingual Plane, which contains - * those up to and including U+FFFF), this scanner will not recognize them - * properly. If you need to be able to process text containing supplementary - * characters, consider using the ICU4J-backed implementation in modules/analysis/icu - * (org.apache.lucene.analysis.icu.segmentation.ICUTokenizer) - * instead of this class, since the ICU4J-backed implementation does not have - * this limitation. - */ - -public final class UAX29Tokenizer extends Tokenizer { - - /** This character denotes the end of file */ - private static final int YYEOF = -1; - - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; - - /** lexical states */ - private static final int YYINITIAL = 0; - - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0 - }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\47\0\1\7\4\0\1\6\1\0\1\7\1\0\12\3\1\5\1\6"+ - "\5\0\32\1\4\0\1\10\1\0\32\1\57\0\1\1\2\0\1\2"+ - "\7\0\1\1\1\0\1\5\2\0\1\1\5\0\27\1\1\0\37\1"+ - "\1\0\u01ca\1\4\0\14\1\16\0\5\1\7\0\1\1\1\0\1\1"+ - "\21\0\160\2\5\1\1\0\2\1\2\0\4\1\1\6\7\0\1\1"+ - "\1\5\3\1\1\0\1\1\1\0\24\1\1\0\123\1\1\0\213\1"+ - "\1\0\7\2\236\1\11\0\46\1\2\0\1\1\7\0\47\1\1\0"+ - "\1\6\7\0\55\2\1\0\1\2\1\0\2\2\1\0\2\2\1\0"+ - "\1\2\10\0\33\1\5\0\4\1\1\5\13\0\4\2\10\0\2\6"+ - "\2\0\13\2\5\0\53\1\25\2\12\3\1\0\1\3\1\6\1\0"+ - "\2\1\1\2\143\1\1\0\1\1\10\2\1\0\6\2\2\1\2\2"+ - "\1\0\4\2\2\1\12\3\3\1\2\0\1\1\17\0\1\2\1\1"+ - "\1\2\36\1\33\2\2\0\131\1\13\2\1\1\16\0\12\3\41\1"+ - "\11\2\2\1\2\0\1\6\1\0\1\1\5\0\26\1\4\2\1\1"+ - "\11\2\1\1\3\2\1\1\5\2\22\0\31\1\3\2\244\0\4\2"+ - "\66\1\3\2\1\1\22\2\1\1\7\2\12\1\2\2\2\0\12\3"+ - "\1\0\7\1\1\0\7\1\1\0\3\2\1\0\10\1\2\0\2\1"+ - "\2\0\26\1\1\0\7\1\1\0\1\1\3\0\4\1\2\0\1\2"+ - "\1\1\7\2\2\0\2\2\2\0\3\2\1\1\10\0\1\2\4\0"+ - "\2\1\1\0\3\1\2\2\2\0\12\3\2\1\17\0\3\2\1\0"+ - "\6\1\4\0\2\1\2\0\26\1\1\0\7\1\1\0\2\1\1\0"+ - "\2\1\1\0\2\1\2\0\1\2\1\0\5\2\4\0\2\2\2\0"+ - "\3\2\3\0\1\2\7\0\4\1\1\0\1\1\7\0\12\3\2\2"+ - "\3\1\1\2\13\0\3\2\1\0\11\1\1\0\3\1\1\0\26\1"+ - "\1\0\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1\10\2"+ - "\1\0\3\2\1\0\3\2\2\0\1\1\17\0\2\1\2\2\2\0"+ - "\12\3\21\0\3\2\1\0\10\1\2\0\2\1\2\0\26\1\1\0"+ - "\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1\7\2\2\0"+ - "\2\2\2\0\3\2\10\0\2\2\4\0\2\1\1\0\3\1\2\2"+ - "\2\0\12\3\1\0\1\1\20\0\1\2\1\1\1\0\6\1\3\0"+ - "\3\1\1\0\4\1\3\0\2\1\1\0\1\1\1\0\2\1\3\0"+ - "\2\1\3\0\3\1\3\0\14\1\4\0\5\2\3\0\3\2\1\0"+ - "\4\2\2\0\1\1\6\0\1\2\16\0\12\3\21\0\3\2\1\0"+ - "\10\1\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1\3\0"+ - "\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2\1\0\2\1"+ - "\6\0\2\1\2\2\2\0\12\3\22\0\2\2\1\0\10\1\1\0"+ - "\3\1\1\0\27\1\1\0\12\1\1\0\5\1\2\0\1\2\1\1"+ - "\7\2\1\0\3\2\1\0\4\2\7\0\2\2\7\0\1\1\1\0"+ - "\2\1\2\2\2\0\12\3\1\0\2\1\17\0\2\2\1\0\10\1"+ - "\1\0\3\1\1\0\51\1\2\0\1\1\7\2\1\0\3\2\1\0"+ - "\4\2\1\1\10\0\1\2\10\0\2\1\2\2\2\0\12\3\12\0"+ - "\6\1\2\0\2\2\1\0\22\1\3\0\30\1\1\0\11\1\1\0"+ - "\1\1\2\0\7\1\3\0\1\2\4\0\6\2\1\0\1\2\1\0"+ - "\10\2\22\0\2\2\15\0\60\11\1\12\2\11\7\12\5\0\7\11"+ - "\10\12\1\0\12\3\47\0\2\11\1\0\1\11\2\0\2\11\1\0"+ - "\1\11\2\0\1\11\6\0\4\11\1\0\7\11\1\0\3\11\1\0"+ - "\1\11\1\0\1\11\2\0\2\11\1\0\4\11\1\12\2\11\6\12"+ - "\1\0\2\12\1\11\2\0\5\11\1\0\1\11\1\0\6\12\2\0"+ - "\12\3\2\0\2\11\42\0\1\1\27\0\2\2\6\0\12\3\13\0"+ - "\1\2\1\0\1\2\1\0\1\2\4\0\2\2\10\1\1\0\44\1"+ - "\4\0\24\2\1\0\2\2\5\1\13\2\1\0\44\2\11\0\1\2"+ - "\71\0\53\11\24\12\1\11\12\3\6\0\6\11\4\12\4\11\3\12"+ - "\1\11\3\12\2\11\7\12\3\11\4\12\15\11\14\12\1\11\1\12"+ - "\12\3\4\12\2\11\46\1\12\0\53\1\1\0\1\1\3\0\u0149\1"+ - "\1\0\4\1\2\0\7\1\1\0\1\1\1\0\4\1\2\0\51\1"+ - "\1\0\4\1\2\0\41\1\1\0\4\1\2\0\7\1\1\0\1\1"+ - "\1\0\4\1\2\0\17\1\1\0\71\1\1\0\4\1\2\0\103\1"+ - "\2\0\3\2\40\0\20\1\20\0\125\1\14\0\u026c\1\2\0\21\1"+ - "\1\0\32\1\5\0\113\1\3\0\3\1\17\0\15\1\1\0\4\1"+ - "\3\2\13\0\22\1\3\2\13\0\22\1\2\2\14\0\15\1\1\0"+ - "\3\1\1\0\2\2\14\0\64\11\40\12\3\0\1\11\4\0\1\11"+ - "\1\12\2\0\12\3\41\0\3\2\2\0\12\3\6\0\130\1\10\0"+ - "\51\1\1\2\1\1\5\0\106\1\12\0\35\1\3\0\14\2\4\0"+ - "\14\2\12\0\12\3\36\11\2\0\5\11\13\0\54\11\4\0\21\12"+ - "\7\11\2\12\6\0\12\3\1\11\3\0\2\11\40\0\27\1\5\2"+ - "\4\0\65\11\12\12\1\0\35\12\2\0\1\2\12\3\6\0\12\3"+ - "\6\0\16\11\122\0\5\2\57\1\21\2\7\1\4\0\12\3\21\0"+ - "\11\2\14\0\3\2\36\1\12\2\3\0\2\1\12\3\6\0\46\1"+ - "\16\2\14\0\44\1\24\2\10\0\12\3\3\0\3\1\12\3\44\1"+ - "\122\0\3\2\1\0\25\2\4\1\1\2\4\1\1\2\15\0\300\1"+ - "\47\2\25\0\4\2\u0116\1\2\0\6\1\2\0\46\1\2\0\6\1"+ - "\2\0\10\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0\37\1"+ - "\2\0\65\1\1\0\7\1\1\0\1\1\3\0\3\1\1\0\7\1"+ - "\3\0\4\1\2\0\6\1\4\0\15\1\5\0\3\1\1\0\7\1"+ - "\17\0\4\2\10\0\2\7\12\0\1\7\2\0\1\5\2\0\5\2"+ - "\20\0\2\10\3\0\1\6\17\0\1\10\13\0\5\2\5\0\6\2"+ - "\1\0\1\1\15\0\1\1\20\0\15\1\63\0\41\2\21\0\1\1"+ - "\4\0\1\1\2\0\12\1\1\0\1\1\3\0\5\1\6\0\1\1"+ - "\1\0\1\1\1\0\1\1\1\0\4\1\1\0\13\1\2\0\4\1"+ - "\5\0\5\1\4\0\1\1\21\0\51\1\u032d\0\64\1\u0716\0\57\1"+ - "\1\0\57\1\1\0\205\1\6\0\4\1\3\2\16\0\46\1\12\0"+ - "\66\1\11\0\1\1\17\0\1\2\27\1\11\0\7\1\1\0\7\1"+ - "\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1"+ - "\1\0\7\1\1\0\40\2\57\0\1\1\120\0\32\13\1\0\131\13"+ - "\14\0\326\13\57\0\1\1\1\0\1\13\31\0\11\13\6\2\1\0"+ - "\5\4\2\0\3\13\1\1\1\1\4\0\126\14\2\0\2\2\2\4"+ - "\3\14\133\4\1\0\4\4\5\0\51\1\3\0\136\1\21\0\33\1"+ - "\65\0\20\4\320\0\57\4\1\0\130\4\250\0\u19b6\13\112\0\u51cc\13"+ - "\64\0\u048d\1\103\0\56\1\2\0\u010d\1\3\0\20\1\12\3\2\1"+ - "\24\0\57\1\4\2\11\0\2\2\1\0\31\1\10\0\120\1\2\2"+ - "\45\0\11\1\2\0\147\1\2\0\4\1\1\0\2\1\16\0\12\1"+ - "\120\0\10\1\1\2\3\1\1\2\4\1\1\2\27\1\5\2\30\0"+ - "\64\1\14\0\2\2\62\1\21\2\13\0\12\3\6\0\22\2\6\1"+ - "\3\0\1\1\4\0\12\3\34\1\10\2\2\0\27\1\15\2\14\0"+ - "\35\1\3\0\4\2\57\1\16\2\16\0\1\1\12\3\46\0\51\1"+ - "\16\2\11\0\3\1\1\2\10\1\2\2\2\0\12\3\6\0\33\11"+ - "\1\12\4\0\60\11\1\12\1\11\3\12\2\11\2\12\5\11\2\12"+ - "\1\11\1\12\1\11\30\0\5\11\41\0\6\1\2\0\6\1\2\0"+ - "\6\1\11\0\7\1\1\0\7\1\221\0\43\1\10\2\1\0\2\2"+ - "\2\0\12\3\6\0\u2ba4\1\14\0\27\1\4\0\61\1\u2104\0\u012e\13"+ - "\2\0\76\13\2\0\152\13\46\0\7\1\14\0\5\1\5\0\1\1"+ - "\1\2\12\1\1\0\15\1\1\0\5\1\1\0\1\1\1\0\2\1"+ - "\1\0\2\1\1\0\154\1\41\0\u016b\1\22\0\100\1\2\0\66\1"+ - "\50\0\14\1\4\0\20\2\1\6\2\0\1\5\1\6\13\0\7\2"+ - "\14\0\2\10\30\0\3\10\1\6\1\0\1\7\1\0\1\6\1\5"+ - "\32\0\5\1\1\0\207\1\2\0\1\2\7\0\1\7\4\0\1\6"+ - "\1\0\1\7\1\0\12\3\1\5\1\6\5\0\32\1\4\0\1\10"+ - "\1\0\32\1\13\0\70\4\2\2\37\1\3\0\6\1\2\0\6\1"+ - "\2\0\6\1\2\0\3\1\34\0\3\2\4\0"; - - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\1\0\1\1\1\2\1\3\1\2\1\1\1\4\1\5"+ - "\1\6\1\2\1\0\1\2\1\0\1\3\2\0"; - - private static int [] zzUnpackAction() { - int [] result = new int[16]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); - } - return j; - } - - - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\15\0\32\0\47\0\64\0\101\0\116\0\15"+ - "\0\15\0\133\0\150\0\165\0\202\0\217\0\101\0\234"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[16]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\2\1\3\1\2\1\4\1\5\3\2\1\6\2\7"+ - "\1\10\1\11\16\0\2\3\1\12\1\0\1\13\1\0"+ - "\1\13\1\14\1\0\1\3\3\0\1\3\2\4\2\0"+ - "\2\15\1\16\1\0\1\4\4\0\1\5\1\0\1\5"+ - "\3\0\1\14\1\0\1\5\3\0\1\3\1\17\1\4"+ - "\1\5\3\0\1\17\1\0\1\17\13\0\2\7\3\0"+ - "\1\3\2\12\2\0\2\20\1\14\1\0\1\12\3\0"+ - "\1\3\1\13\7\0\1\13\3\0\1\3\1\14\1\12"+ - "\1\5\3\0\1\14\1\0\1\14\4\0\1\15\1\4"+ - "\6\0\1\15\3\0\1\3\1\16\1\4\1\5\3\0"+ - "\1\16\1\0\1\16\4\0\1\20\1\12\6\0\1\20"+ - "\2\0"; - - private static int [] zzUnpackTrans() { - int [] result = new int[169]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); - } - return j; - } - - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\11\5\1\2\11\1\1\1\0\1\1\1\0"+ - "\1\1\2\0"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[16]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; - - /** number of newlines encountered up to the start of the matched text */ - private int yyline; - - /** the number of characters up to the start of the matched text */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /** denotes if the user-EOF-code has already been executed */ - private boolean zzEOFDone; - - /* user code: */ - /** Alphanumeric sequences */ - public static final String WORD_TYPE = ""; - - /** Numbers */ - public static final String NUMERIC_TYPE = ""; - - /** - * Chars in class \p{Line_Break = Complex_Context} are from South East Asian - * scripts (Thai, Lao, Myanmar, Khmer, etc.). Sequences of these are kept - * together as as a single token rather than broken up, because the logic - * required to break them at word boundaries is too complex for UAX#29. - *

      - * See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA - */ - public static final String SOUTH_EAST_ASIAN_TYPE = ""; - - public static final String IDEOGRAPHIC_TYPE = ""; - - public static final String HIRAGANA_TYPE = ""; - - private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); - private final OffsetAttribute offsetAtt = addAttribute(OffsetAttribute.class); - private final PositionIncrementAttribute posIncrAtt - = addAttribute(PositionIncrementAttribute.class); - private final TypeAttribute typeAtt = addAttribute(TypeAttribute.class); - - private int maxTokenLength = StandardAnalyzer.DEFAULT_MAX_TOKEN_LENGTH; - private int posIncr; - - - /** - * @param source The AttributeSource to use - * @param input The input reader - */ - public UAX29Tokenizer(AttributeSource source, Reader input) { - super(source, input); - zzReader = input; - } - - /** - * @param factory The AttributeFactory to use - * @param input The input reader - */ - public UAX29Tokenizer(AttributeFactory factory, Reader input) { - super(factory, input); - zzReader = input; - } - - /** - * Set the max allowed token length. Any token longer than this is skipped. - * @param length the new max allowed token length - */ - public void setMaxTokenLength(int length) { - this.maxTokenLength = length; - } - - /** - * Returns the max allowed token length. Any token longer than this is - * skipped. - * @return the max allowed token length - */ - public int getMaxTokenLength() { - return maxTokenLength; - } - - @Override - public final void end() { - // set final offset - int finalOffset = correctOffset(yychar + yylength()); - offsetAtt.setOffset(finalOffset, finalOffset); - } - - @Override - public void reset(Reader reader) throws IOException { - super.reset(reader); - yyreset(reader); - } - - @Override - public final boolean incrementToken() throws IOException { - // This method is required because of two JFlex limitations: - // 1. No way to insert code at the beginning of the generated scanning - // get-next-token method; and - // 2. No way to declare @Override on the generated scanning method. - clearAttributes(); - posIncr = 1; - return getNextToken(); - } - - /** - * Populates this TokenStream's CharTermAttribute and OffsetAttribute from - * the current match, the TypeAttribute from the passed-in tokenType, and - * the PositionIncrementAttribute to one, unless the immediately previous - * token(s) was/were skipped because maxTokenLength was exceeded, in which - * case the PositionIncrementAttribute is set to one plus the number of - * skipped overly long tokens. - *

      - * If maxTokenLength is exceeded, the CharTermAttribute is set back to empty - * and false is returned. - * - * @param tokenType The type of the matching token - * @return true there is a token available (not too long); false otherwise - */ - private boolean populateAttributes(String tokenType) { - boolean isTokenAvailable = false; - if (yylength() > maxTokenLength) { - // When we skip a too-long token, we treat it like a stopword, introducing - // a position increment gap - ++posIncr; - } else { - termAtt.copyBuffer(zzBuffer, zzStartRead, yylength()); - posIncrAtt.setPositionIncrement(posIncr); - offsetAtt.setOffset(correctOffset(yychar), - correctOffset(yychar + yylength())); - typeAtt.setType(tokenType); - isTokenAvailable = true; - } - return isTokenAvailable; - } - - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ - public UAX29Tokenizer(java.io.Reader in) { - super(in); - this.zzReader = in; - } - - /** - * Creates a new scanner. - * There is also java.io.Reader version of this constructor. - * - * @param in the java.io.Inputstream to read input from. - */ - public UAX29Tokenizer(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 2174) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; - } - - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); - - if (numRead > 0) { - zzEndRead+= numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0 - return true; - } - - - /** - * Closes the input stream. - */ - private final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - - /** - * Resets the scanner to read from a new input stream. - * Does not close the old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). - * Lexical state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has grown. - * - * @param reader the new input stream - */ - private final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - - - /** - * Returns the current lexical state. - */ - private final int yystate() { - return zzLexicalState; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - private final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - private final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Returns the character at position pos from the - * matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. - * A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - private final char yycharat(int pos) { - return zzBuffer[zzStartRead+pos]; - } - - - /** - * Returns the length of the matched text region. - */ - private final int yylength() { - return zzMarkedPos-zzStartRead; - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } - catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. - * This number must not be greater than yylength()! - */ - private void yypushback(int number) { - if ( number > yylength() ) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean getNextToken() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar+= zzMarkedPosL-zzStartRead; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; - - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 5: - { if (populateAttributes(IDEOGRAPHIC_TYPE)) return true; - } - case 7: break; - case 1: - { /* Not numeric, word, ideographic, hiragana, or SE Asian -- ignore it. */ - } - case 8: break; - case 3: - { if (populateAttributes(NUMERIC_TYPE)) return true; - } - case 9: break; - case 6: - { if (populateAttributes(HIRAGANA_TYPE)) return true; - } - case 10: break; - case 4: - { if (populateAttributes(SOUTH_EAST_ASIAN_TYPE)) return true; - } - case 11: break; - case 2: - { if (populateAttributes(WORD_TYPE)) return true; - } - case 12: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return false; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } - } - } - } - - -} diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29URLEmailTokenizer.java b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29URLEmailTokenizer.java new file mode 100644 index 00000000000..4ba30beba26 --- /dev/null +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29URLEmailTokenizer.java @@ -0,0 +1,2869 @@ +/* The following code was generated by JFlex 1.5.0-SNAPSHOT on 12/4/10 7:24 PM */ + +package org.apache.lucene.analysis.standard; + +/** + * 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.io.IOException; +import java.io.Reader; + +import org.apache.lucene.analysis.Tokenizer; +import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; +import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute; +import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; +import org.apache.lucene.analysis.tokenattributes.TypeAttribute; +import org.apache.lucene.util.AttributeSource; + + +/** + * This class implements Word Break rules from the Unicode Text Segmentation + * algorithm, as specified in + * Unicode Standard Annex #29 + * URLs and email addresses are also tokenized according to the relevant RFCs. + *

      + * Tokens produced are of the following types: + *

        + *
      • <ALPHANUM>: A sequence of alphabetic and numeric characters
      • + *
      • <NUM>: A number
      • + *
      • <URL>: A URL
      • + *
      • <EMAIL>: An email address
      • + *
      • <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast + * Asian languages, including Thai, Lao, Myanmar, and Khmer
      • + *
      • <IDEOGRAPHIC>: A single CJKV ideographic character
      • + *
      • <HIRAGANA>: A single hiragana character
      • + *
      + * WARNING: Because JFlex does not support Unicode supplementary + * characters (characters above the Basic Multilingual Plane, which contains + * those up to and including U+FFFF), this scanner will not recognize them + * properly. If you need to be able to process text containing supplementary + * characters, consider using the ICU4J-backed implementation in modules/analysis/icu + * (org.apache.lucene.analysis.icu.segmentation.ICUTokenizer) + * instead of this class, since the ICU4J-backed implementation does not have + * this limitation. + */ + +public final class UAX29URLEmailTokenizer extends Tokenizer { + + /** This character denotes the end of file */ + private static final int YYEOF = -1; + + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + private static final int YYINITIAL = 0; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\1\101\10\77\2\101\2\77\1\101\23\77\1\102\1\76\1\71\1\102"+ + "\1\62\1\60\1\65\2\63\2\102\1\64\1\44\1\11\1\70\1\45"+ + "\1\50\1\55\1\51\1\54\1\46\1\47\1\56\1\53\1\52\1\57"+ + "\1\74\1\77\1\75\1\77\1\67\1\66\1\12\1\36\1\13\1\14"+ + "\1\15\1\20\1\21\1\37\1\22\1\40\1\43\1\23\1\24\1\25"+ + "\1\17\1\27\1\26\1\16\1\30\1\31\1\32\1\41\1\33\1\34"+ + "\1\42\1\35\1\72\1\100\1\73\1\103\1\61\1\103\1\12\1\36"+ + "\1\13\1\14\1\15\1\20\1\21\1\37\1\22\1\40\1\43\1\23"+ + "\1\24\1\25\1\17\1\27\1\26\1\16\1\30\1\31\1\32\1\41"+ + "\1\33\1\34\1\42\1\35\3\103\1\60\1\104\52\0\1\1\2\0"+ + "\1\2\7\0\1\1\1\0\1\5\2\0\1\1\5\0\27\1\1\0"+ + "\37\1\1\0\u01ca\1\4\0\14\1\16\0\5\1\7\0\1\1\1\0"+ + "\1\1\21\0\160\2\5\1\1\0\2\1\2\0\4\1\1\6\7\0"+ + "\1\1\1\5\3\1\1\0\1\1\1\0\24\1\1\0\123\1\1\0"+ + "\213\1\1\0\7\2\236\1\11\0\46\1\2\0\1\1\7\0\47\1"+ + "\1\0\1\6\7\0\55\2\1\0\1\2\1\0\2\2\1\0\2\2"+ + "\1\0\1\2\10\0\33\1\5\0\4\1\1\5\13\0\4\2\10\0"+ + "\2\6\2\0\13\2\5\0\53\1\25\2\12\3\1\0\1\3\1\6"+ + "\1\0\2\1\1\2\143\1\1\0\1\1\10\2\1\0\6\2\2\1"+ + "\2\2\1\0\4\2\2\1\12\3\3\1\2\0\1\1\17\0\1\2"+ + "\1\1\1\2\36\1\33\2\2\0\131\1\13\2\1\1\16\0\12\3"+ + "\41\1\11\2\2\1\2\0\1\6\1\0\1\1\5\0\26\1\4\2"+ + "\1\1\11\2\1\1\3\2\1\1\5\2\22\0\31\1\3\2\244\0"+ + "\4\2\66\1\3\2\1\1\22\2\1\1\7\2\12\1\2\2\2\0"+ + "\12\3\1\0\7\1\1\0\7\1\1\0\3\2\1\0\10\1\2\0"+ + "\2\1\2\0\26\1\1\0\7\1\1\0\1\1\3\0\4\1\2\0"+ + "\1\2\1\1\7\2\2\0\2\2\2\0\3\2\1\1\10\0\1\2"+ + "\4\0\2\1\1\0\3\1\2\2\2\0\12\3\2\1\17\0\3\2"+ + "\1\0\6\1\4\0\2\1\2\0\26\1\1\0\7\1\1\0\2\1"+ + "\1\0\2\1\1\0\2\1\2\0\1\2\1\0\5\2\4\0\2\2"+ + "\2\0\3\2\3\0\1\2\7\0\4\1\1\0\1\1\7\0\12\3"+ + "\2\2\3\1\1\2\13\0\3\2\1\0\11\1\1\0\3\1\1\0"+ + "\26\1\1\0\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1"+ + "\10\2\1\0\3\2\1\0\3\2\2\0\1\1\17\0\2\1\2\2"+ + "\2\0\12\3\21\0\3\2\1\0\10\1\2\0\2\1\2\0\26\1"+ + "\1\0\7\1\1\0\2\1\1\0\5\1\2\0\1\2\1\1\7\2"+ + "\2\0\2\2\2\0\3\2\10\0\2\2\4\0\2\1\1\0\3\1"+ + "\2\2\2\0\12\3\1\0\1\1\20\0\1\2\1\1\1\0\6\1"+ + "\3\0\3\1\1\0\4\1\3\0\2\1\1\0\1\1\1\0\2\1"+ + "\3\0\2\1\3\0\3\1\3\0\14\1\4\0\5\2\3\0\3\2"+ + "\1\0\4\2\2\0\1\1\6\0\1\2\16\0\12\3\21\0\3\2"+ + "\1\0\10\1\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1"+ + "\3\0\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2\1\0"+ + "\2\1\6\0\2\1\2\2\2\0\12\3\22\0\2\2\1\0\10\1"+ + "\1\0\3\1\1\0\27\1\1\0\12\1\1\0\5\1\2\0\1\2"+ + "\1\1\7\2\1\0\3\2\1\0\4\2\7\0\2\2\7\0\1\1"+ + "\1\0\2\1\2\2\2\0\12\3\1\0\2\1\17\0\2\2\1\0"+ + "\10\1\1\0\3\1\1\0\51\1\2\0\1\1\7\2\1\0\3\2"+ + "\1\0\4\2\1\1\10\0\1\2\10\0\2\1\2\2\2\0\12\3"+ + "\12\0\6\1\2\0\2\2\1\0\22\1\3\0\30\1\1\0\11\1"+ + "\1\0\1\1\2\0\7\1\3\0\1\2\4\0\6\2\1\0\1\2"+ + "\1\0\10\2\22\0\2\2\15\0\60\105\1\106\2\105\7\106\5\0"+ + "\7\105\10\106\1\0\12\3\47\0\2\105\1\0\1\105\2\0\2\105"+ + "\1\0\1\105\2\0\1\105\6\0\4\105\1\0\7\105\1\0\3\105"+ + "\1\0\1\105\1\0\1\105\2\0\2\105\1\0\4\105\1\106\2\105"+ + "\6\106\1\0\2\106\1\105\2\0\5\105\1\0\1\105\1\0\6\106"+ + "\2\0\12\3\2\0\2\105\42\0\1\1\27\0\2\2\6\0\12\3"+ + "\13\0\1\2\1\0\1\2\1\0\1\2\4\0\2\2\10\1\1\0"+ + "\44\1\4\0\24\2\1\0\2\2\5\1\13\2\1\0\44\2\11\0"+ + "\1\2\71\0\53\105\24\106\1\105\12\3\6\0\6\105\4\106\4\105"+ + "\3\106\1\105\3\106\2\105\7\106\3\105\4\106\15\105\14\106\1\105"+ + "\1\106\12\3\4\106\2\105\46\1\12\0\53\1\1\0\1\1\3\0"+ + "\u0149\1\1\0\4\1\2\0\7\1\1\0\1\1\1\0\4\1\2\0"+ + "\51\1\1\0\4\1\2\0\41\1\1\0\4\1\2\0\7\1\1\0"+ + "\1\1\1\0\4\1\2\0\17\1\1\0\71\1\1\0\4\1\2\0"+ + "\103\1\2\0\3\2\40\0\20\1\20\0\125\1\14\0\u026c\1\2\0"+ + "\21\1\1\0\32\1\5\0\113\1\3\0\3\1\17\0\15\1\1\0"+ + "\4\1\3\2\13\0\22\1\3\2\13\0\22\1\2\2\14\0\15\1"+ + "\1\0\3\1\1\0\2\2\14\0\64\105\40\106\3\0\1\105\4\0"+ + "\1\105\1\106\2\0\12\3\41\0\3\2\2\0\12\3\6\0\130\1"+ + "\10\0\51\1\1\2\1\1\5\0\106\1\12\0\35\1\3\0\14\2"+ + "\4\0\14\2\12\0\12\3\36\105\2\0\5\105\13\0\54\105\4\0"+ + "\21\106\7\105\2\106\6\0\12\3\1\105\3\0\2\105\40\0\27\1"+ + "\5\2\4\0\65\105\12\106\1\0\35\106\2\0\1\2\12\3\6\0"+ + "\12\3\6\0\16\105\122\0\5\2\57\1\21\2\7\1\4\0\12\3"+ + "\21\0\11\2\14\0\3\2\36\1\12\2\3\0\2\1\12\3\6\0"+ + "\46\1\16\2\14\0\44\1\24\2\10\0\12\3\3\0\3\1\12\3"+ + "\44\1\122\0\3\2\1\0\25\2\4\1\1\2\4\1\1\2\15\0"+ + "\300\1\47\2\25\0\4\2\u0116\1\2\0\6\1\2\0\46\1\2\0"+ + "\6\1\2\0\10\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+ + "\37\1\2\0\65\1\1\0\7\1\1\0\1\1\3\0\3\1\1\0"+ + "\7\1\3\0\4\1\2\0\6\1\4\0\15\1\5\0\3\1\1\0"+ + "\7\1\17\0\4\2\10\0\2\7\12\0\1\7\2\0\1\5\2\0"+ + "\5\2\20\0\2\10\3\0\1\6\17\0\1\10\13\0\5\2\5\0"+ + "\6\2\1\0\1\1\15\0\1\1\20\0\15\1\63\0\41\2\21\0"+ + "\1\1\4\0\1\1\2\0\12\1\1\0\1\1\3\0\5\1\6\0"+ + "\1\1\1\0\1\1\1\0\1\1\1\0\4\1\1\0\13\1\2\0"+ + "\4\1\5\0\5\1\4\0\1\1\21\0\51\1\u032d\0\64\1\u0716\0"+ + "\57\1\1\0\57\1\1\0\205\1\6\0\4\1\3\2\16\0\46\1"+ + "\12\0\66\1\11\0\1\1\17\0\1\2\27\1\11\0\7\1\1\0"+ + "\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0\7\1\1\0"+ + "\7\1\1\0\7\1\1\0\40\2\57\0\1\1\120\0\32\107\1\0"+ + "\131\107\14\0\326\107\57\0\1\1\1\0\1\107\31\0\11\107\6\2"+ + "\1\0\5\4\2\0\3\107\1\1\1\1\4\0\126\110\2\0\2\2"+ + "\2\4\3\110\133\4\1\0\4\4\5\0\51\1\3\0\136\1\21\0"+ + "\33\1\65\0\20\4\320\0\57\4\1\0\130\4\250\0\u19b6\107\112\0"+ + "\u51cc\107\64\0\u048d\1\103\0\56\1\2\0\u010d\1\3\0\20\1\12\3"+ + "\2\1\24\0\57\1\4\2\11\0\2\2\1\0\31\1\10\0\120\1"+ + "\2\2\45\0\11\1\2\0\147\1\2\0\4\1\1\0\2\1\16\0"+ + "\12\1\120\0\10\1\1\2\3\1\1\2\4\1\1\2\27\1\5\2"+ + "\30\0\64\1\14\0\2\2\62\1\21\2\13\0\12\3\6\0\22\2"+ + "\6\1\3\0\1\1\4\0\12\3\34\1\10\2\2\0\27\1\15\2"+ + "\14\0\35\1\3\0\4\2\57\1\16\2\16\0\1\1\12\3\46\0"+ + "\51\1\16\2\11\0\3\1\1\2\10\1\2\2\2\0\12\3\6\0"+ + "\33\105\1\106\4\0\60\105\1\106\1\105\3\106\2\105\2\106\5\105"+ + "\2\106\1\105\1\106\1\105\30\0\5\105\41\0\6\1\2\0\6\1"+ + "\2\0\6\1\11\0\7\1\1\0\7\1\221\0\43\1\10\2\1\0"+ + "\2\2\2\0\12\3\6\0\u2ba4\1\14\0\27\1\4\0\61\1\u2104\0"+ + "\u012e\107\2\0\76\107\2\0\152\107\46\0\7\1\14\0\5\1\5\0"+ + "\1\1\1\2\12\1\1\0\15\1\1\0\5\1\1\0\1\1\1\0"+ + "\2\1\1\0\2\1\1\0\154\1\41\0\u016b\1\22\0\100\1\2\0"+ + "\66\1\50\0\14\1\4\0\20\2\1\6\2\0\1\5\1\6\13\0"+ + "\7\2\14\0\2\10\30\0\3\10\1\6\1\0\1\7\1\0\1\6"+ + "\1\5\32\0\5\1\1\0\207\1\2\0\1\2\7\0\1\7\4\0"+ + "\1\6\1\0\1\7\1\0\12\3\1\5\1\6\5\0\32\1\4\0"+ + "\1\10\1\0\32\1\13\0\70\4\2\2\37\1\3\0\6\1\2\0"+ + "\6\1\2\0\6\1\2\0\3\1\34\0\3\2\4\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\0\1\1\1\2\1\3\1\2\2\1\3\2\3\3"+ + "\3\1\1\4\1\5\1\6\1\2\1\0\1\2\1\0"+ + "\1\3\6\0\2\2\1\0\3\2\1\0\1\3\1\0"+ + "\2\3\1\2\1\3\11\0\32\2\3\0\4\2\32\0"+ + "\4\3\10\0\1\7\1\0\6\10\3\2\2\10\1\2"+ + "\4\10\1\2\2\10\2\0\1\2\1\0\1\2\6\10"+ + "\3\0\2\10\1\0\4\10\1\0\2\10\1\0\2\3"+ + "\10\0\1\10\32\0\1\10\1\0\3\10\6\2\1\0"+ + "\1\2\2\0\1\2\1\0\1\10\10\0\3\3\15\0"+ + "\3\10\6\7\3\0\2\7\1\0\4\7\1\0\2\7"+ + "\2\10\1\0\2\10\1\0\2\10\1\0\1\10\2\2"+ + "\7\0\2\3\20\0\1\7\10\0\1\10\3\0\1\2"+ + "\32\0\3\10\23\0\1\10\27\0\1\10\4\0\1\10"+ + "\6\0\1\10\4\0\2\10\36\0\1\10\51\0\1\10"+ + "\42\0\1\10\50\0\1\10\122\0\1\10\116\0\1\10"+ + "\107\0\1\10\74\0\1\10\51\0\1\10\333\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[1117]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\111\0\222\0\333\0\u0124\0\u016d\0\u01b6\0\u01ff"+ + "\0\u0248\0\u0291\0\u02da\0\u0323\0\u036c\0\u03b5\0\u03fe\0\u0447"+ + "\0\u0490\0\111\0\111\0\u04d9\0\u0522\0\u056b\0\u05b4\0\u05fd"+ + "\0\u016d\0\u0646\0\u01b6\0\u068f\0\u06d8\0\u0721\0\u076a\0\u07b3"+ + "\0\u07fc\0\u0845\0\u088e\0\u08d7\0\u0920\0\u0969\0\u09b2\0\u09fb"+ + "\0\u0a44\0\u0a8d\0\u0ad6\0\u03b5\0\u0b1f\0\u0b68\0\u0447\0\u0bb1"+ + "\0\u0bfa\0\u0c43\0\u0c8c\0\u0cd5\0\u0d1e\0\u0d67\0\u0db0\0\u0df9"+ + "\0\u0e42\0\u0e8b\0\u0ed4\0\u0f1d\0\u0f66\0\u0faf\0\u0ff8\0\u1041"+ + "\0\u108a\0\u10d3\0\u111c\0\u1165\0\u11ae\0\u11f7\0\u1240\0\u1289"+ + "\0\u12d2\0\u131b\0\u1364\0\u13ad\0\u13f6\0\u143f\0\u1488\0\u14d1"+ + "\0\u151a\0\u1563\0\u15ac\0\u15f5\0\u163e\0\u1687\0\u16d0\0\u1719"+ + "\0\u1762\0\u17ab\0\u17f4\0\u183d\0\u1886\0\u18cf\0\u1918\0\u1961"+ + "\0\u19aa\0\u19f3\0\u1a3c\0\u1a85\0\u1ace\0\u1b17\0\u1b60\0\u1ba9"+ + "\0\u1bf2\0\u1c3b\0\u1c84\0\u1ccd\0\u1d16\0\u1d5f\0\u1da8\0\u1df1"+ + "\0\u1e3a\0\u1e83\0\u1ecc\0\u1f15\0\u1f5e\0\u1fa7\0\u1ff0\0\u2039"+ + "\0\u2082\0\u20cb\0\u2114\0\111\0\u215d\0\u21a6\0\u21ef\0\u2238"+ + "\0\u2281\0\u22ca\0\u2313\0\u235c\0\u23a5\0\u23ee\0\u2437\0\u2480"+ + "\0\u24c9\0\u2512\0\u255b\0\u25a4\0\u25ed\0\u2636\0\u267f\0\u26c8"+ + "\0\u2711\0\u275a\0\u27a3\0\u27ec\0\u2835\0\u287e\0\u28c7\0\u2910"+ + "\0\u2959\0\u29a2\0\u29eb\0\u2a34\0\u2a7d\0\u2ac6\0\u2b0f\0\u2b58"+ + "\0\u2ba1\0\u2bea\0\u2c33\0\u2c7c\0\u2cc5\0\u2d0e\0\u2d57\0\u2da0"+ + "\0\u2de9\0\u2e32\0\u2e7b\0\u2ec4\0\u2f0d\0\u2f56\0\u2f9f\0\u2fe8"+ + "\0\u3031\0\u307a\0\u30c3\0\u310c\0\u3155\0\u319e\0\u31e7\0\u3230"+ + "\0\u3279\0\u32c2\0\u330b\0\u3354\0\u339d\0\u33e6\0\u342f\0\u3478"+ + "\0\u34c1\0\u350a\0\u3553\0\u359c\0\u35e5\0\u362e\0\u3677\0\u36c0"+ + "\0\u3709\0\u3752\0\u379b\0\u37e4\0\u382d\0\u3876\0\u38bf\0\u3908"+ + "\0\u3951\0\u399a\0\u39e3\0\u3a2c\0\u3a75\0\u3abe\0\u3b07\0\u3b50"+ + "\0\u3b99\0\u3be2\0\u3c2b\0\u3c74\0\u3cbd\0\u3d06\0\u3d4f\0\u3d98"+ + "\0\u3de1\0\u3e2a\0\u3e73\0\u3ebc\0\u3f05\0\u3f4e\0\u3f97\0\u3fe0"+ + "\0\u4029\0\u4072\0\u40bb\0\u4104\0\u414d\0\u4196\0\u41df\0\u4228"+ + "\0\u4271\0\u42ba\0\u4303\0\u434c\0\u4395\0\u43de\0\u4427\0\u4470"+ + "\0\u44b9\0\u4502\0\u454b\0\u4594\0\u45dd\0\u4626\0\u466f\0\u46b8"+ + "\0\u4701\0\u474a\0\u4793\0\u47dc\0\u4825\0\u486e\0\u48b7\0\u4900"+ + "\0\u4949\0\u4992\0\u49db\0\u4a24\0\u4a6d\0\u4ab6\0\u4aff\0\u4b48"+ + "\0\u4b91\0\u4bda\0\u4c23\0\u4c6c\0\u4cb5\0\u4cfe\0\u4d47\0\u4d90"+ + "\0\u4dd9\0\u4e22\0\u4e6b\0\u4eb4\0\u4efd\0\u4f46\0\u4f8f\0\u4fd8"+ + "\0\u5021\0\u506a\0\u50b3\0\u50fc\0\u5145\0\u518e\0\u51d7\0\u5220"+ + "\0\u5269\0\u52b2\0\u52fb\0\u5344\0\u538d\0\u53d6\0\u541f\0\u5468"+ + "\0\u54b1\0\u54fa\0\u5543\0\u20cb\0\u558c\0\u55d5\0\u561e\0\u5667"+ + "\0\u56b0\0\u56f9\0\u5742\0\u578b\0\u57d4\0\u581d\0\u5866\0\u58af"+ + "\0\u58f8\0\u5941\0\u598a\0\u59d3\0\u5a1c\0\u5a65\0\u5aae\0\u5af7"+ + "\0\u5b40\0\u5b89\0\u5bd2\0\u5c1b\0\u5c64\0\u5cad\0\u5cf6\0\u5d3f"+ + "\0\u5d88\0\u5dd1\0\u5e1a\0\u5e63\0\u5eac\0\u5ef5\0\u5f3e\0\u5f87"+ + "\0\u5fd0\0\u6019\0\u6062\0\u60ab\0\u60f4\0\u613d\0\u6186\0\u61cf"+ + "\0\u6218\0\u6261\0\u62aa\0\u62f3\0\u633c\0\u6385\0\u63ce\0\u6417"+ + "\0\u6460\0\u64a9\0\u64f2\0\u653b\0\u6584\0\u65cd\0\u6616\0\u665f"+ + "\0\u66a8\0\u66f1\0\u673a\0\u6783\0\u67cc\0\u6815\0\u685e\0\u68a7"+ + "\0\u68f0\0\u6939\0\u6982\0\u69cb\0\u6a14\0\u6a5d\0\u6aa6\0\u6aef"+ + "\0\u6b38\0\u6b81\0\u6bca\0\u6c13\0\u6c5c\0\u6ca5\0\u6cee\0\u6d37"+ + "\0\u6d80\0\u6dc9\0\u6e12\0\u6e5b\0\u6ea4\0\u6eed\0\u6f36\0\u6f7f"+ + "\0\u6fc8\0\u7011\0\u705a\0\u70a3\0\u70ec\0\u7135\0\u717e\0\u71c7"+ + "\0\u7210\0\u03fe\0\u7259\0\u72a2\0\u72eb\0\u7334\0\u737d\0\u73c6"+ + "\0\u740f\0\u7458\0\u74a1\0\u74ea\0\u7533\0\u757c\0\u75c5\0\u760e"+ + "\0\u7657\0\u76a0\0\u76e9\0\u7732\0\u777b\0\u77c4\0\u780d\0\u7856"+ + "\0\u789f\0\u78e8\0\u7931\0\u797a\0\u79c3\0\u7a0c\0\u7a55\0\u7a9e"+ + "\0\u7ae7\0\u7b30\0\u7b79\0\u7bc2\0\u7c0b\0\u7c54\0\u7c9d\0\u7ce6"+ + "\0\u7d2f\0\u7d78\0\u7dc1\0\u7e0a\0\u7e53\0\u7e9c\0\u7ee5\0\u7f2e"+ + "\0\u7f77\0\u7fc0\0\u8009\0\u8052\0\u809b\0\u80e4\0\u812d\0\u8176"+ + "\0\u81bf\0\u8208\0\u8251\0\u829a\0\u82e3\0\u832c\0\u8375\0\u83be"+ + "\0\u8407\0\u8450\0\u8499\0\u84e2\0\u852b\0\u8574\0\u85bd\0\u8606"+ + "\0\u864f\0\u8698\0\u86e1\0\u872a\0\u8773\0\u87bc\0\u8805\0\u884e"+ + "\0\u8897\0\u88e0\0\u8929\0\u8972\0\u89bb\0\u8a04\0\u8a4d\0\u8a96"+ + "\0\u8adf\0\u8b28\0\u8b71\0\u8bba\0\u8c03\0\u8c4c\0\u8c95\0\u8cde"+ + "\0\u8d27\0\u8d70\0\u8db9\0\u8e02\0\u8e4b\0\u8e94\0\u8edd\0\u8f26"+ + "\0\u8f6f\0\u8fb8\0\u9001\0\u904a\0\u9093\0\u90dc\0\u9125\0\u916e"+ + "\0\u91b7\0\u9200\0\u9249\0\u9292\0\u92db\0\u9324\0\u936d\0\u93b6"+ + "\0\u93ff\0\u9448\0\u9491\0\u94da\0\u9523\0\u956c\0\u95b5\0\u95fe"+ + "\0\u9647\0\u9690\0\u96d9\0\u9722\0\u976b\0\u97b4\0\u97fd\0\u9846"+ + "\0\u988f\0\u98d8\0\u9921\0\u996a\0\u99b3\0\u99fc\0\u9a45\0\u9a8e"+ + "\0\u9ad7\0\u9b20\0\u9b69\0\u9bb2\0\u9bfb\0\u9c44\0\u9c8d\0\u9cd6"+ + "\0\u9d1f\0\u9d68\0\u9db1\0\u9dfa\0\u9e43\0\u9e8c\0\u9ed5\0\u9f1e"+ + "\0\u9f67\0\u9fb0\0\u9ff9\0\ua042\0\ua08b\0\ua0d4\0\ua11d\0\ua166"+ + "\0\ua1af\0\ua1f8\0\ua241\0\ua28a\0\ua2d3\0\ua31c\0\ua365\0\ua3ae"+ + "\0\ua3f7\0\ua440\0\ua489\0\ua4d2\0\ua51b\0\ua564\0\ua5ad\0\ua5f6"+ + "\0\ua63f\0\ua688\0\ua6d1\0\ua71a\0\ua763\0\ua7ac\0\ua7f5\0\ua83e"+ + "\0\ua887\0\ua8d0\0\ua919\0\ua962\0\ua9ab\0\ua9f4\0\uaa3d\0\uaa86"+ + "\0\uaacf\0\uab18\0\uab61\0\uabaa\0\uabf3\0\uac3c\0\uac85\0\uacce"+ + "\0\uad17\0\uad60\0\uada9\0\uadf2\0\uae3b\0\uae84\0\uaecd\0\uaf16"+ + "\0\uaf5f\0\uafa8\0\uaff1\0\ub03a\0\ub083\0\ub0cc\0\ub115\0\ub15e"+ + "\0\ub1a7\0\ub1f0\0\ub239\0\ub282\0\ub2cb\0\ub314\0\ub35d\0\ub3a6"+ + "\0\ub3ef\0\ub438\0\ub481\0\ub4ca\0\ub513\0\ub55c\0\ub5a5\0\ub5ee"+ + "\0\ub637\0\ub680\0\ub6c9\0\ub712\0\ub75b\0\ub7a4\0\ub7ed\0\ub836"+ + "\0\ub87f\0\ub8c8\0\ub911\0\ub95a\0\ub9a3\0\ub9ec\0\uba35\0\uba7e"+ + "\0\ubac7\0\ubb10\0\ubb59\0\ubba2\0\ubbeb\0\ubc34\0\ubc7d\0\ubcc6"+ + "\0\ubd0f\0\ubd58\0\ubda1\0\ubdea\0\ube33\0\ube7c\0\ubec5\0\ubf0e"+ + "\0\ubf57\0\ubfa0\0\ubfe9\0\uc032\0\uc07b\0\uc0c4\0\uc10d\0\uc156"+ + "\0\uc19f\0\uc1e8\0\uc231\0\uc27a\0\uc2c3\0\uc30c\0\uc355\0\uc39e"+ + "\0\uc3e7\0\uc430\0\uc479\0\uc4c2\0\uc50b\0\uc554\0\uc59d\0\uc5e6"+ + "\0\uc62f\0\uc678\0\uc6c1\0\uc70a\0\uc753\0\uc79c\0\uc7e5\0\uc82e"+ + "\0\uc877\0\uc8c0\0\uc909\0\uc952\0\uc99b\0\uc9e4\0\uca2d\0\uca76"+ + "\0\ucabf\0\ucb08\0\ucb51\0\ucb9a\0\ucbe3\0\ucc2c\0\ucc75\0\uccbe"+ + "\0\ucd07\0\ucd50\0\ucd99\0\ucde2\0\uce2b\0\uce74\0\ucebd\0\ucf06"+ + "\0\ucf4f\0\ucf98\0\ucfe1\0\ud02a\0\ud073\0\ud0bc\0\ud105\0\ud14e"+ + "\0\ud197\0\ud1e0\0\ud229\0\ud272\0\ud2bb\0\ud304\0\ud34d\0\ud396"+ + "\0\ud3df\0\ud428\0\ud471\0\ud4ba\0\ud503\0\ud54c\0\ud595\0\ud5de"+ + "\0\ud627\0\ud670\0\ud6b9\0\ud702\0\ud74b\0\ud794\0\ud7dd\0\ud826"+ + "\0\ud86f\0\ud8b8\0\ud901\0\ud94a\0\ud993\0\ud9dc\0\uda25\0\uda6e"+ + "\0\udab7\0\udb00\0\udb49\0\udb92\0\udbdb\0\udc24\0\udc6d\0\udcb6"+ + "\0\udcff\0\udd48\0\udd91\0\uddda\0\ude23\0\ude6c\0\udeb5\0\udefe"+ + "\0\udf47\0\udf90\0\udfd9\0\ue022\0\ue06b\0\ue0b4\0\ue0fd\0\ue146"+ + "\0\ue18f\0\ue1d8\0\ue221\0\ue26a\0\ue2b3\0\ue2fc\0\ue345\0\ue38e"+ + "\0\ue3d7\0\ue420\0\ue469\0\ue4b2\0\ue4fb\0\ue544\0\ue58d\0\ue5d6"+ + "\0\ue61f\0\ue668\0\ue6b1\0\ue6fa\0\ue743\0\ue78c\0\ue7d5\0\ue81e"+ + "\0\ue867\0\ue8b0\0\ue8f9\0\ue942\0\ue98b\0\ue9d4\0\uea1d\0\uea66"+ + "\0\ueaaf\0\ueaf8\0\ueb41\0\ueb8a\0\uebd3\0\uec1c\0\uec65\0\uecae"+ + "\0\uecf7\0\ued40\0\ued89\0\uedd2\0\uee1b\0\uee64\0\ueead\0\ueef6"+ + "\0\uef3f\0\uef88\0\uefd1\0\uf01a\0\uf063\0\uf0ac\0\uf0f5\0\uf13e"+ + "\0\uf187\0\uf1d0\0\uf219\0\uf262\0\uf2ab\0\uf2f4\0\uf33d\0\uf386"+ + "\0\uf3cf\0\uf418\0\uf461\0\uf4aa\0\uf4f3\0\uf53c\0\uf585\0\uf5ce"+ + "\0\uf617\0\uf660\0\uf6a9\0\uf6f2\0\uf73b\0\uf784\0\uf7cd\0\uf816"+ + "\0\uf85f\0\uf8a8\0\uf8f1\0\uf93a\0\uf983\0\uf9cc\0\ufa15\0\ufa5e"+ + "\0\ufaa7\0\ufaf0\0\ufb39\0\ufb82\0\ufbcb\0\ufc14\0\ufc5d\0\ufca6"+ + "\0\ufcef\0\ufd38\0\ufd81\0\ufdca\0\ufe13\0\ufe5c\0\ufea5\0\ufeee"+ + "\0\uff37\0\uff80\0\uffc9\1\22\1\133\1\244\1\355\1\u0136"+ + "\1\u017f\1\u01c8\1\u0211\1\u025a\1\u02a3\1\u02ec\1\u0335\1\u037e"+ + "\1\u03c7\1\u0410\1\u0459\1\u04a2\1\u04eb\1\u0534\1\u057d\1\u05c6"+ + "\1\u060f\1\u0658\1\u06a1\1\u06ea\1\u0733\1\u077c\1\u07c5\1\u080e"+ + "\1\u0857\1\u08a0\1\u08e9\1\u0932\1\u097b\1\u09c4\1\u0a0d\1\u0a56"+ + "\1\u0a9f\1\u0ae8\1\u0b31\1\u0b7a\1\u0bc3\1\u0c0c\1\u0c55\1\u0c9e"+ + "\1\u0ce7\1\u0d30\1\u0d79\1\u0dc2\1\u0e0b\1\u0e54\1\u0e9d\1\u0ee6"+ + "\1\u0f2f\1\u0f78\1\u0fc1\1\u100a\1\u1053\1\u109c\1\u10e5\1\u112e"+ + "\1\u1177\1\u11c0\1\u1209\1\u1252\1\u129b\1\u12e4\1\u132d\1\u1376"+ + "\1\u13bf\1\u1408\1\u1451\1\u149a\1\u14e3\1\u152c\1\u1575\1\u15be"+ + "\1\u1607\1\u1650\1\u1699\1\u16e2\1\u172b\1\u1774\1\u17bd\1\u1806"+ + "\1\u184f\1\u1898\1\u18e1\1\u192a\1\u1973\1\u19bc\1\u1a05\1\u1a4e"+ + "\1\u1a97\1\u1ae0\1\u1b29\1\u1b72\1\u1bbb\1\u1c04\1\u1c4d\1\u1c96"+ + "\1\u1cdf\1\u1d28\1\u1d71\1\u1dba\1\u1e03\1\u1e4c\1\u1e95\1\u1ede"+ + "\1\u1f27\1\u1f70\1\u1fb9\1\u2002\1\u204b\1\u2094\1\u20dd\1\u2126"+ + "\1\u216f\1\u21b8\1\u2201\1\u224a\1\u2293\1\u22dc\1\u2325\1\u236e"+ + "\1\u23b7\1\u2400\1\u2449\1\u2492\1\u24db\1\u2524\1\u256d\1\u25b6"+ + "\1\u25ff\1\u2648\1\u2691\1\u26da\1\u2723\1\u276c\1\u27b5\1\u27fe"+ + "\1\u2847\1\u2890\1\u28d9\1\u2922\1\u296b\1\u29b4\1\u29fd\1\u2a46"+ + "\1\u2a8f\1\u2ad8\1\u2b21\1\u2b6a\1\u2bb3\1\u2bfc\1\u2c45\1\u2c8e"+ + "\1\u2cd7\1\u2d20\1\u2d69\1\u2db2\1\u2dfb\1\u2e44\1\u2e8d\1\u2ed6"+ + "\1\u2f1f\1\u2f68\1\u2fb1\1\u2ffa\1\u3043\1\u308c\1\u30d5\1\u311e"+ + "\1\u3167\1\u31b0\1\u31f9\1\u3242\1\u328b\1\u32d4\1\u331d\1\u3366"+ + "\1\u33af\1\u33f8\1\u3441\1\u348a\1\u34d3\1\u351c\1\u3565\1\u35ae"+ + "\1\u35f7\1\u3640\1\u3689\1\u36d2\1\u371b\1\u3764\1\u37ad\1\u37f6"+ + "\1\u383f\1\u3888\1\u38d1\1\u391a\1\u3963\1\u39ac\1\u39f5\1\u3a3e"+ + "\1\u3a87\1\u3ad0\1\u3b19\1\u3b62\1\u3bab"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[1117]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\2\1\3\1\2\1\4\1\5\3\2\1\6\1\7"+ + "\6\10\1\11\16\10\1\12\4\10\1\7\1\13\2\14"+ + "\1\13\4\14\1\15\1\14\1\2\1\7\1\16\1\7"+ + "\1\2\2\7\1\2\3\7\1\17\2\2\1\7\1\20"+ + "\3\2\2\7\1\2\2\21\1\22\1\23\112\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\25\32\3"+ + "\1\0\12\24\1\25\1\0\1\26\3\0\1\25\20\0"+ + "\1\3\3\0\1\3\2\4\2\0\2\27\1\30\1\27"+ + "\32\3\1\0\12\4\2\0\1\30\2\0\2\27\6\0"+ + "\1\27\11\0\1\4\4\0\1\5\1\0\1\5\3\0"+ + "\1\26\50\0\1\26\24\0\1\5\3\0\1\3\1\31"+ + "\1\4\1\5\3\0\1\31\1\0\32\3\1\0\12\4"+ + "\2\0\1\31\24\0\1\31\13\0\1\32\45\33\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\6\0\2\3\1\24\1\0\1\25\1\0\1\25"+ + "\1\26\1\35\32\10\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\10\10\1\42\6\10"+ + "\1\43\12\10\1\36\12\37\1\25\1\33\1\40\1\33"+ + "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\35\17\10\1\44\12\10\1\36"+ + "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\1\3\2\4\2\0\2\27\1\30\1\45\32\10"+ + "\1\36\12\14\1\0\1\33\1\46\1\33\1\0\2\47"+ + "\1\34\3\33\2\0\1\27\1\33\4\0\2\33\2\0"+ + "\1\4\3\0\1\3\2\4\2\0\2\27\1\30\1\45"+ + "\32\10\1\36\12\50\1\0\1\33\1\46\1\33\1\0"+ + "\2\47\1\34\3\33\2\0\1\27\1\33\4\0\2\33"+ + "\2\0\1\4\3\0\1\3\2\4\2\0\2\27\1\30"+ + "\1\45\32\10\1\36\1\14\1\51\1\50\2\14\2\50"+ + "\2\14\1\50\1\0\1\33\1\46\1\33\1\0\2\47"+ + "\1\34\3\33\2\0\1\27\1\33\4\0\2\33\2\0"+ + "\1\4\3\0\1\3\1\31\1\4\1\5\3\0\1\31"+ + "\1\32\32\52\1\33\12\53\1\0\1\33\1\54\1\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\2\0\1\31\14\0\4\55\2\0\1\55\15\0\1\55"+ + "\6\0\12\55\1\56\42\0\65\57\1\60\1\57\1\61"+ + "\1\0\2\57\112\0\2\21\3\0\1\3\2\24\2\0"+ + "\2\62\1\26\1\62\32\3\1\0\12\24\2\0\1\26"+ + "\2\0\2\62\6\0\1\62\11\0\1\24\3\0\1\3"+ + "\1\25\7\0\32\3\42\0\1\25\3\0\1\3\1\26"+ + "\1\24\1\5\3\0\1\26\1\0\32\3\1\0\12\24"+ + "\2\0\1\26\24\0\1\26\4\0\1\27\1\4\41\0"+ + "\12\4\27\0\1\27\3\0\1\3\1\30\1\4\1\5"+ + "\3\0\1\30\1\0\32\3\1\0\12\4\2\0\1\30"+ + "\24\0\1\30\13\0\1\32\45\33\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\1\57\3\0\2\33"+ + "\17\0\32\63\1\0\12\63\13\0\1\64\17\0\1\3"+ + "\1\25\6\0\1\32\1\65\1\66\1\67\1\70\1\71"+ + "\1\72\1\73\1\74\1\75\1\76\1\77\1\100\1\101"+ + "\1\102\1\103\1\104\1\105\1\106\1\107\1\110\1\111"+ + "\1\112\1\113\1\114\1\115\1\116\1\33\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\1\57"+ + "\3\0\2\33\2\0\1\25\13\0\1\32\32\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\6\0\1\3\2\24\2\0\2\62"+ + "\1\26\1\120\32\10\1\36\12\37\1\0\1\33\1\40"+ + "\1\33\1\0\2\121\1\34\3\33\2\0\1\62\1\33"+ + "\4\0\2\33\2\0\1\24\3\0\1\3\1\26\1\24"+ + "\1\5\3\0\1\26\1\32\32\52\1\33\12\122\1\0"+ + "\1\33\1\40\1\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\2\0\1\26\3\0\1\3\1\25"+ + "\6\0\1\32\32\52\13\33\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\25"+ + "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\35\11\10\1\123\20\10\1\36\12\37\1\25\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\2\0\1\3\3\0\2\3\1\24"+ + "\1\0\1\25\1\0\1\25\1\26\1\35\15\10\1\124"+ + "\14\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ + "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ + "\1\25\1\26\1\35\17\10\1\125\12\10\1\36\12\37"+ + "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\4\0"+ + "\1\27\1\4\5\0\1\32\1\126\1\127\1\130\1\131"+ + "\1\132\1\133\1\134\1\135\1\136\1\137\1\140\1\141"+ + "\1\142\1\143\1\144\1\145\1\146\1\147\1\150\1\151"+ + "\1\152\1\153\1\154\1\155\1\156\1\157\1\33\1\160"+ + "\2\161\1\160\4\161\1\162\1\161\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\1\57\3\0\2\33"+ + "\2\0\1\27\3\0\1\3\1\30\1\4\1\5\3\0"+ + "\1\30\1\32\32\52\1\33\12\53\1\0\1\33\1\46"+ + "\1\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\30\4\0\1\27\1\4\5\0\1\32"+ + "\33\33\12\53\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\2\0\1\27\3\0\1\3"+ + "\2\4\2\0\2\27\1\30\1\45\32\10\1\36\12\163"+ + "\1\0\1\33\1\46\1\33\1\0\2\47\1\34\3\33"+ + "\2\0\1\27\1\33\4\0\2\33\2\0\1\4\3\0"+ + "\1\3\2\4\2\0\2\27\1\30\1\45\32\10\1\36"+ + "\2\50\1\163\2\50\2\163\2\50\1\163\1\0\1\33"+ + "\1\46\1\33\1\0\2\47\1\34\3\33\2\0\1\27"+ + "\1\33\4\0\2\33\2\0\1\4\3\0\2\3\1\24"+ + "\1\0\1\25\1\0\1\25\1\26\1\164\32\52\1\33"+ + "\12\122\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\1\3\2\4\2\0\2\27\1\30\1\165\32\52"+ + "\1\33\12\53\1\0\1\33\1\46\1\33\1\0\2\47"+ + "\1\34\3\33\2\0\1\27\1\33\4\0\2\33\2\0"+ + "\1\4\14\0\4\166\2\0\1\166\15\0\1\166\6\0"+ + "\12\166\1\167\110\0\1\170\42\0\1\171\54\0\1\34"+ + "\33\0\74\57\6\0\1\62\1\24\41\0\12\24\27\0"+ + "\1\62\13\0\1\172\32\63\1\173\12\63\43\0\61\64"+ + "\1\0\1\174\4\64\1\175\1\0\3\64\5\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\1\10"+ + "\2\176\1\177\1\200\10\176\1\10\1\201\5\176\6\10"+ + "\1\36\12\37\1\25\1\33\1\40\1\33\1\0\1\33"+ + "\1\41\1\34\3\33\3\0\1\33\4\0\2\33\2\0"+ + "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ + "\1\26\1\35\1\202\2\176\1\10\1\176\1\203\6\176"+ + "\4\10\1\176\1\10\2\176\1\10\1\176\1\10\3\176"+ + "\1\36\12\37\1\25\1\33\1\40\1\33\1\0\1\33"+ + "\1\41\1\34\3\33\3\0\1\33\4\0\2\33\2\0"+ + "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ + "\1\26\1\35\3\10\1\176\1\10\1\176\4\10\1\176"+ + "\10\10\1\176\2\10\1\176\2\10\1\176\1\36\12\37"+ + "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ + "\1\10\1\176\1\204\2\176\2\10\1\176\6\10\3\176"+ + "\11\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ + "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ + "\1\25\1\26\1\35\3\10\1\176\1\10\1\176\10\10"+ + "\1\176\1\10\2\176\10\10\1\36\12\37\1\25\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\2\0\1\3\3\0\2\3\1\24"+ + "\1\0\1\25\1\0\1\25\1\26\1\35\4\10\1\205"+ + "\5\10\1\176\17\10\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\4\10\2\176\2\10"+ + "\1\176\1\10\1\176\13\10\1\176\2\10\1\176\1\36"+ + "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\35\1\176\1\10\3\176\1\206\14\176\2\10\2\176"+ + "\2\10\1\176\1\10\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\2\10\4\176\3\10"+ + "\2\176\1\207\1\176\1\10\2\176\12\10\1\36\12\37"+ + "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ + "\2\176\2\10\1\176\3\10\1\176\5\10\3\176\3\10"+ + "\1\176\2\10\3\176\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\5\176\1\210\1\10"+ + "\1\176\1\211\7\176\1\212\3\176\1\10\1\176\1\10"+ + "\3\176\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ + "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ + "\1\25\1\26\1\35\1\213\1\176\1\10\1\202\6\176"+ + "\3\10\1\176\2\10\1\176\2\10\1\176\6\10\1\36"+ + "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\35\1\176\31\10\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\1\176\2\10\1\176"+ + "\1\214\1\10\2\176\1\10\3\176\2\10\2\176\1\10"+ + "\1\176\3\10\1\176\2\10\2\176\1\36\12\37\1\25"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\6\176"+ + "\1\10\5\176\3\10\2\176\2\10\7\176\1\36\12\37"+ + "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ + "\1\10\2\176\1\211\1\215\3\176\1\10\3\176\1\10"+ + "\1\176\1\10\1\176\1\10\1\176\1\10\1\176\1\10"+ + "\3\176\1\10\1\176\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\1\176\6\10\1\176"+ + "\6\10\1\176\4\10\1\176\4\10\2\176\1\36\12\37"+ + "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ + "\6\10\1\176\7\10\1\176\13\10\1\36\12\37\1\25"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\13\10"+ + "\1\216\16\10\1\36\12\37\1\25\1\33\1\40\1\33"+ + "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\35\1\176\11\10\1\176\6\10"+ + "\1\176\10\10\1\36\12\37\1\25\1\33\1\40\1\33"+ + "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\35\1\176\1\10\6\176\1\217"+ + "\1\10\2\176\2\10\2\176\1\10\1\176\1\10\6\176"+ + "\1\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ + "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ + "\1\25\1\26\1\35\4\10\1\176\5\10\2\176\3\10"+ + "\2\176\10\10\1\176\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\3\10\1\176\1\10"+ + "\1\220\4\10\1\176\2\10\1\176\14\10\1\36\12\37"+ + "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ + "\2\176\1\10\1\176\3\10\2\176\2\10\1\176\4\10"+ + "\1\176\11\10\1\36\12\37\1\25\1\33\1\40\1\33"+ + "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\35\3\10\1\176\13\10\1\176"+ + "\12\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ + "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ + "\1\25\1\26\1\35\3\10\2\176\2\10\2\176\1\10"+ + "\2\176\1\10\1\176\3\10\1\176\1\10\1\176\1\10"+ + "\1\176\2\10\1\176\1\10\1\36\12\37\1\25\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\2\0\1\3\13\0\1\221\32\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\7\0\1\62\1\24\5\0"+ + "\1\32\1\126\1\127\1\130\1\131\1\132\1\133\1\134"+ + "\1\135\1\136\1\137\1\140\1\141\1\142\1\143\1\144"+ + "\1\145\1\146\1\147\1\150\1\151\1\152\1\153\1\154"+ + "\1\155\1\156\1\157\1\33\12\37\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\1\57\3\0\2\33"+ + "\2\0\1\62\4\0\1\62\1\24\5\0\1\32\33\33"+ + "\12\122\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\2\0\1\62\3\0\1\3\2\24"+ + "\2\0\2\62\1\26\1\222\32\52\1\33\12\122\1\0"+ + "\1\33\1\40\1\33\1\0\2\121\1\34\3\33\2\0"+ + "\1\62\1\33\4\0\2\33\2\0\1\24\3\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\3\10"+ + "\1\223\26\10\1\36\12\37\1\25\1\33\1\40\1\33"+ + "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\35\32\10\1\36\12\37\1\224"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\15\10"+ + "\1\225\14\10\1\36\12\37\1\25\1\33\1\40\1\33"+ + "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\3\13\0\1\221\1\117\2\226\1\227"+ + "\1\230\10\226\1\117\1\231\5\226\6\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\1\232\2\226\1\117\1\226"+ + "\1\233\6\226\4\117\1\226\1\117\2\226\1\117\1\226"+ + "\1\117\3\226\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\3\117\1\226\1\117\1\226\4\117\1\226\10\117\1\226"+ + "\2\117\1\226\2\117\1\226\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\1\117\1\226\1\234\2\226\2\117\1\226"+ + "\6\117\3\226\11\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\3\117\1\226\1\117\1\226\10\117\1\226\1\117"+ + "\2\226\10\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\4\117\1\235\5\117\1\226\17\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\4\117\2\226\2\117\1\226\1\117"+ + "\1\226\13\117\1\226\2\117\1\226\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\1\226\1\117\3\226\1\236\14\226"+ + "\2\117\2\226\2\117\1\226\1\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\2\117\4\226\3\117\2\226\1\237"+ + "\1\226\1\117\2\226\12\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\2\226\2\117\1\226\3\117\1\226\5\117"+ + "\3\226\3\117\1\226\2\117\3\226\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\5\226\1\240\1\117\1\226\1\241"+ + "\7\226\1\242\3\226\1\117\1\226\1\117\3\226\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\1\243\1\226\1\117"+ + "\1\232\6\226\3\117\1\226\2\117\1\226\2\117\1\226"+ + "\6\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\226"+ + "\31\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\226"+ + "\2\117\1\226\1\244\1\117\2\226\1\117\3\226\2\117"+ + "\2\226\1\117\1\226\3\117\1\226\2\117\2\226\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\6\226\1\117\5\226"+ + "\3\117\2\226\2\117\7\226\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\1\117\2\226\1\241\1\245\3\226\1\117"+ + "\3\226\1\117\1\226\1\117\1\226\1\117\1\226\1\117"+ + "\1\226\1\117\3\226\1\117\1\226\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\1\226\6\117\1\226\6\117\1\226"+ + "\4\117\1\226\4\117\2\226\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\6\117\1\226\7\117\1\226\13\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\13\117\1\246\16\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\1\226\11\117"+ + "\1\226\6\117\1\226\10\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\1\226\1\117\6\226\1\247\1\117\2\226"+ + "\2\117\2\226\1\117\1\226\1\117\6\226\1\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\4\117\1\226\5\117"+ + "\2\226\3\117\2\226\10\117\1\226\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\3\117\1\226\1\117\1\250\4\117"+ + "\1\226\2\117\1\226\14\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\2\226\1\117\1\226\3\117\2\226\2\117"+ + "\1\226\4\117\1\226\11\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\3\117\1\226\13\117\1\226\12\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\3\117\2\226\2\117"+ + "\2\226\1\117\2\226\1\117\1\226\3\117\1\226\1\117"+ + "\1\226\1\117\1\226\2\117\1\226\1\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\6\0\1\3\2\4\2\0\2\27\1\30"+ + "\1\251\32\10\1\36\12\161\1\0\1\33\1\46\1\33"+ + "\1\0\2\47\1\34\3\33\2\0\1\27\1\33\4\0"+ + "\2\33\2\0\1\4\3\0\1\3\2\4\2\0\2\27"+ + "\1\30\1\251\32\10\1\36\12\252\1\0\1\33\1\46"+ + "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ + "\4\0\2\33\2\0\1\4\3\0\1\3\2\4\2\0"+ + "\2\27\1\30\1\251\32\10\1\36\1\161\1\253\1\252"+ + "\2\161\2\252\2\161\1\252\1\0\1\33\1\46\1\33"+ + "\1\0\2\47\1\34\3\33\2\0\1\27\1\33\4\0"+ + "\2\33\2\0\1\4\3\0\1\3\2\4\2\0\2\27"+ + "\1\30\1\254\32\10\1\36\12\163\1\0\1\33\1\46"+ + "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ + "\4\0\2\33\2\0\1\4\3\0\1\3\1\25\6\0"+ + "\1\32\32\52\13\33\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\1\57\3\0\2\33\2\0\1\25"+ + "\4\0\1\27\1\4\5\0\1\32\33\33\12\53\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\1\57"+ + "\3\0\2\33\2\0\1\27\14\0\4\255\2\0\1\255"+ + "\15\0\1\255\6\0\12\255\1\167\43\0\4\256\2\0"+ + "\1\256\15\0\1\256\6\0\12\256\1\257\43\0\4\260"+ + "\2\0\1\260\15\0\1\260\6\0\1\261\2\262\1\261"+ + "\4\262\1\263\1\262\14\0\1\264\26\0\46\33\1\0"+ + "\3\33\1\0\2\33\1\0\3\33\3\0\1\33\1\57"+ + "\3\0\2\33\17\0\1\265\1\266\1\267\1\270\1\271"+ + "\1\272\1\273\1\274\1\275\1\276\1\277\1\300\1\301"+ + "\1\302\1\303\1\304\1\305\1\306\1\307\1\310\1\311"+ + "\1\312\1\313\1\314\1\315\1\316\1\0\12\63\44\0"+ + "\32\63\1\173\12\63\43\0\74\64\5\0\2\3\1\24"+ + "\1\0\1\25\1\0\1\25\1\26\1\317\32\10\1\36"+ + "\12\37\1\320\1\33\1\40\1\33\1\0\1\33\1\41"+ + "\1\34\1\321\1\322\1\323\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ + "\1\25\1\26\1\317\4\10\1\324\25\10\1\36\12\37"+ + "\1\320\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\2\0"+ + "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ + "\1\26\1\317\15\10\1\101\14\10\1\36\12\37\1\320"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\1\321"+ + "\1\322\1\323\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\317\10\10\1\101\21\10\1\36\12\37\1\320\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\1\321\1\322"+ + "\1\323\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\317"+ + "\17\10\1\176\12\10\1\36\12\37\1\320\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\1\321\1\322\1\323"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\317\5\10"+ + "\1\325\4\10\1\176\17\10\1\36\12\37\1\320\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\1\321\1\322"+ + "\1\323\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ + "\20\10\1\176\11\10\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\7\10\1\176\22\10"+ + "\1\36\12\37\1\25\1\33\1\40\1\33\1\0\1\33"+ + "\1\41\1\34\3\33\3\0\1\33\4\0\2\33\2\0"+ + "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ + "\1\26\1\35\27\10\1\176\2\10\1\36\12\37\1\25"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\317\6\10"+ + "\1\324\10\10\1\176\12\10\1\36\12\37\1\320\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\1\321\1\322"+ + "\1\323\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\317"+ + "\24\10\1\326\5\10\1\36\12\37\1\320\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\1\321\1\322\1\323"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\11\10"+ + "\1\176\20\10\1\36\12\37\1\25\1\33\1\40\1\33"+ + "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\317\16\10\1\327\13\10\1\36"+ + "\12\37\1\320\1\33\1\40\1\33\1\0\1\33\1\41"+ + "\1\34\1\321\1\322\1\323\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ + "\1\25\1\26\1\317\12\10\1\330\17\10\1\36\12\37"+ + "\1\320\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\2\0"+ + "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ + "\1\26\1\317\5\10\1\176\24\10\1\36\12\37\1\320"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\1\321"+ + "\1\322\1\323\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\317\1\331\31\10\1\36\12\37\1\320\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\1\321\1\322\1\323"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\32\10"+ + "\1\332\12\37\1\25\1\33\1\40\1\33\1\0\1\33"+ + "\1\41\1\34\3\33\3\0\1\33\4\0\2\33\2\0"+ + "\1\3\3\0\2\3\1\24\1\0\1\25\1\0\1\25"+ + "\1\26\1\317\23\10\1\176\6\10\1\36\12\37\1\320"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\1\321"+ + "\1\322\1\323\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\317\24\10\1\333\5\10\1\36\12\37\1\320\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\1\321\1\322"+ + "\1\323\3\0\1\33\4\0\2\33\2\0\1\3\13\0"+ + "\1\32\1\126\1\127\1\130\1\131\1\132\1\133\1\134"+ + "\1\135\1\136\1\137\1\140\1\141\1\142\1\143\1\144"+ + "\1\145\1\146\1\147\1\150\1\151\1\152\1\153\1\154"+ + "\1\155\1\156\1\157\1\33\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\1\57\3\0\2\33"+ + "\7\0\1\62\1\24\5\0\1\32\33\33\12\122\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\1\57"+ + "\3\0\2\33\2\0\1\62\3\0\2\3\1\24\1\0"+ + "\1\25\1\0\1\25\1\26\1\35\32\10\1\36\12\37"+ + "\1\334\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\1\3\1\25\7\0\32\3\24\0\1\335\15\0\1\25"+ + "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\35\16\10\1\336\13\10\1\36\12\37\1\337\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\2\0\1\3\13\0\1\340\32\117"+ + "\1\36\12\117\1\341\3\33\1\0\2\33\1\34\1\321"+ + "\1\322\1\323\3\0\1\33\4\0\2\33\16\0\1\340"+ + "\4\117\1\342\25\117\1\36\12\117\1\341\3\33\1\0"+ + "\2\33\1\34\1\321\1\322\1\323\3\0\1\33\4\0"+ + "\2\33\16\0\1\340\15\117\1\142\14\117\1\36\12\117"+ + "\1\341\3\33\1\0\2\33\1\34\1\321\1\322\1\323"+ + "\3\0\1\33\4\0\2\33\16\0\1\340\10\117\1\142"+ + "\21\117\1\36\12\117\1\341\3\33\1\0\2\33\1\34"+ + "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\16\0"+ + "\1\340\17\117\1\226\12\117\1\36\12\117\1\341\3\33"+ + "\1\0\2\33\1\34\1\321\1\322\1\323\3\0\1\33"+ + "\4\0\2\33\16\0\1\340\5\117\1\343\4\117\1\226"+ + "\17\117\1\36\12\117\1\341\3\33\1\0\2\33\1\34"+ + "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\20\117\1\226\11\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\7\117\1\226\22\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\27\117\1\226\2\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\340\6\117\1\342\10\117\1\226"+ + "\12\117\1\36\12\117\1\341\3\33\1\0\2\33\1\34"+ + "\1\321\1\322\1\323\3\0\1\33\4\0\2\33\16\0"+ + "\1\340\24\117\1\344\5\117\1\36\12\117\1\341\3\33"+ + "\1\0\2\33\1\34\1\321\1\322\1\323\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\11\117\1\226\20\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\340\16\117\1\345\13\117"+ + "\1\36\12\117\1\341\3\33\1\0\2\33\1\34\1\321"+ + "\1\322\1\323\3\0\1\33\4\0\2\33\16\0\1\340"+ + "\12\117\1\346\17\117\1\36\12\117\1\341\3\33\1\0"+ + "\2\33\1\34\1\321\1\322\1\323\3\0\1\33\4\0"+ + "\2\33\16\0\1\340\5\117\1\226\24\117\1\36\12\117"+ + "\1\341\3\33\1\0\2\33\1\34\1\321\1\322\1\323"+ + "\3\0\1\33\4\0\2\33\16\0\1\340\1\347\31\117"+ + "\1\36\12\117\1\341\3\33\1\0\2\33\1\34\1\321"+ + "\1\322\1\323\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\32\117\1\332\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\340\23\117"+ + "\1\226\6\117\1\36\12\117\1\341\3\33\1\0\2\33"+ + "\1\34\1\321\1\322\1\323\3\0\1\33\4\0\2\33"+ + "\16\0\1\340\24\117\1\350\5\117\1\36\12\117\1\341"+ + "\3\33\1\0\2\33\1\34\1\321\1\322\1\323\3\0"+ + "\1\33\4\0\2\33\7\0\1\27\1\4\5\0\1\32"+ + "\1\126\1\127\1\130\1\131\1\132\1\133\1\134\1\135"+ + "\1\136\1\137\1\140\1\141\1\142\1\143\1\144\1\145"+ + "\1\146\1\147\1\150\1\151\1\152\1\153\1\154\1\155"+ + "\1\156\1\157\1\33\1\351\2\352\1\351\4\352\1\353"+ + "\1\352\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\1\57\3\0\2\33\2\0\1\27\3\0\1\3"+ + "\2\4\2\0\2\27\1\30\1\251\32\10\1\36\12\163"+ + "\1\0\1\33\1\46\1\33\1\0\2\47\1\34\3\33"+ + "\2\0\1\27\1\33\4\0\2\33\2\0\1\4\3\0"+ + "\1\3\2\4\2\0\2\27\1\30\1\251\32\10\1\36"+ + "\2\252\1\163\2\252\2\163\2\252\1\163\1\0\1\33"+ + "\1\46\1\33\1\0\2\47\1\34\3\33\2\0\1\27"+ + "\1\33\4\0\2\33\2\0\1\4\4\0\1\27\1\4"+ + "\5\0\1\32\1\126\1\127\1\130\1\131\1\132\1\133"+ + "\1\134\1\135\1\136\1\137\1\140\1\141\1\142\1\143"+ + "\1\144\1\145\1\146\1\147\1\150\1\151\1\152\1\153"+ + "\1\154\1\155\1\156\1\157\1\33\12\163\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\1\57\3\0"+ + "\2\33\2\0\1\27\14\0\4\354\2\0\1\354\15\0"+ + "\1\354\6\0\12\354\1\167\43\0\4\355\2\0\1\355"+ + "\15\0\1\355\6\0\12\355\1\356\43\0\4\357\2\0"+ + "\1\357\15\0\1\357\6\0\1\360\2\361\1\360\4\361"+ + "\1\362\1\361\14\0\1\264\27\0\4\363\2\0\1\363"+ + "\15\0\1\363\6\0\12\363\1\364\13\0\1\264\26\0"+ + "\1\365\4\363\2\0\1\363\15\0\1\363\6\0\12\366"+ + "\1\364\13\0\1\264\26\0\1\365\4\363\2\0\1\363"+ + "\15\0\1\363\6\0\12\367\1\364\13\0\1\264\26\0"+ + "\1\365\4\363\2\0\1\363\15\0\1\363\6\0\1\366"+ + "\1\370\1\367\2\366\2\367\2\366\1\367\1\364\13\0"+ + "\1\264\74\0\1\341\7\0\1\371\1\372\1\373\30\0"+ + "\1\172\1\63\2\374\1\375\1\376\10\374\1\63\1\377"+ + "\5\374\6\63\1\173\12\63\43\0\1\172\1\u0100\2\374"+ + "\1\63\1\374\1\u0101\6\374\4\63\1\374\1\63\2\374"+ + "\1\63\1\374\1\63\3\374\1\173\12\63\43\0\1\172"+ + "\3\63\1\374\1\63\1\374\4\63\1\374\10\63\1\374"+ + "\2\63\1\374\2\63\1\374\1\173\12\63\43\0\1\172"+ + "\1\63\1\374\1\u0102\2\374\2\63\1\374\6\63\3\374"+ + "\11\63\1\173\12\63\43\0\1\172\3\63\1\374\1\63"+ + "\1\374\10\63\1\374\1\63\2\374\10\63\1\173\12\63"+ + "\43\0\1\172\4\63\1\u0103\5\63\1\374\17\63\1\173"+ + "\12\63\43\0\1\172\4\63\2\374\2\63\1\374\1\63"+ + "\1\374\13\63\1\374\2\63\1\374\1\173\12\63\43\0"+ + "\1\172\1\374\1\63\3\374\1\u0104\14\374\2\63\2\374"+ + "\2\63\1\374\1\63\1\173\12\63\43\0\1\172\2\63"+ + "\4\374\3\63\2\374\1\u0105\1\374\1\63\2\374\12\63"+ + "\1\173\12\63\43\0\1\172\2\374\2\63\1\374\3\63"+ + "\1\374\5\63\3\374\3\63\1\374\2\63\3\374\1\173"+ + "\12\63\43\0\1\172\5\374\1\u0106\1\63\1\374\1\u0107"+ + "\7\374\1\u0108\3\374\1\63\1\374\1\63\3\374\1\173"+ + "\12\63\43\0\1\172\1\u0109\1\374\1\63\1\u0100\6\374"+ + "\3\63\1\374\2\63\1\374\2\63\1\374\6\63\1\173"+ + "\12\63\43\0\1\172\1\374\31\63\1\173\12\63\43\0"+ + "\1\172\1\374\2\63\1\374\1\u010a\1\63\2\374\1\63"+ + "\3\374\2\63\2\374\1\63\1\374\3\63\1\374\2\63"+ + "\2\374\1\173\12\63\43\0\1\172\6\374\1\63\5\374"+ + "\3\63\2\374\2\63\7\374\1\173\12\63\43\0\1\172"+ + "\1\63\2\374\1\u0107\1\u010b\3\374\1\63\3\374\1\63"+ + "\1\374\1\63\1\374\1\63\1\374\1\63\1\374\1\63"+ + "\3\374\1\63\1\374\1\173\12\63\43\0\1\172\1\374"+ + "\6\63\1\374\6\63\1\374\4\63\1\374\4\63\2\374"+ + "\1\173\12\63\43\0\1\172\6\63\1\374\7\63\1\374"+ + "\13\63\1\173\12\63\43\0\1\172\13\63\1\u010c\16\63"+ + "\1\173\12\63\43\0\1\172\1\374\11\63\1\374\6\63"+ + "\1\374\10\63\1\173\12\63\43\0\1\172\1\374\1\63"+ + "\6\374\1\u010d\1\63\2\374\2\63\2\374\1\63\1\374"+ + "\1\63\6\374\1\63\1\173\12\63\43\0\1\172\4\63"+ + "\1\374\5\63\2\374\3\63\2\374\10\63\1\374\1\173"+ + "\12\63\43\0\1\172\3\63\1\374\1\63\1\u010e\4\63"+ + "\1\374\2\63\1\374\14\63\1\173\12\63\43\0\1\172"+ + "\2\374\1\63\1\374\3\63\2\374\2\63\1\374\4\63"+ + "\1\374\11\63\1\173\12\63\43\0\1\172\3\63\1\374"+ + "\13\63\1\374\12\63\1\173\12\63\43\0\1\172\3\63"+ + "\2\374\2\63\2\374\1\63\2\374\1\63\1\374\3\63"+ + "\1\374\1\63\1\374\1\63\1\374\2\63\1\374\1\63"+ + "\1\173\12\63\33\0\1\3\1\25\6\0\1\32\1\65"+ + "\1\66\1\67\1\70\1\71\1\72\1\73\1\74\1\75"+ + "\1\76\1\77\1\100\1\101\1\102\1\103\1\104\1\105"+ + "\1\106\1\107\1\110\1\111\1\112\1\113\1\114\1\115"+ + "\1\116\1\33\12\117\1\341\3\33\1\0\2\33\1\34"+ + "\1\321\1\322\1\323\3\0\1\33\1\57\3\0\2\33"+ + "\2\0\1\25\3\0\1\3\1\25\7\0\32\3\1\0"+ + "\12\u010f\27\0\1\25\13\0\1\u0110\45\321\1\371\2\321"+ + "\1\u0111\1\371\2\321\1\u0112\2\321\1\323\2\0\1\371"+ + "\1\321\4\0\1\321\1\33\16\0\1\u0113\45\322\1\372"+ + "\2\322\1\u0114\1\0\2\33\1\u0115\1\321\1\322\1\323"+ + "\2\0\1\372\1\322\4\0\2\33\16\0\1\u0116\45\323"+ + "\1\373\2\323\1\u0117\1\373\2\323\1\u0118\2\323\1\33"+ + "\2\0\1\373\1\323\4\0\1\323\1\33\6\0\2\3"+ + "\1\24\1\0\1\25\1\0\1\25\1\26\1\35\5\10"+ + "\1\176\24\10\1\36\12\37\1\25\1\33\1\40\1\33"+ + "\1\0\1\33\1\41\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\2\0\1\3\3\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\35\15\10\1\176\14\10\1\36"+ + "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\35\10\10\1\176\21\10\1\36\12\37\1\25\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\2\0\1\3\3\0\2\3\1\24"+ + "\1\0\1\25\1\0\1\25\1\26\1\35\3\10\1\u0119"+ + "\26\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ + "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\3\0\2\3\1\24\1\0\1\25\1\0"+ + "\1\25\1\26\1\35\3\10\1\176\26\10\1\36\12\37"+ + "\1\25\1\33\1\40\1\33\1\0\1\33\1\41\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\2\0\1\3\3\0"+ + "\2\3\1\24\1\0\1\25\1\0\1\25\1\26\1\35"+ + "\27\10\1\u011a\2\10\1\36\12\37\1\25\1\33\1\40"+ + "\1\33\1\0\1\33\1\41\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\2\0\1\3\13\0\1\32\32\117\1\u011b"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\6\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\35\16\10\1\176\13\10\1\36"+ + "\12\37\1\25\1\33\1\40\1\33\1\0\1\33\1\41"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\2\0\1\3"+ + "\3\0\1\3\1\25\7\0\32\3\24\0\1\u011c\15\0"+ + "\1\25\72\0\1\u011d\21\0\2\3\1\24\1\0\1\25"+ + "\1\0\1\25\1\26\1\35\32\10\1\36\12\37\1\337"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\3\0\1\3"+ + "\1\25\7\0\32\3\24\0\1\u011e\15\0\1\25\13\0"+ + "\1\32\1\126\1\127\1\130\1\131\1\132\1\133\1\134"+ + "\1\135\1\136\1\137\1\140\1\141\1\142\1\143\1\144"+ + "\1\145\1\146\1\147\1\150\1\151\1\152\1\153\1\154"+ + "\1\155\1\156\1\157\1\33\12\117\1\341\3\33\1\0"+ + "\2\33\1\34\1\321\1\322\1\323\3\0\1\33\1\57"+ + "\3\0\2\33\52\0\12\u010f\43\0\1\221\5\117\1\226"+ + "\24\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\15\117"+ + "\1\226\14\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\10\117\1\226\21\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\3\117\1\u011f\26\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\3\117\1\226\26\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\27\117\1\u0120\2\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\16\117\1\226\13\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\6\0\1\3\2\4\2\0\2\27"+ + "\1\30\1\u0121\32\10\1\36\12\352\1\0\1\33\1\46"+ + "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ + "\4\0\2\33\2\0\1\4\3\0\1\3\2\4\2\0"+ + "\2\27\1\30\1\u0121\32\10\1\36\12\u0122\1\0\1\33"+ + "\1\46\1\33\1\0\2\47\1\34\3\33\2\0\1\27"+ + "\1\33\4\0\2\33\2\0\1\4\3\0\1\3\2\4"+ + "\2\0\2\27\1\30\1\u0121\32\10\1\36\1\352\1\u0123"+ + "\1\u0122\2\352\2\u0122\2\352\1\u0122\1\0\1\33\1\46"+ + "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ + "\4\0\2\33\2\0\1\4\61\0\1\167\43\0\4\u0124"+ + "\2\0\1\u0124\15\0\1\u0124\6\0\12\u0124\1\356\43\0"+ + "\4\u0125\2\0\1\u0125\15\0\1\u0125\6\0\12\u0125\1\u0126"+ + "\43\0\4\u0127\2\0\1\u0127\15\0\1\u0127\6\0\12\u0127"+ + "\1\u0128\13\0\1\264\26\0\1\365\4\u0127\2\0\1\u0127"+ + "\15\0\1\u0127\6\0\12\u0129\1\u0128\13\0\1\264\26\0"+ + "\1\365\4\u0127\2\0\1\u0127\15\0\1\u0127\6\0\12\u012a"+ + "\1\u0128\13\0\1\264\26\0\1\365\4\u0127\2\0\1\u0127"+ + "\15\0\1\u0127\6\0\1\u0129\1\u012b\1\u012a\2\u0129\2\u012a"+ + "\2\u0129\1\u012a\1\u0128\13\0\1\264\27\0\4\u012c\2\0"+ + "\1\u012c\15\0\1\u012c\6\0\12\u012c\1\364\13\0\1\264"+ + "\27\0\4\357\2\0\1\357\15\0\1\357\6\0\1\360"+ + "\2\361\1\360\4\361\1\362\1\361\77\0\1\u012d\2\u012e"+ + "\1\u012d\4\u012e\1\u012f\1\u012e\43\0\1\365\4\u012c\2\0"+ + "\1\u012c\15\0\1\u012c\6\0\12\u0130\1\364\13\0\1\264"+ + "\26\0\1\365\4\u012c\2\0\1\u012c\15\0\1\u012c\6\0"+ + "\12\u012c\1\364\13\0\1\264\26\0\1\365\4\u012c\2\0"+ + "\1\u012c\15\0\1\u012c\6\0\2\u0130\1\u012c\2\u0130\2\u012c"+ + "\2\u0130\1\u012c\1\364\13\0\1\264\26\0\51\371\1\u0131"+ + "\6\371\1\373\2\0\2\371\4\0\1\371\17\0\51\372"+ + "\1\u0132\3\0\1\372\1\371\1\372\1\373\2\0\2\372"+ + "\24\0\51\373\1\u0133\6\373\3\0\2\373\4\0\1\373"+ + "\17\0\1\u0134\32\63\1\173\12\63\43\0\1\u0134\4\63"+ + "\1\u0135\25\63\1\173\12\63\43\0\1\u0134\15\63\1\301"+ + "\14\63\1\173\12\63\43\0\1\u0134\10\63\1\301\21\63"+ + "\1\173\12\63\43\0\1\u0134\17\63\1\374\12\63\1\173"+ + "\12\63\43\0\1\u0134\5\63\1\u0136\4\63\1\374\17\63"+ + "\1\173\12\63\43\0\1\172\20\63\1\374\11\63\1\173"+ + "\12\63\43\0\1\172\7\63\1\374\22\63\1\173\12\63"+ + "\43\0\1\172\27\63\1\374\2\63\1\173\12\63\43\0"+ + "\1\u0134\6\63\1\u0135\10\63\1\374\12\63\1\173\12\63"+ + "\43\0\1\u0134\24\63\1\u0137\5\63\1\173\12\63\43\0"+ + "\1\172\11\63\1\374\20\63\1\173\12\63\43\0\1\u0134"+ + "\16\63\1\u0138\13\63\1\173\12\63\43\0\1\u0134\12\63"+ + "\1\u0139\17\63\1\173\12\63\43\0\1\u0134\5\63\1\374"+ + "\24\63\1\173\12\63\43\0\1\u0134\1\u013a\31\63\1\173"+ + "\12\63\43\0\1\172\32\63\1\u013b\12\63\43\0\1\u0134"+ + "\23\63\1\374\6\63\1\173\12\63\43\0\1\u0134\24\63"+ + "\1\u013c\5\63\1\173\12\63\77\0\12\u013d\10\0\1\371"+ + "\1\372\1\373\30\0\1\u0110\45\321\1\371\2\321\1\u0111"+ + "\1\371\2\321\1\u0112\2\321\1\323\2\0\1\371\1\321"+ + "\1\57\3\0\1\321\1\33\16\0\1\32\4\u013e\2\33"+ + "\1\u013e\15\33\1\u013e\6\33\12\u013e\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\51\371\1\u0131\6\371\1\373\1\64\1\0\2\371\4\0"+ + "\1\371\17\0\1\u0113\45\322\1\372\2\322\1\u0114\1\0"+ + "\2\33\1\u0115\1\321\1\322\1\323\2\0\1\372\1\322"+ + "\1\57\3\0\2\33\16\0\1\32\4\u013f\2\33\1\u013f"+ + "\15\33\1\u013f\6\33\12\u013f\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\51\372"+ + "\1\u0132\3\0\1\372\1\371\1\372\1\373\1\64\1\0"+ + "\2\372\24\0\1\u0116\45\323\1\373\2\323\1\u0117\1\373"+ + "\2\323\1\u0118\2\323\1\33\2\0\1\373\1\323\1\57"+ + "\3\0\1\323\1\33\16\0\1\32\4\u0140\2\33\1\u0140"+ + "\15\33\1\u0140\6\33\12\u0140\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\51\373"+ + "\1\u0133\6\373\1\0\1\64\1\0\2\373\4\0\1\373"+ + "\7\0\2\3\1\24\1\0\1\25\1\0\1\25\1\26"+ + "\1\35\20\10\1\u0141\11\10\1\36\12\37\1\25\1\33"+ + "\1\40\1\33\1\0\1\33\1\41\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\2\0\1\3\3\0\2\3\1\24"+ + "\1\0\1\25\1\0\1\25\1\26\1\35\3\10\1\211"+ + "\26\10\1\36\12\37\1\25\1\33\1\40\1\33\1\0"+ + "\1\33\1\41\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\2\0\1\3\13\0\1\32\2\117\1\u0142\2\117\1\u0143"+ + "\1\u0144\1\u0145\2\117\1\u0146\2\117\1\u0147\3\117\1\u0148"+ + "\1\u0149\1\u014a\1\117\1\u014b\1\u014c\1\117\1\u014d\1\u014e"+ + "\1\36\1\u014f\2\117\1\u0150\1\117\1\u0151\1\u0152\3\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\75\0\1\u0153\31\0\1\u0154\32\u0155\1\u0154"+ + "\12\u0155\1\u0156\2\u0154\1\u0157\3\u0154\1\u0158\3\0\1\u0159"+ + "\1\0\2\u0154\4\0\1\u0154\76\0\1\u015a\31\0\1\221"+ + "\20\117\1\u015b\11\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\3\117\1\241\26\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\7\0\1\27\1\4\5\0\1\32\1\126\1\127\1\130"+ + "\1\131\1\132\1\133\1\134\1\135\1\136\1\137\1\140"+ + "\1\141\1\142\1\143\1\144\1\145\1\146\1\147\1\150"+ + "\1\151\1\152\1\153\1\154\1\155\1\156\1\157\1\33"+ + "\1\u015c\2\u015d\1\u015c\4\u015d\1\u015e\1\u015d\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\1\57\3\0"+ + "\2\33\2\0\1\27\3\0\1\3\2\4\2\0\2\27"+ + "\1\30\1\u0121\32\10\1\36\12\163\1\0\1\33\1\46"+ + "\1\33\1\0\2\47\1\34\3\33\2\0\1\27\1\33"+ + "\4\0\2\33\2\0\1\4\3\0\1\3\2\4\2\0"+ + "\2\27\1\30\1\u0121\32\10\1\36\2\u0122\1\163\2\u0122"+ + "\2\163\2\u0122\1\163\1\0\1\33\1\46\1\33\1\0"+ + "\2\47\1\34\3\33\2\0\1\27\1\33\4\0\2\33"+ + "\2\0\1\4\14\0\4\u015f\2\0\1\u015f\15\0\1\u015f"+ + "\6\0\12\u015f\1\356\43\0\4\u0160\2\0\1\u0160\15\0"+ + "\1\u0160\6\0\12\u0160\1\u0161\43\0\4\u0162\2\0\1\u0162"+ + "\15\0\1\u0162\6\0\1\u0163\2\u0164\1\u0163\4\u0164\1\u0165"+ + "\1\u0164\14\0\1\264\27\0\4\u0166\2\0\1\u0166\15\0"+ + "\1\u0166\6\0\12\u0166\1\u0128\13\0\1\264\27\0\4\u0162"+ + "\2\0\1\u0162\15\0\1\u0162\6\0\1\u0163\2\u0164\1\u0163"+ + "\4\u0164\1\u0165\1\u0164\43\0\1\365\4\u0166\2\0\1\u0166"+ + "\15\0\1\u0166\6\0\12\u0167\1\u0128\13\0\1\264\26\0"+ + "\1\365\4\u0166\2\0\1\u0166\15\0\1\u0166\6\0\12\u0166"+ + "\1\u0128\13\0\1\264\26\0\1\365\4\u0166\2\0\1\u0166"+ + "\15\0\1\u0166\6\0\2\u0167\1\u0166\2\u0167\2\u0166\2\u0167"+ + "\1\u0166\1\u0128\13\0\1\264\27\0\4\u0168\2\0\1\u0168"+ + "\15\0\1\u0168\6\0\12\u0168\1\364\13\0\1\264\26\0"+ + "\1\u0169\33\0\12\u012e\43\0\1\u0169\33\0\12\u016a\43\0"+ + "\1\u0169\33\0\1\u012e\1\u016b\1\u016a\2\u012e\2\u016a\2\u012e"+ + "\1\u016a\43\0\1\365\4\u0168\2\0\1\u0168\15\0\1\u0168"+ + "\6\0\12\u0168\1\364\13\0\1\264\27\0\4\u016c\2\0"+ + "\1\u016c\15\0\1\u016c\6\0\12\u016c\44\0\4\u016d\2\0"+ + "\1\u016d\15\0\1\u016d\6\0\12\u016d\44\0\4\u016e\2\0"+ + "\1\u016e\15\0\1\u016e\6\0\12\u016e\43\0\1\172\5\63"+ + "\1\374\24\63\1\173\12\63\43\0\1\172\15\63\1\374"+ + "\14\63\1\173\12\63\43\0\1\172\10\63\1\374\21\63"+ + "\1\173\12\63\43\0\1\172\3\63\1\u016f\26\63\1\173"+ + "\12\63\43\0\1\172\3\63\1\374\26\63\1\173\12\63"+ + "\43\0\1\172\27\63\1\u0170\2\63\1\173\12\63\44\0"+ + "\32\63\1\u0171\12\63\43\0\1\172\16\63\1\374\13\63"+ + "\1\173\12\63\77\0\12\u0172\10\0\1\371\1\372\1\373"+ + "\30\0\1\32\4\321\2\33\1\321\15\33\1\321\6\33"+ + "\12\321\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\32\4\322\2\33\1\322"+ + "\15\33\1\322\6\33\12\322\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\32"+ + "\4\323\2\33\1\323\15\33\1\323\6\33\12\323\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\6\0\2\3\1\24\1\0\1\25\1\0\1\25"+ + "\1\26\1\35\12\10\1\176\17\10\1\36\12\37\1\25"+ + "\1\33\1\40\1\33\1\0\1\33\1\41\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\2\0\1\3\13\0\1\221"+ + "\3\117\1\u0173\26\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\32\117\1\36\4\117\1\u0174\5\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\10\117\1\u0175\12\117\1\u0176\6\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\2\117"+ + "\1\u0177\7\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\7\117\1\u0178"+ + "\22\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\7\117"+ + "\1\u0179\22\117\1\36\3\117\1\u017a\6\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\7\117\1\u017b\22\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\31\117\1\u017c\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\1\117\1\u017d\30\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\7\117\1\u017e\1\117\1\u017f"+ + "\20\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\22\117"+ + "\1\u0180\7\117\1\36\2\117\1\u0181\7\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\7\117\1\u0182\22\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\7\117\1\u0183\5\117\1\u0184\14\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\23\117\1\u0185"+ + "\6\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ + "\1\36\3\117\1\u0186\6\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\17\117\1\u0187\12\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\32\117\1\36\1\u0188\11\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\17\0"+ + "\32\u0189\1\0\12\u0189\11\0\1\u018a\1\0\1\u018b\27\0"+ + "\46\u0154\1\u0156\2\u0154\1\u0157\3\u0154\1\u0158\5\0\2\u0154"+ + "\4\0\1\u0154\17\0\1\u018c\32\u0155\1\u018d\12\u0155\1\u018e"+ + "\2\u0154\1\u0157\3\u0154\1\u0158\1\0\1\u018f\3\0\2\u0154"+ + "\4\0\1\u0154\17\0\46\u0156\1\0\2\u0156\1\u0190\3\u0156"+ + "\1\u0158\5\0\2\u0156\4\0\1\u0156\20\0\4\u0191\2\0"+ + "\1\u0191\15\0\1\u0191\6\0\12\u0191\44\0\32\u0192\1\0"+ + "\12\u0192\13\0\1\u0159\30\0\4\u0193\2\0\1\u0193\15\0"+ + "\1\u0193\6\0\12\u0193\1\u0194\42\0\1\u0195\32\u0196\1\u0195"+ + "\12\u0196\1\u0197\2\u0195\1\u0198\3\u0195\1\u0199\3\0\1\u019a"+ + "\1\0\2\u0195\4\0\1\u0195\17\0\1\221\12\117\1\226"+ + "\17\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\6\0\1\3\2\4"+ + "\2\0\2\27\1\30\1\254\32\10\1\36\12\u015d\1\341"+ + "\1\33\1\46\1\33\1\0\2\47\1\34\1\321\1\322"+ + "\1\323\2\0\1\27\1\33\4\0\2\33\2\0\1\4"+ + "\3\0\1\3\2\4\2\0\2\27\1\30\1\254\32\10"+ + "\1\36\12\u019b\1\341\1\33\1\46\1\33\1\0\2\47"+ + "\1\34\1\321\1\322\1\323\2\0\1\27\1\33\4\0"+ + "\2\33\2\0\1\4\3\0\1\3\2\4\2\0\2\27"+ + "\1\30\1\254\32\10\1\36\1\u015d\1\u019c\1\u019b\2\u015d"+ + "\2\u019b\2\u015d\1\u019b\1\341\1\33\1\46\1\33\1\0"+ + "\2\47\1\34\1\321\1\322\1\323\2\0\1\27\1\33"+ + "\4\0\2\33\2\0\1\4\61\0\1\356\43\0\4\u019d"+ + "\2\0\1\u019d\15\0\1\u019d\6\0\12\u019d\1\u0161\43\0"+ + "\4\u019e\2\0\1\u019e\15\0\1\u019e\6\0\12\u019e\1\u019f"+ + "\43\0\4\u01a0\2\0\1\u01a0\15\0\1\u01a0\6\0\12\u01a0"+ + "\1\u01a1\13\0\1\264\26\0\1\365\4\u01a0\2\0\1\u01a0"+ + "\15\0\1\u01a0\6\0\12\u01a2\1\u01a1\13\0\1\264\26\0"+ + "\1\365\4\u01a0\2\0\1\u01a0\15\0\1\u01a0\6\0\12\u01a3"+ + "\1\u01a1\13\0\1\264\26\0\1\365\4\u01a0\2\0\1\u01a0"+ + "\15\0\1\u01a0\6\0\1\u01a2\1\u01a4\1\u01a3\2\u01a2\2\u01a3"+ + "\2\u01a2\1\u01a3\1\u01a1\13\0\1\264\27\0\4\u01a5\2\0"+ + "\1\u01a5\15\0\1\u01a5\6\0\12\u01a5\1\u0128\13\0\1\264"+ + "\26\0\1\365\4\u01a5\2\0\1\u01a5\15\0\1\u01a5\6\0"+ + "\12\u01a5\1\u0128\13\0\1\264\74\0\1\364\13\0\1\264"+ + "\62\0\1\u01a6\2\u01a7\1\u01a6\4\u01a7\1\u01a8\1\u01a7\43\0"+ + "\1\u0169\110\0\1\u0169\33\0\2\u016a\1\0\2\u016a\2\0"+ + "\2\u016a\45\0\4\371\2\0\1\371\15\0\1\371\6\0"+ + "\12\371\44\0\4\372\2\0\1\372\15\0\1\372\6\0"+ + "\12\372\44\0\4\373\2\0\1\373\15\0\1\373\6\0"+ + "\12\373\43\0\1\172\20\63\1\u01a9\11\63\1\173\12\63"+ + "\43\0\1\172\3\63\1\u0107\26\63\1\173\12\63\44\0"+ + "\2\63\1\u01aa\2\63\1\u01ab\1\u01ac\1\u01ad\2\63\1\u01ae"+ + "\2\63\1\u01af\3\63\1\u01b0\1\u01b1\1\u01b2\1\63\1\u01b3"+ + "\1\u01b4\1\63\1\u01b5\1\u01b6\1\173\1\u01b7\2\63\1\u01b8"+ + "\1\63\1\u01b9\1\u01ba\3\63\77\0\12\u01bb\10\0\1\371"+ + "\1\372\1\373\30\0\1\221\24\117\1\u01bc\5\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\1\117\1\u01bd\30\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\14\117\1\u01be"+ + "\15\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\117"+ + "\1\u01bf\30\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\21\117\1\u01c0\10\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\24\117\1\u01c1\5\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\24\117\1\u01c2\5\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\1\344\31\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\24\117\1\u01c3\5\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\1\117\1\u01c4\30\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\31\117\1\u01c5\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\24\117\1\u01c6\5\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\1\117\1\u01c7"+ + "\30\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\u01c8"+ + "\31\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\21\117"+ + "\1\u01c9\10\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\24\117\1\u01ca\5\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\24\117\1\u01cb\5\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\4\117\1\u01cc\25\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\21\117\1\u01cd\10\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\24\117\1\u01ce\5\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\7\117"+ + "\1\u01cf\2\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\1\u01d0\31\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\u01d1\32\u0189\1\u01d2"+ + "\12\u0189\11\0\1\u018a\31\0\51\u018a\1\u01d3\3\0\3\u018a"+ + "\1\373\3\0\1\u018a\25\0\4\u01d4\2\0\1\u01d4\15\0"+ + "\1\u01d4\6\0\12\u01d4\1\u01d5\42\0\1\u0154\32\u0155\1\u0154"+ + "\12\u0155\1\u0156\2\u0154\1\u0157\3\u0154\1\u0158\5\0\2\u0154"+ + "\4\0\1\u0154\17\0\1\u0154\32\u0155\1\u018d\12\u0155\1\u0156"+ + "\2\u0154\1\u0157\3\u0154\1\u0158\5\0\2\u0154\4\0\1\u0154"+ + "\17\0\34\u0156\12\u01d6\1\0\2\u0156\1\u0190\3\u0156\1\u0158"+ + "\5\0\2\u0156\4\0\1\u0156\17\0\51\u018f\1\u01d7\3\0"+ + "\3\u018f\1\373\2\0\1\u01d8\1\u018f\25\0\4\u01d9\2\0"+ + "\1\u01d9\15\0\1\u01d9\6\0\12\u01d9\44\0\4\u0154\2\0"+ + "\1\u0154\15\0\1\u0154\6\0\12\u0154\43\0\1\u01da\32\u0192"+ + "\1\u01db\12\u0192\1\u01dc\10\0\1\u018f\32\0\4\u01dd\2\0"+ + "\1\u01dd\15\0\1\u01dd\6\0\12\u01dd\1\u01de\110\0\1\u01df"+ + "\42\0\46\u0195\1\u0197\2\u0195\1\u0198\3\u0195\1\u0199\5\0"+ + "\2\u0195\4\0\1\u0195\17\0\1\u01e0\32\u0196\1\u01e1\12\u0196"+ + "\1\u01e2\2\u0195\1\u0198\3\u0195\1\u0199\1\371\1\372\1\373"+ + "\2\0\2\u0195\4\0\1\u0195\17\0\46\u0197\1\0\2\u0197"+ + "\1\u01e3\3\u0197\1\u0199\5\0\2\u0197\4\0\1\u0197\20\0"+ + "\4\u01e4\2\0\1\u01e4\15\0\1\u01e4\6\0\12\u01e4\44\0"+ + "\32\u01e5\1\0\12\u01e5\13\0\1\u019a\17\0\1\3\2\4"+ + "\2\0\2\27\1\30\1\254\32\10\1\36\12\163\1\341"+ + "\1\33\1\46\1\33\1\0\2\47\1\34\1\321\1\322"+ + "\1\323\2\0\1\27\1\33\4\0\2\33\2\0\1\4"+ + "\3\0\1\3\2\4\2\0\2\27\1\30\1\254\32\10"+ + "\1\36\2\u019b\1\163\2\u019b\2\163\2\u019b\1\163\1\341"+ + "\1\33\1\46\1\33\1\0\2\47\1\34\1\321\1\322"+ + "\1\323\2\0\1\27\1\33\4\0\2\33\2\0\1\4"+ + "\14\0\4\u01e6\2\0\1\u01e6\15\0\1\u01e6\6\0\12\u01e6"+ + "\1\u0161\43\0\4\u01e7\2\0\1\u01e7\15\0\1\u01e7\6\0"+ + "\12\u01e7\1\u01e8\43\0\4\u01e9\2\0\1\u01e9\15\0\1\u01e9"+ + "\6\0\1\u01ea\2\u01eb\1\u01ea\4\u01eb\1\u01ec\1\u01eb\14\0"+ + "\1\264\27\0\4\u01ed\2\0\1\u01ed\15\0\1\u01ed\6\0"+ + "\12\u01ed\1\u01a1\13\0\1\264\27\0\4\u01e9\2\0\1\u01e9"+ + "\15\0\1\u01e9\6\0\1\u01ea\2\u01eb\1\u01ea\4\u01eb\1\u01ec"+ + "\1\u01eb\43\0\1\365\4\u01ed\2\0\1\u01ed\15\0\1\u01ed"+ + "\6\0\12\u01ee\1\u01a1\13\0\1\264\26\0\1\365\4\u01ed"+ + "\2\0\1\u01ed\15\0\1\u01ed\6\0\12\u01ed\1\u01a1\13\0"+ + "\1\264\26\0\1\365\4\u01ed\2\0\1\u01ed\15\0\1\u01ed"+ + "\6\0\2\u01ee\1\u01ed\2\u01ee\2\u01ed\2\u01ee\1\u01ed\1\u01a1"+ + "\13\0\1\264\74\0\1\u0128\13\0\1\264\26\0\1\u01ef"+ + "\33\0\12\u01a7\43\0\1\u01ef\33\0\12\u01f0\43\0\1\u01ef"+ + "\33\0\1\u01a7\1\u01f1\1\u01f0\2\u01a7\2\u01f0\2\u01a7\1\u01f0"+ + "\43\0\1\172\12\63\1\374\17\63\1\173\12\63\43\0"+ + "\1\172\3\63\1\u01f2\26\63\1\173\12\63\43\0\1\172"+ + "\32\63\1\173\4\63\1\u01f3\5\63\43\0\1\172\10\63"+ + "\1\u01f4\12\63\1\u01f5\6\63\1\173\12\63\43\0\1\172"+ + "\32\63\1\173\2\63\1\u01f6\7\63\43\0\1\172\7\63"+ + "\1\u01f7\22\63\1\173\12\63\43\0\1\172\7\63\1\u01f8"+ + "\22\63\1\173\3\63\1\u01f9\6\63\43\0\1\172\7\63"+ + "\1\u01fa\22\63\1\173\12\63\43\0\1\172\31\63\1\u01fb"+ + "\1\173\12\63\43\0\1\172\1\63\1\u01fc\30\63\1\173"+ + "\12\63\43\0\1\172\7\63\1\u01fd\1\63\1\u01fe\20\63"+ + "\1\173\12\63\43\0\1\172\22\63\1\u01ff\7\63\1\173"+ + "\2\63\1\u0200\7\63\43\0\1\172\7\63\1\u0201\22\63"+ + "\1\173\12\63\43\0\1\172\7\63\1\u0202\5\63\1\u0203"+ + "\14\63\1\173\12\63\43\0\1\172\23\63\1\u0204\6\63"+ + "\1\173\12\63\43\0\1\172\32\63\1\173\3\63\1\u0205"+ + "\6\63\43\0\1\172\17\63\1\u0206\12\63\1\173\12\63"+ + "\43\0\1\172\32\63\1\173\1\u0207\11\63\77\0\12\u0208"+ + "\10\0\1\371\1\372\1\373\30\0\1\221\1\u0209\31\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\21\117\1\u020a"+ + "\10\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\16\117"+ + "\1\u020b\4\117\1\u020c\6\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\32\117\1\36\10\117\1\u020d\1\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\32\117\1\36\10\117\1\u020e\1\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\1\u020f\2\117\1\u0210\26\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\16\117\1\u0211"+ + "\13\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\25\117"+ + "\1\u0212\4\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\32\117\1\36\10\117\1\u0213\1\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\23\117\1\u0214\6\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\31\117\1\u0215\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\26\117\1\u0216\3\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\11\117\1\u0217\20\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\32\117\1\36\3\117\1\u0218"+ + "\6\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\10\117\1\u0219\21\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\3\117\1\u021a"+ + "\26\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\21\117"+ + "\1\u021b\6\117\1\u021c\1\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\12\117\1\u021d\17\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\32\117\1\36\1\117\1\u021e\10\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\24\117\1\u021f\5\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\31\117\1\u0220\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\17\0\32\u0189\1\0\12\u0189\44\0"+ + "\32\u0189\1\u01d2\12\u0189\44\0\4\u0221\2\0\1\u0221\15\0"+ + "\1\u0221\6\0\12\u0221\44\0\4\u0222\2\0\1\u0222\15\0"+ + "\1\u0222\6\0\12\u0222\1\u0223\110\0\1\u0224\42\0\34\u0156"+ + "\12\u0225\1\0\2\u0156\1\u0190\3\u0156\1\u0158\1\0\1\u018f"+ + "\3\0\2\u0156\4\0\1\u0156\20\0\4\u0226\2\0\1\u0226"+ + "\15\0\1\u0226\6\0\12\u0226\63\0\1\u0227\71\0\4\u0156"+ + "\2\0\1\u0156\15\0\1\u0156\6\0\12\u0156\44\0\32\u0192"+ + "\1\0\12\u0192\44\0\32\u0192\1\u01db\12\u0192\77\0\12\u0228"+ + "\44\0\4\u0229\2\0\1\u0229\15\0\1\u0229\6\0\12\u0229"+ + "\1\u01de\43\0\4\u022a\2\0\1\u022a\15\0\1\u022a\6\0"+ + "\12\u022a\1\u022b\43\0\4\u022c\2\0\1\u022c\15\0\1\u022c"+ + "\6\0\1\u022d\2\u022e\1\u022d\4\u022e\1\u022f\1\u022e\14\0"+ + "\1\u0230\26\0\1\u0195\32\u0196\1\u0195\12\u0196\1\u0197\2\u0195"+ + "\1\u0198\3\u0195\1\u0199\5\0\2\u0195\4\0\1\u0195\17\0"+ + "\1\u0195\32\u0196\1\u01e1\12\u0196\1\u0197\2\u0195\1\u0198\3\u0195"+ + "\1\u0199\5\0\2\u0195\4\0\1\u0195\17\0\34\u0197\12\u0231"+ + "\1\0\2\u0197\1\u01e3\3\u0197\1\u0199\5\0\2\u0197\4\0"+ + "\1\u0197\20\0\4\u0232\2\0\1\u0232\15\0\1\u0232\6\0"+ + "\12\u0232\44\0\4\u0195\2\0\1\u0195\15\0\1\u0195\6\0"+ + "\12\u0195\43\0\1\u0233\32\u01e5\1\u0234\12\u01e5\1\341\7\0"+ + "\1\371\1\372\1\373\76\0\1\u0161\43\0\4\u0235\2\0"+ + "\1\u0235\15\0\1\u0235\6\0\12\u0235\1\u01e8\43\0\4\u0236"+ + "\2\0\1\u0236\15\0\1\u0236\6\0\12\u0236\1\u0237\43\0"+ + "\4\u0238\2\0\1\u0238\15\0\1\u0238\6\0\12\u0238\1\u0239"+ + "\13\0\1\264\26\0\1\365\4\u0238\2\0\1\u0238\15\0"+ + "\1\u0238\6\0\12\u023a\1\u0239\13\0\1\264\26\0\1\365"+ + "\4\u0238\2\0\1\u0238\15\0\1\u0238\6\0\12\u023b\1\u0239"+ + "\13\0\1\264\26\0\1\365\4\u0238\2\0\1\u0238\15\0"+ + "\1\u0238\6\0\1\u023a\1\u023c\1\u023b\2\u023a\2\u023b\2\u023a"+ + "\1\u023b\1\u0239\13\0\1\264\27\0\4\u023d\2\0\1\u023d"+ + "\15\0\1\u023d\6\0\12\u023d\1\u01a1\13\0\1\264\26\0"+ + "\1\365\4\u023d\2\0\1\u023d\15\0\1\u023d\6\0\12\u023d"+ + "\1\u01a1\13\0\1\264\62\0\1\u023e\2\u023f\1\u023e\4\u023f"+ + "\1\u0240\1\u023f\43\0\1\u01ef\110\0\1\u01ef\33\0\2\u01f0"+ + "\1\0\2\u01f0\2\0\2\u01f0\44\0\1\172\24\63\1\u0241"+ + "\5\63\1\173\12\63\43\0\1\172\1\63\1\u0242\30\63"+ + "\1\173\12\63\43\0\1\172\14\63\1\u0243\15\63\1\173"+ + "\12\63\43\0\1\172\1\63\1\u0244\30\63\1\173\12\63"+ + "\43\0\1\172\21\63\1\u0245\10\63\1\173\12\63\43\0"+ + "\1\172\24\63\1\u0246\5\63\1\173\12\63\43\0\1\172"+ + "\24\63\1\u0247\5\63\1\173\12\63\43\0\1\172\1\u0137"+ + "\31\63\1\173\12\63\43\0\1\172\24\63\1\u0248\5\63"+ + "\1\173\12\63\43\0\1\172\1\63\1\u0249\30\63\1\173"+ + "\12\63\43\0\1\172\31\63\1\u024a\1\173\12\63\43\0"+ + "\1\172\24\63\1\u024b\5\63\1\173\12\63\43\0\1\172"+ + "\1\63\1\u024c\30\63\1\173\12\63\43\0\1\172\1\u024d"+ + "\31\63\1\173\12\63\43\0\1\172\21\63\1\u024e\10\63"+ + "\1\173\12\63\43\0\1\172\24\63\1\u024f\5\63\1\173"+ + "\12\63\43\0\1\172\24\63\1\u0250\5\63\1\173\12\63"+ + "\43\0\1\172\4\63\1\u0251\25\63\1\173\12\63\43\0"+ + "\1\172\21\63\1\u0252\10\63\1\173\12\63\43\0\1\172"+ + "\24\63\1\u0253\5\63\1\173\12\63\43\0\1\172\32\63"+ + "\1\173\7\63\1\u0254\2\63\43\0\1\172\1\u0255\31\63"+ + "\1\173\12\63\121\0\1\371\1\372\1\373\30\0\1\221"+ + "\32\117\1\36\1\u0256\11\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\32\117\1\36\7\117\1\u0257\2\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\32\117\1\36\6\117\1\350\3\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\32\117\1\36\5\117\1\350\4\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\1\117\1\u0258\30\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\32\117\1\36\1\117\1\u0259"+ + "\10\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\1\u025a\27\117\1\u025b"+ + "\1\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\4\117"+ + "\1\u025c\25\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\32\117\1\36\1\u025d\11\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\32\117\1\36\3\117\1\u025e\6\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\1\u025f\31\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\1\u0257\31\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\32\117\1\36\2\117\1\u0260\7\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\32\117\1\36\2\117\1\u0261\7\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\15\117\1\u0262\14\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\32\117\1\36\5\117\1\u0263"+ + "\4\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\10\117"+ + "\1\u0264\1\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\1\117\1\u0265"+ + "\30\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ + "\1\36\3\117\1\u0266\6\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\32\117\1\36\1\117\1\u0267\10\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\32\117\1\36\1\117\1\u0268\10\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\24\117\1\u0269\5\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\32\117\1\36\3\117\1\u026a\6\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\25\117\1\u026b\4\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\17\0\4\u018a\2\0\1\u018a\15\0"+ + "\1\u018a\6\0\12\u018a\44\0\4\u026c\2\0\1\u026c\15\0"+ + "\1\u026c\6\0\12\u026c\1\u0223\43\0\4\u026d\2\0\1\u026d"+ + "\15\0\1\u026d\6\0\12\u026d\1\u026e\43\0\4\u026f\2\0"+ + "\1\u026f\15\0\1\u026f\6\0\1\u0270\2\u0271\1\u0270\4\u0271"+ + "\1\u0272\1\u0271\14\0\1\u0273\26\0\34\u0156\12\u0274\1\0"+ + "\2\u0156\1\u0190\3\u0156\1\u0158\1\0\1\u018f\3\0\2\u0156"+ + "\4\0\1\u0156\20\0\4\u018f\2\0\1\u018f\15\0\1\u018f"+ + "\6\0\12\u018f\74\0\1\u0275\113\0\12\u0276\11\0\1\u018f"+ + "\32\0\4\u0277\2\0\1\u0277\15\0\1\u0277\6\0\12\u0277"+ + "\1\u01de\43\0\4\u0278\2\0\1\u0278\15\0\1\u0278\6\0"+ + "\12\u0278\1\u0279\43\0\4\u027a\2\0\1\u027a\15\0\1\u027a"+ + "\6\0\1\u027b\2\u027c\1\u027b\4\u027c\1\u027d\1\u027c\14\0"+ + "\1\u0230\27\0\4\u027e\2\0\1\u027e\15\0\1\u027e\6\0"+ + "\12\u027e\1\u027f\13\0\1\u0230\26\0\1\u0280\4\u027e\2\0"+ + "\1\u027e\15\0\1\u027e\6\0\12\u0281\1\u027f\13\0\1\u0230"+ + "\26\0\1\u0280\4\u027e\2\0\1\u027e\15\0\1\u027e\6\0"+ + "\12\u0282\1\u027f\13\0\1\u0230\26\0\1\u0280\4\u027e\2\0"+ + "\1\u027e\15\0\1\u027e\6\0\1\u0281\1\u0283\1\u0282\2\u0281"+ + "\2\u0282\2\u0281\1\u0282\1\u027f\13\0\1\u0230\74\0\1\u01dc"+ + "\10\0\1\u018f\31\0\34\u0197\12\u0284\1\0\2\u0197\1\u01e3"+ + "\3\u0197\1\u0199\1\371\1\372\1\373\2\0\2\u0197\4\0"+ + "\1\u0197\20\0\4\u0197\2\0\1\u0197\15\0\1\u0197\6\0"+ + "\12\u0197\44\0\32\u01e5\1\0\12\u01e5\44\0\32\u01e5\1\u0234"+ + "\12\u01e5\44\0\4\u0285\2\0\1\u0285\15\0\1\u0285\6\0"+ + "\12\u0285\1\u01e8\43\0\4\u0286\2\0\1\u0286\15\0\1\u0286"+ + "\6\0\12\u0286\1\u0287\43\0\4\u0288\2\0\1\u0288\15\0"+ + "\1\u0288\6\0\1\u0289\2\u028a\1\u0289\4\u028a\1\u028b\1\u028a"+ + "\14\0\1\264\27\0\4\u028c\2\0\1\u028c\15\0\1\u028c"+ + "\6\0\12\u028c\1\u0239\13\0\1\264\27\0\4\u0288\2\0"+ + "\1\u0288\15\0\1\u0288\6\0\1\u0289\2\u028a\1\u0289\4\u028a"+ + "\1\u028b\1\u028a\43\0\1\365\4\u028c\2\0\1\u028c\15\0"+ + "\1\u028c\6\0\12\u028d\1\u0239\13\0\1\264\26\0\1\365"+ + "\4\u028c\2\0\1\u028c\15\0\1\u028c\6\0\12\u028c\1\u0239"+ + "\13\0\1\264\26\0\1\365\4\u028c\2\0\1\u028c\15\0"+ + "\1\u028c\6\0\2\u028d\1\u028c\2\u028d\2\u028c\2\u028d\1\u028c"+ + "\1\u0239\13\0\1\264\74\0\1\u01a1\13\0\1\264\62\0"+ + "\12\u023f\14\0\1\264\62\0\12\u028e\14\0\1\264\62\0"+ + "\1\u023f\1\u028f\1\u028e\2\u023f\2\u028e\2\u023f\1\u028e\14\0"+ + "\1\264\26\0\1\172\1\u0290\31\63\1\173\12\63\43\0"+ + "\1\172\21\63\1\u0291\10\63\1\173\12\63\43\0\1\172"+ + "\16\63\1\u0292\4\63\1\u0293\6\63\1\173\12\63\43\0"+ + "\1\172\32\63\1\173\10\63\1\u0294\1\63\43\0\1\172"+ + "\32\63\1\173\10\63\1\u0295\1\63\43\0\1\172\1\u0296"+ + "\2\63\1\u0297\26\63\1\173\12\63\43\0\1\172\16\63"+ + "\1\u0298\13\63\1\173\12\63\43\0\1\172\25\63\1\u0299"+ + "\4\63\1\173\12\63\43\0\1\172\32\63\1\173\10\63"+ + "\1\u029a\1\63\43\0\1\172\23\63\1\u029b\6\63\1\173"+ + "\12\63\43\0\1\172\31\63\1\u029c\1\173\12\63\43\0"+ + "\1\172\26\63\1\u029d\3\63\1\173\12\63\43\0\1\172"+ + "\11\63\1\u029e\20\63\1\173\12\63\43\0\1\172\32\63"+ + "\1\173\3\63\1\u029f\6\63\43\0\1\172\10\63\1\u02a0"+ + "\21\63\1\173\12\63\43\0\1\172\3\63\1\u02a1\26\63"+ + "\1\173\12\63\43\0\1\172\21\63\1\u02a2\6\63\1\u02a3"+ + "\1\63\1\173\12\63\43\0\1\172\12\63\1\u02a4\17\63"+ + "\1\173\12\63\43\0\1\172\32\63\1\173\1\63\1\u02a5"+ + "\10\63\43\0\1\172\24\63\1\u02a6\5\63\1\173\12\63"+ + "\43\0\1\172\31\63\1\u02a7\1\173\12\63\43\0\1\221"+ + "\1\u02a8\31\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\25\117\1\226\4\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\32\117\1\36\5\117\1\u02a9\4\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\32\117\1\36\3\117\1\u02a8\6\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\12\117\1\u02aa\17\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\25\117\1\u02ab\4\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\15\117\1\u02ac\14\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\2\117\1\u0257"+ + "\27\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\1\117"+ + "\1\226\30\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\11\117\1\u02ad\20\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\1\u02ae\31\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\1\u02af\31\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\2\117\1\u02b0\27\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\32\117\1\36\4\117\1\235\5\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\1\u02b1\31\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\25\117\1\u02b2\4\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\32\117\1\36\4\117\1\u02a8"+ + "\5\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\11\117"+ + "\1\u02a8\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\2\117"+ + "\1\u02a8\7\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\16\117\1\u02b3"+ + "\13\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ + "\1\36\3\117\1\u02b4\6\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\24\117\1\u02b5\5\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\17\0"+ + "\4\u02b6\2\0\1\u02b6\15\0\1\u02b6\6\0\12\u02b6\1\u0223"+ + "\43\0\4\u02b7\2\0\1\u02b7\15\0\1\u02b7\6\0\12\u02b7"+ + "\1\u02b8\43\0\4\u02b9\2\0\1\u02b9\15\0\1\u02b9\6\0"+ + "\1\u02ba\2\u02bb\1\u02ba\4\u02bb\1\u02bc\1\u02bb\14\0\1\u0273"+ + "\27\0\4\u02bd\2\0\1\u02bd\15\0\1\u02bd\6\0\12\u02bd"+ + "\1\u02be\13\0\1\u0273\26\0\1\u02bf\4\u02bd\2\0\1\u02bd"+ + "\15\0\1\u02bd\6\0\12\u02c0\1\u02be\13\0\1\u0273\26\0"+ + "\1\u02bf\4\u02bd\2\0\1\u02bd\15\0\1\u02bd\6\0\12\u02c1"+ + "\1\u02be\13\0\1\u0273\26\0\1\u02bf\4\u02bd\2\0\1\u02bd"+ + "\15\0\1\u02bd\6\0\1\u02c0\1\u02c2\1\u02c1\2\u02c0\2\u02c1"+ + "\2\u02c0\1\u02c1\1\u02be\13\0\1\u0273\105\0\1\u018a\31\0"+ + "\34\u0156\12\u02c3\1\0\2\u0156\1\u0190\3\u0156\1\u0158\1\0"+ + "\1\u018f\3\0\2\u0156\4\0\1\u0156\35\0\1\u02c4\126\0"+ + "\12\u02c5\11\0\1\u018f\77\0\1\u01de\43\0\4\u02c6\2\0"+ + "\1\u02c6\15\0\1\u02c6\6\0\12\u02c6\1\u0279\43\0\4\u02c7"+ + "\2\0\1\u02c7\15\0\1\u02c7\6\0\12\u02c7\1\u02c8\43\0"+ + "\4\u02c9\2\0\1\u02c9\15\0\1\u02c9\6\0\12\u02c9\1\u02ca"+ + "\13\0\1\u0230\26\0\1\u0280\4\u02c9\2\0\1\u02c9\15\0"+ + "\1\u02c9\6\0\12\u02cb\1\u02ca\13\0\1\u0230\26\0\1\u0280"+ + "\4\u02c9\2\0\1\u02c9\15\0\1\u02c9\6\0\12\u02cc\1\u02ca"+ + "\13\0\1\u0230\26\0\1\u0280\4\u02c9\2\0\1\u02c9\15\0"+ + "\1\u02c9\6\0\1\u02cb\1\u02cd\1\u02cc\2\u02cb\2\u02cc\2\u02cb"+ + "\1\u02cc\1\u02ca\13\0\1\u0230\27\0\4\u02ce\2\0\1\u02ce"+ + "\15\0\1\u02ce\6\0\12\u02ce\1\u027f\13\0\1\u0230\27\0"+ + "\4\u027a\2\0\1\u027a\15\0\1\u027a\6\0\1\u027b\2\u027c"+ + "\1\u027b\4\u027c\1\u027d\1\u027c\77\0\1\u02cf\2\u02d0\1\u02cf"+ + "\4\u02d0\1\u02d1\1\u02d0\43\0\1\u0280\4\u02ce\2\0\1\u02ce"+ + "\15\0\1\u02ce\6\0\12\u02d2\1\u027f\13\0\1\u0230\26\0"+ + "\1\u0280\4\u02ce\2\0\1\u02ce\15\0\1\u02ce\6\0\12\u02ce"+ + "\1\u027f\13\0\1\u0230\26\0\1\u0280\4\u02ce\2\0\1\u02ce"+ + "\15\0\1\u02ce\6\0\2\u02d2\1\u02ce\2\u02d2\2\u02ce\2\u02d2"+ + "\1\u02ce\1\u027f\13\0\1\u0230\26\0\34\u0197\12\u02d3\1\0"+ + "\2\u0197\1\u01e3\3\u0197\1\u0199\1\371\1\372\1\373\2\0"+ + "\2\u0197\4\0\1\u0197\65\0\1\u01e8\43\0\4\u02d4\2\0"+ + "\1\u02d4\15\0\1\u02d4\6\0\12\u02d4\1\u0287\43\0\4\u02d5"+ + "\2\0\1\u02d5\15\0\1\u02d5\6\0\12\u02d5\1\u02d6\43\0"+ + "\4\u02d7\2\0\1\u02d7\15\0\1\u02d7\6\0\12\u02d7\1\u02d8"+ + "\13\0\1\264\26\0\1\365\4\u02d7\2\0\1\u02d7\15\0"+ + "\1\u02d7\6\0\12\u02d9\1\u02d8\13\0\1\264\26\0\1\365"+ + "\4\u02d7\2\0\1\u02d7\15\0\1\u02d7\6\0\12\u02da\1\u02d8"+ + "\13\0\1\264\26\0\1\365\4\u02d7\2\0\1\u02d7\15\0"+ + "\1\u02d7\6\0\1\u02d9\1\u02db\1\u02da\2\u02d9\2\u02da\2\u02d9"+ + "\1\u02da\1\u02d8\13\0\1\264\27\0\4\u02dc\2\0\1\u02dc"+ + "\15\0\1\u02dc\6\0\12\u02dc\1\u0239\13\0\1\264\26\0"+ + "\1\365\4\u02dc\2\0\1\u02dc\15\0\1\u02dc\6\0\12\u02dc"+ + "\1\u0239\13\0\1\264\110\0\1\264\62\0\2\u028e\1\0"+ + "\2\u028e\2\0\2\u028e\15\0\1\264\26\0\1\172\32\63"+ + "\1\173\1\u02dd\11\63\43\0\1\172\32\63\1\173\7\63"+ + "\1\u02de\2\63\43\0\1\172\32\63\1\173\6\63\1\u013c"+ + "\3\63\43\0\1\172\32\63\1\173\5\63\1\u013c\4\63"+ + "\43\0\1\172\1\63\1\u02df\30\63\1\173\12\63\43\0"+ + "\1\172\32\63\1\173\1\63\1\u02e0\10\63\43\0\1\172"+ + "\1\u02e1\27\63\1\u02e2\1\63\1\173\12\63\43\0\1\172"+ + "\4\63\1\u02e3\25\63\1\173\12\63\43\0\1\172\32\63"+ + "\1\173\1\u02e4\11\63\43\0\1\172\32\63\1\173\3\63"+ + "\1\u02e5\6\63\43\0\1\172\1\u02e6\31\63\1\173\12\63"+ + "\43\0\1\172\1\u02de\31\63\1\173\12\63\43\0\1\172"+ + "\32\63\1\173\2\63\1\u02e7\7\63\43\0\1\172\32\63"+ + "\1\173\2\63\1\u02e8\7\63\43\0\1\172\15\63\1\u02e9"+ + "\14\63\1\173\12\63\43\0\1\172\32\63\1\173\5\63"+ + "\1\u02ea\4\63\43\0\1\172\32\63\1\173\10\63\1\u02eb"+ + "\1\63\43\0\1\172\1\63\1\u02ec\30\63\1\173\12\63"+ + "\43\0\1\172\32\63\1\173\3\63\1\u02ed\6\63\43\0"+ + "\1\172\32\63\1\173\1\63\1\u02ee\10\63\43\0\1\172"+ + "\32\63\1\173\1\63\1\u02ef\10\63\43\0\1\172\24\63"+ + "\1\u02f0\5\63\1\173\12\63\43\0\1\172\32\63\1\173"+ + "\3\63\1\u02f1\6\63\43\0\1\172\25\63\1\u02f2\4\63"+ + "\1\173\12\63\43\0\1\221\2\117\1\226\27\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\3\117\1\u02f3\26\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\32\117\1\36"+ + "\11\117\1\u02f4\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\32\117\1\36"+ + "\11\117\1\u02f5\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\32\117\1\36"+ + "\7\117\1\u02f6\2\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ + "\1\36\4\117\1\u02f7\5\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\26\117\1\u02f8\3\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\30\117\1\u02f9\1\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\11\117\1\343\20\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\12\117\1\u02fa\17\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\17\117\1\236\12\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\4\117"+ + "\1\u02fb\5\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\30\117\1\u02fc"+ + "\1\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\30\117"+ + "\1\u02fd\1\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\64\0\1\u0223"+ + "\43\0\4\u02fe\2\0\1\u02fe\15\0\1\u02fe\6\0\12\u02fe"+ + "\1\u02b8\43\0\4\u02ff\2\0\1\u02ff\15\0\1\u02ff\6\0"+ + "\12\u02ff\1\u0300\43\0\4\u0301\2\0\1\u0301\15\0\1\u0301"+ + "\6\0\12\u0301\1\u0302\13\0\1\u0273\26\0\1\u02bf\4\u0301"+ + "\2\0\1\u0301\15\0\1\u0301\6\0\12\u0303\1\u0302\13\0"+ + "\1\u0273\26\0\1\u02bf\4\u0301\2\0\1\u0301\15\0\1\u0301"+ + "\6\0\12\u0304\1\u0302\13\0\1\u0273\26\0\1\u02bf\4\u0301"+ + "\2\0\1\u0301\15\0\1\u0301\6\0\1\u0303\1\u0305\1\u0304"+ + "\2\u0303\2\u0304\2\u0303\1\u0304\1\u0302\13\0\1\u0273\27\0"+ + "\4\u0306\2\0\1\u0306\15\0\1\u0306\6\0\12\u0306\1\u02be"+ + "\13\0\1\u0273\27\0\4\u02b9\2\0\1\u02b9\15\0\1\u02b9"+ + "\6\0\1\u02ba\2\u02bb\1\u02ba\4\u02bb\1\u02bc\1\u02bb\77\0"+ + "\1\u0307\2\u0308\1\u0307\4\u0308\1\u0309\1\u0308\43\0\1\u02bf"+ + "\4\u0306\2\0\1\u0306\15\0\1\u0306\6\0\12\u030a\1\u02be"+ + "\13\0\1\u0273\26\0\1\u02bf\4\u0306\2\0\1\u0306\15\0"+ + "\1\u0306\6\0\12\u0306\1\u02be\13\0\1\u0273\26\0\1\u02bf"+ + "\4\u0306\2\0\1\u0306\15\0\1\u0306\6\0\2\u030a\1\u0306"+ + "\2\u030a\2\u0306\2\u030a\1\u0306\1\u02be\13\0\1\u0273\26\0"+ + "\34\u0156\12\u030b\1\0\2\u0156\1\u0190\3\u0156\1\u0158\1\0"+ + "\1\u018f\3\0\2\u0156\4\0\1\u0156\23\0\1\u030c\140\0"+ + "\12\u030d\11\0\1\u018f\32\0\4\u030e\2\0\1\u030e\15\0"+ + "\1\u030e\6\0\12\u030e\1\u0279\43\0\4\u030f\2\0\1\u030f"+ + "\15\0\1\u030f\6\0\12\u030f\1\u0310\43\0\4\u0311\2\0"+ + "\1\u0311\15\0\1\u0311\6\0\1\u0312\2\u0313\1\u0312\4\u0313"+ + "\1\u0314\1\u0313\14\0\1\u0230\27\0\4\u0315\2\0\1\u0315"+ + "\15\0\1\u0315\6\0\12\u0315\1\u02ca\13\0\1\u0230\27\0"+ + "\4\u0311\2\0\1\u0311\15\0\1\u0311\6\0\1\u0312\2\u0313"+ + "\1\u0312\4\u0313\1\u0314\1\u0313\43\0\1\u0280\4\u0315\2\0"+ + "\1\u0315\15\0\1\u0315\6\0\12\u0316\1\u02ca\13\0\1\u0230"+ + "\26\0\1\u0280\4\u0315\2\0\1\u0315\15\0\1\u0315\6\0"+ + "\12\u0315\1\u02ca\13\0\1\u0230\26\0\1\u0280\4\u0315\2\0"+ + "\1\u0315\15\0\1\u0315\6\0\2\u0316\1\u0315\2\u0316\2\u0315"+ + "\2\u0316\1\u0315\1\u02ca\13\0\1\u0230\27\0\4\u0317\2\0"+ + "\1\u0317\15\0\1\u0317\6\0\12\u0317\1\u027f\13\0\1\u0230"+ + "\26\0\1\u0318\33\0\12\u02d0\43\0\1\u0318\33\0\12\u0319"+ + "\43\0\1\u0318\33\0\1\u02d0\1\u031a\1\u0319\2\u02d0\2\u0319"+ + "\2\u02d0\1\u0319\43\0\1\u0280\4\u0317\2\0\1\u0317\15\0"+ + "\1\u0317\6\0\12\u0317\1\u027f\13\0\1\u0230\26\0\34\u0197"+ + "\12\u031b\1\0\2\u0197\1\u01e3\3\u0197\1\u0199\1\371\1\372"+ + "\1\373\2\0\2\u0197\4\0\1\u0197\20\0\4\u031c\2\0"+ + "\1\u031c\15\0\1\u031c\6\0\12\u031c\1\u0287\43\0\4\u031d"+ + "\2\0\1\u031d\15\0\1\u031d\6\0\12\u031d\1\u031e\43\0"+ + "\4\u031f\2\0\1\u031f\15\0\1\u031f\6\0\1\u0320\2\u0321"+ + "\1\u0320\4\u0321\1\u0322\1\u0321\14\0\1\264\27\0\4\u0323"+ + "\2\0\1\u0323\15\0\1\u0323\6\0\12\u0323\1\u02d8\13\0"+ + "\1\264\27\0\4\u031f\2\0\1\u031f\15\0\1\u031f\6\0"+ + "\1\u0320\2\u0321\1\u0320\4\u0321\1\u0322\1\u0321\43\0\1\365"+ + "\4\u0323\2\0\1\u0323\15\0\1\u0323\6\0\12\u0324\1\u02d8"+ + "\13\0\1\264\26\0\1\365\4\u0323\2\0\1\u0323\15\0"+ + "\1\u0323\6\0\12\u0323\1\u02d8\13\0\1\264\26\0\1\365"+ + "\4\u0323\2\0\1\u0323\15\0\1\u0323\6\0\2\u0324\1\u0323"+ + "\2\u0324\2\u0323\2\u0324\1\u0323\1\u02d8\13\0\1\264\74\0"+ + "\1\u0239\13\0\1\264\26\0\1\172\1\u0325\31\63\1\173"+ + "\12\63\43\0\1\172\25\63\1\374\4\63\1\173\12\63"+ + "\43\0\1\172\32\63\1\173\5\63\1\u0326\4\63\43\0"+ + "\1\172\32\63\1\173\3\63\1\u0325\6\63\43\0\1\172"+ + "\12\63\1\u0327\17\63\1\173\12\63\43\0\1\172\25\63"+ + "\1\u0328\4\63\1\173\12\63\43\0\1\172\15\63\1\u0329"+ + "\14\63\1\173\12\63\43\0\1\172\2\63\1\u02de\27\63"+ + "\1\173\12\63\43\0\1\172\1\63\1\374\30\63\1\173"+ + "\12\63\43\0\1\172\11\63\1\u032a\20\63\1\173\12\63"+ + "\43\0\1\172\1\u032b\31\63\1\173\12\63\43\0\1\172"+ + "\1\u032c\31\63\1\173\12\63\43\0\1\172\2\63\1\u032d"+ + "\27\63\1\173\12\63\43\0\1\172\32\63\1\173\4\63"+ + "\1\u0103\5\63\43\0\1\172\1\u032e\31\63\1\173\12\63"+ + "\43\0\1\172\25\63\1\u032f\4\63\1\173\12\63\43\0"+ + "\1\172\32\63\1\173\4\63\1\u0325\5\63\43\0\1\172"+ + "\32\63\1\173\11\63\1\u0325\43\0\1\172\32\63\1\173"+ + "\2\63\1\u0325\7\63\43\0\1\172\16\63\1\u0330\13\63"+ + "\1\173\12\63\43\0\1\172\32\63\1\173\3\63\1\u0331"+ + "\6\63\43\0\1\172\24\63\1\u0332\5\63\1\173\12\63"+ + "\43\0\1\221\32\117\1\36\10\117\1\u025e\1\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\1\u0333\31\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\7\117\1\u0334\22\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\1\u0335\31\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\25\117\1\u0336\4\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\11\117"+ + "\1\u0337\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\1\u0338\31\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\12\117\1\u0339\17\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\1\u033a\31\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\10\117\1\u033b"+ + "\21\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\31\117"+ + "\1\u033c\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\17\0\4\u033d\2\0"+ + "\1\u033d\15\0\1\u033d\6\0\12\u033d\1\u02b8\43\0\4\u033e"+ + "\2\0\1\u033e\15\0\1\u033e\6\0\12\u033e\1\u033f\43\0"+ + "\4\u0340\2\0\1\u0340\15\0\1\u0340\6\0\1\u0341\2\u0342"+ + "\1\u0341\4\u0342\1\u0343\1\u0342\14\0\1\u0273\27\0\4\u0344"+ + "\2\0\1\u0344\15\0\1\u0344\6\0\12\u0344\1\u0302\13\0"+ + "\1\u0273\27\0\4\u0340\2\0\1\u0340\15\0\1\u0340\6\0"+ + "\1\u0341\2\u0342\1\u0341\4\u0342\1\u0343\1\u0342\43\0\1\u02bf"+ + "\4\u0344\2\0\1\u0344\15\0\1\u0344\6\0\12\u0345\1\u0302"+ + "\13\0\1\u0273\26\0\1\u02bf\4\u0344\2\0\1\u0344\15\0"+ + "\1\u0344\6\0\12\u0344\1\u0302\13\0\1\u0273\26\0\1\u02bf"+ + "\4\u0344\2\0\1\u0344\15\0\1\u0344\6\0\2\u0345\1\u0344"+ + "\2\u0345\2\u0344\2\u0345\1\u0344\1\u0302\13\0\1\u0273\27\0"+ + "\4\u0346\2\0\1\u0346\15\0\1\u0346\6\0\12\u0346\1\u02be"+ + "\13\0\1\u0273\26\0\1\u0347\33\0\12\u0308\43\0\1\u0347"+ + "\33\0\12\u0348\43\0\1\u0347\33\0\1\u0308\1\u0349\1\u0348"+ + "\2\u0308\2\u0348\2\u0308\1\u0348\43\0\1\u02bf\4\u0346\2\0"+ + "\1\u0346\15\0\1\u0346\6\0\12\u0346\1\u02be\13\0\1\u0273"+ + "\26\0\46\u0156\1\0\2\u0156\1\u0190\3\u0156\1\u0158\1\0"+ + "\1\u018f\3\0\2\u0156\4\0\1\u0156\103\0\1\u034a\60\0"+ + "\12\u034b\11\0\1\u018f\77\0\1\u0279\43\0\4\u034c\2\0"+ + "\1\u034c\15\0\1\u034c\6\0\12\u034c\1\u0310\43\0\4\u034d"+ + "\2\0\1\u034d\15\0\1\u034d\6\0\12\u034d\1\u034e\43\0"+ + "\4\u034f\2\0\1\u034f\15\0\1\u034f\6\0\12\u034f\1\u0350"+ + "\13\0\1\u0230\26\0\1\u0280\4\u034f\2\0\1\u034f\15\0"+ + "\1\u034f\6\0\12\u0351\1\u0350\13\0\1\u0230\26\0\1\u0280"+ + "\4\u034f\2\0\1\u034f\15\0\1\u034f\6\0\12\u0352\1\u0350"+ + "\13\0\1\u0230\26\0\1\u0280\4\u034f\2\0\1\u034f\15\0"+ + "\1\u034f\6\0\1\u0351\1\u0353\1\u0352\2\u0351\2\u0352\2\u0351"+ + "\1\u0352\1\u0350\13\0\1\u0230\27\0\4\u0354\2\0\1\u0354"+ + "\15\0\1\u0354\6\0\12\u0354\1\u02ca\13\0\1\u0230\26\0"+ + "\1\u0280\4\u0354\2\0\1\u0354\15\0\1\u0354\6\0\12\u0354"+ + "\1\u02ca\13\0\1\u0230\74\0\1\u027f\13\0\1\u0230\62\0"+ + "\1\u0355\2\u0356\1\u0355\4\u0356\1\u0357\1\u0356\43\0\1\u0318"+ + "\110\0\1\u0318\33\0\2\u0319\1\0\2\u0319\2\0\2\u0319"+ + "\44\0\34\u0197\12\u0358\1\0\2\u0197\1\u01e3\3\u0197\1\u0199"+ + "\1\371\1\372\1\373\2\0\2\u0197\4\0\1\u0197\65\0"+ + "\1\u0287\43\0\4\u0359\2\0\1\u0359\15\0\1\u0359\6\0"+ + "\12\u0359\1\u031e\43\0\4\u035a\2\0\1\u035a\15\0\1\u035a"+ + "\6\0\1\u035b\2\u035c\1\u035b\4\u035c\1\u035d\1\u035c\1\u035e"+ + "\43\0\4\u035f\2\0\1\u035f\15\0\1\u035f\6\0\12\u035f"+ + "\1\u0360\13\0\1\264\26\0\1\365\4\u035f\2\0\1\u035f"+ + "\15\0\1\u035f\6\0\12\u0361\1\u0360\13\0\1\264\26\0"+ + "\1\365\4\u035f\2\0\1\u035f\15\0\1\u035f\6\0\12\u0362"+ + "\1\u0360\13\0\1\264\26\0\1\365\4\u035f\2\0\1\u035f"+ + "\15\0\1\u035f\6\0\1\u0361\1\u0363\1\u0362\2\u0361\2\u0362"+ + "\2\u0361\1\u0362\1\u0360\13\0\1\264\27\0\4\u0364\2\0"+ + "\1\u0364\15\0\1\u0364\6\0\12\u0364\1\u02d8\13\0\1\264"+ + "\26\0\1\365\4\u0364\2\0\1\u0364\15\0\1\u0364\6\0"+ + "\12\u0364\1\u02d8\13\0\1\264\26\0\1\172\2\63\1\374"+ + "\27\63\1\173\12\63\43\0\1\172\3\63\1\u0365\26\63"+ + "\1\173\12\63\43\0\1\172\32\63\1\173\11\63\1\u0366"+ + "\43\0\1\172\32\63\1\173\11\63\1\u0367\43\0\1\172"+ + "\32\63\1\173\7\63\1\u0368\2\63\43\0\1\172\32\63"+ + "\1\173\4\63\1\u0369\5\63\43\0\1\172\26\63\1\u036a"+ + "\3\63\1\173\12\63\43\0\1\172\30\63\1\u036b\1\63"+ + "\1\173\12\63\43\0\1\172\11\63\1\u0136\20\63\1\173"+ + "\12\63\43\0\1\172\12\63\1\u036c\17\63\1\173\12\63"+ + "\43\0\1\172\17\63\1\u0104\12\63\1\173\12\63\43\0"+ + "\1\172\32\63\1\173\4\63\1\u036d\5\63\43\0\1\172"+ + "\30\63\1\u036e\1\63\1\173\12\63\43\0\1\172\30\63"+ + "\1\u036f\1\63\1\173\12\63\43\0\1\221\32\117\1\36"+ + "\6\117\1\u0257\3\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\15\117"+ + "\1\142\14\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\16\0\1\221"+ + "\32\117\1\36\1\117\1\u0370\10\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\30\117\1\u0371\1\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\6\117\1\u0372\23\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\32\117\1\36\5\117\1\u0373\4\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\22\117\1\226\7\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\5\117"+ + "\1\u0374\4\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\32\117\1\36"+ + "\1\117\1\142\10\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\13\117"+ + "\1\u0375\16\117\1\36\12\117\1\0\3\33\1\0\2\33"+ + "\1\34\3\33\3\0\1\33\4\0\2\33\64\0\1\u02b8"+ + "\43\0\4\u0376\2\0\1\u0376\15\0\1\u0376\6\0\12\u0376"+ + "\1\u033f\43\0\4\u0377\2\0\1\u0377\15\0\1\u0377\6\0"+ + "\12\u0377\1\u0378\43\0\4\u0379\2\0\1\u0379\15\0\1\u0379"+ + "\6\0\12\u0379\1\u037a\13\0\1\u0273\26\0\1\u02bf\4\u0379"+ + "\2\0\1\u0379\15\0\1\u0379\6\0\12\u037b\1\u037a\13\0"+ + "\1\u0273\26\0\1\u02bf\4\u0379\2\0\1\u0379\15\0\1\u0379"+ + "\6\0\12\u037c\1\u037a\13\0\1\u0273\26\0\1\u02bf\4\u0379"+ + "\2\0\1\u0379\15\0\1\u0379\6\0\1\u037b\1\u037d\1\u037c"+ + "\2\u037b\2\u037c\2\u037b\1\u037c\1\u037a\13\0\1\u0273\27\0"+ + "\4\u037e\2\0\1\u037e\15\0\1\u037e\6\0\12\u037e\1\u0302"+ + "\13\0\1\u0273\26\0\1\u02bf\4\u037e\2\0\1\u037e\15\0"+ + "\1\u037e\6\0\12\u037e\1\u0302\13\0\1\u0273\74\0\1\u02be"+ + "\13\0\1\u0273\62\0\1\u037f\2\u0380\1\u037f\4\u0380\1\u0381"+ + "\1\u0380\43\0\1\u0347\110\0\1\u0347\33\0\2\u0348\1\0"+ + "\2\u0348\2\0\2\u0348\45\0\1\u0382\1\0\1\u0382\5\0"+ + "\1\u0382\156\0\1\u018f\32\0\4\u0383\2\0\1\u0383\15\0"+ + "\1\u0383\6\0\12\u0383\1\u0310\43\0\4\u0384\2\0\1\u0384"+ + "\15\0\1\u0384\6\0\12\u0384\1\u0385\43\0\4\u0386\2\0"+ + "\1\u0386\15\0\1\u0386\6\0\1\u0387\2\u0388\1\u0387\4\u0388"+ + "\1\u0389\1\u0388\14\0\1\u0230\27\0\4\u038a\2\0\1\u038a"+ + "\15\0\1\u038a\6\0\12\u038a\1\u0350\13\0\1\u0230\27\0"+ + "\4\u0386\2\0\1\u0386\15\0\1\u0386\6\0\1\u0387\2\u0388"+ + "\1\u0387\4\u0388\1\u0389\1\u0388\43\0\1\u0280\4\u038a\2\0"+ + "\1\u038a\15\0\1\u038a\6\0\12\u038b\1\u0350\13\0\1\u0230"+ + "\26\0\1\u0280\4\u038a\2\0\1\u038a\15\0\1\u038a\6\0"+ + "\12\u038a\1\u0350\13\0\1\u0230\26\0\1\u0280\4\u038a\2\0"+ + "\1\u038a\15\0\1\u038a\6\0\2\u038b\1\u038a\2\u038b\2\u038a"+ + "\2\u038b\1\u038a\1\u0350\13\0\1\u0230\74\0\1\u02ca\13\0"+ + "\1\u0230\26\0\1\u038c\33\0\12\u0356\43\0\1\u038c\33\0"+ + "\12\u038d\43\0\1\u038c\33\0\1\u0356\1\u038e\1\u038d\2\u0356"+ + "\2\u038d\2\u0356\1\u038d\43\0\46\u0197\1\0\2\u0197\1\u01e3"+ + "\3\u0197\1\u0199\1\371\1\372\1\373\2\0\2\u0197\4\0"+ + "\1\u0197\20\0\4\u038f\2\0\1\u038f\15\0\1\u038f\6\0"+ + "\12\u038f\1\u031e\43\0\4\u0390\2\0\1\u0390\15\0\1\u0390"+ + "\6\0\12\u0390\1\u0391\42\0\1\365\4\u0390\2\0\1\u0390"+ + "\15\0\1\u0390\6\0\12\u0392\1\u0391\42\0\1\365\4\u0390"+ + "\2\0\1\u0390\15\0\1\u0390\6\0\12\u0393\1\u0391\42\0"+ + "\1\365\4\u0390\2\0\1\u0390\15\0\1\u0390\6\0\1\u0392"+ + "\1\u0394\1\u0393\2\u0392\2\u0393\2\u0392\1\u0393\1\u0391\43\0"+ + "\4\u0395\2\0\1\u0395\15\0\1\u0395\6\0\12\u0395\14\0"+ + "\1\264\27\0\4\u0396\2\0\1\u0396\15\0\1\u0396\6\0"+ + "\12\u0396\1\u0360\13\0\1\264\27\0\4\u0395\2\0\1\u0395"+ + "\15\0\1\u0395\6\0\12\u0395\43\0\1\365\4\u0396\2\0"+ + "\1\u0396\15\0\1\u0396\6\0\12\u0397\1\u0360\13\0\1\264"+ + "\26\0\1\365\4\u0396\2\0\1\u0396\15\0\1\u0396\6\0"+ + "\12\u0396\1\u0360\13\0\1\264\26\0\1\365\4\u0396\2\0"+ + "\1\u0396\15\0\1\u0396\6\0\2\u0397\1\u0396\2\u0397\2\u0396"+ + "\2\u0397\1\u0396\1\u0360\13\0\1\264\74\0\1\u02d8\13\0"+ + "\1\264\26\0\1\172\32\63\1\173\10\63\1\u02e5\1\63"+ + "\43\0\1\172\1\u0398\31\63\1\173\12\63\43\0\1\172"+ + "\7\63\1\u0399\22\63\1\173\12\63\43\0\1\172\1\u039a"+ + "\31\63\1\173\12\63\43\0\1\172\25\63\1\u039b\4\63"+ + "\1\173\12\63\43\0\1\172\32\63\1\173\11\63\1\u039c"+ + "\43\0\1\172\1\u039d\31\63\1\173\12\63\43\0\1\172"+ + "\12\63\1\u039e\17\63\1\173\12\63\43\0\1\172\1\u039f"+ + "\31\63\1\173\12\63\43\0\1\172\10\63\1\u03a0\21\63"+ + "\1\173\12\63\43\0\1\172\31\63\1\u03a1\1\173\12\63"+ + "\43\0\1\221\2\117\1\u03a2\27\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\3\117\1\u03a3\26\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\32\117\1\36\1\117\1\u03a4"+ + "\10\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\3\117\1\u03a5\26\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\1\u03a6\31\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\26\117\1\u03a7"+ + "\3\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\17\0\4\u03a8\2\0"+ + "\1\u03a8\15\0\1\u03a8\6\0\12\u03a8\1\u033f\43\0\4\u03a9"+ + "\2\0\1\u03a9\15\0\1\u03a9\6\0\12\u03a9\1\u03aa\43\0"+ + "\4\u03ab\2\0\1\u03ab\15\0\1\u03ab\6\0\1\u03ac\2\u03ad"+ + "\1\u03ac\4\u03ad\1\u03ae\1\u03ad\14\0\1\u0273\27\0\4\u03af"+ + "\2\0\1\u03af\15\0\1\u03af\6\0\12\u03af\1\u037a\13\0"+ + "\1\u0273\27\0\4\u03ab\2\0\1\u03ab\15\0\1\u03ab\6\0"+ + "\1\u03ac\2\u03ad\1\u03ac\4\u03ad\1\u03ae\1\u03ad\43\0\1\u02bf"+ + "\4\u03af\2\0\1\u03af\15\0\1\u03af\6\0\12\u03b0\1\u037a"+ + "\13\0\1\u0273\26\0\1\u02bf\4\u03af\2\0\1\u03af\15\0"+ + "\1\u03af\6\0\12\u03af\1\u037a\13\0\1\u0273\26\0\1\u02bf"+ + "\4\u03af\2\0\1\u03af\15\0\1\u03af\6\0\2\u03b0\1\u03af"+ + "\2\u03b0\2\u03af\2\u03b0\1\u03af\1\u037a\13\0\1\u0273\74\0"+ + "\1\u0302\13\0\1\u0273\26\0\1\u03b1\33\0\12\u0380\43\0"+ + "\1\u03b1\33\0\12\u03b2\43\0\1\u03b1\33\0\1\u0380\1\u03b3"+ + "\1\u03b2\2\u0380\2\u03b2\2\u0380\1\u03b2\123\0\1\373\76\0"+ + "\1\u0310\43\0\4\u03b4\2\0\1\u03b4\15\0\1\u03b4\6\0"+ + "\12\u03b4\1\u0385\43\0\4\u03b5\2\0\1\u03b5\15\0\1\u03b5"+ + "\6\0\12\u03b5\1\u03b6\43\0\4\u03b7\2\0\1\u03b7\15\0"+ + "\1\u03b7\6\0\12\u03b7\1\u03b8\13\0\1\u0230\26\0\1\u0280"+ + "\4\u03b7\2\0\1\u03b7\15\0\1\u03b7\6\0\12\u03b9\1\u03b8"+ + "\13\0\1\u0230\26\0\1\u0280\4\u03b7\2\0\1\u03b7\15\0"+ + "\1\u03b7\6\0\12\u03ba\1\u03b8\13\0\1\u0230\26\0\1\u0280"+ + "\4\u03b7\2\0\1\u03b7\15\0\1\u03b7\6\0\1\u03b9\1\u03bb"+ + "\1\u03ba\2\u03b9\2\u03ba\2\u03b9\1\u03ba\1\u03b8\13\0\1\u0230"+ + "\27\0\4\u03bc\2\0\1\u03bc\15\0\1\u03bc\6\0\12\u03bc"+ + "\1\u0350\13\0\1\u0230\26\0\1\u0280\4\u03bc\2\0\1\u03bc"+ + "\15\0\1\u03bc\6\0\12\u03bc\1\u0350\13\0\1\u0230\62\0"+ + "\1\u03bd\2\u03be\1\u03bd\4\u03be\1\u03bf\1\u03be\43\0\1\u038c"+ + "\110\0\1\u038c\33\0\2\u038d\1\0\2\u038d\2\0\2\u038d"+ + "\112\0\1\u031e\43\0\4\u03c0\2\0\1\u03c0\15\0\1\u03c0"+ + "\6\0\12\u03c0\1\u0391\43\0\4\u0395\2\0\1\u0395\15\0"+ + "\1\u0395\6\0\12\u0395\1\u028e\42\0\1\365\4\u03c0\2\0"+ + "\1\u03c0\15\0\1\u03c0\6\0\12\u03c1\1\u0391\42\0\1\365"+ + "\4\u03c0\2\0\1\u03c0\15\0\1\u03c0\6\0\12\u03c0\1\u0391"+ + "\42\0\1\365\4\u03c0\2\0\1\u03c0\15\0\1\u03c0\6\0"+ + "\2\u03c1\1\u03c0\2\u03c1\2\u03c0\2\u03c1\1\u03c0\1\u0391\43\0"+ + "\4\u03c2\2\0\1\u03c2\15\0\1\u03c2\6\0\12\u03c2\14\0"+ + "\1\264\27\0\4\u03c3\2\0\1\u03c3\15\0\1\u03c3\6\0"+ + "\12\u03c3\1\u0360\13\0\1\264\26\0\1\365\4\u03c3\2\0"+ + "\1\u03c3\15\0\1\u03c3\6\0\12\u03c3\1\u0360\13\0\1\264"+ + "\26\0\1\172\32\63\1\173\6\63\1\u02de\3\63\43\0"+ + "\1\172\15\63\1\301\14\63\1\173\12\63\43\0\1\172"+ + "\32\63\1\173\1\63\1\u03c4\10\63\43\0\1\172\30\63"+ + "\1\u03c5\1\63\1\173\12\63\43\0\1\172\6\63\1\u03c6"+ + "\23\63\1\173\12\63\43\0\1\172\32\63\1\173\5\63"+ + "\1\u03c7\4\63\43\0\1\172\22\63\1\374\7\63\1\173"+ + "\12\63\43\0\1\172\32\63\1\173\5\63\1\u03c8\4\63"+ + "\43\0\1\172\32\63\1\173\1\63\1\301\10\63\43\0"+ + "\1\172\13\63\1\u03c9\16\63\1\173\12\63\43\0\1\221"+ + "\32\117\1\36\7\117\1\u03ca\2\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\32\117\1\36\10\117\1\142\1\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\32\117\1\36\4\117\1\u03cb\5\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\16\117\1\u03cc\13\117\1\36\12\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\26\117\1\u03cd\3\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\16\0\1\221\32\117\1\36\7\117"+ + "\1\u03ce\2\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\64\0\1\u033f\43\0\4\u03cf"+ + "\2\0\1\u03cf\15\0\1\u03cf\6\0\12\u03cf\1\u03aa\43\0"+ + "\4\u03d0\2\0\1\u03d0\15\0\1\u03d0\6\0\12\u03d0\1\u03d1"+ + "\43\0\4\u03d2\2\0\1\u03d2\15\0\1\u03d2\6\0\12\u03d2"+ + "\1\u03d3\13\0\1\u0273\26\0\1\u02bf\4\u03d2\2\0\1\u03d2"+ + "\15\0\1\u03d2\6\0\12\u03d4\1\u03d3\13\0\1\u0273\26\0"+ + "\1\u02bf\4\u03d2\2\0\1\u03d2\15\0\1\u03d2\6\0\12\u03d5"+ + "\1\u03d3\13\0\1\u0273\26\0\1\u02bf\4\u03d2\2\0\1\u03d2"+ + "\15\0\1\u03d2\6\0\1\u03d4\1\u03d6\1\u03d5\2\u03d4\2\u03d5"+ + "\2\u03d4\1\u03d5\1\u03d3\13\0\1\u0273\27\0\4\u03d7\2\0"+ + "\1\u03d7\15\0\1\u03d7\6\0\12\u03d7\1\u037a\13\0\1\u0273"+ + "\26\0\1\u02bf\4\u03d7\2\0\1\u03d7\15\0\1\u03d7\6\0"+ + "\12\u03d7\1\u037a\13\0\1\u0273\62\0\1\u03d8\2\u03d9\1\u03d8"+ + "\4\u03d9\1\u03da\1\u03d9\43\0\1\u03b1\110\0\1\u03b1\33\0"+ + "\2\u03b2\1\0\2\u03b2\2\0\2\u03b2\45\0\4\u03db\2\0"+ + "\1\u03db\15\0\1\u03db\6\0\12\u03db\1\u0385\43\0\4\u03dc"+ + "\2\0\1\u03dc\15\0\1\u03dc\6\0\12\u03dc\1\u03dd\43\0"+ + "\4\u03de\2\0\1\u03de\15\0\1\u03de\6\0\1\u03df\2\u03e0"+ + "\1\u03df\4\u03e0\1\u03e1\1\u03e0\14\0\1\u0230\27\0\4\u03e2"+ + "\2\0\1\u03e2\15\0\1\u03e2\6\0\12\u03e2\1\u03b8\13\0"+ + "\1\u0230\27\0\4\u03de\2\0\1\u03de\15\0\1\u03de\6\0"+ + "\1\u03df\2\u03e0\1\u03df\4\u03e0\1\u03e1\1\u03e0\43\0\1\u0280"+ + "\4\u03e2\2\0\1\u03e2\15\0\1\u03e2\6\0\12\u03e3\1\u03b8"+ + "\13\0\1\u0230\26\0\1\u0280\4\u03e2\2\0\1\u03e2\15\0"+ + "\1\u03e2\6\0\12\u03e2\1\u03b8\13\0\1\u0230\26\0\1\u0280"+ + "\4\u03e2\2\0\1\u03e2\15\0\1\u03e2\6\0\2\u03e3\1\u03e2"+ + "\2\u03e3\2\u03e2\2\u03e3\1\u03e2\1\u03b8\13\0\1\u0230\74\0"+ + "\1\u0350\13\0\1\u0230\62\0\12\u03be\14\0\1\u0230\62\0"+ + "\12\u03e4\14\0\1\u0230\62\0\1\u03be\1\u03e5\1\u03e4\2\u03be"+ + "\2\u03e4\2\u03be\1\u03e4\14\0\1\u0230\27\0\4\u03e6\2\0"+ + "\1\u03e6\15\0\1\u03e6\6\0\12\u03e6\1\u0391\42\0\1\365"+ + "\4\u03e6\2\0\1\u03e6\15\0\1\u03e6\6\0\12\u03e6\1\u0391"+ + "\43\0\4\u03e7\2\0\1\u03e7\15\0\1\u03e7\6\0\12\u03e7"+ + "\14\0\1\264\74\0\1\u0360\13\0\1\264\26\0\1\172"+ + "\2\63\1\u03e8\27\63\1\173\12\63\43\0\1\172\3\63"+ + "\1\u03e9\26\63\1\173\12\63\43\0\1\172\32\63\1\173"+ + "\1\63\1\u03ea\10\63\43\0\1\172\3\63\1\u03eb\26\63"+ + "\1\173\12\63\43\0\1\172\1\u03ec\31\63\1\173\12\63"+ + "\43\0\1\172\26\63\1\u03ed\3\63\1\173\12\63\43\0"+ + "\1\221\1\u03ee\31\117\1\36\12\117\1\0\3\33\1\0"+ + "\2\33\1\34\3\33\3\0\1\33\4\0\2\33\16\0"+ + "\1\221\24\117\1\u03ef\5\117\1\36\12\117\1\0\3\33"+ + "\1\0\2\33\1\34\3\33\3\0\1\33\4\0\2\33"+ + "\16\0\1\221\1\117\1\u03f0\30\117\1\36\12\117\1\0"+ + "\3\33\1\0\2\33\1\34\3\33\3\0\1\33\4\0"+ + "\2\33\16\0\1\221\32\117\1\36\2\117\1\235\7\117"+ + "\1\0\3\33\1\0\2\33\1\34\3\33\3\0\1\33"+ + "\4\0\2\33\16\0\1\221\6\117\1\226\23\117\1\36"+ + "\12\117\1\0\3\33\1\0\2\33\1\34\3\33\3\0"+ + "\1\33\4\0\2\33\17\0\4\u03f1\2\0\1\u03f1\15\0"+ + "\1\u03f1\6\0\12\u03f1\1\u03aa\43\0\4\u03f2\2\0\1\u03f2"+ + "\15\0\1\u03f2\6\0\12\u03f2\1\u03f3\43\0\4\u03f4\2\0"+ + "\1\u03f4\15\0\1\u03f4\6\0\1\u03f5\2\u03f6\1\u03f5\4\u03f6"+ + "\1\u03f7\1\u03f6\14\0\1\u0273\27\0\4\u03f8\2\0\1\u03f8"+ + "\15\0\1\u03f8\6\0\12\u03f8\1\u03d3\13\0\1\u0273\27\0"+ + "\4\u03f4\2\0\1\u03f4\15\0\1\u03f4\6\0\1\u03f5\2\u03f6"+ + "\1\u03f5\4\u03f6\1\u03f7\1\u03f6\43\0\1\u02bf\4\u03f8\2\0"+ + "\1\u03f8\15\0\1\u03f8\6\0\12\u03f9\1\u03d3\13\0\1\u0273"+ + "\26\0\1\u02bf\4\u03f8\2\0\1\u03f8\15\0\1\u03f8\6\0"+ + "\12\u03f8\1\u03d3\13\0\1\u0273\26\0\1\u02bf\4\u03f8\2\0"+ + "\1\u03f8\15\0\1\u03f8\6\0\2\u03f9\1\u03f8\2\u03f9\2\u03f8"+ + "\2\u03f9\1\u03f8\1\u03d3\13\0\1\u0273\74\0\1\u037a\13\0"+ + "\1\u0273\62\0\12\u03d9\14\0\1\u0273\62\0\12\u03fa\14\0"+ + "\1\u0273\62\0\1\u03d9\1\u03fb\1\u03fa\2\u03d9\2\u03fa\2\u03d9"+ + "\1\u03fa\14\0\1\u0273\74\0\1\u0385\43\0\4\u03fc\2\0"+ + "\1\u03fc\15\0\1\u03fc\6\0\12\u03fc\1\u03dd\43\0\4\u03fd"+ + "\2\0\1\u03fd\15\0\1\u03fd\6\0\12\u03fd\1\u03fe\43\0"+ + "\4\u03ff\2\0\1\u03ff\15\0\1\u03ff\6\0\12\u03ff\1\u0400"+ + "\13\0\1\u0230\26\0\1\u0280\4\u03ff\2\0\1\u03ff\15\0"+ + "\1\u03ff\6\0\12\u0401\1\u0400\13\0\1\u0230\26\0\1\u0280"+ + "\4\u03ff\2\0\1\u03ff\15\0\1\u03ff\6\0\12\u0402\1\u0400"+ + "\13\0\1\u0230\26\0\1\u0280\4\u03ff\2\0\1\u03ff\15\0"+ + "\1\u03ff\6\0\1\u0401\1\u0403\1\u0402\2\u0401\2\u0402\2\u0401"+ + "\1\u0402\1\u0400\13\0\1\u0230\27\0\4\u0404\2\0\1\u0404"+ + "\15\0\1\u0404\6\0\12\u0404\1\u03b8\13\0\1\u0230\26\0"+ + "\1\u0280\4\u0404\2\0\1\u0404\15\0\1\u0404\6\0\12\u0404"+ + "\1\u03b8\13\0\1\u0230\110\0\1\u0230\62\0\2\u03e4\1\0"+ + "\2\u03e4\2\0\2\u03e4\15\0\1\u0230\74\0\1\u0391\43\0"+ + "\4\u028e\2\0\1\u028e\15\0\1\u028e\6\0\12\u028e\14\0"+ + "\1\264\26\0\1\172\32\63\1\173\7\63\1\u0405\2\63"+ + "\43\0\1\172\32\63\1\173\10\63\1\301\1\63\43\0"+ + "\1\172\32\63\1\173\4\63\1\u0406\5\63\43\0\1\172"+ + "\16\63\1\u0407\13\63\1\173\12\63\43\0\1\172\26\63"+ + "\1\u0408\3\63\1\173\12\63\43\0\1\172\32\63\1\173"+ + "\7\63\1\u0409\2\63\43\0\1\221\4\117\1\226\25\117"+ + "\1\36\12\117\1\0\3\33\1\0\2\33\1\34\3\33"+ + "\3\0\1\33\4\0\2\33\16\0\1\221\24\117\1\142"+ + "\5\117\1\36\12\117\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\16\0\1\221\32\117"+ + "\1\36\11\117\1\142\1\0\3\33\1\0\2\33\1\34"+ + "\3\33\3\0\1\33\4\0\2\33\64\0\1\u03aa\43\0"+ + "\4\u040a\2\0\1\u040a\15\0\1\u040a\6\0\12\u040a\1\u03f3"+ + "\43\0\4\u040b\2\0\1\u040b\15\0\1\u040b\6\0\12\u040b"+ + "\1\u040c\43\0\4\u040d\2\0\1\u040d\15\0\1\u040d\6\0"+ + "\12\u040d\1\u040e\13\0\1\u0273\26\0\1\u02bf\4\u040d\2\0"+ + "\1\u040d\15\0\1\u040d\6\0\12\u040f\1\u040e\13\0\1\u0273"+ + "\26\0\1\u02bf\4\u040d\2\0\1\u040d\15\0\1\u040d\6\0"+ + "\12\u0410\1\u040e\13\0\1\u0273\26\0\1\u02bf\4\u040d\2\0"+ + "\1\u040d\15\0\1\u040d\6\0\1\u040f\1\u0411\1\u0410\2\u040f"+ + "\2\u0410\2\u040f\1\u0410\1\u040e\13\0\1\u0273\27\0\4\u0412"+ + "\2\0\1\u0412\15\0\1\u0412\6\0\12\u0412\1\u03d3\13\0"+ + "\1\u0273\26\0\1\u02bf\4\u0412\2\0\1\u0412\15\0\1\u0412"+ + "\6\0\12\u0412\1\u03d3\13\0\1\u0273\110\0\1\u0273\62\0"+ + "\2\u03fa\1\0\2\u03fa\2\0\2\u03fa\15\0\1\u0273\27\0"+ + "\4\u0413\2\0\1\u0413\15\0\1\u0413\6\0\12\u0413\1\u03dd"+ + "\43\0\4\u0414\2\0\1\u0414\15\0\1\u0414\6\0\12\u0414"+ + "\1\u0415\43\0\4\u0416\2\0\1\u0416\15\0\1\u0416\6\0"+ + "\1\u0417\2\u0418\1\u0417\4\u0418\1\u0419\1\u0418\14\0\1\u0230"+ + "\27\0\4\u041a\2\0\1\u041a\15\0\1\u041a\6\0\12\u041a"+ + "\1\u0400\13\0\1\u0230\27\0\4\u0416\2\0\1\u0416\15\0"+ + "\1\u0416\6\0\1\u0417\2\u0418\1\u0417\4\u0418\1\u0419\1\u0418"+ + "\43\0\1\u0280\4\u041a\2\0\1\u041a\15\0\1\u041a\6\0"+ + "\12\u041b\1\u0400\13\0\1\u0230\26\0\1\u0280\4\u041a\2\0"+ + "\1\u041a\15\0\1\u041a\6\0\12\u041a\1\u0400\13\0\1\u0230"+ + "\26\0\1\u0280\4\u041a\2\0\1\u041a\15\0\1\u041a\6\0"+ + "\2\u041b\1\u041a\2\u041b\2\u041a\2\u041b\1\u041a\1\u0400\13\0"+ + "\1\u0230\74\0\1\u03b8\13\0\1\u0230\26\0\1\172\1\u041c"+ + "\31\63\1\173\12\63\43\0\1\172\24\63\1\u041d\5\63"+ + "\1\173\12\63\43\0\1\172\1\63\1\u041e\30\63\1\173"+ + "\12\63\43\0\1\172\32\63\1\173\2\63\1\u0103\7\63"+ + "\43\0\1\172\6\63\1\374\23\63\1\173\12\63\44\0"+ + "\4\u041f\2\0\1\u041f\15\0\1\u041f\6\0\12\u041f\1\u03f3"+ + "\43\0\4\u0420\2\0\1\u0420\15\0\1\u0420\6\0\12\u0420"+ + "\1\u0421\43\0\4\u0422\2\0\1\u0422\15\0\1\u0422\6\0"+ + "\1\u0423\2\u0424\1\u0423\4\u0424\1\u0425\1\u0424\14\0\1\u0273"+ + "\27\0\4\u0426\2\0\1\u0426\15\0\1\u0426\6\0\12\u0426"+ + "\1\u040e\13\0\1\u0273\27\0\4\u0422\2\0\1\u0422\15\0"+ + "\1\u0422\6\0\1\u0423\2\u0424\1\u0423\4\u0424\1\u0425\1\u0424"+ + "\43\0\1\u02bf\4\u0426\2\0\1\u0426\15\0\1\u0426\6\0"+ + "\12\u0427\1\u040e\13\0\1\u0273\26\0\1\u02bf\4\u0426\2\0"+ + "\1\u0426\15\0\1\u0426\6\0\12\u0426\1\u040e\13\0\1\u0273"+ + "\26\0\1\u02bf\4\u0426\2\0\1\u0426\15\0\1\u0426\6\0"+ + "\2\u0427\1\u0426\2\u0427\2\u0426\2\u0427\1\u0426\1\u040e\13\0"+ + "\1\u0273\74\0\1\u03d3\13\0\1\u0273\74\0\1\u03dd\43\0"+ + "\4\u0428\2\0\1\u0428\15\0\1\u0428\6\0\12\u0428\1\u0415"+ + "\43\0\4\u0429\2\0\1\u0429\15\0\1\u0429\6\0\1\u042a"+ + "\2\u042b\1\u042a\4\u042b\1\u042c\1\u042b\1\u042d\43\0\4\u042e"+ + "\2\0\1\u042e\15\0\1\u042e\6\0\12\u042e\1\u042f\13\0"+ + "\1\u0230\26\0\1\u0280\4\u042e\2\0\1\u042e\15\0\1\u042e"+ + "\6\0\12\u0430\1\u042f\13\0\1\u0230\26\0\1\u0280\4\u042e"+ + "\2\0\1\u042e\15\0\1\u042e\6\0\12\u0431\1\u042f\13\0"+ + "\1\u0230\26\0\1\u0280\4\u042e\2\0\1\u042e\15\0\1\u042e"+ + "\6\0\1\u0430\1\u0432\1\u0431\2\u0430\2\u0431\2\u0430\1\u0431"+ + "\1\u042f\13\0\1\u0230\27\0\4\u0433\2\0\1\u0433\15\0"+ + "\1\u0433\6\0\12\u0433\1\u0400\13\0\1\u0230\26\0\1\u0280"+ + "\4\u0433\2\0\1\u0433\15\0\1\u0433\6\0\12\u0433\1\u0400"+ + "\13\0\1\u0230\26\0\1\172\4\63\1\374\25\63\1\173"+ + "\12\63\43\0\1\172\24\63\1\301\5\63\1\173\12\63"+ + "\43\0\1\172\32\63\1\173\11\63\1\301\111\0\1\u03f3"+ + "\43\0\4\u0434\2\0\1\u0434\15\0\1\u0434\6\0\12\u0434"+ + "\1\u0421\43\0\4\u0435\2\0\1\u0435\15\0\1\u0435\6\0"+ + "\1\u0436\2\u0437\1\u0436\4\u0437\1\u0438\1\u0437\1\u0439\43\0"+ + "\4\u043a\2\0\1\u043a\15\0\1\u043a\6\0\12\u043a\1\u043b"+ + "\13\0\1\u0273\26\0\1\u02bf\4\u043a\2\0\1\u043a\15\0"+ + "\1\u043a\6\0\12\u043c\1\u043b\13\0\1\u0273\26\0\1\u02bf"+ + "\4\u043a\2\0\1\u043a\15\0\1\u043a\6\0\12\u043d\1\u043b"+ + "\13\0\1\u0273\26\0\1\u02bf\4\u043a\2\0\1\u043a\15\0"+ + "\1\u043a\6\0\1\u043c\1\u043e\1\u043d\2\u043c\2\u043d\2\u043c"+ + "\1\u043d\1\u043b\13\0\1\u0273\27\0\4\u043f\2\0\1\u043f"+ + "\15\0\1\u043f\6\0\12\u043f\1\u040e\13\0\1\u0273\26\0"+ + "\1\u02bf\4\u043f\2\0\1\u043f\15\0\1\u043f\6\0\12\u043f"+ + "\1\u040e\13\0\1\u0273\27\0\4\u0440\2\0\1\u0440\15\0"+ + "\1\u0440\6\0\12\u0440\1\u0415\43\0\4\u0441\2\0\1\u0441"+ + "\15\0\1\u0441\6\0\12\u0441\1\u0442\42\0\1\u0280\4\u0441"+ + "\2\0\1\u0441\15\0\1\u0441\6\0\12\u0443\1\u0442\42\0"+ + "\1\u0280\4\u0441\2\0\1\u0441\15\0\1\u0441\6\0\12\u0444"+ + "\1\u0442\42\0\1\u0280\4\u0441\2\0\1\u0441\15\0\1\u0441"+ + "\6\0\1\u0443\1\u0445\1\u0444\2\u0443\2\u0444\2\u0443\1\u0444"+ + "\1\u0442\43\0\4\u0446\2\0\1\u0446\15\0\1\u0446\6\0"+ + "\12\u0446\14\0\1\u0230\27\0\4\u0447\2\0\1\u0447\15\0"+ + "\1\u0447\6\0\12\u0447\1\u042f\13\0\1\u0230\27\0\4\u0446"+ + "\2\0\1\u0446\15\0\1\u0446\6\0\12\u0446\43\0\1\u0280"+ + "\4\u0447\2\0\1\u0447\15\0\1\u0447\6\0\12\u0448\1\u042f"+ + "\13\0\1\u0230\26\0\1\u0280\4\u0447\2\0\1\u0447\15\0"+ + "\1\u0447\6\0\12\u0447\1\u042f\13\0\1\u0230\26\0\1\u0280"+ + "\4\u0447\2\0\1\u0447\15\0\1\u0447\6\0\2\u0448\1\u0447"+ + "\2\u0448\2\u0447\2\u0448\1\u0447\1\u042f\13\0\1\u0230\74\0"+ + "\1\u0400\13\0\1\u0230\27\0\4\u0449\2\0\1\u0449\15\0"+ + "\1\u0449\6\0\12\u0449\1\u0421\43\0\4\u044a\2\0\1\u044a"+ + "\15\0\1\u044a\6\0\12\u044a\1\u044b\42\0\1\u02bf\4\u044a"+ + "\2\0\1\u044a\15\0\1\u044a\6\0\12\u044c\1\u044b\42\0"+ + "\1\u02bf\4\u044a\2\0\1\u044a\15\0\1\u044a\6\0\12\u044d"+ + "\1\u044b\42\0\1\u02bf\4\u044a\2\0\1\u044a\15\0\1\u044a"+ + "\6\0\1\u044c\1\u044e\1\u044d\2\u044c\2\u044d\2\u044c\1\u044d"+ + "\1\u044b\43\0\4\u044f\2\0\1\u044f\15\0\1\u044f\6\0"+ + "\12\u044f\14\0\1\u0273\27\0\4\u0450\2\0\1\u0450\15\0"+ + "\1\u0450\6\0\12\u0450\1\u043b\13\0\1\u0273\27\0\4\u044f"+ + "\2\0\1\u044f\15\0\1\u044f\6\0\12\u044f\43\0\1\u02bf"+ + "\4\u0450\2\0\1\u0450\15\0\1\u0450\6\0\12\u0451\1\u043b"+ + "\13\0\1\u0273\26\0\1\u02bf\4\u0450\2\0\1\u0450\15\0"+ + "\1\u0450\6\0\12\u0450\1\u043b\13\0\1\u0273\26\0\1\u02bf"+ + "\4\u0450\2\0\1\u0450\15\0\1\u0450\6\0\2\u0451\1\u0450"+ + "\2\u0451\2\u0450\2\u0451\1\u0450\1\u043b\13\0\1\u0273\74\0"+ + "\1\u040e\13\0\1\u0273\74\0\1\u0415\43\0\4\u0452\2\0"+ + "\1\u0452\15\0\1\u0452\6\0\12\u0452\1\u0442\43\0\4\u0446"+ + "\2\0\1\u0446\15\0\1\u0446\6\0\12\u0446\1\u03e4\42\0"+ + "\1\u0280\4\u0452\2\0\1\u0452\15\0\1\u0452\6\0\12\u0453"+ + "\1\u0442\42\0\1\u0280\4\u0452\2\0\1\u0452\15\0\1\u0452"+ + "\6\0\12\u0452\1\u0442\42\0\1\u0280\4\u0452\2\0\1\u0452"+ + "\15\0\1\u0452\6\0\2\u0453\1\u0452\2\u0453\2\u0452\2\u0453"+ + "\1\u0452\1\u0442\43\0\4\u0454\2\0\1\u0454\15\0\1\u0454"+ + "\6\0\12\u0454\14\0\1\u0230\27\0\4\u0455\2\0\1\u0455"+ + "\15\0\1\u0455\6\0\12\u0455\1\u042f\13\0\1\u0230\26\0"+ + "\1\u0280\4\u0455\2\0\1\u0455\15\0\1\u0455\6\0\12\u0455"+ + "\1\u042f\13\0\1\u0230\74\0\1\u0421\43\0\4\u0456\2\0"+ + "\1\u0456\15\0\1\u0456\6\0\12\u0456\1\u044b\43\0\4\u044f"+ + "\2\0\1\u044f\15\0\1\u044f\6\0\12\u044f\1\u03fa\42\0"+ + "\1\u02bf\4\u0456\2\0\1\u0456\15\0\1\u0456\6\0\12\u0457"+ + "\1\u044b\42\0\1\u02bf\4\u0456\2\0\1\u0456\15\0\1\u0456"+ + "\6\0\12\u0456\1\u044b\42\0\1\u02bf\4\u0456\2\0\1\u0456"+ + "\15\0\1\u0456\6\0\2\u0457\1\u0456\2\u0457\2\u0456\2\u0457"+ + "\1\u0456\1\u044b\43\0\4\u0458\2\0\1\u0458\15\0\1\u0458"+ + "\6\0\12\u0458\14\0\1\u0273\27\0\4\u0459\2\0\1\u0459"+ + "\15\0\1\u0459\6\0\12\u0459\1\u043b\13\0\1\u0273\26\0"+ + "\1\u02bf\4\u0459\2\0\1\u0459\15\0\1\u0459\6\0\12\u0459"+ + "\1\u043b\13\0\1\u0273\27\0\4\u045a\2\0\1\u045a\15\0"+ + "\1\u045a\6\0\12\u045a\1\u0442\42\0\1\u0280\4\u045a\2\0"+ + "\1\u045a\15\0\1\u045a\6\0\12\u045a\1\u0442\43\0\4\u045b"+ + "\2\0\1\u045b\15\0\1\u045b\6\0\12\u045b\14\0\1\u0230"+ + "\74\0\1\u042f\13\0\1\u0230\27\0\4\u045c\2\0\1\u045c"+ + "\15\0\1\u045c\6\0\12\u045c\1\u044b\42\0\1\u02bf\4\u045c"+ + "\2\0\1\u045c\15\0\1\u045c\6\0\12\u045c\1\u044b\43\0"+ + "\4\u045d\2\0\1\u045d\15\0\1\u045d\6\0\12\u045d\14\0"+ + "\1\u0273\74\0\1\u043b\13\0\1\u0273\74\0\1\u0442\43\0"+ + "\4\u03e4\2\0\1\u03e4\15\0\1\u03e4\6\0\12\u03e4\14\0"+ + "\1\u0230\74\0\1\u044b\43\0\4\u03fa\2\0\1\u03fa\15\0"+ + "\1\u03fa\6\0\12\u03fa\14\0\1\u0273\15\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[80884]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\0\1\11\17\1\2\11\1\1\1\0\1\1\1\0"+ + "\1\1\6\0\2\1\1\0\3\1\1\0\1\1\1\0"+ + "\4\1\11\0\32\1\3\0\4\1\32\0\4\1\10\0"+ + "\1\11\1\0\23\1\2\0\1\1\1\0\7\1\3\0"+ + "\2\1\1\0\4\1\1\0\2\1\1\0\2\1\10\0"+ + "\1\1\32\0\1\1\1\0\11\1\1\0\1\1\2\0"+ + "\1\1\1\0\1\1\10\0\3\1\15\0\11\1\3\0"+ + "\2\1\1\0\4\1\1\0\4\1\1\0\2\1\1\0"+ + "\2\1\1\0\3\1\7\0\2\1\20\0\1\1\10\0"+ + "\1\1\3\0\1\1\32\0\3\1\23\0\1\1\27\0"+ + "\1\1\4\0\1\1\6\0\1\1\4\0\2\1\36\0"+ + "\1\1\51\0\1\1\42\0\1\1\50\0\1\1\122\0"+ + "\1\1\116\0\1\1\107\0\1\1\74\0\1\1\51\0"+ + "\1\1\333\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[1117]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** number of newlines encountered up to the start of the matched text */ + private int yyline; + + /** the number of characters up to the start of the matched text */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + /* user code: */ + /** Alphanumeric sequences */ + public static final String WORD_TYPE = ""; + + /** Numbers */ + public static final String NUMERIC_TYPE = ""; + + /** URLs with scheme: HTTP(S), FTP, or FILE; no-scheme URLs match HTTP syntax */ + public static final String URL_TYPE = ""; + + /** E-mail addresses */ + public static final String EMAIL_TYPE = " + * See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA + */ + public static final String SOUTH_EAST_ASIAN_TYPE = ""; + + public static final String IDEOGRAPHIC_TYPE = ""; + + public static final String HIRAGANA_TYPE = ""; + + private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class); + private final OffsetAttribute offsetAtt = addAttribute(OffsetAttribute.class); + private final PositionIncrementAttribute posIncrAtt + = addAttribute(PositionIncrementAttribute.class); + private final TypeAttribute typeAtt = addAttribute(TypeAttribute.class); + + private int maxTokenLength = StandardAnalyzer.DEFAULT_MAX_TOKEN_LENGTH; + private int posIncr; + + + /** + * @param source The AttributeSource to use + * @param input The input reader + */ + public UAX29URLEmailTokenizer(AttributeSource source, Reader input) { + super(source, input); + zzReader = input; + } + + /** + * @param factory The AttributeFactory to use + * @param input The input reader + */ + public UAX29URLEmailTokenizer(AttributeFactory factory, Reader input) { + super(factory, input); + zzReader = input; + } + + /** + * Set the max allowed token length. Any token longer than this is skipped. + * @param length the new max allowed token length + */ + public void setMaxTokenLength(int length) { + this.maxTokenLength = length; + } + + /** + * Returns the max allowed token length. Any token longer than this is + * skipped. + * @return the max allowed token length + */ + public int getMaxTokenLength() { + return maxTokenLength; + } + + @Override + public final void end() { + // set final offset + int finalOffset = correctOffset(yychar + yylength()); + offsetAtt.setOffset(finalOffset, finalOffset); + } + + @Override + public void reset(Reader reader) throws IOException { + super.reset(reader); + yyreset(reader); + } + + @Override + public final boolean incrementToken() throws IOException { + // This method is required because of two JFlex limitations: + // 1. No way to insert code at the beginning of the generated scanning + // get-next-token method; and + // 2. No way to declare @Override on the generated scanning method. + clearAttributes(); + posIncr = 1; + return getNextToken(); + } + + /** + * Populates this TokenStream's CharTermAttribute and OffsetAttribute from + * the current match, the TypeAttribute from the passed-in tokenType, and + * the PositionIncrementAttribute to one, unless the immediately previous + * token(s) was/were skipped because maxTokenLength was exceeded, in which + * case the PositionIncrementAttribute is set to one plus the number of + * skipped overly long tokens. + *

      + * If maxTokenLength is exceeded, the CharTermAttribute is set back to empty + * and false is returned. + * + * @param tokenType The type of the matching token + * @return true there is a token available (not too long); false otherwise + */ + private boolean populateAttributes(String tokenType) { + boolean isTokenAvailable = false; + if (yylength() > maxTokenLength) { + // When we skip a too-long token, we treat it like a stopword, introducing + // a position increment gap + ++posIncr; + } else { + termAtt.copyBuffer(zzBuffer, zzStartRead, yylength()); + posIncrAtt.setPositionIncrement(posIncr); + offsetAtt.setOffset(correctOffset(yychar), + correctOffset(yychar + yylength())); + typeAtt.setType(tokenType); + isTokenAvailable = true; + } + return isTokenAvailable; + } + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public UAX29URLEmailTokenizer(java.io.Reader in) { + super(in); + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public UAX29URLEmailTokenizer(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 2336) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + } + + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length-zzEndRead); + + if (numRead > 0) { + zzEndRead+= numRead; + return false; + } + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } + } + + // numRead < 0 + return true; + } + + + /** + * Closes the input stream. + */ + private final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader the new input stream + */ + private final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + + + /** + * Returns the current lexical state. + */ + private final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + private final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + private final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + private final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + private final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + private void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean getNextToken() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + yychar+= zzMarkedPosL-zzStartRead; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; + + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 8: + { if (populateAttributes(URL_TYPE)) return true; + } + case 9: break; + case 5: + { if (populateAttributes(IDEOGRAPHIC_TYPE)) return true; + } + case 10: break; + case 1: + { /* Not numeric, word, ideographic, hiragana, or SE Asian -- ignore it. */ + } + case 11: break; + case 3: + { if (populateAttributes(NUMERIC_TYPE)) return true; + } + case 12: break; + case 6: + { if (populateAttributes(HIRAGANA_TYPE)) return true; + } + case 13: break; + case 4: + { if (populateAttributes(SOUTH_EAST_ASIAN_TYPE)) return true; + } + case 14: break; + case 2: + { if (populateAttributes(WORD_TYPE)) return true; + } + case 15: break; + case 7: + { if (populateAttributes(EMAIL_TYPE)) return true; + } + case 16: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return false; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29Tokenizer.jflex b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29URLEmailTokenizer.jflex similarity index 60% rename from modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29Tokenizer.jflex rename to modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29URLEmailTokenizer.jflex index 4552cecd1d8..fefd9c717cf 100644 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29Tokenizer.jflex +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/UAX29URLEmailTokenizer.jflex @@ -32,11 +32,14 @@ import org.apache.lucene.util.AttributeSource; * This class implements Word Break rules from the Unicode Text Segmentation * algorithm, as specified in * Unicode Standard Annex #29 + * URLs and email addresses are also tokenized according to the relevant RFCs. *

      * Tokens produced are of the following types: *

        *
      • <ALPHANUM>: A sequence of alphabetic and numeric characters
      • *
      • <NUM>: A number
      • + *
      • <URL>: A URL
      • + *
      • <EMAIL>: An email address
      • *
      • <SOUTHEAST_ASIAN>: A sequence of characters from South and Southeast * Asian languages, including Thai, Lao, Myanmar, and Khmer
      • *
      • <IDEOGRAPHIC>: A single CJKV ideographic character
      • @@ -57,7 +60,7 @@ import org.apache.lucene.util.AttributeSource; %final %public %apiprivate -%class UAX29Tokenizer +%class UAX29URLEmailTokenizer %extends Tokenizer %type boolean %function getNextToken @@ -67,7 +70,7 @@ import org.apache.lucene.util.AttributeSource; super(in); %init} -// WB4. X (Extend | Format)* --> X +// UAX#29 WB4. X (Extend | Format)* --> X // ALetterEx = \p{WB:ALetter} [\p{WB:Format}\p{WB:Extend}]* // TODO: Convert hard-coded full-width numeric range to property intersection (something like [\p{Full-Width}&&\p{Numeric}]) once JFlex supports it @@ -77,6 +80,85 @@ MidLetterEx = [\p{WB:MidLetter}\p{WB:MidNumLet}] [\p{WB:Format}\p{WB:Extend}] MidNumericEx = [\p{WB:MidNum}\p{WB:MidNumLet}] [\p{WB:Format}\p{WB:Extend}]* ExtendNumLetEx = \p{WB:ExtendNumLet} [\p{WB:Format}\p{WB:Extend}]* + +// URL and E-mail syntax specifications: +// +// RFC-952: DOD INTERNET HOST TABLE SPECIFICATION +// RFC-1035: DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION +// RFC-1123: Requirements for Internet Hosts - Application and Support +// RFC-1738: Uniform Resource Locators (URL) +// RFC-3986: Uniform Resource Identifier (URI): Generic Syntax +// RFC-5234: Augmented BNF for Syntax Specifications: ABNF +// RFC-5321: Simple Mail Transfer Protocol +// RFC-5322: Internet Message Format + +%include src/java/org/apache/lucene/analysis/standard/ASCIITLD.jflex-macro + +DomainLabel = [A-Za-z0-9] ([-A-Za-z0-9]* [A-Za-z0-9])? +DomainNameStrict = {DomainLabel} ("." {DomainLabel})* {ASCIITLD} +DomainNameLoose = {DomainLabel} ("." {DomainLabel})* + +IPv4DecimalOctet = "0"{0,2} [0-9] | "0"? [1-9][0-9] | "1" [0-9][0-9] | "2" ([0-4][0-9] | "5" [0-5]) +IPv4Address = {IPv4DecimalOctet} ("." {IPv4DecimalOctet}){3} +IPv6Hex16Bit = [0-9A-Fa-f]{1,4} +IPv6LeastSignificant32Bits = {IPv4Address} | ({IPv6Hex16Bit} ":" {IPv6Hex16Bit}) +IPv6Address = ({IPv6Hex16Bit} ":"){6} {IPv6LeastSignificant32Bits} + | "::" ({IPv6Hex16Bit} ":"){5} {IPv6LeastSignificant32Bits} + | {IPv6Hex16Bit}? "::" ({IPv6Hex16Bit} ":"){4} {IPv6LeastSignificant32Bits} + | (({IPv6Hex16Bit} ":"){0,1} {IPv6Hex16Bit})? "::" ({IPv6Hex16Bit} ":"){3} {IPv6LeastSignificant32Bits} + | (({IPv6Hex16Bit} ":"){0,2} {IPv6Hex16Bit})? "::" ({IPv6Hex16Bit} ":"){2} {IPv6LeastSignificant32Bits} + | (({IPv6Hex16Bit} ":"){0,3} {IPv6Hex16Bit})? "::" {IPv6Hex16Bit} ":" {IPv6LeastSignificant32Bits} + | (({IPv6Hex16Bit} ":"){0,4} {IPv6Hex16Bit})? "::" {IPv6LeastSignificant32Bits} + | (({IPv6Hex16Bit} ":"){0,5} {IPv6Hex16Bit})? "::" {IPv6Hex16Bit} + | (({IPv6Hex16Bit} ":"){0,6} {IPv6Hex16Bit})? "::" + +URIunreserved = [-._~A-Za-z0-9] +URIpercentEncoded = "%" [0-9A-Fa-f]{2} +URIsubDelims = [!$&'()*+,;=] +URIloginSegment = ({URIunreserved} | {URIpercentEncoded} | {URIsubDelims})* +URIlogin = {URIloginSegment} (":" {URIloginSegment})? "@" +URIquery = "?" ({URIunreserved} | {URIpercentEncoded} | {URIsubDelims} | [:@/?])* +URIfragment = "#" ({URIunreserved} | {URIpercentEncoded} | {URIsubDelims} | [:@/?])* +URIport = ":" [0-9]{1,5} +URIhostStrict = ("[" {IPv6Address} "]") | {IPv4Address} | {DomainNameStrict} +URIhostLoose = ("[" {IPv6Address} "]") | {IPv4Address} | {DomainNameLoose} + +URIauthorityStrict = {URIhostStrict} {URIport}? +URIauthorityLoose = {URIlogin}? {URIhostLoose} {URIport}? + +HTTPsegment = ({URIunreserved} | {URIpercentEncoded} | [;:@&=])* +HTTPpath = ("/" {HTTPsegment})* +HTTPscheme = [hH][tT][tT][pP][sS]? "://" +HTTPurlFull = {HTTPscheme} {URIauthorityLoose} {HTTPpath}? {URIquery}? {URIfragment}? +// {HTTPurlNoScheme} excludes {URIlogin}, because it could otherwise accept e-mail addresses +HTTPurlNoScheme = {URIauthorityStrict} {HTTPpath}? {URIquery}? {URIfragment}? +HTTPurl = {HTTPurlFull} | {HTTPurlNoScheme} + +FTPorFILEsegment = ({URIunreserved} | {URIpercentEncoded} | [?:@&=])* +FTPorFILEpath = "/" {FTPorFILEsegment} ("/" {FTPorFILEsegment})* +FTPtype = ";" [tT][yY][pP][eE] "=" [aAiIdD] +FTPscheme = [fF][tT][pP] "://" +FTPurl = {FTPscheme} {URIauthorityLoose} {FTPorFILEpath} {FTPtype}? {URIfragment}? + +FILEscheme = [fF][iI][lL][eE] "://" +FILEurl = {FILEscheme} {URIhostLoose}? {FTPorFILEpath} {URIfragment}? + +URL = {HTTPurl} | {FTPurl} | {FILEurl} + +EMAILquotedString = [\"] ([\u0001-\u0008\u000B\u000C\u000E-\u0021\u0023-\u005B\u005D-\u007E] | [\\] [\u0000-\u007F])* [\"] +EMAILatomText = [A-Za-z0-9!#$%&'*+-/=?\^_`{|}~] +EMAILlabel = {EMAILatomText}+ | {EMAILquotedString} +EMAILlocalPart = {EMAILlabel} ("." {EMAILlabel})* +EMAILdomainLiteralText = [\u0001-\u0008\u000B\u000C\u000E-\u005A\u005E-\u007F] | [\\] [\u0000-\u007F] +// DFA minimization allows {IPv6Address} and {IPv4Address} to be included +// in the {EMAILbracketedHost} definition without incurring any size penalties, +// since {EMAILdomainLiteralText} recognizes all valid IP addresses. +// The IP address regexes are included in {EMAILbracketedHost} simply as a +// reminder that they are acceptable bracketed host forms. +EMAILbracketedHost = "[" ({EMAILdomainLiteralText}* | {IPv4Address} | [iI][pP][vV] "6:" {IPv6Address}) "]" +EMAIL = {EMAILlocalPart} "@" ({DomainNameStrict} | {EMAILbracketedHost}) + + %{ /** Alphanumeric sequences */ public static final String WORD_TYPE = ""; @@ -84,6 +166,12 @@ ExtendNumLetEx = \p{WB:ExtendNumLet} [\p{WB:Format}\p{WB:Extend}] /** Numbers */ public static final String NUMERIC_TYPE = ""; + /** URLs with scheme: HTTP(S), FTP, or FILE; no-scheme URLs match HTTP syntax */ + public static final String URL_TYPE = ""; + + /** E-mail addresses */ + public static final String EMAIL_TYPE = "> { return false; } +{URL} { if (populateAttributes(URL_TYPE)) return true; } +{EMAIL} {if (populateAttributes(EMAIL_TYPE)) return true; } -// WB8. Numeric × Numeric -// WB11. Numeric (MidNum | MidNumLet) × Numeric -// WB12. Numeric × (MidNum | MidNumLet) Numeric -// WB13a. (ALetter | Numeric | Katakana | ExtendNumLet) × ExtendNumLet -// WB13b. ExtendNumLet × (ALetter | Numeric | Katakana) +// UAX#29 WB8. Numeric × Numeric +// WB11. Numeric (MidNum | MidNumLet) × Numeric +// WB12. Numeric × (MidNum | MidNumLet) Numeric +// WB13a. (ALetter | Numeric | Katakana | ExtendNumLet) × ExtendNumLet +// WB13b. ExtendNumLet × (ALetter | Numeric | Katakana) // {ExtendNumLetEx}* {NumericEx} ({ExtendNumLetEx}+ {NumericEx} | {MidNumericEx} {NumericEx} @@ -220,14 +310,14 @@ ExtendNumLetEx = \p{WB:ExtendNumLet} [\p{WB:Format}\p{WB:Extend}] { if (populateAttributes(NUMERIC_TYPE)) return true; } -// WB5. ALetter × ALetter -// WB6. ALetter × (MidLetter | MidNumLet) ALetter -// WB7. ALetter (MidLetter | MidNumLet) × ALetter -// WB9. ALetter × Numeric -// WB10. Numeric × ALetter -// WB13. Katakana × Katakana -// WB13a. (ALetter | Numeric | Katakana | ExtendNumLet) × ExtendNumLet -// WB13b. ExtendNumLet × (ALetter | Numeric | Katakana) +// UAX#29 WB5. ALetter × ALetter +// WB6. ALetter × (MidLetter | MidNumLet) ALetter +// WB7. ALetter (MidLetter | MidNumLet) × ALetter +// WB9. ALetter × Numeric +// WB10. Numeric × ALetter +// WB13. Katakana × Katakana +// WB13a. (ALetter | Numeric | Katakana | ExtendNumLet) × ExtendNumLet +// WB13b. ExtendNumLet × (ALetter | Numeric | Katakana) // {ExtendNumLetEx}* ( {KatakanaEx} ({ExtendNumLetEx}* {KatakanaEx})* | ( {NumericEx} ({ExtendNumLetEx}+ {NumericEx} | {MidNumericEx} {NumericEx} | {NumericEx})* @@ -260,15 +350,15 @@ ExtendNumLetEx = \p{WB:ExtendNumLet} [\p{WB:Format}\p{WB:Extend}] // \p{LB:Complex_Context}+ { if (populateAttributes(SOUTH_EAST_ASIAN_TYPE)) return true; } -// WB14. Any ÷ Any +// UAX#29 WB14. Any ÷ Any // \p{Script:Han} { if (populateAttributes(IDEOGRAPHIC_TYPE)) return true; } \p{Script:Hiragana} { if (populateAttributes(HIRAGANA_TYPE)) return true; } -// WB3. CR × LF -// WB3a. (Newline | CR | LF) ÷ -// WB3b. ÷ (Newline | CR | LF) -// WB14. Any ÷ Any +// UAX#29 WB3. CR × LF +// WB3a. (Newline | CR | LF) ÷ +// WB3b. ÷ (Newline | CR | LF) +// WB14. Any ÷ Any // [^] { /* Not numeric, word, ideographic, hiragana, or SE Asian -- ignore it. */ } diff --git a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/package.html b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/package.html index dc6b74a8a5d..e39f74bfb93 100644 --- a/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/package.html +++ b/modules/analysis/common/src/java/org/apache/lucene/analysis/standard/package.html @@ -27,7 +27,10 @@ as of Lucene 3.1, implements the Word Break rules from the Unicode Text Segmentation algorithm, as specified in Unicode Standard Annex #29. - URLs and email addresses are also tokenized according to the relevant RFCs. + Unlike UAX29URLEmailTokenizer, URLs and email addresses are + not tokenized as single tokens, but are instead split up into + tokens according to the UAX#29 word break rules. +
        StandardAnalyzer includes StandardTokenizer, StandardFilter, @@ -46,13 +49,11 @@ LowerCaseFilter and StopFilter. -
      • UAX29Tokenizer: - implements the Word Break rules from the Unicode Text Segmentation - algorithm, as specified in +
      • UAX29URLEmailTokenizer: + implements the Word Break rules from the Unicode Text Segmentation + algorithm, as specified in Unicode Standard Annex #29. - Unlike StandardTokenizer, URLs and email addresses are - not tokenized as single tokens, but are instead split up into - tokens according to the UAX#29 word break rules. + URLs and email addresses are also tokenized according to the relevant RFCs.
      diff --git a/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java b/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java index 4b7ececa775..cff13e3b68d 100644 --- a/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java +++ b/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestStandardAnalyzer.java @@ -2,21 +2,14 @@ package org.apache.lucene.analysis.core; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.BaseTokenStreamTestCase; -import org.apache.lucene.analysis.TokenFilter; -import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.Tokenizer; import org.apache.lucene.analysis.standard.StandardTokenizer; -import org.apache.lucene.analysis.tokenattributes.TypeAttribute; import org.apache.lucene.analysis.util.ReusableAnalyzerBase; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; /** * Licensed to the Apache Software Foundation (ASF) under one or more @@ -58,63 +51,6 @@ public class TestStandardAnalyzer extends BaseTokenStreamTestCase { } }; - /** Passes through tokens with type "" and blocks all other types. */ - private class URLFilter extends TokenFilter { - private final TypeAttribute typeAtt = addAttribute(TypeAttribute.class); - public URLFilter(TokenStream in) { - super(in); - } - @Override - public final boolean incrementToken() throws java.io.IOException { - boolean isTokenAvailable = false; - while (input.incrementToken()) { - if (typeAtt.type() == StandardTokenizer.TOKEN_TYPES[StandardTokenizer.URL]) { - isTokenAvailable = true; - break; - } - } - return isTokenAvailable; - } - } - - /** Passes through tokens with type "" and blocks all other types. */ - private class EmailFilter extends TokenFilter { - private final TypeAttribute typeAtt = addAttribute(TypeAttribute.class); - public EmailFilter(TokenStream in) { - super(in); - } - @Override - public final boolean incrementToken() throws java.io.IOException { - boolean isTokenAvailable = false; - while (input.incrementToken()) { - if (typeAtt.type() == StandardTokenizer.TOKEN_TYPES[StandardTokenizer.EMAIL]) { - isTokenAvailable = true; - break; - } - } - return isTokenAvailable; - } - } - - private Analyzer urlAnalyzer = new ReusableAnalyzerBase() { - @Override - protected TokenStreamComponents createComponents(String fieldName, Reader reader) { - StandardTokenizer tokenizer = new StandardTokenizer(TEST_VERSION_CURRENT, reader); - tokenizer.setMaxTokenLength(Integer.MAX_VALUE); // Tokenize arbitrary length URLs - TokenFilter filter = new URLFilter(tokenizer); - return new TokenStreamComponents(tokenizer, filter); - } - }; - - private Analyzer emailAnalyzer = new ReusableAnalyzerBase() { - @Override - protected TokenStreamComponents createComponents(String fieldName, Reader reader) { - Tokenizer tokenizer = new StandardTokenizer(TEST_VERSION_CURRENT, reader); - TokenFilter filter = new EmailFilter(tokenizer); - return new TokenStreamComponents(tokenizer, filter); - } - }; - public void testArmenian() throws Exception { BaseTokenStreamTestCase.assertAnalyzesTo(a, "Վիքիպեդիայի 13 միլիոն հոդվածները (4,600` հայերեն վիքիպեդիայում) գրվել են կամավորների կողմից ու համարյա բոլոր հոդվածները կարող է խմբագրել ցանկաց մարդ ով կարող է բացել Վիքիպեդիայի կայքը։", new String[] { "Վիքիպեդիայի", "13", "միլիոն", "հոդվածները", "4,600", "հայերեն", "վիքիպեդիայում", "գրվել", "են", "կամավորների", "կողմից", @@ -261,138 +197,6 @@ public class TestStandardAnalyzer extends BaseTokenStreamTestCase { new String[] { "", "", "", "" }); } - public void testWikiURLs() throws Exception { - Reader reader = null; - String luceneResourcesWikiPage; - try { - reader = new InputStreamReader - (getClass().getResourceAsStream("LuceneResourcesWikiPage.html"), "UTF-8"); - StringBuilder builder = new StringBuilder(); - char[] buffer = new char[1024]; - int numCharsRead; - while (-1 != (numCharsRead = reader.read(buffer))) { - builder.append(buffer, 0, numCharsRead); - } - luceneResourcesWikiPage = builder.toString(); - } finally { - if (null != reader) { - reader.close(); - } - } - assertTrue(null != luceneResourcesWikiPage - && luceneResourcesWikiPage.length() > 0); - BufferedReader bufferedReader = null; - String[] urls; - try { - List urlList = new ArrayList(); - bufferedReader = new BufferedReader(new InputStreamReader - (getClass().getResourceAsStream("LuceneResourcesWikiPageURLs.txt"), "UTF-8")); - String line; - while (null != (line = bufferedReader.readLine())) { - line = line.trim(); - if (line.length() > 0) { - urlList.add(line); - } - } - urls = urlList.toArray(new String[urlList.size()]); - } finally { - if (null != bufferedReader) { - bufferedReader.close(); - } - } - assertTrue(null != urls && urls.length > 0); - BaseTokenStreamTestCase.assertAnalyzesTo - (urlAnalyzer, luceneResourcesWikiPage, urls); - } - - public void testEmails() throws Exception { - Reader reader = null; - String randomTextWithEmails; - try { - reader = new InputStreamReader - (getClass().getResourceAsStream("random.text.with.email.addresses.txt"), "UTF-8"); - StringBuilder builder = new StringBuilder(); - char[] buffer = new char[1024]; - int numCharsRead; - while (-1 != (numCharsRead = reader.read(buffer))) { - builder.append(buffer, 0, numCharsRead); - } - randomTextWithEmails = builder.toString(); - } finally { - if (null != reader) { - reader.close(); - } - } - assertTrue(null != randomTextWithEmails - && randomTextWithEmails.length() > 0); - BufferedReader bufferedReader = null; - String[] emails; - try { - List emailList = new ArrayList(); - bufferedReader = new BufferedReader(new InputStreamReader - (getClass().getResourceAsStream("email.addresses.from.random.text.with.email.addresses.txt"), "UTF-8")); - String line; - while (null != (line = bufferedReader.readLine())) { - line = line.trim(); - if (line.length() > 0) { - emailList.add(line); - } - } - emails = emailList.toArray(new String[emailList.size()]); - } finally { - if (null != bufferedReader) { - bufferedReader.close(); - } - } - assertTrue(null != emails && emails.length > 0); - BaseTokenStreamTestCase.assertAnalyzesTo - (emailAnalyzer, randomTextWithEmails, emails); - } - - public void testURLs() throws Exception { - Reader reader = null; - String randomTextWithURLs; - try { - reader = new InputStreamReader - (getClass().getResourceAsStream("random.text.with.urls.txt"), "UTF-8"); - StringBuilder builder = new StringBuilder(); - char[] buffer = new char[1024]; - int numCharsRead; - while (-1 != (numCharsRead = reader.read(buffer))) { - builder.append(buffer, 0, numCharsRead); - } - randomTextWithURLs = builder.toString(); - } finally { - if (null != reader) { - reader.close(); - } - } - assertTrue(null != randomTextWithURLs - && randomTextWithURLs.length() > 0); - BufferedReader bufferedReader = null; - String[] urls; - try { - List urlList = new ArrayList(); - bufferedReader = new BufferedReader(new InputStreamReader - (getClass().getResourceAsStream("urls.from.random.text.with.urls.txt"), "UTF-8")); - String line; - while (null != (line = bufferedReader.readLine())) { - line = line.trim(); - if (line.length() > 0) { - urlList.add(line); - } - } - urls = urlList.toArray(new String[urlList.size()]); - } finally { - if (null != bufferedReader) { - bufferedReader.close(); - } - } - assertTrue(null != urls && urls.length > 0); - BaseTokenStreamTestCase.assertAnalyzesTo - (urlAnalyzer, randomTextWithURLs, urls); - } - public void testUnicodeWordBreaks() throws Exception { WordBreakTestUnicode_6_0_0 wordBreakTest = new WordBreakTestUnicode_6_0_0(); wordBreakTest.test(a); diff --git a/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29Tokenizer.java b/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29URLEmailTokenizer.java similarity index 63% rename from modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29Tokenizer.java rename to modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29URLEmailTokenizer.java index 060c6ddf0b1..7111920d895 100644 --- a/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29Tokenizer.java +++ b/modules/analysis/common/src/test/org/apache/lucene/analysis/core/TestUAX29URLEmailTokenizer.java @@ -2,14 +2,21 @@ package org.apache.lucene.analysis.core; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.BaseTokenStreamTestCase; +import org.apache.lucene.analysis.TokenFilter; +import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.Tokenizer; -import org.apache.lucene.analysis.standard.UAX29Tokenizer; +import org.apache.lucene.analysis.standard.UAX29URLEmailTokenizer; +import org.apache.lucene.analysis.tokenattributes.TypeAttribute; import org.apache.lucene.analysis.util.ReusableAnalyzerBase; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; import java.io.Reader; import java.io.StringReader; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * Licensed to the Apache Software Foundation (ASF) under one or more @@ -28,7 +35,7 @@ import java.util.Arrays; * limitations under the License. */ -public class TestUAX29Tokenizer extends BaseTokenStreamTestCase { +public class TestUAX29URLEmailTokenizer extends BaseTokenStreamTestCase { public void testHugeDoc() throws IOException { StringBuilder sb = new StringBuilder(); @@ -37,7 +44,7 @@ public class TestUAX29Tokenizer extends BaseTokenStreamTestCase { sb.append(whitespace); sb.append("testing 1234"); String input = sb.toString(); - UAX29Tokenizer tokenizer = new UAX29Tokenizer(new StringReader(input)); + UAX29URLEmailTokenizer tokenizer = new UAX29URLEmailTokenizer(new StringReader(input)); BaseTokenStreamTestCase.assertTokenStreamContents(tokenizer, new String[] { "testing", "1234" }); } @@ -46,11 +53,70 @@ public class TestUAX29Tokenizer extends BaseTokenStreamTestCase { protected TokenStreamComponents createComponents (String fieldName, Reader reader) { - Tokenizer tokenizer = new UAX29Tokenizer(reader); + Tokenizer tokenizer = new UAX29URLEmailTokenizer(reader); return new TokenStreamComponents(tokenizer); } }; + + /** Passes through tokens with type "" and blocks all other types. */ + private class URLFilter extends TokenFilter { + private final TypeAttribute typeAtt = addAttribute(TypeAttribute.class); + public URLFilter(TokenStream in) { + super(in); + } + @Override + public final boolean incrementToken() throws java.io.IOException { + boolean isTokenAvailable = false; + while (input.incrementToken()) { + if (typeAtt.type() == UAX29URLEmailTokenizer.URL_TYPE) { + isTokenAvailable = true; + break; + } + } + return isTokenAvailable; + } + } + + /** Passes through tokens with type "" and blocks all other types. */ + private class EmailFilter extends TokenFilter { + private final TypeAttribute typeAtt = addAttribute(TypeAttribute.class); + public EmailFilter(TokenStream in) { + super(in); + } + @Override + public final boolean incrementToken() throws java.io.IOException { + boolean isTokenAvailable = false; + while (input.incrementToken()) { + if (typeAtt.type() == UAX29URLEmailTokenizer.EMAIL_TYPE) { + isTokenAvailable = true; + break; + } + } + return isTokenAvailable; + } + } + + private Analyzer urlAnalyzer = new ReusableAnalyzerBase() { + @Override + protected TokenStreamComponents createComponents(String fieldName, Reader reader) { + UAX29URLEmailTokenizer tokenizer = new UAX29URLEmailTokenizer(reader); + tokenizer.setMaxTokenLength(Integer.MAX_VALUE); // Tokenize arbitrary length URLs + TokenFilter filter = new URLFilter(tokenizer); + return new TokenStreamComponents(tokenizer, filter); + } + }; + + private Analyzer emailAnalyzer = new ReusableAnalyzerBase() { + @Override + protected TokenStreamComponents createComponents(String fieldName, Reader reader) { + UAX29URLEmailTokenizer tokenizer = new UAX29URLEmailTokenizer(reader); + TokenFilter filter = new EmailFilter(tokenizer); + return new TokenStreamComponents(tokenizer, filter); + } + }; + + public void testArmenian() throws Exception { BaseTokenStreamTestCase.assertAnalyzesTo(a, "Վիքիպեդիայի 13 միլիոն հոդվածները (4,600` հայերեն վիքիպեդիայում) գրվել են կամավորների կողմից ու համարյա բոլոր հոդվածները կարող է խմբագրել ցանկաց մարդ ով կարող է բացել Վիքիպեդիայի կայքը։", new String[] { "Վիքիպեդիայի", "13", "միլիոն", "հոդվածները", "4,600", "հայերեն", "վիքիպեդիայում", "գրվել", "են", "կամավորների", "կողմից", @@ -163,7 +229,6 @@ public class TestUAX29Tokenizer extends BaseTokenStreamTestCase { BaseTokenStreamTestCase.assertAnalyzesTo(a, "21.35", new String[]{"21.35"}); BaseTokenStreamTestCase.assertAnalyzesTo(a, "R2D2 C3PO", new String[]{"R2D2", "C3PO"}); BaseTokenStreamTestCase.assertAnalyzesTo(a, "216.239.63.104", new String[]{"216.239.63.104"}); - BaseTokenStreamTestCase.assertAnalyzesTo(a, "216.239.63.104", new String[]{"216.239.63.104"}); } public void testTextWithNumbersSA() throws Exception { @@ -197,6 +262,140 @@ public class TestUAX29Tokenizer extends BaseTokenStreamTestCase { new String[] { "", "", "", "" }); } + public void testWikiURLs() throws Exception { + Reader reader = null; + String luceneResourcesWikiPage; + try { + reader = new InputStreamReader(getClass().getResourceAsStream + ("LuceneResourcesWikiPage.html"), "UTF-8"); + StringBuilder builder = new StringBuilder(); + char[] buffer = new char[1024]; + int numCharsRead; + while (-1 != (numCharsRead = reader.read(buffer))) { + builder.append(buffer, 0, numCharsRead); + } + luceneResourcesWikiPage = builder.toString(); + } finally { + if (null != reader) { + reader.close(); + } + } + assertTrue(null != luceneResourcesWikiPage + && luceneResourcesWikiPage.length() > 0); + BufferedReader bufferedReader = null; + String[] urls; + try { + List urlList = new ArrayList(); + bufferedReader = new BufferedReader(new InputStreamReader + (getClass().getResourceAsStream("LuceneResourcesWikiPageURLs.txt"), "UTF-8")); + String line; + while (null != (line = bufferedReader.readLine())) { + line = line.trim(); + if (line.length() > 0) { + urlList.add(line); + } + } + urls = urlList.toArray(new String[urlList.size()]); + } finally { + if (null != bufferedReader) { + bufferedReader.close(); + } + } + assertTrue(null != urls && urls.length > 0); + BaseTokenStreamTestCase.assertAnalyzesTo + (urlAnalyzer, luceneResourcesWikiPage, urls); + } + + public void testEmails() throws Exception { + Reader reader = null; + String randomTextWithEmails; + try { + reader = new InputStreamReader(getClass().getResourceAsStream + ("random.text.with.email.addresses.txt"), "UTF-8"); + StringBuilder builder = new StringBuilder(); + char[] buffer = new char[1024]; + int numCharsRead; + while (-1 != (numCharsRead = reader.read(buffer))) { + builder.append(buffer, 0, numCharsRead); + } + randomTextWithEmails = builder.toString(); + } finally { + if (null != reader) { + reader.close(); + } + } + assertTrue(null != randomTextWithEmails + && randomTextWithEmails.length() > 0); + BufferedReader bufferedReader = null; + String[] emails; + try { + List emailList = new ArrayList(); + bufferedReader = new BufferedReader(new InputStreamReader + (getClass().getResourceAsStream + ("email.addresses.from.random.text.with.email.addresses.txt"), "UTF-8")); + String line; + while (null != (line = bufferedReader.readLine())) { + line = line.trim(); + if (line.length() > 0) { + emailList.add(line); + } + } + emails = emailList.toArray(new String[emailList.size()]); + } finally { + if (null != bufferedReader) { + bufferedReader.close(); + } + } + assertTrue(null != emails && emails.length > 0); + BaseTokenStreamTestCase.assertAnalyzesTo + (emailAnalyzer, randomTextWithEmails, emails); + } + + public void testURLs() throws Exception { + Reader reader = null; + String randomTextWithURLs; + try { + reader = new InputStreamReader(getClass().getResourceAsStream + ("random.text.with.urls.txt"), "UTF-8"); + StringBuilder builder = new StringBuilder(); + char[] buffer = new char[1024]; + int numCharsRead; + while (-1 != (numCharsRead = reader.read(buffer))) { + builder.append(buffer, 0, numCharsRead); + } + randomTextWithURLs = builder.toString(); + } finally { + if (null != reader) { + reader.close(); + } + } + assertTrue(null != randomTextWithURLs + && randomTextWithURLs.length() > 0); + BufferedReader bufferedReader = null; + String[] urls; + try { + List urlList = new ArrayList(); + bufferedReader = new BufferedReader(new InputStreamReader + (getClass().getResourceAsStream + ("urls.from.random.text.with.urls.txt"), "UTF-8")); + String line; + while (null != (line = bufferedReader.readLine())) { + line = line.trim(); + if (line.length() > 0) { + urlList.add(line); + } + } + urls = urlList.toArray(new String[urlList.size()]); + } finally { + if (null != bufferedReader) { + bufferedReader.close(); + } + } + assertTrue(null != urls && urls.length > 0); + BaseTokenStreamTestCase.assertAnalyzesTo + (urlAnalyzer, randomTextWithURLs, urls); + } + public void testUnicodeWordBreaks() throws Exception { WordBreakTestUnicode_6_0_0 wordBreakTest = new WordBreakTestUnicode_6_0_0(); wordBreakTest.test(a); diff --git a/modules/analysis/common/src/test/org/apache/lucene/analysis/th/TestThaiAnalyzer.java b/modules/analysis/common/src/test/org/apache/lucene/analysis/th/TestThaiAnalyzer.java index af45f0d17bc..01864f533f1 100644 --- a/modules/analysis/common/src/test/org/apache/lucene/analysis/th/TestThaiAnalyzer.java +++ b/modules/analysis/common/src/test/org/apache/lucene/analysis/th/TestThaiAnalyzer.java @@ -123,7 +123,7 @@ public class TestThaiAnalyzer extends BaseTokenStreamTestCase { assertAnalyzesToReuse( analyzer, "บริษัทชื่อ XY&Z - คุยกับ xyz@demo.com", - new String[] { "บริษัท", "ชื่อ", "xy", "z", "คุย", "กับ", "xyz@demo.com" }); + new String[] { "บริษัท", "ชื่อ", "xy", "z", "คุย", "กับ", "xyz", "demo.com" }); } /** @deprecated (3.1) for version back compat */ diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index e18e1ab03f8..9b9a70b6c0c 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -302,8 +302,10 @@ New Features * SOLR-1336: Add SmartChinese (word segmentation for Simplified Chinese) tokenizer and filters to contrib/analysis-extras (rmuir) -* SOLR-2211: Added UAX29TokenizerFactory, which implements UAX#29, a unicode algorithm - with good results for most languages. (Tom Burton-West via rmuir) +* SOLR-2211,LUCENE-2763: Added UAX29URLEmailTokenizerFactory, which implements + UAX#29, a unicode algorithm with good results for most languages, as well as + URL and E-mail tokenization according to the relevant RFCs. + (Tom Burton-West via rmuir) * SOLR-2237: Added StempelPolishStemFilterFactory to contrib/analysis-extras (rmuir) diff --git a/solr/src/java/org/apache/solr/analysis/UAX29TokenizerFactory.java b/solr/src/java/org/apache/solr/analysis/UAX29URLEmailTokenizerFactory.java similarity index 81% rename from solr/src/java/org/apache/solr/analysis/UAX29TokenizerFactory.java rename to solr/src/java/org/apache/solr/analysis/UAX29URLEmailTokenizerFactory.java index 8e87cb40f80..5b99c8d2a56 100644 --- a/solr/src/java/org/apache/solr/analysis/UAX29TokenizerFactory.java +++ b/solr/src/java/org/apache/solr/analysis/UAX29URLEmailTokenizerFactory.java @@ -20,7 +20,7 @@ package org.apache.solr.analysis; -import org.apache.lucene.analysis.standard.UAX29Tokenizer; +import org.apache.lucene.analysis.standard.UAX29URLEmailTokenizer; import java.io.Reader; import java.util.Map; @@ -30,14 +30,14 @@ import java.util.Map; * */ -public class UAX29TokenizerFactory extends BaseTokenizerFactory { +public class UAX29URLEmailTokenizerFactory extends BaseTokenizerFactory { @Override public void init(Map args) { super.init(args); assureMatchVersion(); } - public UAX29Tokenizer create(Reader input) { - return new UAX29Tokenizer(input); + public UAX29URLEmailTokenizer create(Reader input) { + return new UAX29URLEmailTokenizer(input); } } diff --git a/solr/src/test/org/apache/solr/analysis/TestUAX29TokenizerFactory.java b/solr/src/test/org/apache/solr/analysis/TestUAX29TokenizerFactory.java deleted file mode 100644 index 47acf8eac12..00000000000 --- a/solr/src/test/org/apache/solr/analysis/TestUAX29TokenizerFactory.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.apache.solr.analysis; - -/** - * 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.io.Reader; -import java.io.StringReader; -import org.apache.lucene.analysis.Tokenizer; - -/** - * A few tests based on org.apache.lucene.analysis.TestUAX29Tokenizer; - */ - -public class TestUAX29TokenizerFactory extends BaseTokenTestCase { - /** - * Test UAX29TokenizerFactory - */ - public void testUAX29Tokenizer() throws Exception { - Reader reader = new StringReader("Wha\u0301t's this thing do?"); - UAX29TokenizerFactory factory = new UAX29TokenizerFactory(); - factory.init(DEFAULT_VERSION_PARAM); - Tokenizer stream = factory.create(reader); - assertTokenStreamContents(stream, - new String[] {"Wha\u0301t's", "this", "thing", "do" }); - } - - public void testArabic() throws Exception { - Reader reader = new StringReader("الفيلم الوثائقي الأول عن ويكيبيديا يسمى \"الحقيقة بالأرقام: قصة ويكيبيديا\" (بالإنجليزية: Truth in Numbers: The Wikipedia Story)، سيتم إطلاقه في 2008."); - UAX29TokenizerFactory factory = new UAX29TokenizerFactory(); - factory.init(DEFAULT_VERSION_PARAM); - Tokenizer stream = factory.create(reader); - assertTokenStreamContents(stream, - new String[] {"الفيلم", "الوثائقي", "الأول", "عن", "ويكيبيديا", "يسمى", "الحقيقة", "بالأرقام", "قصة", "ويكيبيديا", - "بالإنجليزية", "Truth", "in", "Numbers", "The", "Wikipedia", "Story", "سيتم", "إطلاقه", "في", "2008" }); - } - - public void testChinese() throws Exception { - Reader reader = new StringReader("我是中国人。 1234 Tests "); - UAX29TokenizerFactory factory = new UAX29TokenizerFactory(); - factory.init(DEFAULT_VERSION_PARAM); - Tokenizer stream = factory.create(reader); - assertTokenStreamContents(stream, - new String[] {"我", "是", "中", "国", "人", "1234", "Tests"}); - } - public void testKorean() throws Exception { - Reader reader = new StringReader("안녕하세요 한글입니다"); - UAX29TokenizerFactory factory = new UAX29TokenizerFactory(); - factory.init(DEFAULT_VERSION_PARAM); - Tokenizer stream = factory.create(reader); - assertTokenStreamContents(stream, - new String[] {"안녕하세요", "한글입니다"}); - } - - public void testHyphen() throws Exception { - Reader reader = new StringReader("some-dashed-phrase"); - UAX29TokenizerFactory factory = new UAX29TokenizerFactory(); - factory.init(DEFAULT_VERSION_PARAM); - Tokenizer stream = factory.create(reader); - assertTokenStreamContents(stream, - new String[] {"some", "dashed", "phrase"}); - } - -} - - - - diff --git a/solr/src/test/org/apache/solr/analysis/TestUAX29URLEmailTokenizerFactory.java b/solr/src/test/org/apache/solr/analysis/TestUAX29URLEmailTokenizerFactory.java new file mode 100644 index 00000000000..f3982d400ca --- /dev/null +++ b/solr/src/test/org/apache/solr/analysis/TestUAX29URLEmailTokenizerFactory.java @@ -0,0 +1,155 @@ +package org.apache.solr.analysis; + +/** + * 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.io.Reader; +import java.io.StringReader; +import org.apache.lucene.analysis.Tokenizer; + +/** + * A few tests based on org.apache.lucene.analysis.TestUAX29URLEmailTokenizer + */ + +public class TestUAX29URLEmailTokenizerFactory extends BaseTokenTestCase { + + public void testUAX29URLEmailTokenizer() throws Exception { + Reader reader = new StringReader("Wha\u0301t's this thing do?"); + UAX29URLEmailTokenizerFactory factory = new UAX29URLEmailTokenizerFactory(); + factory.init(DEFAULT_VERSION_PARAM); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] {"Wha\u0301t's", "this", "thing", "do" }); + } + + public void testArabic() throws Exception { + Reader reader = new StringReader("الفيلم الوثائقي الأول عن ويكيبيديا يسمى \"الحقيقة بالأرقام: قصة ويكيبيديا\" (بالإنجليزية: Truth in Numbers: The Wikipedia Story)، سيتم إطلاقه في 2008."); + UAX29URLEmailTokenizerFactory factory = new UAX29URLEmailTokenizerFactory(); + factory.init(DEFAULT_VERSION_PARAM); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] {"الفيلم", "الوثائقي", "الأول", "عن", "ويكيبيديا", "يسمى", "الحقيقة", "بالأرقام", "قصة", "ويكيبيديا", + "بالإنجليزية", "Truth", "in", "Numbers", "The", "Wikipedia", "Story", "سيتم", "إطلاقه", "في", "2008" }); + } + + public void testChinese() throws Exception { + Reader reader = new StringReader("我是中国人。 1234 Tests "); + UAX29URLEmailTokenizerFactory factory = new UAX29URLEmailTokenizerFactory(); + factory.init(DEFAULT_VERSION_PARAM); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] {"我", "是", "中", "国", "人", "1234", "Tests"}); + } + + public void testKorean() throws Exception { + Reader reader = new StringReader("안녕하세요 한글입니다"); + UAX29URLEmailTokenizerFactory factory = new UAX29URLEmailTokenizerFactory(); + factory.init(DEFAULT_VERSION_PARAM); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] {"안녕하세요", "한글입니다"}); + } + + public void testHyphen() throws Exception { + Reader reader = new StringReader("some-dashed-phrase"); + UAX29URLEmailTokenizerFactory factory = new UAX29URLEmailTokenizerFactory(); + factory.init(DEFAULT_VERSION_PARAM); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] {"some", "dashed", "phrase"}); + } + + // Test with some URLs from TestUAX29URLEmailTokenizer's + // urls.from.random.text.with.urls.txt + public void testURLs() throws Exception { + String textWithURLs + = "http://johno.jsmf.net/knowhow/ngrams/index.php?table=en-dickens-word-2gram¶graphs=50&length=200&no-ads=on\n" + + " some extra\nWords thrown in here. " + + "http://c5-3486.bisynxu.FR/aI.YnNms/" + + " samba Halta gamba " + + "ftp://119.220.152.185/JgJgdZ/31aW5c/viWlfQSTs5/1c8U5T/ih5rXx/YfUJ/xBW1uHrQo6.R\n" + + "M19nq.0URV4A.Me.CC/mj0kgt6hue/dRXv8YVLOw9v/CIOqb\n" + + "Https://yu7v33rbt.vC6U3.XN--JXALPDLP/y%4fMSzkGFlm/wbDF4m" + + " inter Locutio " + + "[c2d4::]/%471j5l/j3KFN%AAAn/Fip-NisKH/\n" + + "file:///aXvSZS34is/eIgM8s~U5dU4Ifd%c7" + + " blah Sirrah woof " + + "http://[a42:a7b6::]/qSmxSUU4z/%52qVl4\n"; + Reader reader = new StringReader(textWithURLs); + UAX29URLEmailTokenizerFactory factory = new UAX29URLEmailTokenizerFactory(); + factory.init(DEFAULT_VERSION_PARAM); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] { + "http://johno.jsmf.net/knowhow/ngrams/index.php?table=en-dickens-word-2gram¶graphs=50&length=200&no-ads=on", + "some", "extra", "Words", "thrown", "in", "here", + "http://c5-3486.bisynxu.FR/aI.YnNms/", + "samba", "Halta", "gamba", + "ftp://119.220.152.185/JgJgdZ/31aW5c/viWlfQSTs5/1c8U5T/ih5rXx/YfUJ/xBW1uHrQo6.R", + "M19nq.0URV4A.Me.CC/mj0kgt6hue/dRXv8YVLOw9v/CIOqb", + "Https://yu7v33rbt.vC6U3.XN--JXALPDLP/y%4fMSzkGFlm/wbDF4m", + "inter", "Locutio", + "[c2d4::]/%471j5l/j3KFN%AAAn/Fip-NisKH/", + "file:///aXvSZS34is/eIgM8s~U5dU4Ifd%c7", + "blah", "Sirrah", "woof", + "http://[a42:a7b6::]/qSmxSUU4z/%52qVl4" + } + ); + } + + // Test with some emails from TestUAX29URLEmailTokenizer's + // email.addresses.from.random.text.with.email.addresses.txt + public void testEmails() throws Exception { + String textWithEmails + = " some extra\nWords thrown in here. " + + "dJ8ngFi@avz13m.CC\n" + + "kU-l6DS@[082.015.228.189]\n" + + "\"%U\u0012@?\\B\"@Fl2d.md" + + " samba Halta gamba " + + "Bvd#@tupjv.sn\n" + + "SBMm0Nm.oyk70.rMNdd8k.#ru3LI.gMMLBI.0dZRD4d.RVK2nY@au58t.B13albgy4u.mt\n" + + "~+Kdz@3mousnl.SE\n" + + " inter Locutio " + + "C'ts`@Vh4zk.uoafcft-dr753x4odt04q.UY\n" + + "}0tzWYDBuy@cSRQAABB9B.7c8xawf75-cyo.PM" + + " blah Sirrah woof " + + "lMahAA.j/5.RqUjS745.DtkcYdi@d2-4gb-l6.ae\n" + + "lv'p@tqk.vj5s0tgl.0dlu7su3iyiaz.dqso.494.3hb76.XN--MGBAAM7A8H\n"; + Reader reader = new StringReader(textWithEmails); + UAX29URLEmailTokenizerFactory factory = new UAX29URLEmailTokenizerFactory(); + factory.init(DEFAULT_VERSION_PARAM); + Tokenizer stream = factory.create(reader); + assertTokenStreamContents(stream, + new String[] { + "some", "extra", "Words", "thrown", "in", "here", + "dJ8ngFi@avz13m.CC", + "kU-l6DS@[082.015.228.189]", + "\"%U\u0012@?\\B\"@Fl2d.md", + "samba", "Halta", "gamba", + "Bvd#@tupjv.sn", + "SBMm0Nm.oyk70.rMNdd8k.#ru3LI.gMMLBI.0dZRD4d.RVK2nY@au58t.B13albgy4u.mt", + "~+Kdz@3mousnl.SE", + "inter", "Locutio", + "C'ts`@Vh4zk.uoafcft-dr753x4odt04q.UY", + "}0tzWYDBuy@cSRQAABB9B.7c8xawf75-cyo.PM", + "blah", "Sirrah", "woof", + "lMahAA.j/5.RqUjS745.DtkcYdi@d2-4gb-l6.ae", + "lv'p@tqk.vj5s0tgl.0dlu7su3iyiaz.dqso.494.3hb76.XN--MGBAAM7A8H" + } + ); + } +}