/* The following code was generated by JFlex 1.4.3 on 1/31/09 11:52 PM */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* JFlex 1.4.3 *
* Copyright (C) 1998-2009 Gerwin Klein <lsf@jflex.de> *
* All rights reserved. *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License. See the file *
* COPYRIGHT for more information. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package JFlex;
import java_cup.runtime.Symbol;
import java.util.Vector;
import java.io.*;
import java.util.Stack;
/**
* The lexer of JFlex.
*
* Generated by <a href="http://www.jflex.de/">JFlex</a>.
*
* @author Gerwin Klein
* @version JFlex 1.4.3, $Revision: 433 $, $Date: 2009-01-31 19:52:34 +1100 (Sat, 31 Jan 2009) $
*/
public final class LexScan implements sym, java_cup.runtime.Scanner {
/** This character denotes the end of file */
public static final int YYEOF = -1;
/** initial size of the lookahead buffer */
private static final int ZZ_BUFFERSIZE = 16384;
/** lexical states */
public static final int STRING_CONTENT = 16;
public static final int REGEXPSTART = 8;
public static final int MACROS = 6;
public static final int STATELIST = 4;
public static final int CTOR_ARG = 26;
public static final int EATWSPNL = 24;
public static final int CHARCLASS = 18;
public static final int JAVA_CODE = 12;
public static final int REGEXP = 10;
public static final int YYINITIAL = 0;
public static final int REPEATEXP = 22;
public static final int COMMENT = 2;
public static final int STATES = 14;
public static final int COPY = 20;
/**
* 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, 1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8,
9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14
};
/**
* Translates characters to character classes
*/
private static final String ZZ_CMAP_PACKED =
"\10\25\1\26\1\10\1\13\2\11\1\12\16\25\4\0\1\10\1\76"+
"\1\32\1\0\1\103\1\35\1\22\1\33\1\100\1\101\1\30\1\102"+
"\1\15\1\106\1\14\1\31\1\7\1\66\2\7\2\3\1\67\1\64"+
"\1\65\1\1\1\105\1\0\1\20\1\71\1\21\1\23\1\0\4\2"+
"\1\72\1\74\10\24\1\73\13\24\1\16\1\4\1\17\1\104\1\24"+
"\1\0\1\53\1\57\1\55\1\62\1\46\1\47\1\63\1\42\1\37"+
"\1\60\1\70\1\51\1\56\1\40\1\44\1\61\1\24\1\43\1\54"+
"\1\41\1\6\1\52\1\45\1\5\1\50\1\24\1\36\1\75\1\34"+
"\1\77\6\25\1\27\32\25\2\0\4\24\4\0\1\24\2\0\1\25"+
"\7\0\1\24\4\0\1\24\5\0\27\24\1\0\37\24\1\0\u013f\24"+
"\31\0\162\24\4\0\14\24\16\0\5\24\11\0\1\24\21\0\130\25"+
"\5\0\23\25\12\0\1\24\13\0\1\24\1\0\3\24\1\0\1\24"+
"\1\0\24\24\1\0\54\24\1\0\46\24\1\0\5\24\4\0\202\24"+
"\1\0\4\25\3\0\105\24\1\0\46\24\2\0\2\24\6\0\20\24"+
"\41\0\46\24\2\0\1\24\7\0\47\24\11\0\21\25\1\0\27\25"+
"\1\0\3\25\1\0\1\25\1\0\2\25\1\0\1\25\13\0\33\24"+
"\5\0\3\24\15\0\4\25\14\0\6\25\13\0\32\24\5\0\13\24"+
"\16\25\7\0\12\25\4\0\2\24\1\25\143\24\1\0\1\24\10\25"+
"\1\0\6\25\2\24\2\25\1\0\4\25\2\24\12\25\3\24\2\0"+
"\1\24\17\0\1\25\1\24\1\25\36\24\33\25\2\0\3\24\60\0"+
"\46\24\13\25\1\24\u014f\0\3\25\66\24\2\0\1\25\1\24\20\25"+
"\2\0\1\24\4\25\3\0\12\24\2\25\2\0\12\25\21\0\3\25"+
"\1\0\10\24\2\0\2\24\2\0\26\24\1\0\7\24\1\0\1\24"+
"\3\0\4\24\2\0\1\25\1\24\7\25\2\0\2\25\2\0\3\25"+
"\11\0\1\25\4\0\2\24\1\0\3\24\2\25\2\0\12\25\4\24"+
"\15\0\3\25\1\0\6\24\4\0\2\24\2\0\26\24\1\0\7\24"+
"\1\0\2\24\1\0\2\24\1\0\2\24\2\0\1\25\1\0\5\25"+
"\4\0\2\25\2\0\3\25\13\0\4\24\1\0\1\24\7\0\14\25"+
"\3\24\14\0\3\25\1\0\11\24\1\0\3\24\1\0\26\24\1\0"+
"\7\24\1\0\2\24\1\0\5\24\2\0\1\25\1\24\10\25\1\0"+
"\3\25\1\0\3\25\2\0\1\24\17\0\2\24\2\25\2\0\12\25"+
"\1\0\1\24\17\0\3\25\1\0\10\24\2\0\2\24\2\0\26\24"+
"\1\0\7\24\1\0\2\24\1\0\5\24\2\0\1\25\1\24\6\25"+
"\3\0\2\25\2\0\3\25\10\0\2\25\4\0\2\24\1\0\3\24"+
"\4\0\12\25\1\0\1\24\20\0\1\25\1\24\1\0\6\24\3\0"+
"\3\24\1\0\4\24\3\0\2\24\1\0\1\24\1\0\2\24\3\0"+
"\2\24\3\0\3\24\3\0\10\24\1\0\3\24\4\0\5\25\3\0"+
"\3\25\1\0\4\25\11\0\1\25\17\0\11\25\11\0\1\24\7\0"+
"\3\25\1\0\10\24\1\0\3\24\1\0\27\24\1\0\12\24\1\0"+
"\5\24\4\0\7\25\1\0\3\25\1\0\4\25\7\0\2\25\11\0"+
"\2\24\4\0\12\25\22\0\2\25\1\0\10\24\1\0\3\24\1\0"+
"\27\24\1\0\12\24\1\0\5\24\2\0\1\25\1\24\7\25\1\0"+
"\3\25\1\0\4\25\7\0\2\25\7\0\1\24\1\0\2\24\4\0"+
"\12\25\22\0\2\25\1\0\10\24\1\0\3\24\1\0\27\24\1\0"+
"\20\24\4\0\6\25\2\0\3\25\1\0\4\25\11\0\1\25\10\0"+
"\2\24\4\0\12\25\22\0\2\25\1\0\22\24\3\0\30\24\1\0"+
"\11\24\1\0\1\24\2\0\7\24\3\0\1\25\4\0\6\25\1\0"+
"\1\25\1\0\10\25\22\0\2\25\15\0\60\24\1\25\2\24\7\25"+
"\4\0\10\24\10\25\1\0\12\25\47\0\2\24\1\0\1\24\2\0"+
"\2\24\1\0\1\24\2\0\1\24\6\0\4\24\1\0\7\24\1\0"+
"\3\24\1\0\1\24\1\0\1\24\2\0\2\24\1\0\4\24\1\25"+
"\2\24\6\25\1\0\2\25\1\24\2\0\5\24\1\0\1\24\1\0"+
"\6\25\2\0\12\25\2\0\2\24\42\0\1\24\27\0\2\25\6\0"+
"\12\25\13\0\1\25\1\0\1\25\1\0\1\25\4\0\2\25\10\24"+
"\1\0\42\24\6\0\24\25\1\0\2\25\4\24\4\0\10\25\1\0"+
"\44\25\11\0\1\25\71\0\42\24\1\0\5\24\1\0\2\24\1\0"+
"\7\25\3\0\4\25\6\0\12\25\6\0\6\24\4\25\106\0\46\24"+
"\12\0\51\24\7\0\132\24\5\0\104\24\5\0\122\24\6\0\7\24"+
"\1\0\77\24\1\0\1\24\1\0\4\24\2\0\7\24\1\0\1\24"+
"\1\0\4\24\2\0\47\24\1\0\1\24\1\0\4\24\2\0\37\24"+
"\1\0\1\24\1\0\4\24\2\0\7\24\1\0\1\24\1\0\4\24"+
"\2\0\7\24\1\0\7\24\1\0\27\24\1\0\37\24\1\0\1\24"+
"\1\0\4\24\2\0\7\24\1\0\47\24\1\0\23\24\16\0\11\25"+
"\56\0\125\24\14\0\u026c\24\2\0\10\24\12\0\32\24\5\0\113\24"+
"\3\0\3\24\17\0\15\24\1\0\4\24\3\25\13\0\22\24\3\25"+
"\13\0\22\24\2\25\14\0\15\24\1\0\3\24\1\0\2\25\14\0"+
"\64\24\40\25\3\0\1\24\3\0\2\24\1\25\2\0\12\25\41\0"+
"\3\25\2\0\12\25\6\0\130\24\10\0\51\24\1\25\126\0\35\24"+
"\3\0\14\25\4\0\14\25\12\0\12\25\36\24\2\0\5\24\u038b\0"+
"\154\24\224\0\234\24\4\0\132\24\6\0\26\24\2\0\6\24\2\0"+
"\46\24\2\0\6\24\2\0\10\24\1\0\1\24\1\0\1\24\1\0"+
"\1\24\1\0\37\24\2\0\65\24\1\0\7\24\1\0\1\24\3\0"+
"\3\24\1\0\7\24\3\0\4\24\2\0\6\24\4\0\15\24\5\0"+
"\3\24\1\0\7\24\17\0\4\25\30\0\2\11\5\25\20\0\2\24"+
"\23\0\1\24\13\0\4\25\6\0\6\25\1\0\1\24\15\0\1\24"+
"\40\0\22\24\36\0\15\25\4\0\1\25\3\0\6\25\27\0\1\24"+
"\4\0\1\24\2\0\12\24\1\0\1\24\3\0\5\24\6\0\1\24"+
"\1\0\1\24\1\0\1\24\1\0\4\24\1\0\3\24\1\0\7\24"+
"\3\0\3\24\5\0\5\24\26\0\44\24\u0e81\0\3\24\31\0\11\24"+
"\6\25\1\0\5\24\2\0\5\24\4\0\126\24\2\0\2\25\2\0"+
"\3\24\1\0\137\24\5\0\50\24\4\0\136\24\21\0\30\24\70\0"+
"\20\24\u0200\0\u19b6\24\112\0\u51a6\24\132\0\u048d\24\u0773\0\u2ba4\24\u215c\0"+
"\u012e\24\2\0\73\24\225\0\7\24\14\0\5\24\5\0\1\24\1\25"+
"\12\24\1\0\15\24\1\0\5\24\1\0\1\24\1\0\2\24\1\0"+
"\2\24\1\0\154\24\41\0\u016b\24\22\0\100\24\2\0\66\24\50\0"+
"\15\24\3\0\20\25\20\0\4\25\17\0\2\24\30\0\3\24\31\0"+
"\1\24\6\0\5\24\1\0\207\24\2\0\1\25\4\0\1\24\13\0"+
"\12\25\7\0\32\24\4\0\1\24\1\0\32\24\12\0\132\24\3\0"+
"\6\24\2\0\6\24\2\0\6\24\2\0\3\24\3\0\2\24\3\0"+
"\2\24\22\0\3\25\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\1\1\2\15\0\1\1\2\3\1\1\1\2\3\4"+
"\1\5\1\6\2\7\1\6\1\10\2\6\1\4\1\11"+
"\1\12\1\6\1\11\1\13\1\14\1\4\1\15\2\16"+
"\1\6\2\17\1\20\1\21\1\16\1\22\1\23\1\24"+
"\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+
"\1\35\1\36\1\37\3\4\1\40\1\41\1\6\1\42"+
"\1\43\1\44\1\4\2\45\1\46\1\16\1\47\1\50"+
"\1\51\1\52\1\16\1\53\1\54\1\4\2\44\1\4"+
"\1\55\1\4\1\56\1\13\1\57\1\60\1\61\3\0"+
"\1\62\1\63\1\0\1\64\1\0\2\11\1\0\15\11"+
"\3\0\1\65\1\11\1\66\1\11\2\0\1\67\1\6"+
"\1\70\1\71\2\70\1\71\1\72\1\73\1\74\1\75"+
"\1\76\1\0\1\77\2\0\1\100\1\101\3\0\2\102"+
"\10\0\1\103\1\104\2\103\1\104\1\105\1\106\1\107"+
"\1\110\1\111\1\112\3\0\1\113\5\0\1\114\1\0"+
"\1\60\1\61\2\6\1\11\2\115\35\11\3\0\2\116"+
"\1\11\2\117\1\11\1\0\1\71\1\0\1\120\6\0"+
"\1\121\1\122\1\0\1\37\4\0\1\104\1\0\1\123"+
"\1\124\2\125\3\0\2\11\1\126\24\11\1\127\12\11"+
"\3\0\2\11\1\0\2\120\14\0\2\123\3\0\20\11"+
"\1\130\3\11\1\131\10\11\1\132\6\11\1\133\1\11"+
"\1\134\1\130\1\0\2\11\1\0\1\120\13\0\1\123"+
"\5\0\11\11\1\0\1\11\1\135\5\11\1\136\1\137"+
"\17\11\1\140\1\141\2\11\7\0\2\37\10\0\2\142"+
"\3\0\11\11\1\143\1\0\11\11\1\144\4\11\1\145"+
"\1\0\3\11\1\146\1\147\2\11\6\0\1\150\1\37"+
"\3\0\1\37\6\0\2\151\4\0\1\141\1\11\1\152"+
"\1\126\3\11\1\153\2\154\1\143\4\0\11\11\2\155"+
"\2\11\1\156\1\11\2\157\1\11\1\160\6\0\1\37"+
"\6\0\1\37\13\0\1\11\1\161\2\11\1\154\1\162"+
"\1\154\1\143\3\0\2\11\1\163\2\11\1\164\3\11"+
"\1\155\1\165\1\155\1\166\1\0\1\11\1\156\1\0"+
"\1\167\1\157\2\170\1\157\4\0\1\171\1\172\2\37"+
"\4\0\2\37\7\0\2\173\1\0\3\11\2\162\2\143"+
"\1\174\2\175\1\0\1\11\1\0\5\11\2\165\2\0"+
"\1\11\1\0\2\170\2\0\1\176\2\0\1\37\2\0"+
"\2\37\4\0\1\37\2\0\2\37\7\0\2\177\1\11"+
"\1\162\1\0\1\143\1\0\1\174\1\0\1\175\1\200"+
"\1\175\2\0\2\11\1\201\1\11\1\202\1\203\2\204"+
"\1\165\1\0\1\205\3\0\1\205\1\0\1\205\1\156"+
"\3\0\1\206\1\0\4\37\3\0\4\37\3\0\2\207"+
"\1\0\1\177\1\210\1\177\1\211\3\0\2\200\2\0"+
"\2\11\1\201\2\212\1\204\1\213\1\204\12\0\3\37"+
"\5\0\3\37\1\0\2\214\1\0\2\210\2\143\1\174"+
"\1\200\3\0\2\11\1\212\1\215\1\212\2\213\1\205"+
"\2\0\1\216\1\217\4\0\1\37\3\0\1\37\2\220"+
"\1\210\1\0\1\143\1\163\1\0\1\163\1\11\2\215"+
"\1\213\1\0\2\205\1\0\1\205\3\0\1\37\2\0"+
"\1\37\2\221\1\215\10\0\1\222\3\205";
private static int [] zzUnpackAction() {
int [] result = new int[826];
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\107\0\216\0\325\0\u011c\0\u0163\0\u01aa\0\u01f1"+
"\0\u0238\0\u027f\0\u02c6\0\u030d\0\u0354\0\u039b\0\u03e2\0\u0429"+
"\0\u0429\0\u0470\0\u04b7\0\u04fe\0\u0545\0\u058c\0\u0470\0\u05d3"+
"\0\u061a\0\u0470\0\u0661\0\u06a8\0\u06ef\0\u0736\0\u077d\0\u07c4"+
"\0\u080b\0\u0852\0\u0899\0\u08e0\0\u0927\0\u096e\0\u09b5\0\u0470"+
"\0\u0470\0\u09fc\0\u0a43\0\u0a8a\0\u0ad1\0\u0470\0\u0b18\0\u0b5f"+
"\0\u0470\0\u0470\0\u0ba6\0\u0470\0\u0bed\0\u0c34\0\u0470\0\u0470"+
"\0\u0470\0\u0470\0\u0470\0\u0470\0\u0470\0\u0c7b\0\u0cc2\0\u0d09"+
"\0\u0d50\0\u0470\0\u0470\0\u0d97\0\u0470\0\u0dde\0\u0e25\0\u0e6c"+
"\0\u0470\0\u0eb3\0\u0470\0\u0efa\0\u0efa\0\u0b18\0\u0470\0\u0470"+
"\0\u0f41\0\u0470\0\u0f88\0\u0fcf\0\u0fcf\0\u0470\0\u1016\0\u0470"+
"\0\u105d\0\u0470\0\u10a4\0\u0470\0\u10eb\0\u1132\0\u1179\0\u11c0"+
"\0\u0545\0\u0470\0\u0470\0\u058c\0\u0470\0\u1207\0\u124e\0\u1295"+
"\0\u12dc\0\u1323\0\u136a\0\u13b1\0\u13f8\0\u143f\0\u1486\0\u14cd"+
"\0\u1514\0\u155b\0\u15a2\0\u15e9\0\u1630\0\u1677\0\u16be\0\u1705"+
"\0\u174c\0\u0470\0\u1793\0\u17da\0\u1821\0\u09b5\0\u1868\0\u0470"+
"\0\u18af\0\u0470\0\u18f6\0\u193d\0\u1984\0\u19cb\0\u0470\0\u0470"+
"\0\u0470\0\u0470\0\u0470\0\u0a8a\0\u0bed\0\u1a12\0\u1a59\0\u0470"+
"\0\u1aa0\0\u1ae7\0\u0bed\0\u0c34\0\u0470\0\u1b2e\0\u0cc2\0\u0d09"+
"\0\u0d50\0\u1b75\0\u1bbc\0\u1c03\0\u1c4a\0\u1c91\0\u0470\0\u1cd8"+
"\0\u1d1f\0\u1d66\0\u1dad\0\u0470\0\u0470\0\u0470\0\u0470\0\u0470"+
"\0\u0470\0\u0efa\0\u0b18\0\u1df4\0\u0470\0\u0fcf\0\u1e3b\0\u1e82"+
"\0\u1ec9\0\u1f10\0\u1f57\0\u105d\0\u1f9e\0\u0470\0\u1207\0\u0470"+
"\0\u1fe5\0\u12dc\0\u0470\0\u202c\0\u2073\0\u20ba\0\u2101\0\u2148"+
"\0\u218f\0\u21d6\0\u221d\0\u2264\0\u22ab\0\u22f2\0\u2339\0\u2380"+
"\0\u23c7\0\u240e\0\u2455\0\u249c\0\u24e3\0\u252a\0\u2571\0\u25b8"+
"\0\u25ff\0\u2646\0\u268d\0\u26d4\0\u271b\0\u2762\0\u27a9\0\u27f0"+
"\0\u2837\0\u287e\0\u28c5\0\u290c\0\u2953\0\u299a\0\u29e1\0\u2a28"+
"\0\u2a6f\0\u2ab6\0\u0470\0\u2afd\0\u2b44\0\u2b8b\0\u2bd2\0\u2c19"+
"\0\u2c60\0\u2ca7\0\u2cee\0\u0470\0\u0470\0\u2d35\0\u2d7c\0\u2dc3"+
"\0\u2e0a\0\u2e51\0\u2e98\0\u0470\0\u2edf\0\u2f26\0\u0470\0\u1e3b"+
"\0\u0470\0\u2f6d\0\u2fb4\0\u2ffb\0\u3042\0\u3089\0\u30d0\0\u3117"+
"\0\u315e\0\u31a5\0\u31ec\0\u3233\0\u327a\0\u32c1\0\u3308\0\u334f"+
"\0\u3396\0\u33dd\0\u3424\0\u346b\0\u34b2\0\u34f9\0\u3540\0\u3587"+
"\0\u35ce\0\u3615\0\u365c\0\u36a3\0\u36ea\0\u3731\0\u3778\0\u37bf"+
"\0\u3806\0\u384d\0\u3894\0\u38db\0\u3922\0\u3969\0\u39b0\0\u39f7"+
"\0\u3a3e\0\u3a85\0\u3acc\0\u3b13\0\u0470\0\u3b5a\0\u3ba1\0\u3be8"+
"\0\u3c2f\0\u3c76\0\u3cbd\0\u3d04\0\u3d4b\0\u3d92\0\u3dd9\0\u3e20"+
"\0\u3e67\0\u3eae\0\u0470\0\u3ef5\0\u3f3c\0\u3f83\0\u3fca\0\u4011"+
"\0\u4058\0\u409f\0\u40e6\0\u412d\0\u4174\0\u41bb\0\u4202\0\u4249"+
"\0\u4290\0\u42d7\0\u431e\0\u4365\0\u43ac\0\u43f3\0\u443a\0\u124e"+
"\0\u4481\0\u44c8\0\u450f\0\u124e\0\u4556\0\u459d\0\u45e4\0\u462b"+
"\0\u4672\0\u46b9\0\u4700\0\u4747\0\u124e\0\u478e\0\u47d5\0\u481c"+
"\0\u4863\0\u48aa\0\u48f1\0\u124e\0\u4938\0\u0470\0\u0470\0\u497f"+
"\0\u49c6\0\u4a0d\0\u4a54\0\u2afd\0\u4a9b\0\u4ae2\0\u4b29\0\u4b70"+
"\0\u4bb7\0\u4bfe\0\u4c45\0\u4c8c\0\u4cd3\0\u4d1a\0\u4d61\0\u2edf"+
"\0\u4da8\0\u4def\0\u4e36\0\u4e7d\0\u4ec4\0\u4f0b\0\u4f52\0\u4f99"+
"\0\u4fe0\0\u5027\0\u506e\0\u50b5\0\u50fc\0\u5143\0\u518a\0\u51d1"+
"\0\u124e\0\u5218\0\u525f\0\u52a6\0\u52ed\0\u5334\0\u124e\0\u124e"+
"\0\u537b\0\u53c2\0\u5409\0\u5450\0\u5497\0\u54de\0\u5525\0\u556c"+
"\0\u55b3\0\u55fa\0\u5641\0\u5688\0\u56cf\0\u5716\0\u575d\0\u124e"+
"\0\u0470\0\u57a4\0\u57eb\0\u5832\0\u5879\0\u58c0\0\u5907\0\u594e"+
"\0\u5995\0\u59dc\0\u5a23\0\u5a6a\0\u5ab1\0\u5af8\0\u5b3f\0\u5b86"+
"\0\u5bcd\0\u5c14\0\u5c5b\0\u5ca2\0\u4def\0\u0470\0\u5ce9\0\u5d30"+
"\0\u5d77\0\u5dbe\0\u5e05\0\u5e4c\0\u5e93\0\u5eda\0\u5f21\0\u5f68"+
"\0\u5faf\0\u5ff6\0\u603d\0\u6084\0\u60cb\0\u6112\0\u6159\0\u61a0"+
"\0\u61e7\0\u622e\0\u6275\0\u62bc\0\u6303\0\u124e\0\u634a\0\u6391"+
"\0\u63d8\0\u641f\0\u124e\0\u6466\0\u64ad\0\u64f4\0\u653b\0\u124e"+
"\0\u124e\0\u6582\0\u2a28\0\u65c9\0\u6610\0\u6657\0\u669e\0\u66e5"+
"\0\u672c\0\u6773\0\u67ba\0\u6801\0\u6848\0\u688f\0\u68d6\0\u691d"+
"\0\u6964\0\u69ab\0\u69f2\0\u6a39\0\u6a80\0\u5c5b\0\u0470\0\u6ac7"+
"\0\u6b0e\0\u6b55\0\u6b9c\0\u124e\0\u6be3\0\u124e\0\u124e\0\u6c2a"+
"\0\u6c71\0\u6cb8\0\u124e\0\u6cff\0\u6d46\0\u6d8d\0\u6dd4\0\u6e1b"+
"\0\u6e62\0\u6ea9\0\u6ef0\0\u6f37\0\u6f7e\0\u6fc5\0\u700c\0\u7053"+
"\0\u709a\0\u70e1\0\u7128\0\u716f\0\u71b6\0\u71fd\0\u7244\0\u728b"+
"\0\u72d2\0\u7319\0\u7360\0\u2953\0\u0470\0\u73a7\0\u73ee\0\u7435"+
"\0\u747c\0\u74c3\0\u750a\0\u7551\0\u7598\0\u75df\0\u7626\0\u766d"+
"\0\u76b4\0\u76fb\0\u7742\0\u7789\0\u77d0\0\u7817\0\u785e\0\u78a5"+
"\0\u78ec\0\u7933\0\u797a\0\u79c1\0\u7a08\0\u7a4f\0\u7a96\0\u7add"+
"\0\u7b24\0\u7b6b\0\u7bb2\0\u7bf9\0\u7c40\0\u7c87\0\u7cce\0\u7d15"+
"\0\u7d5c\0\u7da3\0\u7dea\0\u7e31\0\u7e78\0\u7ebf\0\u124e\0\u7f06"+
"\0\u7f4d\0\u7f94\0\u7fdb\0\u8022\0\u8069\0\u124e\0\u80b0\0\u80f7"+
"\0\u813e\0\u8185\0\u124e\0\u81cc\0\u8213\0\u825a\0\u82a1\0\u82e8"+
"\0\u832f\0\u8376\0\u83bd\0\u0470\0\u0470\0\u8404\0\u844b\0\u8492"+
"\0\u84d9\0\u8520\0\u8567\0\u85ae\0\u85f5\0\u863c\0\u8683\0\u86ca"+
"\0\u8711\0\u8758\0\u879f\0\u87e6\0\u7a08\0\u0470\0\u882d\0\u8874"+
"\0\u88bb\0\u8902\0\u8949\0\u8990\0\u89d7\0\u8a1e\0\u8a65\0\u8aac"+
"\0\u8af3\0\u8b3a\0\u8b81\0\u8bc8\0\u8c0f\0\u8c56\0\u8c9d\0\u8ce4"+
"\0\u8d2b\0\u8d72\0\u8db9\0\u8e00\0\u8e47\0\u8e8e\0\u8ed5\0\u8f1c"+
"\0\u8f63\0\u8faa\0\u8ff1\0\u0470\0\u9038\0\u907f\0\u90c6\0\u910d"+
"\0\u9154\0\u919b\0\u91e2\0\u9229\0\u9270\0\u92b7\0\u92fe\0\u9345"+
"\0\u938c\0\u93d3\0\u941a\0\u9461\0\u94a8\0\u94ef\0\u9536\0\u957d"+
"\0\u95c4\0\u960b\0\u9652\0\u9699\0\u96e0\0\u9727\0\u976e\0\u97b5"+
"\0\u97fc\0\u9843\0\u988a\0\u98d1\0\u9918\0\u995f\0\u99a6\0\u99ed"+
"\0\u9a34\0\u9a7b\0\u9ac2\0\u9b09\0\u9b50\0\u124e\0\u124e\0\u9b97"+
"\0\u9bde\0\u9c25\0\u9c6c\0\u9cb3\0\u9cfa\0\u9d41\0\u9d88\0\u8e00"+
"\0\u9dcf\0\u8e8e\0\u9e16\0\u9e5d\0\u9ea4\0\u9eeb\0\u0470\0\u9f32"+
"\0\u9f79\0\u9fc0\0\ua007\0\ua04e\0\ua095\0\ua0dc\0\ua123\0\ua16a"+
"\0\ua1b1\0\ua1f8\0\ua23f\0\ua286\0\ua2cd\0\ua314\0\u960b\0\u0470"+
"\0\ua35b\0\ua3a2\0\ua3e9\0\ua430\0\ua477\0\ua4be\0\ua505\0\ua54c"+
"\0\ua593\0\ua5da\0\ua621\0\ua668\0\ua6af\0\ua6f6\0\ua73d\0\ua784"+
"\0\ua7cb\0\ua812\0\ua859\0\ua8a0\0\ua8e7\0\ua92e\0\ua975\0\ua9bc"+
"\0\uaa03\0\uaa4a\0\uaa91\0\uaad8\0\uab1f\0\uab66\0\uabad\0\uabf4"+
"\0\uac3b\0\uac82\0\uacc9\0\uad10\0\uad57\0\uad9e\0\uade5\0\uae2c"+
"\0\uae73\0\uaeba\0\ua314\0\u0470\0\uaf01\0\uaf48\0\uaf8f\0\uafd6"+
"\0\ub01d\0\ub064\0\ub0ab\0\ub0f2\0\ub139\0\ub180\0\ub1c7\0\ub20e"+
"\0\ub255\0\ub29c\0\ub2e3\0\ub32a\0\ub371\0\ua8e7\0\ub3b8\0\ub3ff"+
"\0\u0470\0\u0470\0\ub446\0\ub48d\0\ub4d4\0\ub51b\0\ub562\0\ub5a9"+
"\0\ub5f0\0\ub637\0\ub67e\0\uaf01\0\u0470\0\ub6c5\0\ub70c\0\ub753"+
"\0\u0470\0\ub79a\0\u124e\0\ub7e1\0\ub828\0\ub86f\0\ub8b6\0\ub8fd"+
"\0\ub3b8\0\ub944\0\ub98b\0\ub3ff\0\ub9d2\0\uba19\0\uba60\0\ubaa7"+
"\0\ubaee\0\ubb35\0\ubb7c\0\u0470\0\u124e\0\ubbc3\0\ubc0a\0\ubc51"+
"\0\ubc98\0\ubcdf\0\ubd26\0\ubd6d\0\ubdb4\0\ubdfb\0\u0470\0\ubdb4"+
"\0\ube42\0\ubdfb";
private static int [] zzUnpackRowMap() {
int [] result = new int[826];
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 =
"\11\20\2\21\1\22\13\20\1\21\5\20\1\23\51\20"+
"\30\24\1\25\1\26\55\24\2\27\1\30\2\27\2\30"+
"\1\27\1\31\1\32\1\33\1\32\1\27\1\34\6\27"+
"\1\30\2\27\1\32\7\27\25\30\4\27\1\30\1\27"+
"\3\30\6\27\1\30\5\27\1\35\2\27\2\35\1\27"+
"\1\36\3\37\10\27\1\35\1\27\1\36\1\37\1\27"+
"\1\40\3\27\1\41\1\27\25\35\4\27\1\35\1\42"+
"\3\35\6\27\1\35\5\27\1\35\2\27\2\35\1\27"+
"\1\43\3\37\10\27\1\35\1\27\1\43\1\37\1\27"+
"\1\40\3\27\1\44\1\27\25\35\4\27\1\35\1\42"+
"\3\35\6\27\1\35\13\27\4\45\4\27\1\46\5\27"+
"\2\45\1\27\1\47\2\27\1\50\52\27\4\51\1\52"+
"\3\51\1\53\1\54\1\55\1\54\1\56\1\51\1\57"+
"\1\51\1\60\2\51\1\61\2\51\1\53\1\54\1\62"+
"\1\63\1\64\3\51\1\65\36\51\1\66\1\67\1\70"+
"\1\71\1\72\1\73\1\74\1\75\2\51\31\76\1\77"+
"\1\100\1\101\1\102\1\76\1\103\50\76\2\27\1\35"+
"\2\27\2\35\1\27\4\104\1\27\1\105\3\27\1\106"+
"\2\27\1\35\1\27\2\104\7\27\25\35\4\27\1\35"+
"\1\27\3\35\6\27\1\35\3\27\4\107\1\110\4\107"+
"\1\111\1\112\1\111\13\107\1\111\2\107\1\113\54\107"+
"\4\51\1\52\3\51\3\114\1\115\2\51\1\116\1\117"+
"\6\51\2\114\2\51\1\120\3\51\1\121\45\51\1\122"+
"\1\51\1\123\11\124\2\125\1\126\13\124\1\125\5\124"+
"\1\127\51\124\10\27\1\36\2\27\1\130\1\27\1\131"+
"\10\27\1\36\5\27\1\132\62\27\4\133\12\27\2\133"+
"\57\27\2\134\1\135\2\134\2\135\15\134\1\135\12\134"+
"\25\135\4\134\1\135\1\134\3\135\6\134\1\135\3\134"+
"\11\20\2\21\1\22\13\20\1\21\57\20\107\0\11\20"+
"\2\21\1\22\13\20\1\21\5\20\1\136\51\20\30\24"+
"\1\137\1\140\105\24\1\141\1\142\105\24\1\143\1\144"+
"\55\24\1\0\3\30\1\0\3\30\14\0\4\30\7\0"+
"\32\30\1\0\3\30\6\0\1\30\13\0\1\31\4\0"+
"\1\34\104\0\1\32\103\0\1\34\77\0\3\35\1\0"+
"\3\35\14\0\4\35\7\0\32\35\1\0\3\35\6\0"+
"\1\35\13\0\1\36\15\0\1\36\71\0\3\37\13\0"+
"\1\37\107\0\1\145\1\146\57\0\1\147\2\0\1\147"+
"\1\150\15\0\1\147\11\0\1\151\1\152\1\153\1\154"+
"\4\147\1\155\1\156\1\157\1\160\1\147\1\161\1\162"+
"\1\163\1\147\1\164\1\147\1\165\1\166\1\147\1\167"+
"\1\170\1\171\1\0\1\147\1\0\3\147\6\0\1\147"+
"\13\0\1\42\15\0\1\42\70\0\1\43\15\0\1\43"+
"\6\0\1\172\53\0\1\147\2\0\1\173\1\150\15\0"+
"\1\147\10\0\1\174\1\151\1\152\1\153\1\154\4\147"+
"\1\155\1\156\1\157\1\160\1\147\1\161\1\175\1\163"+
"\1\147\1\164\1\147\1\165\1\166\1\147\1\167\1\170"+
"\1\171\1\0\1\147\1\0\3\147\6\0\1\147\13\0"+
"\4\45\4\0\1\46\5\0\2\45\1\0\1\176\2\0"+
"\1\50\72\0\1\177\116\0\1\200\1\201\55\0\3\202"+
"\1\203\1\202\1\204\1\205\1\206\3\202\1\0\24\202"+
"\1\207\1\210\1\202\1\211\3\202\1\212\7\202\1\213"+
"\4\202\1\203\1\202\1\206\1\203\17\202\10\0\1\53"+
"\3\214\1\56\1\0\1\57\4\0\1\61\2\0\1\53"+
"\1\214\1\62\1\63\1\64\3\0\1\215\36\0\1\66"+
"\1\67\1\70\1\71\1\72\1\73\1\74\1\75\12\0"+
"\4\214\1\56\1\0\1\57\4\0\1\61\2\0\2\214"+
"\1\62\1\63\1\64\3\0\1\215\36\0\1\66\1\67"+
"\1\70\1\71\1\72\1\73\1\74\1\75\12\0\3\214"+
"\1\54\1\56\1\0\1\57\4\0\1\61\2\0\2\214"+
"\1\62\1\63\1\64\3\0\1\215\36\0\1\66\1\67"+
"\1\70\1\71\1\72\1\73\1\74\1\75\107\0\1\216"+
"\21\0\1\217\116\0\1\220\1\201\56\0\1\221\1\222"+
"\1\221\1\0\2\222\1\221\1\223\13\0\1\222\1\0"+
"\1\223\10\0\25\222\4\221\1\222\1\0\3\222\6\0"+
"\1\222\13\0\1\224\1\225\1\226\1\225\12\0\1\224"+
"\1\225\57\0\31\76\1\227\1\230\1\231\1\0\1\76"+
"\1\0\100\76\1\232\1\233\55\76\4\230\1\234\4\230"+
"\3\0\13\230\1\0\2\230\1\76\54\230\4\235\1\236"+
"\4\235\3\0\13\235\1\0\3\235\1\0\53\235\10\0"+
"\4\104\12\0\2\104\67\0\4\106\12\0\2\106\57\0"+
"\4\107\1\0\4\107\3\0\13\107\1\0\2\107\1\0"+
"\54\107\3\237\1\240\1\237\1\241\1\242\1\243\3\237"+
"\1\0\16\237\1\244\5\237\1\245\1\246\1\237\1\247"+
"\3\237\1\250\7\237\1\251\4\237\1\240\1\237\1\243"+
"\1\240\17\237\13\0\1\111\103\0\4\252\2\0\1\253"+
"\7\0\2\252\61\0\1\254\2\0\2\254\15\0\1\254"+
"\12\0\25\254\4\0\1\254\1\0\3\254\6\0\1\254"+
"\22\0\1\255\67\0\11\256\2\125\1\126\13\256\1\125"+
"\70\256\2\125\1\126\13\256\1\125\4\256\1\257\2\256"+
"\1\260\6\256\1\261\1\256\1\262\36\256\1\0\1\263"+
"\1\0\1\263\3\0\1\263\1\264\15\0\1\264\35\0"+
"\4\263\27\0\4\133\12\0\2\133\60\0\3\135\1\0"+
"\3\135\1\265\13\0\4\135\7\0\32\135\1\0\3\135"+
"\6\0\1\135\3\0\13\136\1\266\73\136\30\24\1\137"+
"\1\0\105\24\1\0\1\140\55\24\11\146\2\267\1\270"+
"\13\146\1\267\57\146\1\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\271"+
"\30\147\1\0\3\147\6\0\1\147\3\0\11\151\2\272"+
"\1\273\13\151\1\272\57\151\1\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\1\147\1\274\15\147\1\275\4\147"+
"\1\276\5\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\5\147\1\277\24\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\3\147\1\300\5\147\1\301\2\147"+
"\1\302\15\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\1\303\2\147\14\0\4\147\7\0\5\147\1\304"+
"\24\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\1\147\1\305\1\147\14\0\4\147\7\0\1\306\31\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\11\147\1\307\20\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\1\310\31\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\20\147\1\311"+
"\1\147\1\312\7\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\2\147\1\313"+
"\3\147\1\314\7\147\1\315\13\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\1\147\1\316\1\147\14\0"+
"\4\147\7\0\2\147\1\317\1\320\1\147\1\321\4\147"+
"\1\322\1\147\1\323\15\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\1\147\1\324\1\147\14\0\4\147"+
"\7\0\11\147\1\325\20\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\1\147\1\326\1\147\14\0\4\147"+
"\7\0\14\147\1\327\15\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+
"\1\330\22\147\1\0\3\147\6\0\1\147\62\0\1\331"+
"\106\0\1\332\116\0\1\333\20\0\3\147\1\0\3\147"+
"\1\334\13\0\2\147\1\335\1\147\7\0\15\147\1\336"+
"\14\147\1\0\3\147\6\0\1\147\3\0\11\174\3\0"+
"\13\174\1\0\57\174\1\0\3\147\1\0\3\147\1\337"+
"\13\0\2\147\1\340\1\147\7\0\2\147\1\341\3\147"+
"\1\314\7\147\1\315\13\147\1\0\3\147\6\0\1\147"+
"\75\0\1\342\14\0\11\201\3\0\13\201\1\0\57\201"+
"\3\0\1\343\3\0\1\343\54\0\1\343\1\0\2\343"+
"\20\0\3\344\3\0\1\344\36\0\2\344\3\0\1\344"+
"\1\0\1\344\1\0\1\344\2\0\1\344\1\0\4\344"+
"\2\0\1\344\1\0\1\344\13\0\3\345\3\0\1\345"+
"\36\0\2\345\3\0\1\345\1\0\1\345\1\0\1\345"+
"\2\0\1\345\1\0\4\345\2\0\1\345\1\0\1\345"+
"\15\0\1\203\3\0\1\203\54\0\1\203\1\0\2\203"+
"\25\0\1\346\42\0\1\347\6\0\1\350\1\0\1\351"+
"\116\0\1\352\15\0\1\221\1\0\1\221\3\0\1\221"+
"\54\0\4\221\20\0\3\222\1\0\3\222\1\353\13\0"+
"\4\222\4\0\1\354\2\0\32\222\1\0\3\222\6\0"+
"\1\222\16\0\1\355\73\0\30\232\1\356\56\232\11\233"+
"\2\357\1\76\13\233\1\357\57\233\11\230\3\0\13\230"+
"\1\0\57\230\33\0\1\76\53\0\3\235\1\360\1\361"+
"\1\235\1\362\1\363\1\235\3\0\13\235\1\0\34\235"+
"\1\360\1\235\1\363\1\360\17\235\3\0\1\364\3\0"+
"\1\364\54\0\1\364\1\0\2\364\20\0\3\365\3\0"+
"\1\365\36\0\2\365\3\0\1\365\1\0\1\365\1\0"+
"\1\365\2\0\1\365\1\0\4\365\2\0\1\365\1\0"+
"\1\365\13\0\3\366\3\0\1\366\36\0\2\366\3\0"+
"\1\366\1\0\1\366\1\0\1\366\2\0\1\366\1\0"+
"\4\366\2\0\1\366\1\0\1\366\15\0\1\240\3\0"+
"\1\240\54\0\1\240\1\0\2\240\20\0\3\254\1\0"+
"\3\254\14\0\4\254\4\0\1\367\2\0\32\254\1\0"+
"\3\254\6\0\1\254\3\0\11\257\2\370\1\371\13\257"+
"\1\370\57\257\11\256\2\125\1\126\13\256\1\125\10\256"+
"\1\372\57\256\2\125\1\126\13\256\1\125\14\256\1\373"+
"\53\256\2\125\1\126\13\256\1\125\20\256\1\374\36\256"+
"\1\0\1\263\1\0\1\263\3\0\1\263\54\0\4\263"+
"\27\0\1\265\15\0\1\265\61\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\1\375\31\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\1\376\1\147\1\377\13\147\1\u0100\13\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\22\147\1\u0101\7\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
"\1\u0102\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\2\147\1\u0103\27\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\4\147\1\u0104\25\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\22\147\1\u0105\7\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\20\147"+
"\1\u0106\11\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\2\147\1\u0107\27\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\10\147\1\u0108\21\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\1\147\1\u0109\10\147\1\u010a\17\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\1\147\1\u010b\30\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+
"\1\u010c\2\147\1\u010d\17\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
"\1\u010e\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\15\147\1\u010f\14\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\1\u0110\31\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\14\147\1\u0111\15\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\1\u0112\31\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\14\147\1\u0113\15\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\22\147\1\u0114\7\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+
"\1\u0115\24\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\14\147\1\u0116\15\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\12\147\1\u0117\17\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\14\147\1\u0118\15\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+
"\1\u0119\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\10\147\1\u011a\21\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\14\147\1\u011b\15\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\20\147\1\u011c\11\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+
"\1\u011d\13\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\20\147\1\u011e\11\147"+
"\1\0\3\147\6\0\1\147\42\0\1\u011f\106\0\1\u0120"+
"\126\0\1\u0121\37\0\1\334\15\0\1\334\61\0\3\147"+
"\1\0\3\147\1\334\13\0\2\147\1\335\1\147\7\0"+
"\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\2\147\1\u0122\27\147\1\0"+
"\3\147\6\0\1\147\13\0\1\337\15\0\1\337\61\0"+
"\3\147\1\0\3\147\1\337\13\0\2\147\1\340\1\147"+
"\7\0\32\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\14\147\1\u0123\15\147"+
"\1\0\3\147\6\0\1\147\76\0\1\u0124\14\0\3\u0125"+
"\3\0\1\u0125\36\0\2\u0125\3\0\1\u0125\1\0\1\u0125"+
"\1\0\1\u0125\2\0\1\u0125\1\0\4\u0125\2\0\1\u0125"+
"\1\0\1\u0125\13\0\3\u0126\3\0\1\u0126\36\0\2\u0126"+
"\3\0\1\u0126\1\0\1\u0126\1\0\1\u0126\2\0\1\u0126"+
"\1\0\4\u0126\2\0\1\u0126\1\0\1\u0126\73\0\1\u0127"+
"\71\0\1\u0128\1\0\1\u0129\111\0\1\u012a\74\0\1\u012b"+
"\142\0\1\u012c\23\0\1\353\15\0\1\353\5\0\1\354"+
"\52\0\30\232\1\356\1\76\55\232\13\357\1\76\15\357"+
"\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\50\357\3\0"+
"\1\235\3\0\1\235\23\0\1\76\30\0\1\235\1\0"+
"\2\235\23\0\1\u0130\1\0\1\u0131\24\0\1\76\54\0"+
"\3\u0132\3\0\1\u0132\23\0\1\76\12\0\2\u0132\3\0"+
"\1\u0132\1\0\1\u0132\1\0\1\u0132\2\0\1\u0132\1\0"+
"\4\u0132\2\0\1\u0132\1\0\1\u0132\15\0\1\360\3\0"+
"\1\360\23\0\1\76\30\0\1\360\1\0\2\360\20\0"+
"\3\u0133\3\0\1\u0133\36\0\2\u0133\3\0\1\u0133\1\0"+
"\1\u0133\1\0\1\u0133\2\0\1\u0133\1\0\4\u0133\2\0"+
"\1\u0133\1\0\1\u0133\13\0\3\u0134\3\0\1\u0134\36\0"+
"\2\u0134\3\0\1\u0134\1\0\1\u0134\1\0\1\u0134\2\0"+
"\1\u0134\1\0\4\u0134\2\0\1\u0134\1\0\1\u0134\12\0"+
"\11\256\2\125\1\126\13\256\1\125\7\256\1\u0135\60\256"+
"\2\125\1\126\13\256\1\125\17\256\1\u0136\50\256\2\125"+
"\1\126\13\256\1\125\21\256\1\u0137\35\256\1\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\16\147\1\u0138\13\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\2\147\1\u0139\27\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\6\147\1\u013a\1\u013b\22\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\12\147\1\u013c\17\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u013d"+
"\17\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\5\147\1\u013e\24\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\1\147\1\u013f"+
"\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\5\147\1\u0140\24\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\7\147\1\u0141"+
"\22\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\12\147\1\u0142\17\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\7\147\1\u0143\22\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\6\0"+
"\1\151\2\147\1\u0144\10\147\1\u0145\2\147\1\u0146\13\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\16\147\1\u0147\13\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\12\147\1\u0148\17\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\14\147"+
"\1\u0149\15\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\5\147\1\u014a\24\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\7\147\1\u014b\22\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\7\147\1\u014c\22\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+
"\1\u014d\27\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\22\147\1\u014e\7\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\1\147\1\u014f\30\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\2\147\1\u0150\27\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
"\1\u0151\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\15\147\1\u0152\5\147"+
"\1\u0153\6\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\4\147\1\u0154\25\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\4\147\1\u0155\25\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\1\147\1\u0156\1\147"+
"\14\0\4\147\7\0\32\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+
"\1\u0157\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\7\147\1\u0158\22\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\10\147\1\u0159\21\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\16\147\1\u015a\13\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\12\147"+
"\1\u015b\17\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\31\147\1\u015c\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\1\147\1\u015d"+
"\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+
"\1\147\44\0\1\u015e\106\0\1\u015f\104\0\1\u0160\50\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\14\147\1\u0161"+
"\15\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\1\147\1\u014f\1\u0162\27\147"+
"\1\0\3\147\6\0\1\147\77\0\1\u0163\13\0\3\u0164"+
"\3\0\1\u0164\36\0\2\u0164\3\0\1\u0164\1\0\1\u0164"+
"\1\0\1\u0164\2\0\1\u0164\1\0\4\u0164\2\0\1\u0164"+
"\1\0\1\u0164\73\0\1\u0165\72\0\1\u0166\102\0\1\u0167"+
"\113\0\1\u0168\123\0\1\u0169\117\0\1\u016a\12\0\13\357"+
"\1\76\14\357\1\u016b\1\233\55\357\4\u012e\1\u016c\4\u012e"+
"\2\357\1\76\13\u012e\1\357\2\u012e\1\357\54\u012e\4\u016d"+
"\1\u016e\4\u016d\2\357\1\76\13\u016d\1\357\3\u016d\1\233"+
"\53\u016d\4\0\1\u0130\1\0\1\u0131\101\0\3\u0132\3\0"+
"\1\u0132\36\0\2\u0132\3\0\1\u0132\1\0\1\u0132\1\0"+
"\1\u0132\2\0\1\u0132\1\0\4\u0132\2\0\1\u0132\1\0"+
"\1\u0132\13\0\3\u016f\3\0\1\u016f\36\0\2\u016f\3\0"+
"\1\u016f\1\0\1\u016f\1\0\1\u016f\2\0\1\u016f\1\0"+
"\4\u016f\2\0\1\u016f\1\0\1\u016f\13\0\3\u0170\3\0"+
"\1\u0170\36\0\2\u0170\3\0\1\u0170\1\0\1\u0170\1\0"+
"\1\u0170\2\0\1\u0170\1\0\4\u0170\2\0\1\u0170\1\0"+
"\1\u0170\12\0\11\256\2\125\1\126\13\256\1\125\11\256"+
"\1\u0171\56\256\2\125\1\126\13\256\1\125\4\256\1\u0172"+
"\4\256\1\u0173\10\256\1\u0174\45\256\2\125\1\126\13\256"+
"\1\125\16\256\1\u0175\40\256\1\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\5\147\1\u0176\24\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\6\0\1\151\2\147\1\u0177\27\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\4\147\1\u0178\25\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\24\147\1\u0179"+
"\5\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\1\147\1\u017a\1\147\14\0\4\147\7\0\32\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\7\147\1\u017b\22\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\4\147\1\u017c\25\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u017d"+
"\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\6\147\1\u017e\23\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\u017f"+
"\13\0\2\147\1\u0180\1\147\7\0\32\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\7\147\1\u0181\22\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
"\1\u0182\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\3\147\1\u0183\26\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\14\147\1\u0184\15\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\12\147\1\u0185\17\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+
"\1\u0186\27\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\12\147\1\u0187\17\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\10\147\1\u0188\21\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\1\u0189\2\147\14\0"+
"\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u018a"+
"\25\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\4\147\1\u018b\25\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\23\147\1\u018c\6\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\16\147\1\u018d\13\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\7\147\1\u018e"+
"\22\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\11\147\1\u018f\20\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\7\147\1\u0190\22\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\14\147\1\u0191\15\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\17\147\1\u0192"+
"\12\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\15\147\1\u0193\14\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\12\147\1\u0194\17\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\7\147\1\u0195\22\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\16\147\1\u0196"+
"\13\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\1\u0197\31\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\24\147\1\u0198\5\147\1\0\3\147\6\0\1\147"+
"\44\0\1\u0199\46\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\2\147\1\u019a\27\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+
"\1\u019b\22\147\1\0\3\147\6\0\1\147\24\0\1\u019c"+
"\133\0\1\u019d\106\0\1\u019e\101\0\1\u019f\106\0\1\u01a0"+
"\104\0\1\u01a1\70\0\1\u01a2\65\0\11\u016b\2\u01a3\1\u01a4"+
"\13\u016b\1\u01a3\1\u01a5\56\u016b\11\u012e\2\357\1\76\13\u012e"+
"\1\357\57\u012e\11\233\2\357\1\76\13\233\1\357\3\233"+
"\1\357\53\233\3\u016d\1\u01a6\1\u01a7\1\u016d\1\u01a8\1\u01a9"+
"\1\u016d\2\357\1\76\13\u016d\1\357\34\u016d\1\u01a6\1\u016d"+
"\1\u01a9\1\u01a6\17\u016d\1\0\3\u01aa\3\0\1\u01aa\36\0"+
"\2\u01aa\3\0\1\u01aa\1\0\1\u01aa\1\0\1\u01aa\2\0"+
"\1\u01aa\1\0\4\u01aa\2\0\1\u01aa\1\0\1\u01aa\12\0"+
"\11\256\2\125\1\126\13\256\1\125\4\256\1\u01ab\4\256"+
"\1\u01ac\45\256\11\u0172\2\u01ad\1\u01ae\13\u0172\1\u01ad\57\u0172"+
"\11\256\2\125\1\126\13\256\1\125\12\256\1\u01af\55\256"+
"\2\125\1\126\13\256\1\125\23\256\1\u01b0\40\256\1\u01b1"+
"\3\256\2\125\1\126\13\256\1\125\57\256\1\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b2\6\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\3\147\1\u01b3\26\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\14\147\1\u01b4\15\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+
"\1\u01b5\22\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b6\6\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\17\147\1\u01b7\12\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\7\147\1\u01b8\22\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\u01b9"+
"\31\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\15\147\1\u01ba\14\147\1\0"+
"\3\147\6\0\1\147\5\0\1\u01bb\2\0\2\u01bb\1\0"+
"\1\u017f\7\0\1\u01bc\3\0\1\u01bb\1\0\1\u017f\10\0"+
"\25\u01bb\4\0\1\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0"+
"\1\147\1\u01bb\1\147\1\0\2\u01bb\1\147\1\u017f\7\0"+
"\1\u01bc\3\0\1\u01bb\1\147\1\u0180\1\147\7\0\25\u01bb"+
"\4\147\1\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\23\147\1\u01bd\6\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\4\147\1\u01be\25\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\12\147\1\u01bf\17\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+
"\1\u01c0\24\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\1\u01c1\31\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\2\147\1\u01c2\27\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\14\147\1\u01c3\15\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\1\u01c4\31\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\14\147\1\u01c5\15\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\3\147\1\u01c6\26\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+
"\1\u01c7\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\17\147\1\u01c8\12\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\20\147\1\u01c9\11\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\4\147\1\u01ca\25\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
"\1\u01cb\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\1\u01cc\13\0\2\147\1\u01cd\1\147\7\0"+
"\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\7\147\1\u01ce\22\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\4\147\1\u01cf\25\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\21\147\1\u01d0\10\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\16\147\1\u01d1"+
"\13\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\7\147\1\u01d2\22\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\337"+
"\13\0\2\147\1\340\1\147\7\0\15\147\1\u01d3\14\147"+
"\1\0\3\147\6\0\1\147\24\0\1\u01d4\130\0\1\u01d5"+
"\106\0\1\u01d6\111\0\1\u01d7\101\0\1\u01d8\106\0\1\u01d9"+
"\66\0\1\u01da\65\0\13\u01a3\1\u01a4\14\u01a3\1\u01db\1\u01dc"+
"\1\u01dd\1\u01de\1\u016b\1\u01a3\1\u016b\50\u01a3\30\u01a4\1\u01df"+
"\1\u01e0\1\u01e1\1\u01e2\1\232\1\u01a4\1\232\50\u01a4\11\u016b"+
"\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\1\357\55\u016b\3\233"+
"\1\u016d\3\233\1\u016d\1\233\2\357\1\76\13\233\1\357"+
"\3\233\1\357\30\233\1\u016d\1\233\2\u016d\23\233\1\u01e3"+
"\1\233\1\u01e4\2\233\2\357\1\76\13\233\1\357\3\233"+
"\1\357\54\233\3\u01e5\3\233\1\u01e5\1\233\2\357\1\76"+
"\13\233\1\357\3\233\1\357\12\233\2\u01e5\3\233\1\u01e5"+
"\1\233\1\u01e5\1\233\1\u01e5\2\233\1\u01e5\1\233\4\u01e5"+
"\2\233\1\u01e5\1\233\1\u01e5\15\233\1\u01a6\3\233\1\u01a6"+
"\1\233\2\357\1\76\13\233\1\357\3\233\1\357\30\233"+
"\1\u01a6\1\233\2\u01a6\17\233\1\0\3\235\3\0\1\235"+
"\36\0\2\235\3\0\1\235\1\0\1\235\1\0\1\235"+
"\2\0\1\235\1\0\4\235\2\0\1\235\1\0\1\235"+
"\12\0\11\u01ab\2\u01e6\1\u01e7\13\u01ab\1\u01e6\57\u01ab\11\256"+
"\2\125\1\126\13\256\1\125\12\256\1\u01e8\55\256\2\125"+
"\1\126\13\256\1\125\13\256\1\u01e9\54\256\2\125\1\126"+
"\13\256\1\125\21\256\1\u01ea\46\256\2\125\1\126\13\256"+
"\1\125\11\256\1\u01eb\45\256\1\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\7\147\1\u01ec\22\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\4\147\1\u01ed\25\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\22\147"+
"\1\u01ee\7\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\4\147\1\u01ef\25\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\7\147\1\u01f0\22\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\7\147\1\u01f1\22\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+
"\1\u01f2\13\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\1\u01f3\2\147\14\0\4\147\7\0\32\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\u01f4"+
"\13\0\2\147\1\u01f5\1\147\7\0\32\147\1\0\3\147"+
"\6\0\1\147\4\0\3\u01bb\1\0\3\u01bb\1\u01f6\3\0"+
"\1\u01f7\1\0\1\u01f8\1\0\1\u01f9\3\0\4\u01bb\7\0"+
"\32\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0\3\u01fa\1\0"+
"\4\u01fa\3\0\2\u01fa\2\0\10\u01fa\7\0\32\u01fa\1\0"+
"\3\u01fa\6\0\1\u01fa\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\15\147\1\u01fb\14\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\5\147\1\u01fc\24\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\6\0\1\151\32\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\15\147\1\u01fd\14\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\5\147\1\u01fe\24\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\3\147"+
"\1\u01ff\26\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\16\147\1\u0200\13\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\13\147\1\u0201\16\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\12\147\1\u0202\17\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+
"\1\u0203\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\1\u0204\13\0\2\147\1\u0205\1\147\7\0"+
"\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\1\147\1\u0206\1\147\14\0\4\147\7\0\32\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\24\147\1\u0207\5\147\1\0\3\147\6\0"+
"\1\147\5\0\1\u0208\2\0\2\u0208\1\0\1\u01cc\13\0"+
"\1\u0208\1\0\1\u01cc\10\0\25\u0208\4\0\1\u0208\1\0"+
"\3\u0208\6\0\1\u0208\4\0\1\147\1\u0208\1\147\1\0"+
"\2\u0208\1\147\1\u01cc\13\0\1\u0208\1\147\1\u01cd\1\147"+
"\7\0\25\u0208\4\147\1\u0208\1\0\3\u0208\6\0\1\u0208"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+
"\1\u0209\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\1\u020a\13\0\2\147\1\u020b\1\147\7\0"+
"\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\1\334\13\0\2\147\1\335\1\147\7\0\15\147"+
"\1\u020c\14\147\1\0\3\147\6\0\1\147\13\0\4\u01d4"+
"\12\0\2\u01d4\6\0\1\u020d\125\0\1\u020e\106\0\1\u020f"+
"\74\0\1\u0210\111\0\1\u0211\145\0\1\u0212\11\0\4\u0213"+
"\12\0\2\u0213\57\0\13\u01a3\1\u01a4\14\u01a3\1\u01db\1\u0214"+
"\1\u01dd\1\u01de\1\u016b\1\u01a3\1\u016b\63\u01a3\1\u01a4\14\u01a3"+
"\1\u0215\1\u016b\55\u01a3\4\u01dd\1\u0216\4\u01dd\2\u01a3\1\u01a4"+
"\13\u01dd\1\u01a3\1\u0217\1\u01dd\1\u01a3\54\u01dd\4\u0218\1\u0219"+
"\4\u0218\2\u01a3\1\u01a4\13\u0218\1\u01a3\1\u021a\2\u0218\1\u016b"+
"\53\u0218\30\u01a4\1\u01df\1\u021b\1\u01e1\1\u01e2\1\232\1\u01a4"+
"\1\232\100\u01a4\1\u021c\1\u016b\55\u01a4\4\u01e1\1\u021d\4\u01e1"+
"\3\232\13\u01e1\1\232\1\u021e\1\u01e1\1\u01a4\54\u01e1\4\u021f"+
"\1\u0220\4\u021f\3\232\13\u021f\1\232\1\u0221\2\u021f\1\232"+
"\53\u021f\4\233\1\u01e3\1\233\1\u01e4\2\233\2\357\1\76"+
"\13\233\1\357\60\233\3\u01e5\3\233\1\u01e5\1\233\2\357"+
"\1\76\13\233\1\357\16\233\2\u01e5\3\233\1\u01e5\1\233"+
"\1\u01e5\1\233\1\u01e5\2\233\1\u01e5\1\233\4\u01e5\2\233"+
"\1\u01e5\1\233\1\u01e5\13\233\3\u0222\3\233\1\u0222\1\233"+
"\2\357\1\76\13\233\1\357\16\233\2\u0222\3\233\1\u0222"+
"\1\233\1\u0222\1\233\1\u0222\2\233\1\u0222\1\233\4\u0222"+
"\2\233\1\u0222\1\233\1\u0222\12\233\11\256\2\125\1\126"+
"\13\256\1\125\13\256\1\u0223\54\256\2\125\1\126\13\256"+
"\1\125\14\256\1\u0224\53\256\2\125\1\126\13\256\1\125"+
"\4\256\1\u0225\63\256\2\125\1\126\13\256\1\125\12\256"+
"\1\u0226\44\256\1\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\5\147\1\u0227\24\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\1\u0228\13\0\2\147\1\u0228"+
"\1\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0229"+
"\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\14\147\1\u022a\15\147\1\0"+
"\3\147\6\0\1\147\3\0\2\u022b\1\u022c\2\u022b\2\u022c"+
"\1\u022b\1\u01f4\3\0\10\u022b\1\u022c\1\u022b\1\u01f4\1\0"+
"\7\u022b\25\u022c\4\u022b\1\u022c\1\u022b\3\u022c\6\u022b\1\u022c"+
"\4\u022b\1\u022d\1\u022c\1\u022d\1\u022b\2\u022c\1\u022d\1\u01f4"+
"\3\0\10\u022b\1\u022c\1\u022d\1\u01f5\1\147\7\u022b\25\u022c"+
"\4\u022d\1\u022c\1\u022b\3\u022c\6\u022b\1\u022c\3\u022b\10\0"+
"\1\u01f6\3\0\1\u01f7\1\0\1\u01f8\1\0\1\u01f9\5\0"+
"\1\u01f6\62\0\1\u01bb\2\0\2\u01bb\1\0\1\u01f7\13\0"+
"\1\u01bb\1\0\1\u01f7\10\0\25\u01bb\4\0\1\u01bb\1\0"+
"\3\u01bb\6\0\1\u01bb\13\0\1\u01f8\6\0\1\u022e\6\0"+
"\1\u01f8\61\0\3\u022f\1\0\4\u022f\3\0\2\u022f\2\0"+
"\10\u022f\7\0\32\u022f\1\0\3\u022f\6\0\1\u022f\4\0"+
"\3\u01fa\1\0\4\u01fa\3\0\2\u01fa\2\0\1\u01fa\1\u0230"+
"\6\u01fa\7\0\32\u01fa\1\0\3\u01fa\6\0\1\u01fa\4\0"+
"\3\147\1\0\3\147\1\u0231\13\0\2\147\1\u0232\1\147"+
"\7\0\32\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\6\147\1\u0233\23\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\7\147\1\u0234\22\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\1\147\1\u0235\30\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+
"\1\u0236\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\2\147\1\u0237\27\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\14\147\1\u0238\15\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\5\147\1\u0239\24\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+
"\1\u023a\24\147\1\0\3\147\6\0\1\147\3\0\2\u023b"+
"\1\u023c\2\u023b\2\u023c\1\u023b\1\u0204\3\0\10\u023b\1\u023c"+
"\1\u023b\1\u0204\1\0\7\u023b\25\u023c\4\u023b\1\u023c\1\u023b"+
"\3\u023c\6\u023b\1\u023c\4\u023b\1\u023d\1\u023c\1\u023d\1\u023b"+
"\2\u023c\1\u023d\1\u0204\3\0\10\u023b\1\u023c\1\u023d\1\u0205"+
"\1\147\7\u023b\25\u023c\4\u023d\1\u023c\1\u023b\3\u023c\6\u023b"+
"\1\u023c\3\u023b\1\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\24\147\1\u023e\5\147\1\0\3\147\6\0\1\147"+
"\4\0\3\147\1\0\3\147\1\u023f\13\0\2\147\1\u0240"+
"\1\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
"\3\u0208\1\0\3\u0208\1\u0241\7\0\1\u0242\3\0\4\u0208"+
"\7\0\32\u0208\1\0\3\u0208\6\0\1\u0208\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\15\147\1\u0243\14\147"+
"\1\0\3\147\6\0\1\147\3\0\1\u0244\1\u0245\1\u0244"+
"\1\u0245\3\u0244\1\u0245\1\u020a\3\0\12\u0244\1\u020a\1\0"+
"\34\u0244\4\u0245\20\u0244\1\u0246\1\u0247\1\u0246\1\u0244\2\u0247"+
"\1\u0246\1\u020a\3\0\10\u0244\2\u0247\1\u020b\1\147\7\u0244"+
"\25\u0247\4\u0246\1\u0247\1\u0244\3\u0247\6\u0244\1\u0247\3\u0244"+
"\53\0\1\u0248\106\0\1\u0249\140\0\1\u024a\44\0\1\u024b"+
"\62\0\1\u024c\77\0\4\u0213\12\0\2\u0213\6\0\1\u024d"+
"\50\0\13\357\1\76\14\357\1\u01a3\1\u012d\1\u024e\1\u024f"+
"\53\357\11\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\1\u01a3"+
"\55\u016b\11\u01dd\2\u01a3\1\u01a4\13\u01dd\1\u01a3\1\u0217\62\u01dd"+
"\1\u0216\4\u01dd\2\u01a3\1\u01a4\13\u01dd\1\u01a3\1\u0217\1\u024e"+
"\1\u01a3\54\u01dd\11\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5"+
"\2\u016b\1\u01a3\53\u016b\3\u0218\1\u0250\1\u0251\1\u0218\1\u0252"+
"\1\u0253\1\u0218\2\u01a3\1\u01a4\13\u0218\1\u01a3\1\u021a\33\u0218"+
"\1\u0250\1\u0218\1\u0253\1\u0250\17\u0218\11\u016b\2\u01a3\1\u01a4"+
"\13\u016b\1\u01a3\1\u01a5\1\357\1\u016b\1\u01a3\53\u016b\30\76"+
"\1\u01a4\1\u012d\1\u0254\1\u0255\53\76\30\232\1\356\1\u01a4"+
"\55\232\11\u01e1\3\232\13\u01e1\1\232\1\u021e\62\u01e1\1\u021d"+
"\4\u01e1\3\232\13\u01e1\1\232\1\u021e\1\u0254\1\u01a4\54\u01e1"+
"\30\232\1\356\2\232\1\u01a4\53\232\3\u021f\1\u0256\1\u0257"+
"\1\u021f\1\u0258\1\u0259\1\u021f\3\232\13\u021f\1\232\1\u0221"+
"\33\u021f\1\u0256\1\u021f\1\u0259\1\u0256\17\u021f\30\232\1\356"+
"\1\76\1\232\1\u01a4\53\232\1\233\3\u025a\3\233\1\u025a"+
"\1\233\2\357\1\76\13\233\1\357\16\233\2\u025a\3\233"+
"\1\u025a\1\233\1\u025a\1\233\1\u025a\2\233\1\u025a\1\233"+
"\4\u025a\2\233\1\u025a\1\233\1\u025a\12\233\11\256\2\125"+
"\1\126\13\256\1\125\14\256\1\u025b\53\256\2\125\1\126"+
"\13\256\1\125\15\256\1\u025c\41\256\11\u0225\2\u025d\1\u025e"+
"\13\u0225\1\u025d\57\u0225\11\256\2\125\1\126\13\256\1\125"+
"\13\256\1\u025f\43\256\1\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\6\147\1\u0260\23\147\1\0\3\147\6\0"+
"\1\147\3\0\13\u0228\1\0\73\u0228\1\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\2\147\1\u0261\27\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\15\147\1\u0262\14\147\1\0\3\147\6\0"+
"\1\147\3\0\11\u022b\3\0\13\u022b\1\0\60\u022b\3\u022c"+
"\1\u022b\3\u022c\1\u0263\3\0\2\u01f4\6\u022b\3\u022c\1\u0264"+
"\7\u022b\32\u022c\1\u022b\3\u022c\6\u022b\1\u022c\4\u022b\3\u022d"+
"\1\u022b\3\u022d\1\u022b\3\0\10\u022b\3\u022d\1\147\7\u022b"+
"\32\u022d\1\u022b\3\u022d\6\u022b\1\u022d\3\u022b\10\0\1\u022e"+
"\5\0\1\u01f8\7\0\1\u022e\61\0\3\u022f\1\0\4\u022f"+
"\3\0\2\u022f\2\0\1\u022f\1\u0265\6\u022f\7\0\32\u022f"+
"\1\0\3\u022f\6\0\1\u022f\4\0\1\u01fa\1\u0266\1\u01fa"+
"\1\0\2\u0266\1\u01fa\1\u0230\3\0\2\u01fa\2\0\1\u01fa"+
"\1\u0230\2\u01fa\1\u0266\1\u01fa\1\u0230\1\u01fa\7\0\25\u0266"+
"\4\u01fa\1\u0266\1\0\3\u0266\6\0\1\u0266\5\0\1\u0267"+
"\2\0\2\u0267\1\0\1\u0231\13\0\1\u0267\1\0\1\u0231"+
"\10\0\25\u0267\4\0\1\u0267\1\0\3\u0267\6\0\1\u0267"+
"\4\0\1\147\1\u0267\1\147\1\0\2\u0267\1\147\1\u0231"+
"\13\0\1\u0267\1\147\1\u0232\1\147\7\0\25\u0267\4\147"+
"\1\u0267\1\0\3\u0267\6\0\1\u0267\4\0\3\147\1\0"+
"\3\147\1\u0268\13\0\2\147\1\u0269\1\147\6\0\1\151"+
"\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\1\u026a\13\0\2\147\1\u026b\1\147\7\0\32\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\1\u026c\13\0\2\147\1\u026d\1\147\7\0\32\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\5\147\1\u026e\24\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\2\147\1\u026f\27\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0270"+
"\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\4\147\1\u0271\25\147\1\0"+
"\3\147\6\0\1\147\3\0\11\u023b\3\0\13\u023b\1\0"+
"\60\u023b\3\u023c\1\u023b\3\u023c\1\u0272\3\0\1\u0204\7\u023b"+
"\3\u023c\1\u0273\7\u023b\32\u023c\1\u023b\3\u023c\6\u023b\1\u023c"+
"\4\u023b\3\u023d\1\u023b\3\u023d\1\u023b\3\0\10\u023b\3\u023d"+
"\1\147\7\u023b\32\u023d\1\u023b\3\u023d\6\u023b\1\u023d\3\u023b"+
"\2\0\1\u0274\2\0\2\u0274\1\0\1\u023f\7\0\1\u0275"+
"\3\0\1\u0274\1\0\1\u023f\10\0\25\u0274\4\0\1\u0274"+
"\1\0\3\u0274\6\0\1\u0274\4\0\1\147\1\u0276\1\147"+
"\1\0\2\u0276\1\147\1\u023f\7\0\1\u0275\3\0\1\u0276"+
"\1\147\1\u0240\1\147\7\0\25\u0276\4\147\1\u0276\1\0"+
"\3\u0276\6\0\1\u0276\13\0\1\u0241\7\0\1\u0242\5\0"+
"\1\u0241\61\0\3\u0277\1\0\4\u0277\3\0\2\u0277\2\0"+
"\10\u0277\7\0\32\u0277\1\0\3\u0277\6\0\1\u0277\3\0"+
"\11\u0244\3\0\13\u0244\1\0\60\u0244\1\u0245\1\u0244\1\u0245"+
"\3\u0244\1\u0245\1\u0278\3\0\12\u0244\1\u0278\1\0\34\u0244"+
"\4\u0245\20\u0244\1\u0246\1\u0247\1\u0246\1\u0244\2\u0247\1\u0246"+
"\1\u0278\3\0\10\u0244\2\u0247\1\u0279\1\147\7\u0244\25\u0247"+
"\4\u0246\1\u0247\1\u0244\3\u0247\6\u0244\1\u0247\4\u0244\3\u0247"+
"\1\u0244\3\u0247\1\u0244\3\0\10\u0244\3\u0247\1\147\7\u0244"+
"\32\u0247\1\u0244\3\u0247\6\u0244\1\u0247\3\u0244\54\0\1\u027a"+
"\106\0\1\u027b\51\0\1\u027c\151\0\1\u027d\22\0\1\u027e"+
"\1\0\4\u024e\1\u027f\4\u024e\2\357\1\76\13\u024e\1\357"+
"\1\u024e\1\u0280\1\u024e\1\u0281\1\u012e\1\u024e\1\u012e\50\u024e"+
"\4\u0282\1\u0283\4\u0282\2\357\1\76\13\u0282\1\357\1\u0282"+
"\1\u012d\1\u0284\1\u012f\1\u016d\1\u0282\1\u016d\50\u0282\3\u016b"+
"\1\u0218\3\u016b\1\u0218\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+
"\1\u01a5\2\u016b\1\u01a3\30\u016b\1\u0218\1\u016b\2\u0218\23\u016b"+
"\1\u0285\1\u016b\1\u0286\2\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+
"\1\u01a5\2\u016b\1\u01a3\54\u016b\3\u0287\3\u016b\1\u0287\1\u016b"+
"\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\2\u016b\1\u01a3\12\u016b"+
"\2\u0287\3\u016b\1\u0287\1\u016b\1\u0287\1\u016b\1\u0287\2\u016b"+
"\1\u0287\1\u016b\4\u0287\2\u016b\1\u0287\1\u016b\1\u0287\15\u016b"+
"\1\u0250\3\u016b\1\u0250\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+
"\1\u01a5\2\u016b\1\u01a3\30\u016b\1\u0250\1\u016b\2\u0250\17\u016b"+
"\4\u0254\1\u0288\4\u0254\3\76\13\u0254\1\76\1\u0254\1\u0289"+
"\1\u0254\1\u028a\1\230\1\u0254\1\230\50\u0254\4\u028b\1\u028c"+
"\4\u028b\3\76\13\u028b\1\76\1\u028b\1\227\1\u028d\1\231"+
"\1\235\1\u028b\1\235\50\u028b\3\232\1\u021f\3\232\1\u021f"+
"\20\232\1\356\2\232\1\u01a4\30\232\1\u021f\1\232\2\u021f"+
"\23\232\1\u028e\1\232\1\u028f\21\232\1\356\2\232\1\u01a4"+
"\54\232\3\u0290\3\232\1\u0290\20\232\1\356\2\232\1\u01a4"+
"\12\232\2\u0290\3\232\1\u0290\1\232\1\u0290\1\232\1\u0290"+
"\2\232\1\u0290\1\232\4\u0290\2\232\1\u0290\1\232\1\u0290"+
"\15\232\1\u0256\3\232\1\u0256\20\232\1\356\2\232\1\u01a4"+
"\30\232\1\u0256\1\232\2\u0256\17\232\1\233\3\u016d\3\233"+
"\1\u016d\1\233\2\357\1\76\13\233\1\357\16\233\2\u016d"+
"\3\233\1\u016d\1\233\1\u016d\1\233\1\u016d\2\233\1\u016d"+
"\1\233\4\u016d\2\233\1\u016d\1\233\1\u016d\12\233\11\256"+
"\2\125\1\126\13\256\1\125\15\256\1\u0291\52\256\2\125"+
"\1\126\13\256\1\125\4\256\1\u0292\63\256\2\125\1\126"+
"\13\256\1\125\14\256\1\u0293\42\256\1\0\3\147\1\0"+
"\3\147\1\u0294\13\0\2\147\1\u0295\1\147\6\0\1\151"+
"\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\15\147\1\u0296\14\147\1\0"+
"\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\7\147\1\u0243\22\147\1\0\3\147\6\0"+
"\1\147\3\0\10\u022b\1\u0263\3\0\2\u01f4\10\u022b\1\u0263"+
"\1\0\57\u022b\1\0\3\u0264\1\0\3\u0264\1\u0297\3\0"+
"\2\u0298\6\0\4\u0264\7\0\32\u0264\1\0\3\u0264\6\0"+
"\1\u0264\4\0\3\u022f\1\0\3\u022f\1\u0265\3\0\2\u022f"+
"\1\u01f8\1\0\1\u022f\1\u0265\4\u022f\1\u0265\1\u022f\7\0"+
"\32\u022f\1\0\3\u022f\6\0\1\u022f\4\0\3\u0266\1\0"+
"\3\u0266\1\u0299\3\0\1\u0230\1\u01fa\1\u01f8\1\0\1\u029a"+
"\1\u0230\2\u01fa\4\u0266\7\0\32\u0266\1\0\3\u0266\6\0"+
"\1\u0266\4\0\3\u0267\1\0\3\u0267\1\u029b\3\0\1\u0231"+
"\3\0\1\u029c\3\0\4\u0267\7\0\32\u0267\1\0\3\u0267"+
"\6\0\1\u0267\3\0\2\u029d\1\u029e\2\u029d\2\u029e\1\u029d"+
"\1\u0268\3\0\10\u029d\1\u029e\1\u029d\1\u0268\1\0\7\u029d"+
"\25\u029e\4\u029d\1\u029e\1\u029d\3\u029e\6\u029d\1\u029e\4\u029d"+
"\1\u029f\1\u029e\1\u029f\1\u029d\2\u029e\1\u029f\1\u0268\3\0"+
"\10\u029d\1\u029e\1\u029f\1\u0269\1\147\7\u029d\25\u029e\4\u029f"+
"\1\u029e\1\u029d\3\u029e\6\u029d\1\u029e\3\u029d\10\0\1\u026a"+
"\15\0\1\u026a\12\0\1\u02a0\5\0\1\u02a1\40\0\3\147"+
"\1\0\3\147\1\u026a\13\0\2\147\1\u026b\1\147\7\0"+
"\2\147\1\u02a2\5\147\1\u02a3\21\147\1\0\3\147\6\0"+
"\1\147\5\0\1\u02a4\2\0\2\u02a4\1\0\1\u026c\13\0"+
"\1\u02a4\1\0\1\u026c\10\0\25\u02a4\4\0\1\u02a4\1\0"+
"\3\u02a4\6\0\1\u02a4\4\0\1\147\1\u02a4\1\147\1\0"+
"\2\u02a4\1\147\1\u026c\13\0\1\u02a4\1\147\1\u026d\1\147"+
"\7\0\25\u02a4\4\147\1\u02a4\1\0\3\u02a4\6\0\1\u02a4"+
"\4\0\3\147\1\0\3\147\14\0\4\147\7\0\6\147"+
"\1\u02a5\23\147\1\0\3\147\6\0\1\147\4\0\3\147"+
"\1\0\3\147\14\0\4\147\7\0\7\147\1\u02a6\22\147"+
"\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
"\14\0\4\147\7\0\7\147\1\u02a7\22\147\1\0\3\147"+
"\6\0\1\147\4\0\3\147\1\0\3\147\1\u02a8\13\0"+
"\2\147\1\u02a9\1\147\7\0\32\147\1\0\3\147\6\0"+
"\1\147\3\0\10\u023b\1\u0272\3\0\1\u0204\11\u023b\1\u0272"+
"\1\0\57\u023b\1\0\3\u0273\1\0\3\u0273\1\u02aa\3\0"+
"\1\u02ab\7\0\4\u0273\7\0\32\u0273\1\0\3\u0273\6\0"+
"\1\u0273\4\0\3\u0274\1\0\3\u0274\1\u02ac\3\0\1\u02ad"+
"\1\0\1\u02ae\1\0\1\u02af\3\0\2\u0274\1\u02b0\1\u0274"+
"\7\0\32\u0274\1\0\3\u0274\6\0\1\u0274\4\0\3\u02b1"+
"\1\0\4\u02b1\3\0\2\u02b1\2\0\10\u02b1\7\0\32\u02b1"+
"\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0276\1\0\3\u0276"+
"\1\u02ac\3\0\1\u02ad\1\0\1\u02ae\1\0\1\u02af\3\0"+
"\2\u0276\1\u02b2\1\u0276\7\0\32\u0276\1\0\3\u0276\6\0"+
"\1\u0276\4\0\3\u0277\1\0\4\u0277\3\0\2\u0277\2\0"+
"\1\u0277\1\u02b3\6\u0277\7\0\32\u0277\1\0\3\u0277\6\0"+
"\1\u0277\3\0\10\u0244\1\u0278\3\0\12\u0244\1\u0278\1\0"+
"\60\u0244\3\u0247\1\u0244\3\u0247\1\u0278\3\0\10\u0244\2\u0247"+
"\1\u0279\1\147\7\u0244\32\u0247\1\u0244\3\u0247\6\u0244\1\u0247"+
"\3\u0244\46\0\1\u02b4\106\0\1\u02b5\77\0\1\u02b6\66\0"+
"\1\u02b7\67\0\11\u024e\2\357\1\76\13\u024e\1\357\1\u024e"+
"\1\u0280\1\u012e\1\u0281\1\u012e\1\u024e\1\u012e\54\u024e\1\u027f"+
"\4\u024e\2\357\1\76\13\u024e\1\357\1\u01dd\1\u012e\1\357"+
"\54\u024e\4\u0284\1\u02b8\4\u0284\2\357\1\76\13\u0284\1\357"+
"\2\u0284\1\u0282\1\u012e\53\u0284\13\357\1\76\15\357\1\u012d"+
"\1\u012e\1\u024f\1\233\1\357\1\233\50\357\3\u0282\1\u02b9"+
"\1\u02ba\1\u0282\1\u02bb\1\u02bc\1\u0282\2\357\1\76\13\u0282"+
"\1\357\1\u0282\1\u012d\1\u0284\1\u02bd\1\u016d\1\u0282\1\u016d"+
"\25\u0282\1\u02b9\1\u0282\1\u02bc\1\u02b9\17\u0282\4\u012e\1\u016c"+
"\4\u012e\2\357\1\76\13\u012e\1\357\2\u012e\1\357\1\u024e"+
"\53\u012e\4\u016b\1\u0285\1\u016b\1\u0286\2\u016b\2\u01a3\1\u01a4"+
"\13\u016b\1\u01a3\1\u01a5\57\u016b\3\u0287\3\u016b\1\u0287\1\u016b"+
"\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b\2\u0287\3\u016b"+
"\1\u0287\1\u016b\1\u0287\1\u016b\1\u0287\2\u016b\1\u0287\1\u016b"+
"\4\u0287\2\u016b\1\u0287\1\u016b\1\u0287\13\u016b\3\u02be\3\u016b"+
"\1\u02be\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b"+
"\2\u02be\3\u016b\1\u02be\1\u016b\1\u02be\1\u016b\1\u02be\2\u016b"+
"\1\u02be\1\u016b\4\u02be\2\u016b\1\u02be\1\u016b\1\u02be\12\u016b"+
"\11\u0254\3\76\13\u0254\1\76\1\u0254\1\u0289\1\230\1\u028a"+
"\1\230\1\u0254\1\230\54\u0254\1\u0288\4\u0254\3\76\13\u0254"+
"\1\76\1\u01e1\1\u012e\1\76\54\u0254\4\u028d\1\u02bf\4\u028d"+
"\3\0\13\u028d\1\0\2\u028d\1\u028b\1\230\53\u028d\31\76"+
"\1\227\1\230\1\u0255\1\0\1\76\1\0\50\76\3\u028b"+
"\1\u02c0\1\u02c1\1\u028b\1\u02c2\1\u02c3\1\u028b\3\76\13\u028b"+
"\1\76\1\u028b\1\227\1\u028d\1\u02c4\1\235\1\u028b\1\235"+
"\25\u028b\1\u02c0\1\u028b\1\u02c3\1\u02c0\17\u028b\4\230\1\234"+
"\4\230\3\0\13\230\1\0\2\230\1\76\1\u0254\53\230"+
"\4\232\1\u028e\1\232\1\u028f\21\232\1\356\57\232\3\u0290"+
"\3\232\1\u0290\20\232\1\356\15\232\2\u0290\3\232\1\u0290"+
"\1\232\1\u0290\1\232\1\u0290\2\232\1\u0290\1\232\4\u0290"+
"\2\232\1\u0290\1\232\1\u0290\13\232\3\u02c5\3\232\1\u02c5"+
"\20\232\1\356\15\232\2\u02c5\3\232\1\u02c5\1\232\1\u02c5"+
"\1\232\1\u02c5\2\232\1\u02c5\1\232\4\u02c5\2\232\1\u02c5"+
"\1\232\1\u02c5\12\232\11\256\2\125\1\126\13\256\1\125"+
"\4\256\1\u02c6\52\256\11\u0292\2\u02c7\1\u02c8\13\u0292\1\u02c7"+
"\57\u0292\11\256\2\125\1\126\13\256\1\125\15\256\1\u02c9"+
"\41\256\2\u02ca\1\u02cb\2\u02ca\2\u02cb\1\u02ca\1\u0294\3\0"+
"\10\u02ca\1\u02cb\1\u02ca\1\u0294\1\0\7\u02ca\25\u02cb\4\u02ca"+
"\1\u02cb\1\u02ca\3\u02cb\6\u02ca\1\u02cb\4\u02ca\1\u02cc\1\u02cb"+
"\1\u02cc\1\u02ca\2\u02cb\1\u02cc\1\u0294\3\0\10\u02ca\1\u02cb"+
"\1\u02cc\1\u0295\1\147\7\u02ca\25\u02cb\4\u02cc\1\u02cb\1\u02ca"+
"\3\u02cb\6\u02ca\1\u02cb\3\u02ca\1\0\3\147\1\0\3\147"+
"\1\u02cd\13\0\2\147\1\u02cd\1\147\7\0\32\147\1\0"+
"\3\147\6\0\1\147\13\0\1\u0297\3\0\2\u0298\10\0"+
"\1\u0297\62\0\1\u0264\2\0\2\u0264\1\0\1\u0298\13\0"+
"\1\u0264\1\0\1\u0298\10\0\25\u0264\4\0\1\u0264\1\0"+
"\3\u0264\6\0\1\u0264\4\0\3\u01fa\1\0\3\u01fa\1\u0299"+
"\3\0\1\u0230\1\u01fa\1\u01f8\1\0\1\u029a\1\u0230\4\u01fa"+
"\1\u0299\1\u01fa\7\0\32\u01fa\1\0\3\u01fa\6\0\1\u01fa"+
"\4\0\3\u02ce\1\0\4\u02ce\3\0\2\u02ce\2\0\1\u02ce"+
"\1\u02cf\6\u02ce\7\0\32\u02ce\1\0\3\u02ce\6\0\1\u02ce"+
"\13\0\1\u029b\3\0\1\u0231\3\0\1\u029c\5\0\1\u029b"+
"\61\0\3\u02d0\1\0\4\u02d0\3\0\2\u02d0\2\0\10\u02d0"+
"\7\0\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\3\0\11\u029d"+
"\3\0\13\u029d\1\0\60\u029d\3\u029e\1\u029d\3\u029e\1\u02d1"+
"\3\0\2\u0268\6\u029d\3\u029e\1\u02d2\7\u029d\32\u029e\1\u029d"+
"\3\u029e\6\u029d\1\u029e\4\u029d\3\u029f\1\u029d\3\u029f\1\u029d"+
"\3\0\10\u029d\3\u029f\1\147\7\u029d\32\u029f\1\u029d\3\u029f"+
"\6\u029d\1\u029f\3\u029d\43\0\1\u02d3\116\0\1\u02d4\34\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u02d5"+
"\25\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
"\3\147\14\0\4\147\7\0\14\147\1\u02d6\15\147\1\0"+
"\3\147\6\0\1\147\4\0\3\u02a4\1\0\3\u02a4\1\u02d7"+
"\13\0\4\u02a4\7\0\32\u02a4\1\0\3\u02a4\6\0\1\u02a4"+
"\4\0\3\147\1\0\3\147\1\u02d8\13\0\2\147\1\u02d9"+
"\1\147\6\0\1\151\32\147\1\0\3\147\6\0\1\147"+
"\3\0\2\u02da\1\u02db\2\u02da\2\u02db\1\u02da\1\u02a8\3\0"+
"\10\u02da\1\u02db\1\u02da\1\u02a8\1\0\7\u02da\25\u02db\4\u02da"+
"\1\u02db\1\u02da\3\u02db\6\u02da\1\u02db\4\u02da\1\u02dc\1\u02db"+
"\1\u02dc\1\u02da\2\u02db\1\u02dc\1\u02a8\3\0\10\u02da\1\u02db"+
"\1\u02dc\1\u02a9\1\147\7\u02da\25\u02db\4\u02dc\1\u02db\1\u02da"+
"\3\u02db\6\u02da\1\u02db\3\u02da\10\0\1\u02aa\3\0\1\u02ab"+
"\11\0\1\u02aa\62\0\1\u0273\2\0\2\u0273\1\0\1\u02ab"+
"\13\0\1\u0273\1\0\1\u02ab\10\0\25\u0273\4\0\1\u0273"+
"\1\0\3\u0273\6\0\1\u0273\13\0\1\u02ac\3\0\1\u02ad"+
"\1\0\1\u02ae\1\0\1\u02af\5\0\1\u02ac\62\0\1\u0274"+
"\2\0\2\u0274\1\0\1\u02ad\13\0\1\u0274\1\0\1\u02ad"+
"\10\0\25\u0274\4\0\1\u0274\1\0\3\u0274\6\0\1\u0274"+
"\13\0\1\u02ae\6\0\1\u02dd\6\0\1\u02ae\61\0\3\u02de"+
"\1\0\4\u02de\3\0\2\u02de\2\0\10\u02de\7\0\32\u02de"+
"\1\0\3\u02de\6\0\1\u02de\4\0\3\u02b1\1\0\4\u02b1"+
"\3\0\2\u02b1\2\0\1\u02b1\1\u02df\6\u02b1\7\0\32\u02b1"+
"\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0277\1\0\3\u0277"+
"\1\u02b3\3\0\2\u0277\2\0\1\u0277\1\u02b3\4\u0277\1\u02b3"+
"\1\u0277\7\0\32\u0277\1\0\3\u0277\6\0\1\u0277\110\0"+
"\1\u02e0\106\0\1\u02e1\64\0\1\u02e2\23\0\3\u0284\1\u02e3"+
"\1\u02e4\1\u0284\1\u02e5\1\u02e6\1\u0284\2\357\1\76\13\u0284"+
"\1\357\34\u0284\1\u02e3\1\u0284\1\u02e6\1\u02e3\17\u0284\3\357"+
"\1\u0282\3\357\1\u0282\3\357\1\76\15\357\1\u012d\1\u012e"+
"\1\u024f\1\233\1\357\1\233\25\357\1\u0282\1\357\2\u0282"+
"\23\357\1\u02e7\1\357\1\u02e8\4\357\1\76\15\357\1\u012d"+
"\1\u012e\1\u024f\1\233\1\357\1\233\51\357\3\u02e9\3\357"+
"\1\u02e9\3\357\1\76\15\357\1\u012d\1\u012e\1\u024f\1\233"+
"\1\357\1\233\7\357\2\u02e9\3\357\1\u02e9\1\357\1\u02e9"+
"\1\357\1\u02e9\2\357\1\u02e9\1\357\4\u02e9\2\357\1\u02e9"+
"\1\357\1\u02e9\15\357\1\u02b9\3\357\1\u02b9\3\357\1\76"+
"\15\357\1\u012d\1\u012e\1\u024f\1\233\1\357\1\233\25\357"+
"\1\u02b9\1\357\2\u02b9\17\357\4\u016d\1\u016e\4\u016d\2\357"+
"\1\76\13\u016d\1\357\3\u016d\1\357\53\u016d\1\u016b\3\u02ea"+
"\3\u016b\1\u02ea\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5"+
"\15\u016b\2\u02ea\3\u016b\1\u02ea\1\u016b\1\u02ea\1\u016b\1\u02ea"+
"\2\u016b\1\u02ea\1\u016b\4\u02ea\2\u016b\1\u02ea\1\u016b\1\u02ea"+
"\12\u016b\3\u028d\1\u02eb\1\u02ec\1\u028d\1\u02ed\1\u02ee\1\u028d"+
"\3\0\13\u028d\1\0\34\u028d\1\u02eb\1\u028d\1\u02ee\1\u02eb"+
"\17\u028d\3\76\1\u028b\3\76\1\u028b\21\76\1\227\1\230"+
"\1\u0255\1\0\1\76\1\0\25\76\1\u028b\1\76\2\u028b"+
"\23\76\1\u02ef\1\76\1\u02f0\22\76\1\227\1\230\1\u0255"+
"\1\0\1\76\1\0\51\76\3\u02f1\3\76\1\u02f1\21\76"+
"\1\227\1\230\1\u0255\1\0\1\76\1\0\7\76\2\u02f1"+
"\3\76\1\u02f1\1\76\1\u02f1\1\76\1\u02f1\2\76\1\u02f1"+
"\1\76\4\u02f1\2\76\1\u02f1\1\76\1\u02f1\15\76\1\u02c0"+
"\3\76\1\u02c0\21\76\1\227\1\230\1\u0255\1\0\1\76"+
"\1\0\25\76\1\u02c0\1\76\2\u02c0\17\76\4\235\1\236"+
"\4\235\3\0\13\235\1\0\3\235\1\76\53\235\1\232"+
"\3\u02f2\3\232\1\u02f2\20\232\1\356\15\232\2\u02f2\3\232"+
"\1\u02f2\1\232\1\u02f2\1\232\1\u02f2\2\232\1\u02f2\1\232"+
"\4\u02f2\2\232\1\u02f2\1\232\1\u02f2\12\232\11\u02c6\2\u02f3"+
"\1\u02f4\13\u02c6\1\u02f3\57\u02c6\11\256\2\125\1\126\13\256"+
"\1\125\4\256\1\u02f5\52\256\11\u02ca\3\0\13\u02ca\1\0"+
"\60\u02ca\3\u02cb\1\u02ca\3\u02cb\1\u02f6\3\0\2\u0294\6\u02ca"+
"\3\u02cb\1\u02f7\7\u02ca\32\u02cb\1\u02ca\3\u02cb\6\u02ca\1\u02cb"+
"\4\u02ca\3\u02cc\1\u02ca\3\u02cc\1\u02ca\3\0\10\u02ca\3\u02cc"+
"\1\147\7\u02ca\32\u02cc\1\u02ca\3\u02cc\6\u02ca\1\u02cc\3\u02ca"+
"\13\u02cd\1\0\73\u02cd\1\0\3\u02ce\1\0\4\u02ce\3\0"+
"\2\u02ce\2\0\1\u02ce\1\u02f8\6\u02ce\7\0\32\u02ce\1\0"+
"\3\u02ce\6\0\1\u02ce\4\0\1\u02ce\1\u02f9\1\u02ce\1\0"+
"\2\u02f9\1\u02ce\1\u02cf\3\0\2\u02ce\2\0\1\u02ce\1\u02f8"+
"\2\u02ce\1\u02f9\1\u02ce\1\u02cf\1\u02ce\7\0\25\u02f9\4\u02ce"+
"\1\u02f9\1\0\3\u02f9\6\0\1\u02f9\4\0\3\u02d0\1\0"+
"\4\u02d0\3\0\2\u02d0\2\0\1\u02d0\1\u02fa\6\u02d0\7\0"+
"\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\3\0\10\u029d\1\u02d1"+
"\3\0\2\u0268\10\u029d\1\u02d1\1\0\57\u029d\1\0\3\u02d2"+
"\1\0\3\u02d2\1\u02fb\3\0\2\u02fc\6\0\4\u02d2\7\0"+
"\32\u02d2\1\0\3\u02d2\6\0\1\u02d2\11\0\1\u02fd\151\0"+
"\1\u02fe\36\0\3\147\1\0\1\147\1\u02ff\1\147\14\0"+
"\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
"\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u0300"+
"\17\147\1\0\3\147\6\0\1\147\13\0\1\u02d7\15\0"+
"\1\u02d7\60\0\2\u0301\1\u0302\2\u0301\2\u0302\1\u0301\1\u02d8"+
"\3\0\10\u0301\1\u0302\1\u0301\1\u02d8\1\0\7\u0301\25\u0302"+
"\4\u0301\1\u0302\1\u0301\3\u0302\6\u0301\1\u0302\4\u0301\1\u0303"+
"\1\u0302\1\u0303\1\u0301\2\u0302\1\u0303\1\u02d8\3\0\10\u0301"+
"\1\u0302\1\u0303\1\u02d9\1\147\7\u0301\25\u0302\4\u0303\1\u0302"+
"\1\u0301\3\u0302\6\u0301\1\u0302\3\u0301\11\u02da\3\0\13\u02da"+
"\1\0\60\u02da\3\u02db\1\u02da\3\u02db\1\u0304\3\0\1\u02a8"+
"\7\u02da\3\u02db\1\u0305\7\u02da\32\u02db\1\u02da\3\u02db\6\u02da"+
"\1\u02db\4\u02da\3\u02dc\1\u02da\3\u02dc\1\u02da\3\0\10\u02da"+
"\3\u02dc\1\147\7\u02da\32\u02dc\1\u02da\3\u02dc\6\u02da\1\u02dc"+
"\3\u02da\10\0\1\u0306\5\0\1\u02ae\7\0\1\u0306\61\0"+
"\3\u02de\1\0\4\u02de\3\0\2\u02de\2\0\1\u02de\1\u0307"+
"\6\u02de\7\0\32\u02de\1\0\3\u02de\6\0\1\u02de\4\0"+
"\1\u02b1\1\u0308\1\u02b1\1\0\2\u0308\1\u02b1\1\u02df\3\0"+
"\2\u02b1\2\0\1\u02b1\1\u02df\2\u02b1\1\u0308\1\u02b1\1\u02df"+
"\1\u02b1\7\0\25\u0308\4\u02b1\1\u0308\1\0\3\u0308\6\0"+
"\1\u0308\22\0\1\u0309\106\0\1\u030a\126\0\1\u030b\47\0"+
"\3\u012e\1\u0284\1\u016c\2\u012e\1\u0284\1\u012e\2\357\1\76"+
"\13\u012e\1\357\2\u012e\1\357\1\u024e\30\u012e\1\u0284\1\u012e"+
"\2\u0284\23\u012e\1\u030c\1\u012e\1\u030d\2\u012e\2\357\1\76"+
"\13\u012e\1\357\2\u012e\1\357\1\u024e\54\u012e\3\u030e\1\u016c"+
"\2\u012e\1\u030e\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+
"\1\357\1\u024e\12\u012e\2\u030e\3\u012e\1\u030e\1\u012e\1\u030e"+
"\1\u012e\1\u030e\2\u012e\1\u030e\1\u012e\4\u030e\2\u012e\1\u030e"+
"\1\u012e\1\u030e\15\u012e\1\u02e3\1\u016c\2\u012e\1\u02e3\1\u012e"+
"\2\357\1\76\13\u012e\1\357\2\u012e\1\357\1\u024e\30\u012e"+
"\1\u02e3\1\u012e\2\u02e3\17\u012e\4\357\1\u02e7\1\357\1\u02e8"+
"\4\357\1\76\15\357\1\u012d\1\u012e\1\u012f\1\233\1\357"+
"\1\233\51\357\3\u02e9\3\357\1\u02e9\3\357\1\76\15\357"+
"\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\7\357\2\u02e9"+
"\3\357\1\u02e9\1\357\1\u02e9\1\357\1\u02e9\2\357\1\u02e9"+
"\1\357\4\u02e9\2\357\1\u02e9\1\357\1\u02e9\13\357\3\u030f"+
"\3\357\1\u030f\3\357\1\76\15\357\1\u012d\1\u012e\1\u012f"+
"\1\233\1\357\1\233\7\357\2\u030f\3\357\1\u030f\1\357"+
"\1\u030f\1\357\1\u030f\2\357\1\u030f\1\357\4\u030f\2\357"+
"\1\u030f\1\357\1\u030f\12\357\1\u016b\3\u0218\3\u016b\1\u0218"+
"\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b\2\u0218"+
"\3\u016b\1\u0218\1\u016b\1\u0218\1\u016b\1\u0218\2\u016b\1\u0218"+
"\1\u016b\4\u0218\2\u016b\1\u0218\1\u016b\1\u0218\12\u016b\3\230"+
"\1\u028d\1\234\2\230\1\u028d\1\230\3\0\13\230\1\0"+
"\2\230\1\76\1\u0254\30\230\1\u028d\1\230\2\u028d\23\230"+
"\1\u0310\1\230\1\u0311\2\230\3\0\13\230\1\0\2\230"+
"\1\76\1\u0254\54\230\3\u0312\1\234\2\230\1\u0312\1\230"+
"\3\0\13\230\1\0\2\230\1\76\1\u0254\12\230\2\u0312"+
"\3\230\1\u0312\1\230\1\u0312\1\230\1\u0312\2\230\1\u0312"+
"\1\230\4\u0312\2\230\1\u0312\1\230\1\u0312\15\230\1\u02eb"+
"\1\234\2\230\1\u02eb\1\230\3\0\13\230\1\0\2\230"+
"\1\76\1\u0254\30\230\1\u02eb\1\230\2\u02eb\17\230\4\76"+
"\1\u02ef\1\76\1\u02f0\22\76\1\227\1\230\1\231\1\0"+
"\1\76\1\0\51\76\3\u02f1\3\76\1\u02f1\21\76\1\227"+
"\1\230\1\231\1\0\1\76\1\0\7\76\2\u02f1\3\76"+
"\1\u02f1\1\76\1\u02f1\1\76\1\u02f1\2\76\1\u02f1\1\76"+
"\4\u02f1\2\76\1\u02f1\1\76\1\u02f1\13\76\3\u0313\3\76"+
"\1\u0313\21\76\1\227\1\230\1\231\1\0\1\76\1\0"+
"\7\76\2\u0313\3\76\1\u0313\1\76\1\u0313\1\76\1\u0313"+
"\2\76\1\u0313\1\76\4\u0313\2\76\1\u0313\1\76\1\u0313"+
"\12\76\1\232\3\u021f\3\232\1\u021f\20\232\1\356\15\232"+
"\2\u021f\3\232\1\u021f\1\232\1\u021f\1\232\1\u021f\2\232"+
"\1\u021f\1\232\4\u021f\2\232\1\u021f\1\232\1\u021f\12\232"+
"\11\u02f5\2\u0314\1\u0315\13\u02f5\1\u0314\57\u02f5\10\u02ca\1\u02f6"+
"\3\0\2\u0294\10\u02ca\1\u02f6\1\0\57\u02ca\1\0\3\u02f7"+
"\1\0\3\u02f7\1\u0316\3\0\2\u0317\6\0\4\u02f7\7\0"+
"\32\u02f7\1\0\3\u02f7\6\0\1\u02f7\4\0\1\u02ce\1\u02f9"+
"\1\u02ce\1\0\2\u02f9\1\u02ce\1\u02f8\3\0\2\u02ce\1\u01f8"+
"\1\0\1\u02ce\1\u02f8\2\u02ce\1\u02f9\1\u02ce\1\u02f8\1\u02ce"+
"\7\0\25\u02f9\4\u02ce\1\u02f9\1\0\3\u02f9\6\0\1\u02f9"+
"\4\0\3\u02f9\1\0\3\u02f9\1\u0318\3\0\1\u02cf\1\u02ce"+
"\1\u01f8\1\0\1\u02ce\1\u02f8\2\u02ce\4\u02f9\7\0\32\u02f9"+
"\1\0\3\u02f9\6\0\1\u02f9\4\0\3\u02d0\1\0\3\u02d0"+
"\1\u02fa\3\0\2\u02d0\2\0\1\u02d0\1\u02fa\4\u02d0\1\u02fa"+
"\1\u02d0\7\0\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\13\0"+
"\1\u02fb\3\0\2\u02fc\10\0\1\u02fb\62\0\1\u02d2\2\0"+
"\2\u02d2\1\0\1\u02fc\13\0\1\u02d2\1\0\1\u02fc\10\0"+
"\25\u02d2\4\0\1\u02d2\1\0\3\u02d2\6\0\1\u02d2\51\0"+
"\1\u0319\114\0\1\u031a\33\0\3\147\1\0\3\147\14\0"+
"\4\147\7\0\7\147\1\u031b\22\147\1\0\3\147\6\0"+
"\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
"\15\147\1\u031c\14\147\1\0\3\147\6\0\1\147\3\0"+
"\11\u0301\3\0\13\u0301\1\0\60\u0301\3\u0302\1\u0301\3\u0302"+
"\1\u031d\3\0\2\u02d8\6\u0301\3\u0302\1\u031e\7\u0301\32\u0302"+
"\1\u0301\3\u0302\6\u0301\1\u0302\4\u0301\3\u0303\1\u0301\3\u0303"+
"\1\u0301\3\0\10\u0301\3\u0303\1\147\7\u0301\32\u0303\1\u0301"+
"\3\u0303\6\u0301\1\u0303\3\u0301\10\u02da\1\u0304\3\0\1\u02a8"+
"\11\u02da\1\u0304\1\0\57\u02da\1\0\3\u0305\1\0\3\u0305"+
"\1\u031f\3\0\1\u0320\7\0\4\u0305\7\0\32\u0305\1\0"+
"\3\u0305\6\0\1\u0305\4\0\3\u02de\1\0\3\u02de\1\u0321"+
"\3\0\2\u02de\1\u02ae\1\0\1\u02de\1\u0307\4\u02de\1\u0321"+
"\1\u02de\7\0\32\u02de\1\0\3\u02de\6\0\1\u02de\4\0"+
"\3\u0308\1\0\3\u0308\1\u0322\3\0\1\u02df\1\u02b1\1\u02ae"+
"\1\0\1\u0323\1\u02df\2\u02b1\2\u0308\1\u0324\1\u0308\7\0"+
"\32\u0308\1\0\3\u0308\6\0\1\u0308\44\0\1\u0325\45\0"+
"\4\u012e\1\u0326\1\u012e\1\u030d\2\u012e\2\357\1\76\13\u012e"+
"\1\357\60\u012e\3\u030e\1\u016c\2\u012e\1\u030e\1\u012e\2\357"+
"\1\76\13\u012e\1\357\2\u012e\1\357\13\u012e\2\u030e\3\u012e"+
"\1\u030e\1\u012e\1\u030e\1\u012e\1\u030e\2\u012e\1\u030e\1\u012e"+
"\4\u030e\2\u012e\1\u030e\1\u012e\1\u030e\13\u012e\3\u0327\1\u016c"+
"\2\u012e\1\u0327\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+
"\1\357\13\u012e\2\u0327\3\u012e\1\u0327\1\u012e\1\u0327\1\u012e"+
"\1\u0327\2\u012e\1\u0327\1\u012e\4\u0327\2\u012e\1\u0327\1\u012e"+
"\1\u0327\12\u012e\1\357\3\u0328\3\357\1\u0328\3\357\1\76"+
"\15\357\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\7\357"+
"\2\u0328\3\357\1\u0328\1\357\1\u0328\1\357\1\u0328\2\357"+
"\1\u0328\1\357\4\u0328\2\357\1\u0328\1\357\1\u0328\12\357"+
"\4\230\1\u0329\1\230\1\u0311\2\230\3\0\13\230\1\0"+
"\60\230\3\u0312\1\234\2\230\1\u0312\1\230\3\0\13\230"+
"\1\0\2\230\1\76\13\230\2\u0312\3\230\1\u0312\1\230"+
"\1\u0312\1\230\1\u0312\2\230\1\u0312\1\230\4\u0312\2\230"+
"\1\u0312\1\230\1\u0312\13\230\3\u032a\1\234\2\230\1\u032a"+
"\1\230\3\0\13\230\1\0\2\230\1\76\13\230\2\u032a"+
"\3\230\1\u032a\1\230\1\u032a\1\230\1\u032a\2\230\1\u032a"+
"\1\230\4\u032a\2\230\1\u032a\1\230\1\u032a\12\230\1\76"+
"\3\u032b\3\76\1\u032b\21\76\1\227\1\230\1\231\1\0"+
"\1\76\1\0\7\76\2\u032b\3\76\1\u032b\1\76\1\u032b"+
"\1\76\1\u032b\2\76\1\u032b\1\76\4\u032b\2\76\1\u032b"+
"\1\76\1\u032b\12\76\10\0\1\u0316\3\0\2\u0317\10\0"+
"\1\u0316\62\0\1\u02f7\2\0\2\u02f7\1\0\1\u0317\13\0"+
"\1\u02f7\1\0\1\u0317\10\0\25\u02f7\4\0\1\u02f7\1\0"+
"\3\u02f7\6\0\1\u02f7\4\0\3\u02ce\1\0\3\u02ce\1\u0318"+
"\3\0\1\u02cf\1\u02ce\1\u01f8\1\0\1\u02ce\1\u02f8\4\u02ce"+
"\1\u0318\1\u02ce\7\0\32\u02ce\1\0\3\u02ce\6\0\1\u02ce"+
"\51\0\1\u032c\41\0\3\147\1\0\3\147\14\0\4\147"+
"\7\0\7\147\1\u032d\22\147\1\0\3\147\6\0\1\147"+
"\3\0\10\u0301\1\u031d\3\0\2\u02d8\10\u0301\1\u031d\1\0"+
"\57\u0301\1\0\3\u031e\1\0\3\u031e\1\u032e\3\0\2\u032f"+
"\6\0\4\u031e\7\0\32\u031e\1\0\3\u031e\6\0\1\u031e"+
"\13\0\1\u031f\3\0\1\u0320\11\0\1\u031f\62\0\1\u0305"+
"\2\0\2\u0305\1\0\1\u0320\13\0\1\u0305\1\0\1\u0320"+
"\10\0\25\u0305\4\0\1\u0305\1\0\3\u0305\6\0\1\u0305"+
"\4\0\3\u02b1\1\0\3\u02b1\1\u0322\3\0\1\u02df\1\u02b1"+
"\1\u02ae\1\0\1\u0323\1\u02df\4\u02b1\1\u0322\1\u02b1\7\0"+
"\32\u02b1\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0330\1\0"+
"\4\u0330\3\0\2\u0330\2\0\1\u0330\1\u0331\6\u0330\7\0"+
"\32\u0330\1\0\3\u0330\6\0\1\u0330\110\0\1\u0332\1\0"+
"\4\u012e\1\u030c\1\u012e\1\u030d\2\u012e\2\357\1\76\13\u012e"+
"\1\357\2\u012e\1\357\55\u012e\3\u0333\1\u016c\2\u012e\1\u0333"+
"\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e\1\357\13\u012e"+
"\2\u0333\3\u012e\1\u0333\1\u012e\1\u0333\1\u012e\1\u0333\2\u012e"+
"\1\u0333\1\u012e\4\u0333\2\u012e\1\u0333\1\u012e\1\u0333\12\u012e"+
"\1\357\3\u0282\3\357\1\u0282\3\357\1\76\15\357\1\u012d"+
"\1\u012e\1\u012f\1\233\1\357\1\233\7\357\2\u0282\3\357"+
"\1\u0282\1\357\1\u0282\1\357\1\u0282\2\357\1\u0282\1\357"+
"\4\u0282\2\357\1\u0282\1\357\1\u0282\12\357\4\230\1\u0310"+
"\1\230\1\u0311\2\230\3\0\13\230\1\0\2\230\1\76"+
"\55\230\3\u0334\1\234\2\230\1\u0334\1\230\3\0\13\230"+
"\1\0\2\230\1\76\13\230\2\u0334\3\230\1\u0334\1\230"+
"\1\u0334\1\230\1\u0334\2\230\1\u0334\1\230\4\u0334\2\230"+
"\1\u0334\1\230\1\u0334\12\230\1\76\3\u028b\3\76\1\u028b"+
"\21\76\1\227\1\230\1\231\1\0\1\76\1\0\7\76"+
"\2\u028b\3\76\1\u028b\1\76\1\u028b\1\76\1\u028b\2\76"+
"\1\u028b\1\76\4\u028b\2\76\1\u028b\1\76\1\u028b\12\76"+
"\10\0\1\u032e\3\0\2\u032f\10\0\1\u032e\62\0\1\u031e"+
"\2\0\2\u031e\1\0\1\u032f\13\0\1\u031e\1\0\1\u032f"+
"\10\0\25\u031e\4\0\1\u031e\1\0\3\u031e\6\0\1\u031e"+
"\4\0\3\u0330\1\0\4\u0330\3\0\2\u0330\2\0\1\u0330"+
"\1\u0335\6\u0330\7\0\32\u0330\1\0\3\u0330\6\0\1\u0330"+
"\4\0\1\u0330\1\u0336\1\u0330\1\0\2\u0336\1\u0330\1\u0331"+
"\3\0\2\u0330\2\0\1\u0330\1\u0335\2\u0330\1\u0336\1\u0330"+
"\1\u0331\1\u0330\7\0\25\u0336\4\u0330\1\u0336\1\0\3\u0336"+
"\6\0\1\u0336\22\0\1\u0337\67\0\1\u012e\3\u0284\1\u016c"+
"\2\u012e\1\u0284\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+
"\1\357\13\u012e\2\u0284\3\u012e\1\u0284\1\u012e\1\u0284\1\u012e"+
"\1\u0284\2\u012e\1\u0284\1\u012e\4\u0284\2\u012e\1\u0284\1\u012e"+
"\1\u0284\12\u012e\1\230\3\u028d\1\234\2\230\1\u028d\1\230"+
"\3\0\13\230\1\0\2\230\1\76\13\230\2\u028d\3\230"+
"\1\u028d\1\230\1\u028d\1\230\1\u028d\2\230\1\u028d\1\230"+
"\4\u028d\2\230\1\u028d\1\230\1\u028d\12\230\1\0\1\u0330"+
"\1\u0336\1\u0330\1\0\2\u0336\1\u0330\1\u0338\3\0\2\u0330"+
"\1\u02ae\1\0\1\u0330\1\u0335\2\u0330\1\u0336\1\u0330\1\u0338"+
"\1\u0330\7\0\25\u0336\4\u0330\1\u0336\1\0\3\u0336\6\0"+
"\1\u0336\4\0\3\u0336\1\0\3\u0336\1\u0339\3\0\1\u0331"+
"\1\u0330\1\u02ae\1\0\1\u0330\1\u0335\2\u0330\2\u0336\1\u033a"+
"\1\u0336\7\0\32\u0336\1\0\3\u0336\6\0\1\u0336\4\0"+
"\3\u0330\1\0\3\u0330\1\u0339\3\0\1\u0331\1\u0330\1\u02ae"+
"\1\0\1\u0330\1\u0335\4\u0330\1\u0339\1\u0330\7\0\32\u0330"+
"\1\0\3\u0330\6\0\1\u0330\3\0";
private static int [] zzUnpackTrans() {
int [] result = new int[48777];
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 <code>aState</code>
*/
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\2\1\15\0\2\1\1\11\4\1\1\11\2\1\1\11"+
"\15\1\2\11\4\1\1\11\2\1\2\11\1\1\1\11"+
"\2\1\7\11\4\1\2\11\1\1\1\11\3\1\1\11"+
"\1\1\1\11\3\1\2\11\1\1\1\11\3\1\1\11"+
"\1\1\1\11\1\1\1\11\1\1\1\11\2\1\3\0"+
"\2\11\1\0\1\11\1\0\2\1\1\0\15\1\3\0"+
"\1\11\3\1\2\0\1\11\1\1\1\11\4\1\5\11"+
"\1\0\1\1\2\0\1\11\1\1\3\0\1\11\1\1"+
"\10\0\1\11\4\1\6\11\3\0\1\11\5\0\1\1"+
"\1\0\1\1\1\11\1\1\1\11\2\1\1\11\35\1"+
"\3\0\6\1\1\0\1\11\1\0\1\1\6\0\2\11"+
"\1\0\1\1\4\0\1\11\1\0\1\1\1\11\1\1"+
"\1\11\3\0\42\1\3\0\2\1\1\0\1\11\1\1"+
"\14\0\1\11\1\1\3\0\46\1\2\11\1\0\2\1"+
"\1\0\1\1\13\0\1\1\5\0\11\1\1\0\31\1"+
"\1\11\2\1\7\0\2\1\10\0\1\1\1\11\3\0"+
"\12\1\1\0\17\1\1\0\7\1\6\0\2\1\3\0"+
"\1\1\6\0\1\1\1\11\4\0\13\1\4\0\22\1"+
"\1\11\6\0\1\1\6\0\1\1\13\0\10\1\3\0"+
"\15\1\1\0\2\1\1\0\5\1\4\0\2\11\2\1"+
"\4\0\2\1\7\0\1\1\1\11\1\0\12\1\1\0"+
"\1\1\1\0\7\1\2\0\1\1\1\0\2\1\2\0"+
"\1\11\2\0\1\1\2\0\2\1\4\0\1\1\2\0"+
"\2\1\7\0\4\1\1\0\1\1\1\0\1\1\1\0"+
"\3\1\2\0\11\1\1\0\1\1\3\0\1\1\1\0"+
"\2\1\3\0\1\11\1\0\4\1\3\0\4\1\3\0"+
"\1\1\1\11\1\0\4\1\3\0\2\1\2\0\10\1"+
"\12\0\3\1\5\0\3\1\1\0\1\1\1\11\1\0"+
"\6\1\3\0\10\1\2\0\2\11\4\0\1\1\3\0"+
"\2\1\1\11\1\1\1\0\1\1\1\11\1\0\5\1"+
"\1\0\2\1\1\0\1\1\3\0\1\1\2\0\1\1"+
"\1\11\2\1\10\0\1\11\3\1";
private static int [] zzUnpackAttribute() {
int [] result = new int[826];
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;
/** the stack of open (nested) input streams to read from */
private java.util.Stack zzStreams = new java.util.Stack();
/**
* inner class used to store info for nested
* input streams
*/
private static final class ZzFlexStreamInfo {
java.io.Reader zzReader;
int zzEndRead;
int zzStartRead;
int zzCurrentPos;
int zzMarkedPos;
int yyline;
int yycolumn;
char [] zzBuffer;
boolean zzAtEOF;
boolean zzEOFDone;
/** sets all values stored in this class */
ZzFlexStreamInfo(java.io.Reader zzReader, int zzEndRead, int zzStartRead,
int zzCurrentPos, int zzMarkedPos,
char [] zzBuffer, boolean zzAtEOF, int yyline, int yycolumn) {
this.zzReader = zzReader;
this.zzEndRead = zzEndRead;
this.zzStartRead = zzStartRead;
this.zzCurrentPos = zzCurrentPos;
this.zzMarkedPos = zzMarkedPos;
this.zzBuffer = zzBuffer;
this.zzAtEOF = zzAtEOF;
this.zzEOFDone = zzEOFDone;
this.yyline = yyline;
this.yycolumn = yycolumn;
}
}
/* user code: */
int balance = 0;
int commentbalance = 0;
int action_line = 0;
int bufferSize = 16384;
File file;
Stack files = new Stack();
StringBuffer userCode = new StringBuffer();
String classCode;
String initCode;
String initThrow;
String eofCode;
String eofThrow;
String lexThrow;
String eofVal;
String scanErrorException;
String cupSymbol = "sym";
StringBuffer actionText = new StringBuffer();
StringBuffer string = new StringBuffer();
boolean charCount;
boolean lineCount;
boolean columnCount;
boolean cupCompatible;
boolean cupDebug;
boolean isInteger;
boolean isIntWrap;
boolean isYYEOF;
boolean notUnix;
boolean isPublic;
boolean isFinal;
boolean isAbstract;
boolean bolUsed;
boolean standalone;
boolean debugOption;
boolean useRowMap = Options.gen_method == Options.PACK || Options.gen_method == Options.TABLE;
boolean packed = Options.gen_method == Options.PACK;
boolean caseless;
boolean inclusive_states;
boolean eofclose;
String isImplementing;
String isExtending;
String className = "Yylex";
String functionName;
String tokenType;
String visibility = "public";
Vector /* String */ ctorArgs = new Vector();
Vector /* String */ ctorTypes = new Vector();
LexicalStates states = new LexicalStates();
Vector actions = new Vector();
private int nextState;
boolean macroDefinition;
Timer t = new Timer();
public int currentLine() {
return yyline;
}
public void setFile(File file) {
this.file = file;
}
private Symbol symbol(int type, Object value) {
return new Symbol(type, yyline, yycolumn, value);
}
private Symbol symbol(int type) {
return new Symbol(type, yyline, yycolumn);
}
// updates line and column count to the beginning of the first
// non whitespace character in yytext, but leaves yyline+yycolumn
// untouched
private Symbol symbol_countUpdate(int type, Object value) {
int lc = yyline;
int cc = yycolumn;
String text = yytext();
for (int i=0; i < text.length(); i++) {
char c = text.charAt(i);
if (c != '\n' && c != '\r' && c != ' ' && c != '\t' )
return new Symbol(type, lc, cc, value);
if (c == '\n') {
lc++;
cc = 0;
}
else
cc++;
}
return new Symbol(type, yyline, yycolumn, value);
}
private String makeMacroIdent() {
String matched = yytext().trim();
return matched.substring(1, matched.length()-1).trim();
}
public static String conc(Object a, Object b) {
if (a == null && b == null) return null;
if (a == null) return b.toString();
if (b == null) return a.toString();
return a.toString()+b.toString();
}
public static String concExc(Object a, Object b) {
if (a == null && b == null) return null;
if (a == null) return b.toString();
if (b == null) return a.toString();
return a.toString()+", "+b.toString();
}
/**
* 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 LexScan(java.io.Reader in) {
states.insert("YYINITIAL", true);
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 LexScan(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 < 1788) {
int count = packed.charAt(i++);
char value = packed.charAt(i++);
do map[j++] = value; while (--count > 0);
}
return map;
}
/**
* Refills the input buffer.
*
* @return <code>false</code>, 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.
*/
public final void yyclose() throws java.io.IOException {
zzAtEOF = true; /* indicate end of file */
zzEndRead = zzStartRead; /* invalidate buffer */
if (zzReader != null)
zzReader.close();
}
/**
* Stores the current input stream on a stack, and
* reads from a new stream. Lexical state, line,
* char, and column counting remain untouched.
*
* The current input stream can be restored with
* yypopstream (usually in an <<EOF>> action).
*
* @param reader the new input stream to read from
*
* @see #yypopStream()
*/
public final void yypushStream(java.io.Reader reader) {
zzStreams.push(
new ZzFlexStreamInfo(zzReader, zzEndRead, zzStartRead, zzCurrentPos,
zzMarkedPos, zzBuffer, zzAtEOF,
yyline, yycolumn)
);
zzAtEOF = false;
zzBuffer = new char[ZZ_BUFFERSIZE];
zzReader = reader;
zzEndRead = zzStartRead = 0;
zzCurrentPos = zzMarkedPos = 0;
yyline = yycolumn = 0;
}
/**
* Closes the current input stream and continues to
* read from the one on top of the stream stack.
*
* @throws java.util.EmptyStackException
* if there is no further stream to read from.
*
* @throws java.io.IOException
* if there was an error in closing the stream.
*
* @see #yypushStream(java.io.Reader)
*/
public final void yypopStream() throws java.io.IOException {
zzReader.close();
ZzFlexStreamInfo s = (ZzFlexStreamInfo) zzStreams.pop();
zzBuffer = s.zzBuffer;
zzReader = s.zzReader;
zzEndRead = s.zzEndRead;
zzStartRead = s.zzStartRead;
zzCurrentPos = s.zzCurrentPos;
zzMarkedPos = s.zzMarkedPos ;
zzAtEOF = s.zzAtEOF;
zzEOFDone = s.zzEOFDone;
yyline = s.yyline;
yycolumn = s.yycolumn;
}
/**
* Returns true iff there are still streams left
* to read from on the stream stack.
*/
public final boolean yymoreStreams() {
return !zzStreams.isEmpty();
}
/**
* 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
* <b>cannot</b> be reused (internal buffer is discarded and lost).
* Lexical state is set to <tt>ZZ_INITIAL</tt>.
*
* @param reader the new input stream
*
* @see #yypushStream(java.io.Reader)
* @see #yypopStream()
*/
public 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;
}
/**
* Returns the current lexical state.
*/
public final int yystate() {
return zzLexicalState;
}
/**
* Enters a new lexical state
*
* @param newState the new lexical state
*/
public final void yybegin(int newState) {
zzLexicalState = newState;
}
/**
* Returns the text matched by the current regular expression.
*/
public final String yytext() {
return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
}
/**
* Returns the character at position <tt>pos</tt> 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
*/
public final char yycharat(int pos) {
return zzBuffer[zzStartRead+pos];
}
/**
* Returns the length of the matched text region.
*/
public 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()!
*/
public void yypushback(int number) {
if ( number > yylength() )
zzScanError(ZZ_PUSHBACK_2BIG);
zzMarkedPos -= number;
}
/**
* Contains user EOF-code, which will be executed exactly once,
* when the end of file is reached
*/
private void zzDoEOF() throws java.io.IOException {
if (!zzEOFDone) {
zzEOFDone = true;
yyclose();
}
}
/**
* 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
*/
public Symbol next_token() throws java.io.IOException {
int zzInput;
int zzAction;
int [] zzTransL = ZZ_TRANS;
int [] zzRowMapL = ZZ_ROWMAP;
int [] zzAttrL = ZZ_ATTRIBUTE;
while (true) {
// cached fields:
int zzCurrentPosL;
int zzMarkedPosL = zzMarkedPos;
int zzEndReadL = zzEndRead;
char [] zzBufferL = zzBuffer;
char [] zzCMapL = ZZ_CMAP;
boolean zzR = false;
for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL;
zzCurrentPosL++) {
switch (zzBufferL[zzCurrentPosL]) {
case '\u000B':
case '\u000C':
case '\u0085':
case '\u2028':
case '\u2029':
yyline++;
yycolumn = 0;
zzR = false;
break;
case '\r':
yyline++;
yycolumn = 0;
zzR = true;
break;
case '\n':
if (zzR)
zzR = false;
else {
yyline++;
yycolumn = 0;
}
break;
default:
zzR = false;
yycolumn++;
}
}
if (zzR) {
// peek one character ahead if it is \n (if we have counted one line too much)
boolean zzPeek;
if (zzMarkedPosL < zzEndReadL)
zzPeek = zzBufferL[zzMarkedPosL] == '\n';
else if (zzAtEOF)
zzPeek = false;
else {
boolean eof = zzRefill();
zzEndReadL = zzEndRead;
zzMarkedPosL = zzMarkedPos;
zzBufferL = zzBuffer;
if (eof)
zzPeek = false;
else
zzPeek = zzBufferL[zzMarkedPosL] == '\n';
}
if (zzPeek) yyline--;
}
if (zzMarkedPosL > zzStartRead) {
switch (zzBufferL[zzMarkedPosL-1]) {
case '\n':
case '\u000B':
case '\u000C':
case '\u0085':
case '\u2028':
case '\u2029':
zzAtBOL = true;
break;
case '\r':
if (zzMarkedPosL < zzEndReadL)
zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
else if (zzAtEOF)
zzAtBOL = false;
else {
boolean eof = zzRefill();
zzMarkedPosL = zzMarkedPos;
zzEndReadL = zzEndRead;
zzBufferL = zzBuffer;
if (eof)
zzAtBOL = false;
else
zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
}
break;
default:
zzAtBOL = false;
}
}
zzAction = -1;
zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
if (zzAtBOL)
zzState = ZZ_LEXSTATE[zzLexicalState+1];
else
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 118:
{ cupDebug = true;
}
case 147: break;
case 122:
{ actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE);
}
case 148: break;
case 113:
{ File f = new File(yytext().substring(9).trim());
if ( !f.canRead() )
throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline);
// check for cycle
if (files.search(f) > 0)
throw new ScannerException(file,ErrorMessages.FILE_CYCLE, yyline);
try {
yypushStream( new FileReader(f) );
files.push(file);
file = f;
Out.println("Including \""+file+"\"");
}
catch (FileNotFoundException e) {
throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline);
}
}
case 149: break;
case 88:
{ return symbol(FULL);
}
case 150: break;
case 92:
{ return symbol(ASCII);
}
case 151: break;
case 21:
{ string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT);
}
case 152: break;
case 142:
{ return symbol(UPPERCLASS);
}
case 153: break;
case 34:
{ return symbol(COMMA);
}
case 154: break;
case 61:
{ return symbol(CHAR,new Character('\f'));
}
case 155: break;
case 111:
{ throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline);
}
case 156: break;
case 104:
{ throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION);
}
case 157: break;
case 143:
{ return symbol(LOWERCLASS);
}
case 158: break;
case 72:
{ string.append('\r');
}
case 159: break;
case 43:
{ return symbol(HAT);
}
case 160: break;
case 48:
{ yybegin(MACROS); ctorArgs.add(yytext().trim());
}
case 161: break;
case 1:
{ return symbol(EOF);
}
case 162: break;
case 59:
{ return symbol(CHAR,new Character('\t'));
}
case 163: break;
case 145:
{ eofclose = false;
}
case 164: break;
case 103:
{ isPublic = true;
}
case 165: break;
case 112:
{ actionText.setLength(0); yybegin(JAVA_CODE);
Symbol s = symbol_countUpdate(EOFRULE, null);
action_line = s.left+1;
return s;
}
case 166: break;
case 40:
{ balance++; return symbol(OPENCLASS);
}
case 167: break;
case 11:
{ yybegin(REGEXP);
}
case 168: break;
case 12:
{ yybegin(STATES); return symbol_countUpdate(LESSTHAN, null);
}
case 169: break;
case 68:
{ string.append( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8));
}
case 170: break;
case 62:
{ return symbol(CHAR,new Character('\b'));
}
case 171: break;
case 39:
{ throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn);
}
case 172: break;
case 5:
{ states.insert(yytext(),inclusive_states);
}
case 173: break;
case 70:
{ string.append('\n');
}
case 174: break;
case 10:
{ yybegin(REGEXP); return symbol(EQUALS);
}
case 175: break;
case 146:
{ return symbol(JLETTERDIGITCLASS);
}
case 176: break;
case 19:
{ return symbol(STAR);
}
case 177: break;
case 42:
{ string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT);
}
case 178: break;
case 116:
{ isAbstract = true;
}
case 179: break;
case 75:
{ yypushback(1); yycolumn--; return symbol(CHAR, new Character(yytext().charAt(0)));
}
case 180: break;
case 114:
{ lexThrow = concExc(lexThrow,yytext().substring(8).trim());
}
case 181: break;
case 109:
{ throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline);
}
case 182: break;
case 93:
{ packed = false; useRowMap = true;
}
case 183: break;
case 87:
{ cupCompatible = true;
isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner");
if (functionName == null)
functionName = "next_token";
if (tokenType == null)
tokenType = "java_cup.runtime.Symbol";
if (eofVal == null)
eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);";
if (!Options.jlex) eofclose = true;
}
case 184: break;
case 30:
{ bolUsed = true; return symbol(HAT);
}
case 185: break;
case 4:
{ throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn);
}
case 186: break;
case 35:
{ yybegin(REGEXP); return symbol(MORETHAN);
}
case 187: break;
case 100:
{ packed = false; useRowMap = false;
}
case 188: break;
case 119:
{ caseless = true;
}
case 189: break;
case 38:
{ yybegin(nextState); return symbol(STRING, string.toString());
}
case 190: break;
case 76:
{ return symbol(REPEAT, new Integer(yytext().substring(1).trim()));
}
case 191: break;
case 13:
{ return symbol_countUpdate(RBRACE, null);
}
case 192: break;
case 139:
{ scanErrorException = yytext().substring(11).trim();
}
case 193: break;
case 141:
{ lexThrow = concExc(lexThrow,yytext().substring(12).trim());
}
case 194: break;
case 84:
{ return symbol(MACROUSE, yytext().substring(1,yytext().length()-1));
}
case 195: break;
case 2:
{ /* ignore */
}
case 196: break;
case 127:
{ throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline);
}
case 197: break;
case 47:
{ throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn);
}
case 198: break;
case 108:
{ throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline);
}
case 199: break;
case 31:
{ actionText.append(yytext());
}
case 200: break;
case 83:
{ string.append( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16));
}
case 201: break;
case 107:
{ notUnix = true;
}
case 202: break;
case 89:
{ lineCount = true;
}
case 203: break;
case 136:
{ initThrow = concExc(initThrow,yytext().substring(11).trim());
}
case 204: break;
case 131:
{ standalone = true; isInteger = true;
}
case 205: break;
case 52:
{ nextState = MACROS; yybegin(COMMENT);
}
case 206: break;
case 25:
{ return symbol(TILDE);
}
case 207: break;
case 37:
{ throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn);
}
case 208: break;
case 110:
{ className = yytext().substring(7).trim();
}
case 209: break;
case 9:
{ throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn);
}
case 210: break;
case 55:
{ nextState = REGEXPSTART; yybegin(COMMENT);
}
case 211: break;
case 16:
{ return symbol(POINT);
}
case 212: break;
case 73:
{ string.append('\f');
}
case 213: break;
case 65:
{ yybegin(REPEATEXP); return symbol(REPEAT, new Integer(yytext().trim().substring(1).trim()));
}
case 214: break;
case 80:
{ return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16)));
}
case 215: break;
case 140:
{ initThrow = concExc(initThrow,string); yybegin(MACROS);
}
case 216: break;
case 135:
{ eofThrow = concExc(eofThrow,string); yybegin(MACROS);
}
case 217: break;
case 71:
{ string.append('\t');
}
case 218: break;
case 67:
{ string.append(yytext().charAt(1));
}
case 219: break;
case 7:
{ yybegin(MACROS);
}
case 220: break;
case 98:
{ eofCode = conc(eofCode,string); yybegin(MACROS);
}
case 221: break;
case 56:
{ return symbol(CHAR, new Character(yytext().charAt(1)));
}
case 222: break;
case 28:
{ return symbol(PLUS);
}
case 223: break;
case 101:
{ columnCount = true;
}
case 224: break;
case 124:
{ isExtending = yytext().substring(9).trim();
}
case 225: break;
case 123:
{ eofVal = string.toString(); yybegin(MACROS);
}
case 226: break;
case 36:
{ string.append(yytext());
}
case 227: break;
case 97:
{ return symbol(UNICODE);
}
case 228: break;
case 74:
{ string.append('\b');
}
case 229: break;
case 24:
{ return symbol(BANG);
}
case 230: break;
case 132:
{ throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline);
}
case 231: break;
case 91:
{ packed = true; useRowMap = true;
}
case 232: break;
case 26:
{ return symbol(OPENBRACKET);
}
case 233: break;
case 60:
{ return symbol(CHAR,new Character('\r'));
}
case 234: break;
case 94:
{ isFinal = true;
}
case 235: break;
case 27:
{ return symbol(CLOSEBRACKET);
}
case 236: break;
case 86:
{ isInteger = true;
}
case 237: break;
case 20:
{ return symbol(LOOKAHEAD);
}
case 238: break;
case 51:
{ commentbalance++;
}
case 239: break;
case 49:
{ t.start();
yybegin(MACROS);
macroDefinition = true;
return symbol(USERCODE,userCode);
}
case 240: break;
case 44:
{ return symbol(DASH);
}
case 241: break;
case 138:
{ throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline);
}
case 242: break;
case 96:
{ debugOption = true;
}
case 243: break;
case 64:
{ nextState = REGEXP; yybegin(COMMENT);
}
case 244: break;
case 32:
{ if (balance > 0) {
balance--;
actionText.append('}');
}
else {
yybegin(REGEXPSTART);
Action a = new Action(actionText.toString(), action_line);
actions.addElement(a);
return symbol(ACTION, a);
}
}
case 245: break;
case 29:
{ return symbol(DOLLAR);
}
case 246: break;
case 17:
{ yybegin(CHARCLASS); return symbol(OPENCLASS);
}
case 247: break;
case 105:
{ initCode = conc(initCode,string); yybegin(MACROS);
}
case 248: break;
case 69:
{ string.append('\"');
}
case 249: break;
case 137:
{ isImplementing = concExc(isImplementing, yytext().substring(12).trim());
}
case 250: break;
case 126:
{ return symbol(LETTERCLASS);
}
case 251: break;
case 102:
{ isInteger = true;
if (eofVal == null)
eofVal = "return 0;";
eofclose = true;
}
case 252: break;
case 41:
{ if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS);
}
case 253: break;
case 77:
{ string.setLength(0); yybegin(COPY);
}
case 254: break;
case 8:
{ return symbol(IDENT, yytext());
}
case 255: break;
case 121:
{ return symbol(DIGITCLASS);
}
case 256: break;
case 144:
{ lexThrow = concExc(lexThrow,string); yybegin(MACROS);
}
case 257: break;
case 53:
{ Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1);
}
case 258: break;
case 23:
{ return symbol(BAR);
}
case 259: break;
case 45:
{ throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn);
}
case 260: break;
case 117:
{ cupSymbol = yytext().substring(8).trim();
if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline);
}
case 261: break;
case 58:
{ return symbol(CHAR,new Character('\n'));
}
case 262: break;
case 95:
{ isYYEOF = true;
}
case 263: break;
case 14:
{ return symbol(CHAR, new Character(yytext().charAt(0)));
}
case 264: break;
case 99:
{ tokenType = yytext().substring(6).trim();
}
case 265: break;
case 33:
{ balance++; actionText.append('{');
}
case 266: break;
case 128:
{ eofThrow = concExc(eofThrow,yytext().substring(10).trim());
}
case 267: break;
case 63:
{ actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND);
}
case 268: break;
case 81:
{ return symbol_countUpdate(MACROUSE, makeMacroIdent());
}
case 269: break;
case 15:
{ if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND);
}
case 270: break;
case 125:
{ throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline);
}
case 271: break;
case 90:
{ charCount = true;
}
case 272: break;
case 130:
{ visibility = "private"; Skeleton.makePrivate();
}
case 273: break;
case 134:
{ return symbol(JLETTERCLASS);
}
case 274: break;
case 22:
{ yybegin(REGEXPSTART); return symbol(LBRACE);
}
case 275: break;
case 115:
{ eofclose = true;
}
case 276: break;
case 66:
// lookahead expression with fixed lookahead length
yypushback(1);
{ if (macroDefinition) {
yybegin(EATWSPNL);
return symbol(BAR);
}
else {
yybegin(REGEXPSTART);
return symbol(NOACTION);
}
}
case 277: break;
case 82:
// lookahead expression with fixed lookahead length
yypushback(2);
{ if (macroDefinition) {
yybegin(EATWSPNL);
return symbol(BAR);
}
else {
yybegin(REGEXPSTART);
return symbol(NOACTION);
}
}
case 278: break;
case 46:
{ yybegin(REGEXP); return symbol(RBRACE);
}
case 279: break;
case 78:
{ inclusive_states = false; yybegin(STATELIST);
}
case 280: break;
case 120:
{ bufferSize = Integer.parseInt(yytext().substring(8).trim());
}
case 281: break;
case 106:
{ isIntWrap = true;
}
case 282: break;
case 133:
{ yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim());
}
case 283: break;
case 3:
{ userCode.append(yytext());
}
case 284: break;
case 54:
{ macroDefinition = false; yybegin(REGEXPSTART); return symbol(DELIMITER);
}
case 285: break;
case 129:
{ functionName = yytext().substring(10).trim();
}
case 286: break;
case 85:
{ classCode = conc(classCode,string); yybegin(MACROS);
}
case 287: break;
case 18:
{ return symbol(QUESTION);
}
case 288: break;
case 50:
{ if (commentbalance > 0)
commentbalance--;
else
yybegin(nextState);
}
case 289: break;
case 79:
{ inclusive_states = true; yybegin(STATELIST);
}
case 290: break;
case 57:
{ return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8)));
}
case 291: break;
case 6:
{
}
case 292: break;
default:
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
zzDoEOF();
switch (zzLexicalState) {
case STRING_CONTENT: {
throw new ScannerException(file,ErrorMessages.EOF_IN_STRING);
}
case 827: break;
case MACROS: {
if ( yymoreStreams() ) {
file = (File) files.pop();
yypopStream();
}
else
throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS);
}
case 828: break;
case STATELIST: {
throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS);
}
case 829: break;
case CHARCLASS: {
throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP);
}
case 830: break;
case JAVA_CODE: {
throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1);
}
case 831: break;
case REPEATEXP: {
throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP);
}
case 832: break;
case COMMENT: {
throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT);
}
case 833: break;
case STATES: {
throw new ScannerException(file,ErrorMessages.EOF_IN_STATES);
}
case 834: break;
case COPY: {
throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS);
}
case 835: break;
default:
{
if ( yymoreStreams() ) {
file = (File) files.pop();
yypopStream();
}
else
return symbol(EOF);
}
}
}
else {
zzScanError(ZZ_NO_MATCH);
}
}
}
}
/**
* Converts an int token code into the name of the
* token by reflection on the cup symbol class/interface sym
*
* This code was contributed by Karl Meissner <meissnersd@yahoo.com>
*/
private String getTokenName(int token) {
try {
java.lang.reflect.Field [] classFields = sym.class.getFields();
for (int i = 0; i < classFields.length; i++) {
if (classFields[i].getInt(null) == token) {
return classFields[i].getName();
}
}
} catch (Exception e) {
e.printStackTrace(System.err);
}
return "UNKNOWN TOKEN";
}
/**
* Same as next_token but also prints the token to standard out
* for debugging.
*
* This code was contributed by Karl Meissner <meissnersd@yahoo.com>
*/
public Symbol debug_next_token() throws java.io.IOException {
java_cup.runtime.Symbol s = next_token();
System.out.println( "line:" + (yyline+1) + " col:" + (yycolumn+1) + " --"+ yytext() + "--" + getTokenName(s.sym) + "--");
return s;
}
/**
* Runs the scanner on input files.
*
* This main method is the debugging routine for the scanner.
* It prints debugging information about each returned token to
* System.out until the end of file is reached, or an error occured.
*
* @param argv the command line, contains the filenames to run
* the scanner on.
*/
public static void main(String argv[]) {
if (argv.length == 0) {
System.out.println("Usage : java LexScan <inputfile>");
}
else {
for (int i = 0; i < argv.length; i++) {
LexScan scanner = null;
try {
scanner = new LexScan( new java.io.FileReader(argv[i]) );
while ( !scanner.zzAtEOF ) scanner.debug_next_token();
}
catch (java.io.FileNotFoundException e) {
System.out.println("File not found : \""+argv[i]+"\"");
}
catch (java.io.IOException e) {
System.out.println("IO error scanning file \""+argv[i]+"\"");
System.out.println(e);
}
catch (Exception e) {
System.out.println("Unexpected exception:");
e.printStackTrace();
}
}
}
}
}