/* The following code was generated by JFlex 1.4.1 on 2/16/08 4:44 PM */

/* SQLLexer.java is a generated file.  You probably want to
 * edit SQLLexer.lex to make changes.  Use JFlex to generate it.
 * To generate SQLLexer.java
 * Install <a href="http://jflex.de/">JFlex</a> v1.3.2 or later.
 * Once JFlex is in your classpath run<br>
 * <code>java JFlex.Main SQLLexer.lex</code><br>
 * You will then have a file called SQLLexer.java
 */

/*
 * This file is part of a <a href="http://ostermiller.org/syntax/">syntax
 * highlighting</a> package.
 * Copyright (C) 2002 Stephen Ostermiller
 * http://ostermiller.org/contact.pl?regarding=Syntax+Highlighting
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * 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.
 *
 * See COPYING.TXT for details.
 */

package com.Ostermiller.Syntax.Lexer;

import java.io.*;

/** 
 * SQLLexer is a SQL language lexer.  Created with JFlex.  An example of how it is used:
 *  <CODE>
 *  <PRE>
 *  SQLLexer shredder = new SQLLexer(System.in);
 *  SQLToken t;
 *  while ((t = shredder.getNextToken()) != null){
 *      System.out.println(t);
 *  }
 *  </PRE>
 *  </CODE>
 * 
 * @see SQLToken
 */ 


public class SQLLexer implements Lexer {

  /** 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 YYINITIAL = 0;
  public static final int COMMENT = 1;

  /** 
   * Translates characters to character classes
   */
  private static final char [] ZZ_CMAP = {
     0,  0,  0,  0,  0,  0,  0,  0,  0, 29, 37,  0, 29, 37,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
    29, 34, 31, 34, 32, 34, 34, 36, 33, 33, 35, 41, 33, 25, 40, 42, 
    39, 39, 30, 30, 30, 30, 30, 30, 30, 30, 33, 33, 34, 34, 34, 34, 
    34,  1,  2, 10, 13,  9, 15, 16, 20, 11, 28, 21,  7, 14, 12,  3, 
    24, 27,  4,  6,  5,  8, 19, 22, 26, 17, 18, 33, 38, 33, 34, 23, 
    34,  1,  2, 10, 13,  9, 15, 16, 20, 11, 28, 21,  7, 14, 12,  3, 
    24, 27,  4,  6,  5,  8, 19, 22, 26, 17, 18,  0, 34,  0, 34,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
  };

  /** 
   * 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\12\3\1\4\3\3\1\4\1\3\1\4"+
    "\4\3\1\4\1\3\1\5\1\3\1\6\1\3\1\1"+
    "\1\7\1\6\1\10\1\6\1\5\1\10\1\6\1\2"+
    "\1\5\1\11\2\3\2\4\16\3\1\4\1\0\1\3"+
    "\1\4\4\3\2\4\10\3\1\4\47\3\1\4\1\3"+
    "\1\4\4\3\1\4\4\3\1\4\20\3\1\4\26\3"+
    "\1\12\1\3\1\0\1\13\1\10\1\0\1\14\1\15"+
    "\1\0\1\16\3\0\1\11\1\17\1\3\1\4\6\3"+
    "\1\4\15\3\1\4\1\3\1\0\1\20\1\21\2\0"+
    "\2\3\1\4\3\3\1\4\5\3\1\4\10\3\1\4"+
    "\25\3\1\4\17\3\1\4\26\3\1\4\40\3\1\4"+
    "\14\3\1\4\14\3\1\4\6\3\2\4\3\3\2\4"+
    "\23\3\1\4\14\3\1\0\1\14\16\3\2\0\1\20"+
    "\1\22\1\0\12\3\1\4\20\3\2\4\35\3\1\4"+
    "\7\3\1\0\2\3\1\4\7\3\1\4\17\3\1\4"+
    "\21\3\1\4\1\3\2\4\3\3\1\4\23\3\1\4"+
    "\13\3\2\4\12\3\1\13\30\3\1\4\10\3\1\4"+
    "\25\3\1\4\5\3\1\0\22\3\1\4\3\3\1\4"+
    "\35\3\1\4\23\3\1\4\21\3\1\4\10\3\1\0"+
    "\1\4\11\3\2\4\35\3\1\4\21\3\1\0\1\4"+
    "\3\3\1\4\4\3\1\4\10\3\1\4\17\3\1\4"+
    "\2\3\1\4\27\3\1\4\7\3\1\4\4\3\1\4"+
    "\7\3\1\4\12\3\1\4\54\3\1\4\23\3";

  private static int [] zzUnpackAction() {
    int [] result = new int[963];
    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\53\0\126\0\201\0\254\0\327\0\u0102\0\u012d"+
    "\0\u0158\0\u0183\0\u01ae\0\u01d9\0\u0204\0\u022f\0\u025a\0\u0285"+
    "\0\u02b0\0\u02db\0\u0306\0\u0331\0\u035c\0\u0387\0\u03b2\0\u03dd"+
    "\0\u0408\0\u0433\0\u045e\0\u0489\0\u04b4\0\u04df\0\u050a\0\u0535"+
    "\0\u0433\0\u0433\0\u0560\0\u058b\0\u05b6\0\u05e1\0\u060c\0\u0637"+
    "\0\u0662\0\u068d\0\u06b8\0\u06e3\0\u070e\0\u0739\0\u0764\0\u078f"+
    "\0\u07ba\0\u07e5\0\u0810\0\u083b\0\u0866\0\u0891\0\u08bc\0\u08e7"+
    "\0\u0912\0\u093d\0\126\0\u0968\0\u0993\0\u09be\0\u09e9\0\u0a14"+
    "\0\u0a3f\0\u0a6a\0\u0a95\0\u0ac0\0\u0aeb\0\u0b16\0\u0b41\0\u0b6c"+
    "\0\u0b97\0\u0bc2\0\u0bed\0\u0c18\0\u0c43\0\u0c6e\0\u0c99\0\u0cc4"+
    "\0\u0cef\0\u0d1a\0\u0d45\0\u0d70\0\u0d9b\0\u0dc6\0\u0df1\0\u0e1c"+
    "\0\u0e47\0\u0e72\0\u0e9d\0\u0ec8\0\u0ef3\0\u0f1e\0\u0f49\0\u0f74"+
    "\0\u0f9f\0\u0fca\0\u0ff5\0\u1020\0\u104b\0\u1076\0\u10a1\0\u10cc"+
    "\0\u10f7\0\u1122\0\u114d\0\u1178\0\u11a3\0\u11ce\0\u11f9\0\u1224"+
    "\0\u124f\0\u127a\0\u12a5\0\u12d0\0\u12fb\0\u1326\0\u1351\0\u137c"+
    "\0\u13a7\0\u13d2\0\u13fd\0\u1428\0\u1453\0\u147e\0\u14a9\0\u14d4"+
    "\0\u14ff\0\u152a\0\u1555\0\u1580\0\u15ab\0\u15d6\0\u1601\0\u162c"+
    "\0\u1657\0\u1682\0\u16ad\0\u16d8\0\u1703\0\u172e\0\u1759\0\u1784"+
    "\0\u17af\0\u17da\0\u1805\0\u1830\0\u185b\0\u1886\0\u18b1\0\u18dc"+
    "\0\u1907\0\u1932\0\u195d\0\u1988\0\u19b3\0\u19de\0\u1a09\0\u1a34"+
    "\0\u1a5f\0\u1a8a\0\u1ab5\0\u1ae0\0\u1b0b\0\u1b36\0\u1b61\0\u1b8c"+
    "\0\u1bb7\0\u1be2\0\u1c0d\0\u1c38\0\u0535\0\u0560\0\u0433\0\u0433"+
    "\0\u1c63\0\u0433\0\u1c8e\0\u1cb9\0\u060c\0\u0433\0\u0433\0\u1ce4"+
    "\0\u1d0f\0\u1d3a\0\u1d65\0\u1d90\0\u1dbb\0\u1de6\0\u1e11\0\u1e3c"+
    "\0\u1e67\0\u1e92\0\u1ebd\0\u1ee8\0\u1f13\0\u1f3e\0\u1f69\0\u1f94"+
    "\0\u1fbf\0\u1fea\0\u2015\0\u2040\0\u206b\0\u2096\0\u20c1\0\u20ec"+
    "\0\u2117\0\u0433\0\u2142\0\u216d\0\u2198\0\u21c3\0\u21ee\0\u2219"+
    "\0\u2244\0\u226f\0\u229a\0\u22c5\0\u22f0\0\u231b\0\u2346\0\u2371"+
    "\0\u239c\0\u23c7\0\u23f2\0\u241d\0\u2448\0\u2473\0\u249e\0\u24c9"+
    "\0\u24f4\0\u251f\0\u254a\0\u2575\0\u25a0\0\u25cb\0\u25f6\0\u2621"+
    "\0\u264c\0\u2677\0\u26a2\0\u26cd\0\u26f8\0\u2723\0\u274e\0\u2779"+
    "\0\u27a4\0\u27cf\0\u27fa\0\u2825\0\u2850\0\u287b\0\u28a6\0\u28d1"+
    "\0\u28fc\0\u2927\0\u2952\0\u297d\0\u29a8\0\u29d3\0\u29fe\0\u2a29"+
    "\0\u2a54\0\u2a7f\0\u2aaa\0\u2ad5\0\u2b00\0\u2b2b\0\u2b56\0\u2b81"+
    "\0\u2bac\0\u2bd7\0\u2c02\0\u2c2d\0\u2c58\0\u2c83\0\u2cae\0\u2cd9"+
    "\0\u2d04\0\u2d2f\0\u2d5a\0\u2d85\0\u2db0\0\u2ddb\0\u2e06\0\u2e31"+
    "\0\u2e5c\0\u2e87\0\u2eb2\0\u2edd\0\u2f08\0\u2f33\0\u2f5e\0\u2f89"+
    "\0\u2fb4\0\u2fdf\0\u300a\0\u3035\0\u3060\0\u308b\0\u30b6\0\u30e1"+
    "\0\u310c\0\u3137\0\u3162\0\u318d\0\u31b8\0\u31e3\0\u320e\0\u3239"+
    "\0\u3264\0\u328f\0\u32ba\0\u32e5\0\u3310\0\u333b\0\u3366\0\u3391"+
    "\0\u33bc\0\u33e7\0\u3412\0\u343d\0\u3468\0\u3493\0\u34be\0\u34e9"+
    "\0\u3514\0\u353f\0\u356a\0\u3595\0\u35c0\0\u35eb\0\u3616\0\u3641"+
    "\0\u366c\0\u3697\0\u36c2\0\u36ed\0\u3718\0\u3743\0\u376e\0\u3799"+
    "\0\u37c4\0\u37ef\0\u381a\0\u3845\0\u3870\0\u389b\0\u38c6\0\u38f1"+
    "\0\u391c\0\u3947\0\u3972\0\u399d\0\u39c8\0\u39f3\0\u3a1e\0\u3a49"+
    "\0\u3a74\0\u3a9f\0\u3aca\0\u3af5\0\u3b20\0\u3b4b\0\u3b76\0\u3ba1"+
    "\0\u3bcc\0\u3bf7\0\u3c22\0\u3c4d\0\u3c78\0\u3ca3\0\u3cce\0\u3cf9"+
    "\0\u3d24\0\u3d4f\0\u3d7a\0\u3da5\0\u3dd0\0\u3dfb\0\u3e26\0\u3e51"+
    "\0\u3e7c\0\u3ea7\0\u3ed2\0\u3efd\0\u3f28\0\u3f53\0\u3f7e\0\u3fa9"+
    "\0\u3fd4\0\u3fff\0\u402a\0\u4055\0\u4080\0\u40ab\0\u40d6\0\u4101"+
    "\0\u0560\0\u412c\0\u4157\0\u4182\0\u41ad\0\u41d8\0\u4203\0\u422e"+
    "\0\u4259\0\u4284\0\u42af\0\u42da\0\u4305\0\u4330\0\u435b\0\u4386"+
    "\0\u2117\0\u20ec\0\u0433\0\u43b1\0\u43dc\0\u4407\0\u4432\0\u445d"+
    "\0\u4488\0\u44b3\0\u44de\0\u4509\0\u4534\0\u455f\0\u2244\0\u458a"+
    "\0\u45b5\0\u45e0\0\u460b\0\u4636\0\u4661\0\u468c\0\u46b7\0\u46e2"+
    "\0\u470d\0\u4738\0\u4763\0\u478e\0\u47b9\0\u47e4\0\u480f\0\u483a"+
    "\0\u4865\0\u4890\0\u48bb\0\u48e6\0\u4911\0\u493c\0\u4967\0\u4992"+
    "\0\u49bd\0\u49e8\0\u4a13\0\u4a3e\0\u4a69\0\u4a94\0\u4abf\0\u4aea"+
    "\0\u4b15\0\u4b40\0\u4b6b\0\u4b96\0\u4bc1\0\u4bec\0\u4c17\0\u4c42"+
    "\0\u4c6d\0\u4c98\0\u4cc3\0\u4cee\0\u4d19\0\u4d44\0\u4d6f\0\u4d9a"+
    "\0\u4dc5\0\u4df0\0\u4e1b\0\u4e46\0\u4e71\0\u4e9c\0\u4ec7\0\u4ef2"+
    "\0\u4f1d\0\u4f48\0\u4f73\0\u4f9e\0\u4fc9\0\u4ff4\0\u501f\0\u504a"+
    "\0\u5075\0\u50a0\0\u50cb\0\u50f6\0\u5121\0\u514c\0\u5177\0\u51a2"+
    "\0\u51cd\0\u51f8\0\u5223\0\u524e\0\u5279\0\u52a4\0\u52cf\0\u52fa"+
    "\0\u5325\0\u5350\0\u537b\0\u53a6\0\u53d1\0\u53fc\0\u5427\0\u5452"+
    "\0\u547d\0\u54a8\0\u54d3\0\u54fe\0\u5529\0\u5554\0\u557f\0\u55aa"+
    "\0\u55d5\0\u5600\0\u562b\0\u5656\0\u5681\0\u56ac\0\u56d7\0\u5702"+
    "\0\u572d\0\u5758\0\u5783\0\u57ae\0\u57d9\0\u5804\0\u582f\0\u585a"+
    "\0\u5885\0\u58b0\0\u58db\0\u5906\0\u5931\0\u595c\0\u5987\0\u59b2"+
    "\0\u59dd\0\u5a08\0\u5a33\0\u5a5e\0\u5a89\0\u5ab4\0\u5adf\0\u5b0a"+
    "\0\u5b35\0\u5b60\0\u5b8b\0\u5bb6\0\u5be1\0\u5c0c\0\u5c37\0\u5c62"+
    "\0\u5c8d\0\u5cb8\0\u5ce3\0\u5d0e\0\u5d39\0\u5d64\0\u5d8f\0\u5dba"+
    "\0\u5de5\0\u5e10\0\u5e3b\0\u5e66\0\u5e91\0\u5ebc\0\u4101\0\u4f48"+
    "\0\u5ee7\0\u5f12\0\u5f3d\0\u5f68\0\u5f93\0\u5fbe\0\u5fe9\0\u6014"+
    "\0\u603f\0\u606a\0\u6095\0\u60c0\0\u60eb\0\u6116\0\u6141\0\u616c"+
    "\0\u6197\0\u61c2\0\u61ed\0\u6218\0\u6243\0\u626e\0\u6299\0\u62c4"+
    "\0\u62ef\0\u50a0\0\u631a\0\u6345\0\u6370\0\u639b\0\u63c6\0\u63f1"+
    "\0\u641c\0\u6447\0\u6472\0\u649d\0\u64c8\0\u64f3\0\u651e\0\u6549"+
    "\0\u6574\0\u659f\0\u65ca\0\u65f5\0\u6620\0\u664b\0\u6676\0\u66a1"+
    "\0\u66cc\0\u66f7\0\u6722\0\u674d\0\u6778\0\u67a3\0\u67ce\0\u67f9"+
    "\0\u6824\0\u684f\0\u687a\0\u68a5\0\u68d0\0\u68fb\0\u6926\0\u6951"+
    "\0\u697c\0\u69a7\0\u69d2\0\u69fd\0\u6a28\0\u6a53\0\u6a7e\0\u6aa9"+
    "\0\u6ad4\0\u6aff\0\u6b2a\0\u6b55\0\u6b80\0\u6bab\0\u6bd6\0\u6c01"+
    "\0\u6c2c\0\u6c57\0\u6c82\0\u6cad\0\u6cd8\0\u6d03\0\u6d2e\0\u641c"+
    "\0\u6d59\0\u6d84\0\u6daf\0\u6dda\0\u6e05\0\u6e30\0\u6e5b\0\u6e86"+
    "\0\u1e3c\0\u6eb1\0\u6edc\0\u6f07\0\u6f32\0\u6f5d\0\u6f88\0\u6fb3"+
    "\0\u6fde\0\u7009\0\u7034\0\u705f\0\u708a\0\u70b5\0\u70e0\0\u710b"+
    "\0\u7136\0\u3e7c\0\u7161\0\u718c\0\u71b7\0\u71e2\0\u720d\0\u7238"+
    "\0\u7263\0\u728e\0\u72b9\0\u72e4\0\u730f\0\u733a\0\u7365\0\u7390"+
    "\0\u73bb\0\u73e6\0\u7411\0\u743c\0\u7467\0\u7492\0\u74bd\0\u74e8"+
    "\0\u7513\0\u753e\0\u7569\0\u7594\0\u75bf\0\u75ea\0\u7615\0\u7640"+
    "\0\u766b\0\u7696\0\u76c1\0\u76ec\0\u62c4\0\u7717\0\u7742\0\u776d"+
    "\0\u7798\0\u77c3\0\u77ee\0\u7819\0\u7844\0\u786f\0\u789a\0\u78c5"+
    "\0\u78f0\0\u1ebd\0\u791b\0\u7946\0\u7971\0\u799c\0\u79c7\0\u79f2"+
    "\0\u7a1d\0\u7a48\0\u7a73\0\u47b9\0\u7a9e\0\u7ac9\0\u7af4\0\u7b1f"+
    "\0\u7b4a\0\u7b75\0\u7ba0\0\u7bcb\0\u7bf6\0\u7c21\0\u7c4c\0\u7c77"+
    "\0\u7ca2\0\u7ccd\0\u7cf8\0\u7d23\0\u7d4e\0\u7d79\0\u7da4\0\u7dcf"+
    "\0\u7dfa\0\u7e25\0\u7e50\0\u7e7b\0\u7ea6\0\u7ed1\0\u7efc\0\u7f27"+
    "\0\u7f52\0\u7f7d\0\u7fa8\0\u7fd3\0\u7ffe\0\u8029\0\u8054\0\u807f"+
    "\0\u80aa\0\u80d5\0\u8100\0\u812b\0\u8156\0\u8181\0\u81ac\0\u81d7"+
    "\0\u8202\0\u822d\0\u8258\0\u8283\0\u82ae\0\u09e9\0\u82d9\0\u8304"+
    "\0\u832f\0\u835a\0\u8385\0\u83b0\0\u83db\0\u8406\0\u8431\0\u845c"+
    "\0\u8487\0\u84b2\0\u84dd\0\u8508\0\u8533\0\u855e\0\u8589\0\u83b0"+
    "\0\u85b4\0\u85df\0\u860a\0\u8635\0\u8660\0\u868b\0\u86b6\0\u86e1"+
    "\0\u870c\0\u8737\0\u8762\0\u878d\0\u87b8\0\u87e3\0\u6c01\0\u880e"+
    "\0\u8839\0\u8864\0\u0433\0\u888f\0\u88ba\0\u88e5\0\u8910\0\u893b"+
    "\0\u8966\0\u8991\0\u89bc\0\u89e7\0\u5adf\0\u8a12\0\u7a9e\0\u8a3d"+
    "\0\u8a68\0\u8a93\0\u8abe\0\u8ae9\0\u8b14\0\u8b3f\0\u8b6a\0\u8b95"+
    "\0\u8bc0\0\u8beb\0\u8c16\0\u8c41\0\u8c6c\0\u8c97\0\u8cc2\0\u8ced"+
    "\0\u8d18\0\u8d43\0\u8d6e\0\u8d99\0\u8dc4\0\u8def\0\u8e1a\0\u8e45"+
    "\0\u8e70\0\u8e9b\0\u8ec6\0\u8ef1\0\u8f1c\0\u8f47\0\u8f72\0\u8f9d"+
    "\0\u8fc8\0\u8ff3\0\u901e\0\u9049\0\u9074\0\u909f\0\u90ca\0\u90f5"+
    "\0\u9120\0\u914b\0\u9176\0\u91a1\0\u91cc\0\u91f7\0\u9222\0\u924d"+
    "\0\u9278\0\u92a3\0\u92ce\0\u92f9\0\u9324\0\u934f\0\u937a\0\u93a5"+
    "\0\u93d0\0\u93fb\0\u9426\0\u9451\0\u947c\0\u94a7\0\u94d2\0\u94fd"+
    "\0\u9528\0\u9553\0\u957e\0\u95a9\0\u95d4\0\u7fa8\0\u95ff\0\u962a"+
    "\0\u9655\0\u9680\0\u96ab\0\u96d6\0\u9701\0\u972c\0\u9757\0\u9782"+
    "\0\u97ad\0\u97d8\0\u9803\0\u982e\0\u9859\0\u9884\0\u98af\0\u98da"+
    "\0\u9905\0\u9930\0\u995b\0\u9986\0\u99b1\0\u99dc\0\u9a07\0\u9a32"+
    "\0\u9a5d\0\u9a88\0\u9ab3\0\u9ade\0\u9b09\0\u9b34\0\u9b5f\0\u9b8a"+
    "\0\u9bb5\0\u9be0\0\u9c0b";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[963];
    int offset = 0;
    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
    int i = 0;  /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int high = packed.charAt(i++) << 16;
      result[j++] = high | packed.charAt(i++);
    }
    return j;
  }

  /** 
   * The transition table of the DFA
   */
  private static final int [] ZZ_TRANS = zzUnpackTrans();

  private static final String ZZ_TRANS_PACKED_0 =
    "\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12"+
    "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22"+
    "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+
    "\1\33\1\34\2\3\1\35\1\36\1\37\1\32\1\40"+
    "\1\41\1\42\1\41\1\43\1\36\1\3\1\37\1\44"+
    "\1\42\1\45\43\46\1\47\6\46\1\50\31\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\2\3\1\51"+
    "\1\3\1\52\1\53\1\54\1\55\1\56\1\3\1\57"+
    "\1\3\1\60\1\61\1\3\1\62\1\63\2\3\1\64"+
    "\5\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\65\1\3\1\66\1\67\2\3\1\70\1\3"+
    "\1\71\1\3\1\72\5\3\1\73\7\3\1\0\3\3"+
    "\1\0\1\3\5\0\1\74\1\0\2\3\3\0\2\3"+
    "\1\75\1\3\1\76\2\3\1\77\1\100\1\3\1\101"+
    "\1\102\1\103\2\3\1\104\3\3\1\105\2\3\1\106"+
    "\1\3\1\107\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\3\3\1\110\4\3\1\111\1\112\1\3\1\113"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\114\1\3\1\115\1\116\4\3\1\117\1\3"+
    "\1\120\5\3\1\121\2\3\1\122\4\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\123\1\3"+
    "\1\124\1\3\1\125\2\3\1\126\1\127\1\130\1\131"+
    "\2\3\1\132\2\3\1\133\2\3\1\134\3\3\1\135"+
    "\1\0\1\3\1\136\1\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\137\1\3\1\140\5\3\1\141\1\3"+
    "\1\142\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\143\5\3\1\144\13\3\1\145\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\146"+
    "\4\3\1\147\1\150\4\3\1\151\6\3\1\152\5\3"+
    "\1\0\1\153\1\154\1\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\155\1\3\1\156\1\157\2\3\1\160"+
    "\1\161\10\3\1\162\2\3\1\163\4\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\164\1\165"+
    "\1\166\4\3\1\167\1\170\1\171\1\3\1\172\10\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\173\1\3\1\174\4\3\1\175\1\176\1\177\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\200\1\3\1\201\1\202\4\3\1\203\1\3\1\204"+
    "\5\3\1\205\7\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\206\1\3\1\207\4\3\1\210"+
    "\1\211\1\3\1\212\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\213\1\3\1\214\1\215"+
    "\2\3\1\216\1\217\1\220\1\3\1\221\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\222"+
    "\1\223\2\3\1\224\1\3\1\225\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\226\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\227\25\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\230\7\3\1\231\1\3\1\232\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\233\1\3\1\234\7\3\1\235\15\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\236\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\237\1\240\6\3\1\241\10\3\1\242\4\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\56\0\1\3\1\243"+
    "\1\3\1\244\1\245\2\3\1\246\1\247\1\250\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\34\0\1\251"+
    "\21\0\3\3\1\252\25\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\40\0\1\36\7\0\1\36\16\0\1\253"+
    "\24\0\1\37\10\0\1\37\1\254\40\0\1\255\10\0"+
    "\1\255\3\0\44\256\1\257\1\260\1\261\4\256\36\0"+
    "\1\254\10\0\1\254\46\0\1\262\7\0\43\46\1\263"+
    "\6\46\1\264\43\46\1\265\6\46\1\266\43\46\1\267"+
    "\6\46\1\264\3\3\1\270\2\3\1\271\22\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\272"+
    "\4\3\1\73\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\273\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\6\3\1\274\2\3\1\275"+
    "\1\73\6\3\1\276\7\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\5\3\1\277\1\3\1\300\3\3"+
    "\1\301\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\302\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\5\3\1\303\4\3\1\304\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\305\13\3\1\73\3\3\1\73\7\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\73\13\3"+
    "\1\73\1\252\12\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\277\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\20\3\1\306\10\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\20\3\1\73"+
    "\10\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\12\3\1\307\16\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\310\1\3\1\311\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\312"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\313\25\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\314\11\3\1\315\1\252\10\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\316\6\3\1\317\14\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\44\320\1\321\1\322\1\323\1\324"+
    "\3\320\31\3\1\0\2\3\1\325\1\0\1\3\7\0"+
    "\2\3\3\0\15\3\1\326\13\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\15\3\1\73\13\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\327"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\330\23\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\15\3\1\331\13\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\332\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\17\3\1\333"+
    "\11\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\334\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\277\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\335\3\3\1\336"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\7\3\1\337\1\340\15\3\1\341\2\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\7\3\1\342\21\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\343\3\3\1\344\1\345\1\346\2\3\1\347\1\350"+
    "\1\351\2\3\1\352\3\3\1\353\4\3\1\354\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\20\3\1\355"+
    "\10\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\2\3\1\356\26\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\357\27\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\360\6\3\1\361"+
    "\1\362\1\3\1\363\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\4\3\1\364\11\3\1\365\12\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\16\3"+
    "\1\366\12\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\30\3\1\342\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\367\7\3\1\367\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\23\3\1\370"+
    "\5\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\10\3\1\371\5\3\1\342\12\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\372\2\3\1\373"+
    "\10\3\1\374\3\3\1\111\7\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\2\3\1\375\13\3\1\73"+
    "\12\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\376\2\3\1\377\1\u0100\1\u0101\1\u0102\2\3"+
    "\1\u0103\1\3\1\u0104\14\3\1\0\1\3\1\u0105\1\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\111\1\3"+
    "\1\121\1\u0106\17\3\1\u0107\4\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\16\3\1\u0108\3\3\1\342"+
    "\6\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u0109\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\6\3\1\u010a\7\3\1\u010b\12\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\u010c"+
    "\1\3\1\u010d\25\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\u010e\7\3\1\u010f\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\7\3\1\u0110"+
    "\21\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0111\1\u0112\1\u0113\5\3\1\u0114\14\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\77"+
    "\10\3\1\u0115\13\3\1\277\2\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u0116\4\3\1\331"+
    "\5\3\1\u0117\2\3\1\u0113\3\3\1\u0118\5\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\6\3\1\u0119"+
    "\7\3\1\u011a\6\3\1\342\3\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u0111\7\3\1\u011b"+
    "\1\3\1\u011c\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u011d\1\3\1\u011e\1\3\1\u011f"+
    "\1\u0120\1\u0121\1\u0122\1\277\7\3\1\u0123\3\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\15\3\1\u0124"+
    "\12\3\1\277\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\12\3\1\311\16\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\12\3\1\u0125\16\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\6\3\1\342\22\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\12\3"+
    "\1\u0126\2\3\1\u0127\13\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u0128\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\u0129\3\3"+
    "\1\u012a\1\u012b\1\u012c\14\3\1\u012d\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\10\3\1\u012e\20\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u012f"+
    "\1\u0130\1\u0131\1\u0132\2\3\1\u0133\16\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\u0134\1\u0135"+
    "\1\3\1\u0136\2\3\1\u0137\1\u0138\3\3\1\u0139\1\3"+
    "\1\u013a\11\3\1\332\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u013b\5\3\1\u013c\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\u013d"+
    "\1\3\1\u013e\4\3\1\u013f\20\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\2\3\1\342\1\3\1\u0140"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\12\3\1\111\16\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\u0141\7\3\1\u0142\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u0143"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u0144\10\3\1\u0145\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\13\3\1\u0146\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u0147"+
    "\1\3\1\u0148\1\u0149\3\3\1\u014a\1\u014b\1\277\1\u014c"+
    "\1\3\1\u014d\3\3\1\u014e\1\u014f\3\3\1\u0147\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u0150"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\16\3\1\u0151\11\3\1\u0152\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\14\3\1\315\14\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\u0153\10\3"+
    "\1\u0154\12\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u0155\4\3\1\u0156\1\3\1\342\14\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\u0157\6\3\1\u0158\12\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\26\3\1\73\2\3\1\0\1\u0113"+
    "\2\3\1\0\1\3\7\0\2\3\3\0\7\3\1\70"+
    "\14\3\1\226\4\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u0159\13\3\1\73\7\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\10\3\1\u015a"+
    "\5\3\1\u015b\12\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u015c\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u015d\2\3\1\u015e"+
    "\1\u015f\1\u0160\1\u0161\2\3\1\u0162\4\3\1\u0163\10\3"+
    "\1\u0164\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u0165\4\3\1\u0166\3\3\1\u0167\16\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\u0168"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\146\22\3\1\73\1\0\1\u0169\2\3\1\0"+
    "\1\3\7\0\2\3\3\0\4\3\1\342\7\3\1\u0164"+
    "\1\u016a\5\3\1\342\5\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\16\3\1\u016b\12\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\u016c\1\u016d"+
    "\22\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\14\3\1\u016e\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\7\3\1\150\21\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\4\3\1\u016f\3\3\1\u0170"+
    "\20\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u0171\5\3\1\u0172\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\3\3\1\362\25\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\7\3\1\u0173"+
    "\4\3\1\u0174\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\146\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\4\3\1\357\7\3\1\u0175"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u0176\23\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\u0177\1\3\1\u0178\25\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u0179"+
    "\25\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\73\6\3\1\u017a\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u017b\27\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\342"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u017c\2\3\1\u017d\2\3\1\u017e\16\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u017f"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\u010d\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\u0180\6\3\1\u0181\5\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\6\3\1\u0113"+
    "\1\77\1\u017b\20\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u0182\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\21\3\1\u0183\7\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u0184"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u0185\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u0186\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u0187\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u0188"+
    "\1\311\1\u0189\6\3\1\73\13\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\6\3\1\u018a\22\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u018b"+
    "\5\3\1\u018c\1\3\1\u018d\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\13\3\1\73\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\2\3\1\u018e"+
    "\26\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\14\3\1\u018f\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\45\251\1\0\5\251\13\3\1\367\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\34\0\1\u0190"+
    "\17\0\1\u0190\12\0\1\253\24\0\1\254\10\0\1\254"+
    "\3\0\44\256\1\u0191\1\260\1\261\4\256\43\46\1\263"+
    "\6\46\1\0\43\46\1\0\6\46\1\264\4\3\1\u0113"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u0192\25\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\332\27\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\16\3\1\u0193\12\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u0194"+
    "\1\3\1\u0195\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\u0104\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\16\3\1\u010b\12\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u017b"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u0196\25\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\331\27\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\24\3\1\u0197\4\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u0198"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\u013b\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\7\3\1\u0199\21\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\4\3\1\u019a\24\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\25\3\1\u019b"+
    "\3\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\7\3\1\u019c\21\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\24\3\1\73\4\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u019d\27\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\2\3\1\73"+
    "\26\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\26\3\1\u019e\2\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u010c\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\23\3\1\226\3\3\1\u019f"+
    "\1\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u0128\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\44\320\1\321\1\322\1\323\1\u01a0\3\320"+
    "\44\u01a1\1\321\1\0\1\u01a1\1\0\3\u01a1\44\320\1\u01a2"+
    "\1\322\1\323\1\u01a0\3\320\44\u01a0\1\u01a3\1\322\1\u01a4"+
    "\1\324\3\u01a0\11\3\1\u01a5\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u017b\1\3\1\u01a6"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\u017b\16\3\1\u0147\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u01a7\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\6\3\1\73\22\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\21\3"+
    "\1\73\7\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\u01a8\22\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\4\3\1\u01a9\24\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u01aa\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\4\3"+
    "\1\u01ab\7\3\1\73\14\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\7\3\1\u01ac\1\3\1\73\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u01ad\23\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\73\20\3\1\u01ae\1\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\73\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\73\5\3\1\u01af\13\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\10\3\1\u01b0\20\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\u01b1\2\3"+
    "\1\u01b2\1\u0113\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\u01b3\27\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\10\3\1\u01b4\20\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\u01b5"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u01b6\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u01b7\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\3\3\1\u0146\25\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\7\3\1\u01b8"+
    "\1\3\1\u01b9\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\24\3\1\u0113\4\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\u01ba\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\6\3\1\u0113"+
    "\22\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u01bb\1\u01bc\14\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\u01bd\2\3\1\73\2\3"+
    "\1\u0196\14\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u0113\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\16\3\1\73\1\3\1\u01be\10\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\16\3"+
    "\1\u01bf\12\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\30\3\1\u01c0\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u01c1\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\14\3\1\73\14\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u01c2"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u010e\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u0113\1\u01c3\23\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\10\3\1\u01c4\20\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\u0147\7\3\1\367\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\u01c5\1\u01c6\2\3\1\u01c7"+
    "\16\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\146\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\13\3\1\u01c8\7\3\1\u01c9\5\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u01ca"+
    "\2\3\1\73\22\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\6\3\1\u01cb\22\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u01a5\5\3\1\73"+
    "\11\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u0170\1\3\1\303\2\3\1\u01cc\20\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\6\3\1\u01cd"+
    "\22\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\10\3\1\u01ce\20\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u01cf\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u01d0\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u01d1"+
    "\14\3\1\111\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\7\3\1\u01d2\21\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\5\3\1\u01d3\5\3\1\77\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\16\3"+
    "\1\u01d4\12\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\342\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\26\3\1\73\2\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\12\3\1\342\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\12\3"+
    "\1\u01d5\16\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\u01d6\2\3\1\u01d7\1\u01d8\13\3\1\u01d9"+
    "\2\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\20\3\1\342\10\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u01da\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\73\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\12\3\1\u01db"+
    "\5\3\1\u01dc\10\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\u01dd\23\3\1\73\3\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\15\3\1\u0181"+
    "\13\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\20\3\1\u0164\10\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u0173\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\u01de\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u0113"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u01df\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\64\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\13\3\1\u0173\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u01e0"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\14\3\1\u01e1\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u01e2\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\3\3\1\367\25\3\1\0"+
    "\1\3\1\u01e3\1\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u01e4\7\3\1\357\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\14\3\1\u01e5\14\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\u0185"+
    "\27\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\121\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u0116\1\u01e6\24\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\31\3\1\u01e7\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\4\3\1\332\24\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\4\3"+
    "\1\u01e8\4\3\1\u01e9\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\12\3\1\u01ea\16\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\7\3\1\u01eb\1\3"+
    "\1\u01ec\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\u01ed\22\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\7\3\1\u015b\21\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\u01ee\27\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\15\3"+
    "\1\u01ef\13\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u01f0\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\5\3\1\73\3\3\1\73\1\u01f1"+
    "\16\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\7\3\1\u01f2\21\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\24\3\1\342\4\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\u01f3\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u0173"+
    "\25\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u01f4\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\7\3\1\u01f5\1\u01f6\20\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\14\3\1\u0113\14\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u01f7\1\u01f8\5\3\1\u01f9\1\u01fa\5\3\1\u01fb\5\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\16\3"+
    "\1\u01fc\11\3\1\u01fd\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\6\3\1\331\22\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u01fe\27\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\6\3\1\u01ff"+
    "\22\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\2\3\1\73\3\3\1\342\22\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\6\3\1\62\22\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u0200"+
    "\1\3\1\u0201\22\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u0202\6\3\1\367\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\12\3\1\u0203"+
    "\16\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0124\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\7\3\1\u0204\21\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\10\3\1\u01cf\20\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\25\3\1\342"+
    "\3\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\10\3\1\u0113\20\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\73\5\3\1\u0205\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u0206"+
    "\3\3\1\u0207\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u0208\24\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\u0209\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u020a"+
    "\1\3\1\u020b\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\13\3\1\u020a\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\3\3\1\u020c\25\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u020d"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\14\3\1\u020e\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u020f\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\u0210\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\10\3\1\u01da"+
    "\2\3\1\u0211\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u01af\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\13\3\1\u0212\1\u0145\7\3"+
    "\1\u0181\4\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\u0213\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\7\3\1\u0214\21\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\2\3\1\277\6\3"+
    "\1\u0215\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u0216\7\3\1\u0217\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\2\3\1\111\26\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\252\27\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\30\3\1\73\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\7\3\1\u0218\21\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u01ca\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u0219"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u021a\4\3\1\u021b\16\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u0185\1\3\1\u021c"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\7\3\1\u021d\3\3\1\u021e\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u021f\7\3\1\u0220"+
    "\1\3\1\u0221\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\311\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\20\3\1\u0222\10\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u0223"+
    "\4\3\1\u0224\15\3\1\u0225\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\5\3\1\u0226\23\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\u0227\27\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\23\3"+
    "\1\u0228\5\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\10\3\1\111\1\73\1\3\1\u0229\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\30\3\1\331"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\24\3"+
    "\1\u022a\4\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\u022b\22\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\10\3\1\u0185\12\3\1\u0228\5\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u022c\3\3\1\u022d\1\342\13\3\1\u022e\2\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\77"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\16\3\1\73\12\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u022f\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\73\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\12\3\1\u0230"+
    "\16\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u0173\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\73\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\14\3\1\u0231\14\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\10\3\1\u0232"+
    "\20\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\2\3\1\u0175\26\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u0233\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\4\3\1\73\24\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\12\3\1\u0234"+
    "\1\u0235\5\3\1\u0181\7\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\10\3\1\u0154\2\3\1\77\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\10\3"+
    "\1\u0236\20\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\2\3\1\u0237\3\3\1\303\22\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\15\3\1\u0238\13\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\13\3"+
    "\1\u011c\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\u0239\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\27\3\1\u023a\1\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\25\3\1\73\3\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\342\23\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\24\3\1\u023b\4\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\4\3\1\342\7\3\1\u023c\14\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\u023d\3\3\1\u023e\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\u023f\3\3\1\u0175\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u0240\5\3\1\u0230\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\12\3\1\u0241\16\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\3\3\1\u0242\2\3"+
    "\1\u0243\3\3\1\u0244\4\3\1\u014d\10\3\1\u021d\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u017b"+
    "\12\3\1\317\4\3\1\u0245\5\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\u0193\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\15\3\1\u0246"+
    "\13\3\1\0\3\3\1\0\1\3\7\0\2\3\41\0"+
    "\1\u0247\10\0\1\u0247\3\0\7\3\1\u0248\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u0249"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0230\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\20\3\1\u024a\10\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\12\3\1\u0124\16\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u024b"+
    "\25\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\367\25\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\21\3\1\u024c\7\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u024d\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\26\3\1\u022e"+
    "\2\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\u024e\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\15\3\1\u0164\13\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u01de\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\7\3\1\u024f"+
    "\21\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\44\u01a0\1\0\1\322\1\u01a4\51\u01a0\1\322\1\u01a4\4\u01a0"+
    "\12\3\1\u0113\16\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\u0250\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\u0251\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u0113"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0252\2\3\1\u0253\21\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\3\3\1\u0254\25\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\u0255"+
    "\27\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\2\3\1\u0256\5\3\1\u015c\20\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\13\3\1\u0257\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\12\3\1\u0258"+
    "\16\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0259\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u025a\24\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\u0113\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u025b"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u025c\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\15\3\1\u025d\13\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\16\3\1\342\12\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u025e"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u010e\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\u025f\27\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u0260\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\7\3\1\u0181"+
    "\21\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\6\3\1\u0261\22\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u0262\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\20\3\1\u0263\10\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u0264"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u0265\3\3\1\u0124\21\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\6\3\1\u0266\13\3\1\u0267"+
    "\6\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\30\3\1\u0268\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\u0269\1\3\1\u026a\15\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\12\3\1\u026b\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u026c\23\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\357\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\7\3\1\u026d\21\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\u026e\27\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\11\3"+
    "\1\u026f\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\17\3\1\73\11\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\13\3\1\u0270\15\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\4\3\1\u0271\24\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\13\3"+
    "\1\u01b3\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\u0272\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\7\3\1\u0173\21\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\16\3\1\u0273\12\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\226\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\7\3\1\u0274\21\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u0275\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\u0276\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\13\3"+
    "\1\u0277\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u0124\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\4\3\1\u0278\24\3\1\0\1\u0279"+
    "\2\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u027a"+
    "\25\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u027b\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u0175\24\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\3\3\1\u027c\25\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\10\3\1\u027d"+
    "\20\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u027e\1\3\1\u027f\21\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\367\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\27\3\1\u0280"+
    "\1\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\6\3\1\u0119\22\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\12\3\1\u0281\16\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\16\3\1\u0282\12\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\10\3\1\342"+
    "\20\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\16\3\1\u0262\12\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u0283\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\21\3\1\u0284\7\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\14\0\1\u0285\41\0"+
    "\1\3\1\u01a5\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u0286\24\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\10\3\1\u0185\20\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\10\3\1\u025c"+
    "\20\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\30\3\1\u0287\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u0288\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\7\3\1\331\21\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u01a6\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\u0289\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u028a\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\77\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\u028b\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\11\3"+
    "\1\u028c\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u028d\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\16\3\1\u028e\12\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\u028f\11\3"+
    "\1\u0290\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u0291\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u0292\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u0293\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\11\3"+
    "\1\270\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u0294\7\3\1\u0138\1\3\1\u0295\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\u0296\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u0297\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\u0298\22\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\u0299\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\u029a\25\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u029b\25\3\1\u019f\1\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\25\3\1\u029c\3\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\u0230\27\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\u029d\13\3\1\277\10\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\u029e\7\3"+
    "\1\u029f\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\u0113\7\3\1\u0104\14\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\u02a0\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\13\3"+
    "\1\u02a1\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\31\3\1\0\1\73\2\3\1\0\1\3\7\0"+
    "\2\3\3\0\12\3\1\u02a2\16\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\25\3\1\277\3\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u02a3"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u0271\23\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\15\3\1\u02a4\13\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u02a5\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u0286"+
    "\25\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\17\3\1\332\11\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u02a6\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u015a\11\3\1\u01ca"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0193\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\2\3\1\u02a7\26\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\u02a8\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\7\3\1\u02a9"+
    "\21\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u02aa\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u02ab\24\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\4\3\1\u02ac\24\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\16\3\1\u02ad"+
    "\12\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u010c\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\16\3\1\u0175\12\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\10\3\1\u01b2\20\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u02ae"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\14\3\1\u02af\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\u02b0\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\13\3\1\u02b1\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u02b2"+
    "\25\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\220\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\13\3\1\u02b3\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\16\3\1\u02b4\12\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\u02b5"+
    "\27\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\17\3\1\u02b6\11\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\77\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u02b7\27\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u024e"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u02b8\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\u02b9\27\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\22\3\1\342\6\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\303"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u01f2\23\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\30\3\1\u02ba\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\4\3\1\u02bb\24\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\24\3\1\226\4\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\u015a\27\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\10\3\1\u0171\20\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\3\3\1\150\25\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\7\3\1\277\21\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\u02bc\27\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u02bd\10\3\1\u02be\12\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\3\3\1\u0147\25\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\11\3"+
    "\1\u02bf\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\16\3\1\u02c0\12\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\13\3\1\u0175\15\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\26\3\1\u02c1\2\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\17\3"+
    "\1\u014d\11\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\u02c2\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\4\3\1\u02c3\24\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\u02c4\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\13\3"+
    "\1\u02c5\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u02c6\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\u0138\27\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\12\3\1\73\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\14\3"+
    "\1\u02a0\14\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\u02c7\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\342\13\3\1\342\6\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\20\3"+
    "\1\u0124\10\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\367\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u02c8\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\u02c9\27\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\27\3"+
    "\1\u019f\1\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u0116\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\u02ca\27\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\14\3\1\u01af\14\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u027e\23\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u02cb\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\14\3\1\u02cc\14\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\3\3\1\u02cd\25\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\14\3"+
    "\1\u02ce\14\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u01a5\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\13\3\1\u02cf\15\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\6\3\1\u025b\22\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\11\3"+
    "\1\u020a\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\u02d0\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\5\3\1\u0235\23\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\27\3\1\u02d1\1\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\u02d2\5\3\1\u02d3\7\3\1\u02d4\11\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\u02d5\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\14\3"+
    "\1\u0124\14\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\317\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\5\3\1\u02d6\23\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\3\3\1\u02d7\25\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\u0274\25\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\16\3\1\u02d8\12\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\u02d9\3\3\1\73\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u02da\23\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\u0181\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\u02db\27\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\7\3\1\u02dc\21\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\4\3"+
    "\1\u02dd\24\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\3\3\1\u02de\25\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\13\3\1\u02df\15\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\14\3\1\u010e\14\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\u0260\27\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u0138\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\16\3\1\u02e0\12\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\u0215\23\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\17\3"+
    "\1\u02e1\11\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\u02e2\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\12\3\1\u02e3\16\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\15\3\1\342\13\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\4\3"+
    "\1\u02e4\24\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\16\3\1\u02e5\12\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\u0111\27\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\3\3\1\u017b\7\3"+
    "\1\u0198\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u02e6\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\15\3\1\u02e7\13\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\4\3\1\u01e6\24\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\16\3"+
    "\1\u02e8\12\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\26\3\1\367\2\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\30\3\1\u01bd\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\35\0\1\u02e9\20\0\14\3\1\u0175"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u02ea\23\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\6\3\1\73\4\3\1\u011c\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\u02eb"+
    "\25\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\15\3\1\u02ec\13\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\6\3\1\u010e\22\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\6\3\1\u02ed\22\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u02ee"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\14\3\1\u0260\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\13\3\1\u02ef\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\14\3\1\u01e3\14\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u02f0"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\12\3\1\u02f1\16\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u02f2\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\14\3\1\u02f3\14\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u02f4"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\u0230\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u02f5\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\27\3\1\u02f6\1\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\u02f7"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0260\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\12\3\1\u02f8\16\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\77\16\3\1\u0268"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\6\3"+
    "\1\325\14\3\1\u0175\5\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\14\3\1\u02f9\14\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\77\27\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\1\3"+
    "\1\u02fa\27\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u02fb\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\13\3\1\u02fc\15\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u0124\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\16\3"+
    "\1\u02fd\12\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u02fe\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\150\27\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u02ff\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\16\3"+
    "\1\u0300\12\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\3\3\1\332\4\3\1\u0301\20\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u0302\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\13\3"+
    "\1\u0303\15\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\u0304\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u0305\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\3\3\1\u0306\25\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\14\3"+
    "\1\u01a5\14\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\14\3\1\u0307\14\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\3\3\1\u0308\25\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u0309\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\u01e3\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u030a\5\3\1\73\7\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\20\3\1\u030b\10\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\20\3"+
    "\1\367\10\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\4\3\1\77\24\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\u030c\27\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\4\3\1\u030d\24\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\21\3"+
    "\1\121\7\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\u030e\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\23\3\1\277\5\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\11\3\1\u030f\17\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\u02b9\25\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\15\3\1\u0310\13\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\15\3\1\277\13\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\4\3\1\u02cf\24\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\6\3"+
    "\1\303\22\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\7\3\1\u0311\21\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\13\3\1\u0312\15\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\14\3\1\u0117\14\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\u0271\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\21\3\1\73\6\3\1\331\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\12\3\1\u0184\16\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u0313"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\10\3\1\u0138\20\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\6\3\1\73\2\3\1\u0314\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\23\3\1\342"+
    "\5\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\14\3\1\u0315\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\351\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\12\3\1\u0316\16\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\u0317"+
    "\27\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u0318\25\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u0313\24\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u0319\27\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\u031a"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\u0138\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u031b\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\10\3\1\u010c\20\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\6\3\1\u031c"+
    "\22\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u031d\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\u02e0\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\332\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\27\3\1\u031e"+
    "\1\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u031f\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u017b\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u0320\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\u0181"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\30\3\1\u0321\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u0322\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u0323\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u0324\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\14\0\1\u0325"+
    "\41\0\20\3\1\u0260\10\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u0326\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\30\3\1\u0327\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\73"+
    "\1\3\1\u0328\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\331\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\u0329\6\3\1\u0301"+
    "\20\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u032a\23\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\13\3\1\u032b\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\15\3\1\u032c\13\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\10\3\1\u032d"+
    "\4\3\1\313\13\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u032e\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\u032f\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u0330"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u0331\4\3\1\342\16\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\u0332\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u02e2"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\331\23\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u0333\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\u0334\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\16\3\1\u0335"+
    "\12\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u0336\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\12\3\1\u02fb\16\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\2\3\1\342\25\3\1\u02fb"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u0337\23\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u015a\7\3\1\77\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\4\3\1\73\10\3"+
    "\1\73\13\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\u02d9\22\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\14\3\1\325\14\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\14\3\1\317\14\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\12\3"+
    "\1\u0338\16\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\331\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u0339\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\u0262\1\3"+
    "\1\73\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\12\3\1\u033a\16\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\16\3\1\u033b\12\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\u033c\23\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\10\3"+
    "\1\u033d\20\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\u033e\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\22\3\1\u0204\6\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\27\3\1\u033f\1\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\15\3"+
    "\1\u0340\13\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\12\3\1\u0341\16\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\5\3\1\u0342\23\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\5\3\1\u0343\23\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\4\3"+
    "\1\u0344\24\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\16\3\1\u015c\12\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u0345\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u0346\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\6\3"+
    "\1\u0347\22\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\22\3\1\u0235\6\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\10\3\1\u032d\20\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\12\3\1\u0348\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\30\3"+
    "\1\u0230\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u0238\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\16\3\1\u0349\12\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\17\3\1\u034a\11\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u01bd"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\15\0"+
    "\1\u034b\40\0\3\3\1\u034c\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\3\3\1\u034d\25\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u034e"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u034f\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u0350\25\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\27\3\1\u0351\1\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\6\3\1\277"+
    "\22\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0352\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\27\3\1\u0353\1\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u0354\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u0235"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\7\3\1\332\3\3\1\u0355\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\14\3\1\u0356\14\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u0357"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\u0358\17\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\u0359\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u035a\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\27\3\1\u035b"+
    "\1\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\24\3\1\332\4\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\2\3\1\277\26\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\11\3\1\u035c\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\4\3\1\u035d"+
    "\24\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\20\3\1\u030a\10\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\6\3\1\u035e\3\3\1\u035f\1\3\1\351"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\27\3\1\u0360\1\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\331\1\3\1\u011c\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u0361"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\11\3\1\73\1\3\1\u0198\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\16\3\1\u01af\12\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\27\3\1\u0362"+
    "\1\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\12\3\1\331\16\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u02bd\21\3\1\u02d1\1\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u0363"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u0364\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\u0116\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\14\3\1\u0313\14\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\u0365"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u028e\25\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\14\3\1\u0366\14\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\17\3\1\u0367\11\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u0368"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0369\1\u02e6\2\3\1\u032d\4\3\1\u0124\12\3"+
    "\1\u036a\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u036b\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u0204\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\27\3\1\u036c\1\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\13\3\1\u036d"+
    "\15\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u01af\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u036e\1\3\1\u036f\1\3\1\u024f"+
    "\21\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u0370\24\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\1\3\1\u0173\7\3\1\73\17\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\12\3\1\u0371"+
    "\16\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\1\3\1\u0372\27\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\3\3\1\u036e\2\3\1\u0373\1\u024f\21\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\u0374\25\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\16\3\1\u0375\5\3\1\u0376\4\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\6\3\1\u0266\22\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\14\3"+
    "\1\u0377\14\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u0378\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\27\3\1\u0379\1\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\10\3\1\u037a\20\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\20\3"+
    "\1\252\10\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\3\3\1\111\25\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\u0164\27\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u0306\13\3"+
    "\1\u037b\1\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u037c\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\u037d\22\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\12\3\1\101\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\11\3"+
    "\1\u037e\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\73\20\3\1\u037f\1\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\24\3\1\u0380\4\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\5\3"+
    "\1\u0381\23\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\31\3\1\0\1\3\1\u0382\1\3\1\0\1\3"+
    "\7\0\2\3\3\0\14\3\1\u0383\14\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\13\3\1\u0384\15\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\u0385\25\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\u0386\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\73\20\3\1\u033f\1\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\14\3"+
    "\1\u0387\14\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\14\3\1\u0388\14\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\6\3\1\u0389\1\u024f\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\14\3\1\u038a"+
    "\14\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\5\3\1\u0193\23\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\31\3\1\0\1\u0113\2\3\1\0\1\3"+
    "\7\0\2\3\3\0\3\3\1\u038b\2\3\1\u038c\5\3"+
    "\1\351\1\3\1\u01d8\12\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u038d\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\1\3\1\u038e\27\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\u038f\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\6\3\1\u0390\20\3\1\u0391\1\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\14\3\1\u0248\14\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\10\3"+
    "\1\u017b\20\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\15\3\1\u0392\13\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\10\3\1\u030e\20\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\12\3\1\u0393\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\11\3"+
    "\1\u0394\17\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\5\3\1\u0395\23\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\4\3\1\u0396\24\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\30\3\1\u0397\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\16\3\1\u0398"+
    "\12\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\7\3\1\u0399\21\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\6\3\1\u01d6\22\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\27\3\1\u039a\1\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\1\3\1\u039b"+
    "\27\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\27\3\1\u039c\1\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\5\3\1\u039d\23\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\5\3\1\u039e\23\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\11\3\1\u039f"+
    "\17\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\15\3\1\u03a0\13\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\11\3\1\u03a1\17\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\1\3\1\73\27\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\3\3\1\64"+
    "\25\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\4\3\1\u03a2\5\3\1\u0120\16\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\12\3\1\u01b3\16\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\5\3\1\u03a3"+
    "\23\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\13\3\1\u03a4\15\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\4\3\1\u03a5\24\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\13\3\1\u03a6\15\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\12\3\1\u03a7"+
    "\16\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\3\3\1\u03a8\25\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\21\3\1\u03a9\7\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\3\3\1\u03aa\25\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\23\3\1\u03ab"+
    "\5\3\1\0\3\3\1\0\1\3\7\0\2\3\3\0"+
    "\14\3\1\u03ac\14\3\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\13\3\1\u03ad\15\3\1\0\3\3\1\0"+
    "\1\3\7\0\2\3\3\0\7\3\1\u03ae\21\3\1\0"+
    "\3\3\1\0\1\3\7\0\2\3\3\0\30\3\1\u03af"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\14\3"+
    "\1\u03b0\14\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\1\3\1\u03b1\27\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\1\3\1\u03b2\27\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\17\3\1\u03b3\11\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\u03b4\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\11\3\1\u039e\17\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\27\3\1\u03b5\1\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\7\3\1\u03b6\21\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\7\3"+
    "\1\u03b7\21\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u03b8\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u03b9\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\12\3\1\u01d8\16\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\27\3"+
    "\1\u03ba\1\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\27\3\1\u03bb\1\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\12\3\1\u039e\16\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\15\3\1\u03bc\13\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\12\3"+
    "\1\u01d8\15\3\1\u03bd\1\0\3\3\1\0\1\3\7\0"+
    "\2\3\3\0\30\3\1\u03be\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\27\3\1\u03bf\1\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\4\3\1\u03c0\24\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\3\3"+
    "\1\u03c1\25\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\2\3\1\u0256\26\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0\11\3\1\u03c2\17\3\1\0\3\3"+
    "\1\0\1\3\7\0\2\3\3\0\6\3\1\u03c3\22\3"+
    "\1\0\3\3\1\0\1\3\7\0\2\3\3\0\12\3"+
    "\1\u0244\16\3\1\0\3\3\1\0\1\3\7\0\2\3"+
    "\3\0\13\3\1\u0230\15\3\1\0\3\3\1\0\1\3"+
    "\7\0\2\3\3\0";

  private static int [] zzUnpackTrans() {
    int [] result = new int[39990];
    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 =
    "\31\1\1\11\6\1\2\11\31\1\1\0\156\1\1\0"+
    "\2\1\1\0\2\11\1\0\1\11\3\0\2\11\30\1"+
    "\1\0\1\1\1\11\2\0\273\1\1\0\17\1\2\0"+
    "\1\1\1\11\1\0\102\1\1\0\235\1\1\0\143\1"+
    "\1\0\73\1\1\0\45\1\1\11\170\1";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[963];
    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 textposition at the last state to be included in yytext */
  private int zzPushbackPos;

  /** 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;

  /* user code: */
    private int lastToken;
    private int nextState=YYINITIAL;
	private StringBuffer commentBuffer = new StringBuffer();
	private int commentNestCount = 0;
	private int commentStartLine = 0;
	private int commentStartChar = 0;
    
    /** 
     * next Token method that allows you to control if whitespace and comments are
     * returned as tokens.
     */
    public Token getNextToken(boolean returnComments, boolean returnWhiteSpace)throws IOException{
        Token t = getNextToken();
        while (t != null && ((!returnWhiteSpace && t.isWhiteSpace()) || (!returnComments && t.isComment()))){
            t = getNextToken();
        }
        return (t); 
    }

    /**
     * Prints out tokens from a file or System.in.
     * If no arguments are given, System.in will be used for input.
     * If more arguments are given, the first argument will be used as
     * the name of the file to use as input
     *
     * @param args program arguments, of which the first is a filename
     */
    public static void main(String[] args) {
        InputStream in;
        try {
            if (args.length > 0){
                File f = new File(args[0]);
                if (f.exists()){
                    if (f.canRead()){
                        in = new FileInputStream(f);
                    } else {
                        throw new IOException("Could not open " + args[0]);
                    }
                } else {
                    throw new IOException("Could not find " + args[0]);
                }                   
            } else {
                in = System.in;
            }       
            SQLLexer shredder = new SQLLexer(in);
            Token t;
            while ((t = shredder.getNextToken()) != null) {
                if (t.getID() != SQLToken.WHITE_SPACE){
                    System.out.println(t);
                }
            }
        } catch (IOException e){
            System.out.println(e.getMessage());
        }
    } 

    /**
     * Closes the current input stream, and resets the scanner to read from a new input stream.
	 * All internal variables are reset, the old input stream  cannot be reused
	 * (content of the internal buffer is discarded and lost).
	 * The lexical state is set to the initial state.
     * Subsequent tokens read from the lexer will start with the line, char, and column
     * values given here.
     *
     * @param reader The new input.
     * @param yyline The line number of the first token.
     * @param yychar The position (relative to the start of the stream) of the first token.
     * @param yycolumn The position (relative to the line) of the first token.
     * @throws IOException if an IOExecption occurs while switching readers.
     */
    public void reset(java.io.Reader reader, int yyline, int yychar, int yycolumn) throws IOException{
        yyreset(reader);
        this.yyline = yyline;
		this.yychar = yychar;
		this.yycolumn = yycolumn;
	}


  /**
   * 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 SQLLexer(java.io.Reader in) {
    this.zzReader = in;
  }

  /**
   * Creates a new scanner.
   * There is also java.io.Reader version of this constructor.
   *
   * @param   in  the java.io.Inputstream to read input from.
   */
  public SQLLexer(java.io.InputStream in) {
    this(new java.io.InputStreamReader(in));
  }


  /**
   * 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;
      zzPushbackPos-= 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) {
      return true;
    }
    else {
      zzEndRead+= numRead;
      return false;
    }
  }

    
  /**
   * 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();
  }


  /**
   * 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 
   */
  public final void yyreset(java.io.Reader reader) {
    zzReader = reader;
    zzAtBOL  = true;
    zzAtEOF  = false;
    zzEndRead = zzStartRead = 0;
    zzCurrentPos = zzMarkedPos = zzPushbackPos = 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;
  }


  /**
   * 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 Token getNextToken() throws java.io.IOException {
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    char [] zzBufferL = zzBuffer;
    char [] zzCMapL = ZZ_CMAP;

    int [] zzTransL = ZZ_TRANS;
    int [] zzRowMapL = ZZ_ROWMAP;
    int [] zzAttrL = ZZ_ATTRIBUTE;

    while (true) {
      zzMarkedPosL = zzMarkedPos;

      yychar+= zzMarkedPosL-zzStartRead;

      boolean zzR = false;
      for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL;
                                                             zzCurrentPosL++) {
        switch (zzBufferL[zzCurrentPosL]) {
        case '\u000B':
        case '\u000C':
        case '\u0085':
        case '\u2028':
        case '\u2029':
          yyline++;
          zzR = false;
          break;
        case '\r':
          yyline++;
          zzR = true;
          break;
        case '\n':
          if (zzR)
            zzR = false;
          else {
            yyline++;
          }
          break;
        default:
          zzR = false;
        }
      }

      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--;
      }
      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
  
      zzState = 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 16: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.ERROR_UNCLOSED_BIT_STRING;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 19: break;
        case 14: 
          { nextState = COMMENT;
	commentBuffer.setLength(0);
    commentBuffer.append(yytext());
	commentNestCount = 1;
	commentStartLine = yyline;
	commentStartChar = yychar;
	yybegin(nextState);
          }
        case 20: break;
        case 17: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.ERROR_BAD_BIT_STRING;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 21: break;
        case 9: 
          { commentNestCount--;    
    commentBuffer.append(yytext());
	if (commentNestCount == 0){
		nextState = YYINITIAL;	
		lastToken = SQLToken.COMMENT_TRADITIONAL;
		SQLToken t = (new SQLToken(lastToken,commentBuffer.toString(),commentStartLine,commentStartChar,commentStartChar+commentBuffer.length(),nextState));
		yybegin(nextState);
		return(t);
	}
          }
        case 22: break;
        case 12: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.LITERAL_STRING;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 23: break;
        case 11: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.LITERAL_FLOAT;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 24: break;
        case 10: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.COMMENT_END_OF_LINE;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 25: break;
        case 8: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.SEPARATOR;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 26: break;
        case 3: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.IDENTIFIER;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 27: break;
        case 13: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.ERROR_UNCLOSED_STRING;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 28: break;
        case 2: 
          { nextState = COMMENT;
    commentBuffer.append(yytext());
	yybegin(nextState);
          }
        case 29: break;
        case 1: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.WHITE_SPACE;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 30: break;
        case 4: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.RESERVED_WORD;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 31: break;
        case 15: 
          { nextState = COMMENT;
    commentBuffer.append(yytext());
	commentNestCount++;
	yybegin(nextState);
          }
        case 32: break;
        case 7: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.LITERAL_INTEGER;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 33: break;
        case 6: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.OPERATOR;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 34: break;
        case 18: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.LITERAL_BIT_STRING;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 35: break;
        case 5: 
          { nextState = YYINITIAL;
	lastToken = SQLToken.ERROR;
    String text = yytext();
	SQLToken t = (new SQLToken(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 36: break;
        default: 
          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
            zzAtEOF = true;
            switch (zzLexicalState) {
            case COMMENT: {
              nextState = YYINITIAL;	
	lastToken = SQLToken.ERROR_UNCLOSED_COMMENT;
	SQLToken t = (new SQLToken(lastToken,commentBuffer.toString(),commentStartLine,commentStartChar,commentStartChar+commentBuffer.length(),nextState));
	yybegin(nextState);
	return(t);
            }
            case 964: break;
            default:
            return null;
            }
          } 
          else {
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }


}
